Skip to content

Commit 4b5f75a

Browse files
committed
improve handling of bad telemetry packets
1 parent a45b8fd commit 4b5f75a

3 files changed

Lines changed: 26 additions & 9 deletions

File tree

aprslib/parsing/telemetry.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,16 @@ def parse_telemetry_config(body):
101101

102102

103103
def parse_telemetry_report(text):
104-
temp = text.split(",")
105104
parsed = {}
105+
rest = ""
106106

107-
if len(temp) == 7:
107+
match = re.findall("(^#\d{3},(\d+(\.\d+)?,){5}[01]{8}$)", text)
108+
109+
if match:
110+
logger.debug("Attempting to parse telemetry-message packet")
111+
112+
temp = text.split(",")
113+
parsed.update({'format': 'telemetry-report'})
108114

109115
seq = int(temp[0].replace('#', ''))
110116
values = list(map(float, temp[1:6]))
@@ -116,5 +122,7 @@ def parse_telemetry_report(text):
116122
'bits': temp[6]
117123
}
118124
})
125+
else:
126+
rest = text
119127

120-
return '', parsed
128+
return rest, parsed

docs/parse_formats.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ Telemetry report
278278
'vals': [13.21, 0.39, 5.1, 14.94, 36.12],
279279
'bits': '11111100'
280280
},
281-
'format': 'beacon',
281+
'format': 'telemetry-report',
282282
'text': 'T#165,13.21,0.39,5.10,14.94,36.12,11111100'
283283
}
284284

tests/test_parse_telemetry_report.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,24 @@ def setUp(self):
88
self.maxDiff = None
99

1010
def test_valid_telemetry_report(self):
11-
packet = "#111,13.64,0.37,5.10,16.96,33.38,11110000"
12-
expected = {'telemetry':
13-
{'bits': '11110000',
14-
'seq': 111,
15-
'vals': [13.64, 0.37, 5.1, 16.96, 33.38]}}
11+
packet = "#111,13.64,0.37,5,16.96,33.38,11110000"
12+
expected = {'format': 'telemetry-report',
13+
'telemetry':
14+
{'bits': '11110000',
15+
'seq': 111,
16+
'vals': [13.64, 0.37, 5, 16.96, 33.38]}}
1617

1718
_, result = parse_telemetry_report(packet)
1819
self.assertEqual(expected, result)
1920

21+
def test_invalid_telemetry_report(self):
22+
packet = "#111a,Nan,0.37,5.10,16.96,33.38,11110000"
23+
expected = {}
24+
25+
rest, result = parse_telemetry_report(packet)
26+
self.assertEqual(expected, result)
27+
self.assertEqual(rest,packet)
28+
2029

2130
if __name__ == '__main__':
2231
unittest.main()

0 commit comments

Comments
 (0)