improve handling of bad telemetry packets

This commit is contained in:
Stefano Lande 2022-08-25 16:07:48 +02:00
parent a2e7d508ca
commit f86c36f8fd
3 changed files with 26 additions and 9 deletions

View File

@ -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

View File

@ -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'
}

View File

@ -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()