ogn-python/ogn_python/model/receiver_beacon.py

129 wiersze
4.2 KiB
Python
Czysty Zwykły widok Historia

2018-09-03 17:58:35 +00:00
from sqlalchemy.sql import func
2015-10-30 20:19:03 +00:00
from .beacon import Beacon
2015-10-24 21:13:21 +00:00
from ogn_python import db
2019-02-10 12:25:24 +00:00
2015-10-24 21:13:21 +00:00
class ReceiverBeacon(Beacon):
__tablename__ = "receiver_beacons"
2015-10-24 21:13:21 +00:00
2018-09-03 17:58:35 +00:00
# disable irrelevant aprs fields
2018-04-28 09:43:45 +00:00
track = None
ground_speed = None
# ReceiverBeacon specific data
2019-02-10 12:25:24 +00:00
version = db.Column(db.String)
platform = db.Column(db.String)
cpu_load = db.Column(db.Float(precision=2))
free_ram = db.Column(db.Float(precision=2))
total_ram = db.Column(db.Float(precision=2))
ntp_error = db.Column(db.Float(precision=2))
rt_crystal_correction = db.Column(db.Float(precision=2))
voltage = db.Column(db.Float(precision=2))
amperage = db.Column(db.Float(precision=2))
cpu_temp = db.Column(db.Float(precision=2))
senders_visible = db.Column(db.Integer)
senders_total = db.Column(db.Integer)
rec_input_noise = db.Column(db.Float(precision=2))
senders_signal = db.Column(db.Float(precision=2))
senders_messages = db.Column(db.Integer)
good_senders_signal = db.Column(db.Float(precision=2))
good_senders = db.Column(db.Integer)
good_and_bad_senders = db.Column(db.Integer)
2016-10-17 19:24:55 +00:00
2018-09-03 17:58:35 +00:00
# User comment: used for additional information like hardware configuration, web site, email address, ...
2017-10-03 12:14:48 +00:00
user_comment = None
# Relations
2019-02-10 12:25:24 +00:00
receiver_id = db.Column(db.Integer, db.ForeignKey('receivers.id', ondelete='SET NULL'))
receiver = db.relationship('Receiver', foreign_keys=[receiver_id], backref='receiver_beacons')
# Multi-column indices
2019-02-10 12:25:24 +00:00
db.Index('ix_receiver_beacons_receiver_id_name', 'receiver_id', 'name')
2015-10-24 21:13:21 +00:00
def __repr__(self):
2018-09-03 19:44:32 +00:00
return "<ReceiverBeacon %s: %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s>" % (
self.version,
self.platform,
self.cpu_load,
self.free_ram,
self.total_ram,
self.ntp_error,
self.rt_crystal_correction,
self.voltage,
self.amperage,
self.cpu_temp,
self.senders_visible,
self.senders_total,
self.rec_input_noise,
self.senders_signal,
self.senders_messages,
self.good_senders_signal,
self.good_senders,
2018-01-19 18:14:57 +00:00
self.good_and_bad_senders)
@classmethod
2018-11-28 06:37:35 +00:00
def get_columns(self):
return ['location',
'altitude',
'name',
'dstcall',
'receiver_name',
'timestamp',
2019-01-01 19:13:08 +00:00
2018-11-28 06:37:35 +00:00
# 'raw_message',
# 'reference_timestamp',
2019-01-01 19:13:08 +00:00
2018-11-28 06:37:35 +00:00
'version',
'platform',
'cpu_load',
'free_ram',
'total_ram',
'ntp_error',
'rt_crystal_correction',
'voltage',
'amperage',
'cpu_temp',
'senders_visible',
'senders_total',
'rec_input_noise',
'senders_signal',
'senders_messages',
'good_senders_signal',
'good_senders',
'good_and_bad_senders']
2018-11-28 06:37:35 +00:00
def get_values(self):
return [
self.location_wkt,
int(self.altitude) if self.altitude else None,
self.name,
2018-01-19 18:14:57 +00:00
self.dstcall,
2018-04-28 09:43:45 +00:00
self.receiver_name,
self.timestamp,
2019-01-01 19:13:08 +00:00
2018-09-03 17:58:35 +00:00
# self.raw_message,
# self.reference_timestamp,
self.version,
self.platform,
self.cpu_load,
self.free_ram,
self.total_ram,
self.ntp_error,
self.rt_crystal_correction,
self.voltage,
self.amperage,
self.cpu_temp,
int(self.senders_visible) if self.senders_visible else None,
int(self.senders_total) if self.senders_visible else None,
self.rec_input_noise,
self.senders_signal,
int(self.senders_messages) if self.senders_messages else None,
self.good_senders_signal,
int(self.good_senders) if self.good_senders else None,
int(self.good_and_bad_senders) if self.good_and_bad_senders else None]
2018-09-03 17:58:35 +00:00
2019-01-01 19:13:08 +00:00
2019-02-10 12:25:24 +00:00
db.Index('ix_receiver_beacons_date_receiver_id', func.date(ReceiverBeacon.timestamp), ReceiverBeacon.receiver_id)