diff --git a/ogn/parser/aprs_comment/flarm_parser.py b/ogn/parser/aprs_comment/flarm_parser.py index eb90746..54931f9 100644 --- a/ogn/parser/aprs_comment/flarm_parser.py +++ b/ogn/parser/aprs_comment/flarm_parser.py @@ -20,10 +20,11 @@ class FlarmParser(BaseParser): 'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms, 'turn_rate': float(ac_match.group('turn_rate')), 'signal_quality': float(ac_match.group('signal_quality')), - 'error_count': int(ac_match.group('errors')), + 'error_count': int(ac_match.group('error_count')), 'frequency_offset': float(ac_match.group('frequency_offset')), - 'gps_status': ac_match.group('gps_accuracy') if ac_match.group('gps_accuracy') else None, - 'software_version': float(ac_match.group('flarm_software_version')) if ac_match.group('flarm_software_version') else None, - 'hardware_version': int(ac_match.group('flarm_hardware_version'), 16) if ac_match.group('flarm_hardware_version') else None, - 'real_address': ac_match.group('flarm_id') if ac_match.group('flarm_id') else None, + 'gps_quality': {'horizontal': int(ac_match.group('gps_quality_horizontal')), + 'vertical': int(ac_match.group('gps_quality_vertical'))} if ac_match.group('gps_quality') else None, + 'software_version': float(ac_match.group('software_version')) if ac_match.group('software_version') else None, + 'hardware_version': int(ac_match.group('hardware_version'), 16) if ac_match.group('hardware_version') else None, + 'real_address': ac_match.group('real_address') if ac_match.group('real_address') else None, 'signal_power': float(ac_match.group('signal_power')) if ac_match.group('signal_power') else None} diff --git a/ogn/parser/aprs_comment/ogn_parser.py b/ogn/parser/aprs_comment/ogn_parser.py index 620e310..a45c348 100644 --- a/ogn/parser/aprs_comment/ogn_parser.py +++ b/ogn/parser/aprs_comment/ogn_parser.py @@ -41,7 +41,8 @@ class OgnParser(BaseParser): 'signal_quality': float(ac_match.group('signal_quality')) if ac_match.group('signal_quality') else None, 'error_count': int(ac_match.group('errors')) if ac_match.group('errors') else None, 'frequency_offset': float(ac_match.group('frequency_offset')) if ac_match.group('frequency_offset') else None, - 'gps_status': ac_match.group('gps_accuracy') if ac_match.group('gps_accuracy') else None, + 'gps_quality': {'horizontal': int(ac_match.group('gps_quality_horizontal')), + 'vertical': int(ac_match.group('gps_quality_vertical'))} if ac_match.group('gps_quality') else None, 'software_version': float(ac_match.group('flarm_software_version')) if ac_match.group('flarm_software_version') else None, 'hardware_version': int(ac_match.group('flarm_hardware_version'), 16) if ac_match.group('flarm_hardware_version') else None, 'real_address': ac_match.group('flarm_id') if ac_match.group('flarm_id') else None, diff --git a/ogn/parser/aprs_comment/tracker_parser.py b/ogn/parser/aprs_comment/tracker_parser.py index 6dadf21..b560817 100644 --- a/ogn/parser/aprs_comment/tracker_parser.py +++ b/ogn/parser/aprs_comment/tracker_parser.py @@ -21,7 +21,7 @@ class TrackerParser(BaseParser): 'turn_rate': float(match.group('turn_rate')) if match.group('turn_rate') else None, 'flightlevel': float(match.group('flight_level')) if match.group('flight_level') else None, 'signal_quality': float(match.group('signal_quality')) if match.group('signal_quality') else None, - 'error_count': int(match.group('errors')) if match.group('errors') else None, + 'error_count': int(match.group('error_count')) if match.group('error_count') else None, 'frequency_offset': float(match.group('frequency_offset')) if match.group('frequency_offset') else None, 'gps_status': match.group('gps_accuracy') if match.group('gps_accuracy') else None, 'software_version': float(match.group('flarm_software_version')) if match.group('flarm_software_version') else None, diff --git a/ogn/parser/pattern.py b/ogn/parser/pattern.py index cf22fe8..449c9a8 100644 --- a/ogn/parser/pattern.py +++ b/ogn/parser/pattern.py @@ -16,12 +16,12 @@ PATTERN_FLARM_POSITION_COMMENT = re.compile(r""" (?:(?P[+-]\d+?)fpm\s)? (?:(?P[+-][\d.]+?)rot\s)? (?:(?P[\d.]+?)dB\s)? - (?:(?P\d+)e\s)? + (?:(?P\d+)e\s)? (?:(?P[+-][\d.]+?)kHz\s?)? - (?:gps(?P\d+x\d+)\s?)? - (?:s(?P[\d.]+)\s?)? - (?:h(?P[\dA-F]{2})\s?)? - (?:r(?P[\dA-F]+)\s?)? + (?:gps(?P(?P(\d+))x(?P(\d+)))\s?)? + (?:s(?P[\d.]+)\s?)? + (?:h(?P[\dA-F]{2})\s?)? + (?:r(?P[\dA-F]+)\s?)? (?:(?P[+-][\d.]+)dBm\s?)? """, re.VERBOSE | re.MULTILINE) @@ -61,7 +61,7 @@ PATTERN_TRACKER_POSITION_COMMENT = re.compile(""" (?:(?P[+-][\d.]+?)rot\s)? (?:FL(?P[\d.]+)\s)? (?:(?P[\d.]+?)dB\s)? - (?:(?P\d+)e\s)? + (?:(?P\d+)e\s)? (?:(?P[+-][\d.]+?)kHz\s?)? (?:gps(?P\d+x\d+)\s?)? (?:s(?P[\d.]+)\s?)? @@ -166,7 +166,7 @@ PATTERN_AIRCRAFT_BEACON = re.compile(r""" (?:(?P[\d.]+?)dB\s)? (?:(?P\d+)e\s)? (?:(?P[+-][\d.]+?)kHz\s?)? - (?:gps(?P\d+x\d+)\s?)? + (?:gps(?P(?P(\d+))x(?P(\d+)))\s?)? (?:s(?P[\d.]+)\s?)? (?:h(?P[\dA-F]{2})\s?)? (?:r(?P[\dA-F]+)\s?)? diff --git a/tests/parser/test_parse_flarm.py b/tests/parser/test_parse_flarm.py index f146f0b..9eced8e 100644 --- a/tests/parser/test_parse_flarm.py +++ b/tests/parser/test_parse_flarm.py @@ -17,7 +17,7 @@ class TestStringMethods(unittest.TestCase): self.assertEqual(message['signal_quality'], 3.5) self.assertEqual(message['error_count'], 2) self.assertEqual(message['frequency_offset'], -8.7) - self.assertEqual(message['gps_status'], '1x2') + self.assertEqual(message['gps_quality'], {'horizontal': 1, 'vertical': 2}) self.assertEqual(message['software_version'], 6.09) self.assertEqual(message['hardware_version'], 67) self.assertEqual(message['real_address'], "DF0267") diff --git a/tests/parser/test_parse_ogn_aircraft.py b/tests/parser/test_parse_ogn_aircraft.py index 39ec560..1e18f5a 100644 --- a/tests/parser/test_parse_ogn_aircraft.py +++ b/tests/parser/test_parse_ogn_aircraft.py @@ -20,7 +20,7 @@ class TestStringMethods(unittest.TestCase): self.assertEqual(message['signal_quality'], 8.8) self.assertEqual(message['error_count'], 0) self.assertEqual(message['frequency_offset'], 51.2) - self.assertEqual(message['gps_status'], '4x5') + self.assertEqual(message['gps_quality'], {'horizontal': 4, 'vertical': 5}) self.assertEqual(len(message['proximity']), 3) self.assertEqual(message['proximity'][0], '1084') self.assertEqual(message['proximity'][1], 'B597')