kopia lustrzana https://github.com/glidernet/python-ogn-client
commit
1226e2679c
|
@ -23,5 +23,15 @@ def parse_position(aprs_comment):
|
||||||
|
|
||||||
def parse_status(aprs_comment):
|
def parse_status(aprs_comment):
|
||||||
match = re.search(PATTERN_TRACKER_BEACON_STATUS, aprs_comment)
|
match = re.search(PATTERN_TRACKER_BEACON_STATUS, aprs_comment)
|
||||||
return {'voltage': float(match.group('voltage')) if match.group('voltage') else None,
|
return {'hardware_version': int(match.group('hardware_version')) if match.group('hardware_version') else None,
|
||||||
'temperature': float(match.group('temperature')) if match.group('temperature') 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)
|
""", re.VERBOSE | re.MULTILINE)
|
||||||
|
|
||||||
PATTERN_TRACKER_BEACON_STATUS = re.compile("""
|
PATTERN_TRACKER_BEACON_STATUS = re.compile("""
|
||||||
h(?P<wtf1>[\d]{2})\s
|
h(?P<hardware_version>[\d]{2})\s
|
||||||
v(?P<wtf2>[\d]{2})\s
|
v(?P<software_version>[\d]{2})\s
|
||||||
(?P<wtf3>[\d]+)sat/(?P<wtf4>\d)\s
|
(?P<gps_satellites>[\d]+)sat/(?P<gps_quality>\d)\s
|
||||||
(?P<wtf5>\d+)m\s
|
(?P<gps_altitude>\d+)m\s
|
||||||
(?P<air_pressure>[\d.]+)hPa\s
|
(?P<pressure>[\d.]+)hPa\s
|
||||||
(?P<temperature>[+-][\d.]+)degC\s
|
(?P<temperature>[+-][\d.]+)degC\s
|
||||||
(?P<wtf8>\d+)%\s
|
(?P<humidity>\d+)%\s
|
||||||
(?P<voltage>[\d.]+)V\s
|
(?P<voltage>[\d.]+)V\s
|
||||||
(?P<wtf9>\d+)/(?P<wtf10>[+-][\d.]+)dBm\s
|
(?P<transmitter_power>\d+)/(?P<noise_level>[+-][\d.]+)dBm\s
|
||||||
(?P<wtf11>\d+)/min
|
(?P<relays>\d+)/min
|
||||||
""", re.VERBOSE | re.MULTILINE)
|
""", re.VERBOSE | re.MULTILINE)
|
||||||
|
|
||||||
PATTERN_RECEIVER_POSITION = re.compile(r"""
|
PATTERN_RECEIVER_POSITION = re.compile(r"""
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
import unittest.mock as mock
|
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.client import create_aprs_login, AprsClient
|
||||||
from ogn.client.settings import APRS_APP_NAME, APRS_APP_VER
|
from ogn.client.settings import APRS_APP_NAME, APRS_APP_VER
|
||||||
|
|
||||||
|
@ -72,8 +72,7 @@ class OgnClientTest(unittest.TestCase):
|
||||||
def process_message(raw_message):
|
def process_message(raw_message):
|
||||||
if raw_message[0] == '#':
|
if raw_message[0] == '#':
|
||||||
return
|
return
|
||||||
message = parse_aprs(raw_message)
|
parse(raw_message)
|
||||||
message.update(parse_ogn_beacon(message['comment']))
|
|
||||||
if self.remaining_messages > 0:
|
if self.remaining_messages > 0:
|
||||||
self.remaining_messages -= 1
|
self.remaining_messages -= 1
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -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()
|
|
@ -9,7 +9,7 @@ class TestStringMethods(unittest.TestCase):
|
||||||
def test_parseAngle(self):
|
def test_parseAngle(self):
|
||||||
self.assertAlmostEqual(parseAngle('05048.30'), 50.805, 5)
|
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:
|
for test in test_data:
|
||||||
if test[3]:
|
if test[3]:
|
||||||
timestamp = createTimestamp(test[0], reference_date=test[1], reference_time=test[2])
|
timestamp = createTimestamp(test[0], reference_date=test[1], reference_time=test[2])
|
||||||
|
|
Ładowanie…
Reference in New Issue