Merge pull request #34 from Meisterschueler/fix/ogntrk_beacon

Fix/ogntrk beacon
pull/41/merge
Meisterschueler 2017-10-01 14:30:18 +02:00 zatwierdzone przez GitHub
commit 1226e2679c
5 zmienionych plików z 64 dodań i 14 usunięć

Wyświetl plik

@ -23,5 +23,15 @@ def parse_position(aprs_comment):
def parse_status(aprs_comment):
match = re.search(PATTERN_TRACKER_BEACON_STATUS, aprs_comment)
return {'voltage': float(match.group('voltage')) if match.group('voltage') else None,
'temperature': float(match.group('temperature')) if match.group('temperature') else None}
return {'hardware_version': int(match.group('hardware_version')) if match.group('hardware_version') else None,
'software_version': int(match.group('software_version')) if match.group('software_version') else None,
'gps_satellites': int(match.group('gps_satellites')) if match.group('gps_satellites') else None,
'gps_quality': int(match.group('gps_quality')) if match.group('gps_quality') else None,
'gps_altitude': int(match.group('gps_altitude')) if match.group('gps_altitude') else None,
'pressure': float(match.group('pressure')) if match.group('pressure') else None,
'temperature': float(match.group('temperature')) if match.group('temperature') else None,
'humidity': int(match.group('humidity')) if match.group('humidity') else None,
'voltage': float(match.group('voltage')) if match.group('voltage') else None,
'transmitter_power': int(match.group('transmitter_power')) if match.group('transmitter_power') else None,
'noise_level': float(match.group('noise_level')) if match.group('noise_level') else None,
'relays': int(match.group('relays')) if match.group('relays') else None}

Wyświetl plik

@ -24,16 +24,16 @@ PATTERN_TRACKER_BEACON_POSITION = re.compile("""
""", re.VERBOSE | re.MULTILINE)
PATTERN_TRACKER_BEACON_STATUS = re.compile("""
h(?P<wtf1>[\d]{2})\s
v(?P<wtf2>[\d]{2})\s
(?P<wtf3>[\d]+)sat/(?P<wtf4>\d)\s
(?P<wtf5>\d+)m\s
(?P<air_pressure>[\d.]+)hPa\s
h(?P<hardware_version>[\d]{2})\s
v(?P<software_version>[\d]{2})\s
(?P<gps_satellites>[\d]+)sat/(?P<gps_quality>\d)\s
(?P<gps_altitude>\d+)m\s
(?P<pressure>[\d.]+)hPa\s
(?P<temperature>[+-][\d.]+)degC\s
(?P<wtf8>\d+)%\s
(?P<humidity>\d+)%\s
(?P<voltage>[\d.]+)V\s
(?P<wtf9>\d+)/(?P<wtf10>[+-][\d.]+)dBm\s
(?P<wtf11>\d+)/min
(?P<transmitter_power>\d+)/(?P<noise_level>[+-][\d.]+)dBm\s
(?P<relays>\d+)/min
""", re.VERBOSE | re.MULTILINE)
PATTERN_RECEIVER_POSITION = re.compile(r"""

Wyświetl plik

@ -1,7 +1,7 @@
import unittest
import unittest.mock as mock
from ogn.parser import parse_aprs, parse_ogn_beacon
from ogn.parser import parse
from ogn.client.client import create_aprs_login, AprsClient
from ogn.client.settings import APRS_APP_NAME, APRS_APP_VER
@ -72,8 +72,7 @@ class OgnClientTest(unittest.TestCase):
def process_message(raw_message):
if raw_message[0] == '#':
return
message = parse_aprs(raw_message)
message.update(parse_ogn_beacon(message['comment']))
parse(raw_message)
if self.remaining_messages > 0:
self.remaining_messages -= 1
else:

Wyświetl plik

@ -0,0 +1,41 @@
import unittest
from ogn.parser.utils import ms2fpm
from ogn.parser.parse_tracker import parse_position, parse_status
class TestStringMethods(unittest.TestCase):
def test_position_beacon(self):
message = parse_position("id072FD00F -058fpm +1.1rot FL003.12 32.8dB 0e -0.8kHz gps3x5")
self.assertEqual(message['address_type'], 3)
self.assertEqual(message['aircraft_type'], 1)
self.assertFalse(message['stealth'])
self.assertEqual(message['address'], "2FD00F")
self.assertAlmostEqual(message['climb_rate'] * ms2fpm, -58, 2)
self.assertEqual(message['turn_rate'], 1.1)
self.assertEqual(message['flightlevel'], 3.12)
self.assertEqual(message['signal_quality'], 32.8)
self.assertEqual(message['error_count'], 0)
self.assertEqual(message['frequency_offset'], -0.8)
self.assertEqual(message['gps_status'], '3x5')
def test_status(self):
message = parse_status("h00 v00 9sat/1 164m 1002.6hPa +20.2degC 0% 3.34V 14/-110.5dBm 1/min")
self.assertEqual(message['hardware_version'], 0)
self.assertEqual(message['software_version'], 0)
self.assertEqual(message['gps_satellites'], 9)
self.assertEqual(message['gps_quality'], 1)
self.assertEqual(message['gps_altitude'], 164)
self.assertEqual(message['pressure'], 1002.6)
self.assertEqual(message['temperature'], 20.2)
self.assertEqual(message['humidity'], 0)
self.assertEqual(message['voltage'], 3.34)
self.assertEqual(message['transmitter_power'], 14)
self.assertEqual(message['noise_level'], -110.5)
self.assertEqual(message['relays'], 1)
if __name__ == '__main__':
unittest.main()

Wyświetl plik

@ -9,7 +9,7 @@ class TestStringMethods(unittest.TestCase):
def test_parseAngle(self):
self.assertAlmostEqual(parseAngle('05048.30'), 50.805, 5)
def proceed_test_data(self, test_data):
def proceed_test_data(self, test_data={}):
for test in test_data:
if test[3]:
timestamp = createTimestamp(test[0], reference_date=test[1], reference_time=test[2])