kopia lustrzana https://github.com/glidernet/ogn-python
Bugfixes and no more moving receivers
rodzic
134032b66d
commit
945e11b615
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()
|
||||
|
|
Ładowanie…
Reference in New Issue