Bugfixes and no more moving receivers

pull/68/head
Konstantin Gründger 2018-04-28 11:43:45 +02:00
rodzic 134032b66d
commit 945e11b615
6 zmienionych plików z 47 dodań i 23 usunięć

Wyświetl plik

@ -89,7 +89,7 @@ def convert(sourcefile, path=''):
wr_rb.writerow(beacon.get_csv_values())
receiver_beacons = list()
beacon = message_to_beacon(line.strip(), reference_date=reference_date)
beacon = message_to_beacon(line.strip(), reference_date=reference_date, wait_for_brother=True)
if beacon is not None:
if isinstance(beacon, AircraftBeacon):
aircraft_beacons.append(beacon)
@ -216,8 +216,9 @@ def import_aircraft_beacon_logfile(csv_logfile):
location geometry,
altitude integer,
name character varying,
receiver_name character varying(9),
dstcall character varying,
relay character varying,
receiver_name character varying(9),
"timestamp" timestamp without time zone,
track integer,
ground_speed double precision,
@ -285,10 +286,10 @@ def import_aircraft_beacon_logfile(csv_logfile):
print("Inserted missing Receivers")
session.execute("""
INSERT INTO aircraft_beacons(location, altitude, name, receiver_name, dstcall, timestamp, track, ground_speed,
INSERT INTO aircraft_beacons(location, altitude, name, dstcall, relay, receiver_name, timestamp, track, ground_speed,
address_type, aircraft_type, stealth, address, climb_rate, turn_rate, flightlevel, signal_quality, error_count, frequency_offset, gps_status, software_version, hardware_version, real_address, signal_power, distance, location_mgrs,
receiver_id, device_id)
SELECT t.location, t.altitude, t.name, t.receiver_name, t.dstcall, t.timestamp, t.track, t.ground_speed,
SELECT t.location, t.altitude, t.name, t.dstcall, t.relay, t.receiver_name, t.timestamp, t.track, t.ground_speed,
t.address_type, t.aircraft_type, t.stealth, t.address, t.climb_rate, t.turn_rate, t.flightlevel, t.signal_quality, t.error_count, t.frequency_offset, t.gps_status, t.software_version, t.hardware_version, t.real_address, t.signal_power, t.distance, t.location_mgrs,
r.id, d.id
FROM aircraft_beacons_temp t, receivers r, devices d
@ -315,8 +316,6 @@ def import_receiver_beacon_logfile(csv_logfile):
receiver_name character varying(9),
dstcall character varying,
"timestamp" timestamp without time zone,
track integer,
ground_speed double precision,
version character varying,
platform character varying,
@ -372,10 +371,10 @@ def import_receiver_beacon_logfile(csv_logfile):
print("Inserted missing Receivers")
session.execute("""
INSERT INTO receiver_beacons(location, altitude, name, receiver_name, dstcall, timestamp, track, ground_speed,
INSERT INTO receiver_beacons(location, altitude, name, dstcall, receiver_name, timestamp,
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,
receiver_id)
SELECT t.location, t.altitude, t.name, t.receiver_name, t.dstcall, t.timestamp, t.track, t.ground_speed,
SELECT t.location, t.altitude, t.name, t.dstcall, t.receiver_name, t.timestamp,
t.version, t.platform, t.cpu_load, t.free_ram, t.total_ram, t.ntp_error, t.rt_crystal_correction, t.voltage,amperage, t.cpu_temp, t.senders_visible, t.senders_total, t.rec_input_noise, t.senders_signal, t.senders_messages, t.good_senders_signal, t.good_senders, t.good_and_bad_senders,
r.id
FROM receiver_beacons_temp t, receivers r

Wyświetl plik

@ -74,6 +74,7 @@ def message_to_beacon(raw_message, reference_date, wait_for_brother=False):
params = message
params.update(previous_message)
params['aprs_type'] = 'merged'
previous_message = None
else:
params = previous_message
previous_message = message
@ -83,7 +84,7 @@ def message_to_beacon(raw_message, reference_date, wait_for_brother=False):
# create beacons
if params['beacon_type'] in ['aircraft_beacon', 'aprs_aircraft', 'flarm', 'tracker']:
beacon = AircraftBeacon(**params)
elif message['beacon_type'] in ['receiver_beacon', 'aprs_receiver', 'receiver']:
elif params['beacon_type'] in ['receiver_beacon', 'aprs_receiver', 'receiver']:
beacon = ReceiverBeacon(**params)
else:
print("Whoops: what is this: {}".format(params))

Wyświetl plik

@ -7,6 +7,9 @@ from .beacon import Beacon
class AircraftBeacon(Beacon):
__tablename__ = "aircraft_beacons"
# Activate relay for AircraftBeacon
relay = Column(String)
# Flarm specific data
address_type = Column(SmallInteger)
aircraft_type = Column(SmallInteger)
@ -54,8 +57,6 @@ class AircraftBeacon(Beacon):
Index('ix_aircraft_beacons_device_id_address', 'device_id', 'address')
Index('ix_aircraft_beacons_device_id_timestamp', 'device_id', 'timestamp')
#Index('ix_aircraft_beacons_date_receiver_id_distance', func.date(self.timestamp), 'receiver_id', 'distance')
def __repr__(self):
return "<AircraftBeacon %s: %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s>" % (
self.address_type,
@ -82,8 +83,9 @@ class AircraftBeacon(Beacon):
return['location',
'altitude',
'name',
'receiver_name',
'dstcall',
'relay',
'receiver_name',
'timestamp',
'track',
'ground_speed',
@ -112,8 +114,9 @@ class AircraftBeacon(Beacon):
self.location_wkt,
int(self.altitude),
self.name,
self.receiver_name,
self.dstcall,
self.relay,
self.receiver_name,
self.timestamp,
self.track,
self.ground_speed,
@ -136,3 +139,6 @@ class AircraftBeacon(Beacon):
self.distance,
self.location_mgrs]
Index('ix_aircraft_beacons_date_receiver_id_distance', func.date(AircraftBeacon.timestamp), AircraftBeacon.receiver_id, AircraftBeacon.distance)

Wyświetl plik

@ -15,8 +15,9 @@ class Beacon(AbstractConcreteBase, Base):
altitude = Column(Float(precision=2))
name = Column(String)
receiver_name = Column(String(9))
dstcall = Column(String)
relay = None
receiver_name = Column(String(9))
timestamp = Column(DateTime, index=True)
symboltable = None
symbolcode = None
@ -24,7 +25,6 @@ class Beacon(AbstractConcreteBase, Base):
ground_speed = Column(Float(precision=2))
comment = None
relay = None
beacon_type = None
aprs_type = None

Wyświetl plik

@ -7,6 +7,10 @@ from .beacon import Beacon
class ReceiverBeacon(Beacon):
__tablename__ = "receiver_beacons"
# disable not so important aprs fields
track = None
ground_speed = None
# ReceiverBeacon specific data
version = Column(String)
platform = Column(String)
@ -66,11 +70,9 @@ class ReceiverBeacon(Beacon):
return['location',
'altitude',
'name',
'receiver_name',
'dstcall',
'receiver_name',
'timestamp',
'track',
'ground_speed',
'version',
'platform',
@ -98,11 +100,9 @@ class ReceiverBeacon(Beacon):
self.location_wkt,
int(self.altitude) if self.altitude else None,
self.name,
self.receiver_name,
self.dstcall,
self.receiver_name,
self.timestamp,
self.track,
self.ground_speed,
self.version,
self.platform,

Wyświetl plik

@ -24,8 +24,12 @@ class ProcessManagerTest(unittest.TestCase):
self.assertEqual(mock_session.bulk_save_objects.call_count, 1)
def test_message_to_beacon_brother(self):
string1 = "Saleve>OGNSDR,TCPIP*,qAC,GLIDERN1:/132624h4607.70NI00610.41E&/A=004198 Antenna: chinese, on a pylon, 20 meter above ground"
string2 = "Saleve>OGNSDR,TCPIP*,qAC,GLIDERN1:>132624h v0.2.7.arm CPU:1.7 RAM:812.3/1022.5MB NTP:1.8ms/+4.5ppm 0.000V 0.000A 3/4Acfts[1h] RF:+67+2.9ppm/+4.18dB/+11.7dB@10km[5018]/+17.2dB@10km[8/16]"
string1 = "LZHL>OGNSDR,TCPIP*,qAC,GLIDERN3:/132457h4849.09NI01708.30E&/A=000528"
string2 = "LZHL>OGNSDR,TCPIP*,qAC,GLIDERN3:>132457h v0.2.7.arm CPU:0.9 RAM:75.3/253.6MB NTP:2.0ms/-15.2ppm +0.1C 2/2Acfts[1h] RF:+77+1.7ppm/+2.34dB/+6.5dB@10km[5411]/+10.1dB@10km[3/5]"
string3 = "BELG>OGNSDR,TCPIP*,qAC,GLIDERN3:/132507h4509.60NI00919.20E&/A=000246"
string4 = "BELG>OGNSDR,TCPIP*,qAC,GLIDERN3:>132507h v0.2.7.RPI-GPU CPU:1.2 RAM:35.7/455.2MB NTP:2.5ms/-5.3ppm +67.0C 1/1Acfts[1h] RF:+79+8.8ppm/+4.97dB/-0.0dB@10km[299]/+4.9dB@10km[2/32]"
string5 = "Saleve>OGNSDR,TCPIP*,qAC,GLIDERN1:/132624h4607.70NI00610.41E&/A=004198 Antenna: chinese, on a pylon, 20 meter above ground"
string6 = "Saleve>OGNSDR,TCPIP*,qAC,GLIDERN1:>132624h v0.2.7.arm CPU:1.7 RAM:812.3/1022.5MB NTP:1.8ms/+4.5ppm 0.000V 0.000A 3/4Acfts[1h] RF:+67+2.9ppm/+4.18dB/+11.7dB@10km[5018]/+17.2dB@10km[8/16]"
beacon = message_to_beacon(string1, reference_date=datetime.date(2015, 1, 1), wait_for_brother=True)
self.assertIsNone(beacon)
@ -34,5 +38,19 @@ class ProcessManagerTest(unittest.TestCase):
self.assertIsNotNone(beacon)
self.assertEqual(beacon.aprs_type, 'merged')
beacon = message_to_beacon(string3, reference_date=datetime.date(2015, 1, 1), wait_for_brother=True)
self.assertIsNone(beacon)
beacon = message_to_beacon(string4, reference_date=datetime.date(2015, 1, 1), wait_for_brother=True)
self.assertIsNotNone(beacon)
self.assertEqual(beacon.aprs_type, 'merged')
beacon = message_to_beacon(string5, reference_date=datetime.date(2015, 1, 1), wait_for_brother=True)
self.assertIsNone(beacon)
beacon = message_to_beacon(string6, reference_date=datetime.date(2015, 1, 1), wait_for_brother=True)
self.assertIsNotNone(beacon)
self.assertEqual(beacon.aprs_type, 'merged')
if __name__ == '__main__':
unittest.main()