diff --git a/aprslib/parsing/telemetry.py b/aprslib/parsing/telemetry.py index ebe5b14..50ecca7 100644 --- a/aprslib/parsing/telemetry.py +++ b/aprslib/parsing/telemetry.py @@ -101,10 +101,16 @@ def parse_telemetry_config(body): def parse_telemetry_report(text): - temp = text.split(",") parsed = {} + rest = "" - if len(temp) == 7: + match = re.findall("(^#\d{3},(\d+(\.\d+)?,){5}[01]{8}$)", text) + + if match: + logger.debug("Attempting to parse telemetry-message packet") + + temp = text.split(",") + parsed.update({'format': 'telemetry-report'}) seq = int(temp[0].replace('#', '')) values = list(map(float, temp[1:6])) @@ -116,5 +122,7 @@ def parse_telemetry_report(text): 'bits': temp[6] } }) + else: + rest = text - return '', parsed + return rest, parsed diff --git a/docs/parse_formats.rst b/docs/parse_formats.rst index 3c401e4..5b29541 100644 --- a/docs/parse_formats.rst +++ b/docs/parse_formats.rst @@ -278,7 +278,7 @@ Telemetry report 'vals': [13.21, 0.39, 5.1, 14.94, 36.12], 'bits': '11111100' }, - 'format': 'beacon', + 'format': 'telemetry-report', 'text': 'T#165,13.21,0.39,5.10,14.94,36.12,11111100' } diff --git a/tests/test_parse_telemetry_report.py b/tests/test_parse_telemetry_report.py index a2e9e4b..3f48ea5 100644 --- a/tests/test_parse_telemetry_report.py +++ b/tests/test_parse_telemetry_report.py @@ -8,15 +8,24 @@ class ParseTelemetryReport(unittest.TestCase): self.maxDiff = None def test_valid_telemetry_report(self): - packet = "#111,13.64,0.37,5.10,16.96,33.38,11110000" - expected = {'telemetry': - {'bits': '11110000', - 'seq': 111, - 'vals': [13.64, 0.37, 5.1, 16.96, 33.38]}} + packet = "#111,13.64,0.37,5,16.96,33.38,11110000" + expected = {'format': 'telemetry-report', + 'telemetry': + {'bits': '11110000', + 'seq': 111, + 'vals': [13.64, 0.37, 5, 16.96, 33.38]}} _, result = parse_telemetry_report(packet) self.assertEqual(expected, result) + def test_invalid_telemetry_report(self): + packet = "#111a,Nan,0.37,5.10,16.96,33.38,11110000" + expected = {} + + rest, result = parse_telemetry_report(packet) + self.assertEqual(expected, result) + self.assertEqual(rest,packet) + if __name__ == '__main__': unittest.main()