kopia lustrzana https://github.com/glidernet/python-ogn-client
Fixed OGNTRK parser
rodzic
cd6b5a62c9
commit
e613abdbcb
|
@ -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}
|
||||
|
|
|
@ -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"""
|
||||
|
|
|
@ -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()
|
Ładowanie…
Reference in New Issue