python-ogn-client/ogn/parser/telnet_parser.py

43 wiersze
2.0 KiB
Python

from datetime import datetime
from ogn.parser.utils import createTimestamp
from ogn.parser.pattern import PATTERN_TELNET_50001
telnet_50001_pattern = PATTERN_TELNET_50001
def parse(telnet_data):
reference_timestamp = datetime.utcnow()
match = telnet_50001_pattern.match(telnet_data)
if match:
return {'pps_offset': float(match.group('pps_offset')),
'frequency': float(match.group('frequency')),
'aircraft_type': int(match.group('aircraft_type')),
'address_type': int(match.group('address_type')),
'address': match.group('address'),
'timestamp': createTimestamp(match.group('timestamp') + 'h', reference_timestamp),
'latitude': float(match.group('latitude')),
'longitude': float(match.group('longitude')),
'altitude': int(match.group('altitude')),
'climb_rate': float(match.group('climb_rate')),
'ground_speed': float(match.group('ground_speed')),
'track': float(match.group('track')),
'turn_rate': float(match.group('turn_rate')),
'magic_number': int(match.group('magic_number')),
'gps_status': match.group('gps_status'),
'channel': int(match.group('channel')),
'flarm_timeslot': match.group('flarm_timeslot') == 'f',
'ogn_timeslot': match.group('ogn_timeslot') == 'o',
'frequency_offset': float(match.group('frequency_offset')),
'decode_quality': float(match.group('decode_quality')),
'signal_quality': float(match.group('signal_quality')),
'demodulator_type': int(match.group('demodulator_type')),
'error_count': float(match.group('error_count')),
'distance': float(match.group('distance')),
'bearing': float(match.group('bearing')),
'phi': float(match.group('phi')),
'multichannel': match.group('multichannel') == '+'}
else:
return None