Merge 09ac00219b into c2a0f18ce0
This commit is contained in:
commit
fe65829550
|
|
@ -5,3 +5,4 @@ dist
|
|||
*.egg-info
|
||||
env3
|
||||
env2
|
||||
.idea
|
||||
|
|
|
|||
|
|
@ -57,7 +57,6 @@ unsupported_formats = {
|
|||
'.':'reserved',
|
||||
'<':'station capabilities',
|
||||
'?':'general query format',
|
||||
'T':'telemetry report',
|
||||
'[':'maidenhead locator beacon',
|
||||
'\\':'unused',
|
||||
']':'unused',
|
||||
|
|
@ -208,6 +207,10 @@ def _try_toparse_body(packet_type, body, parsed):
|
|||
|
||||
body, result = parse_position(packet_type, body)
|
||||
|
||||
elif packet_type == "T":
|
||||
logger.debug("Attempting to parse as telemetry report")
|
||||
|
||||
body, result = parse_telemetry_report(body)
|
||||
|
||||
# we are done
|
||||
parsed.update(result)
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,10 @@ from aprslib.exceptions import ParseError
|
|||
from aprslib.parsing import logger
|
||||
|
||||
__all__ = [
|
||||
'parse_comment_telemetry',
|
||||
'parse_telemetry_config',
|
||||
]
|
||||
'parse_comment_telemetry',
|
||||
'parse_telemetry_config',
|
||||
'parse_telemetry_report'
|
||||
]
|
||||
|
||||
|
||||
def parse_comment_telemetry(text):
|
||||
|
|
@ -98,3 +99,30 @@ def parse_telemetry_config(body):
|
|||
|
||||
return (body, parsed)
|
||||
|
||||
|
||||
def parse_telemetry_report(text):
|
||||
parsed = {}
|
||||
rest = ""
|
||||
|
||||
match = re.findall(r"(^#\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]))
|
||||
|
||||
parsed.update({
|
||||
'telemetry': {
|
||||
'seq': seq,
|
||||
'vals': values,
|
||||
'bits': temp[6]
|
||||
}
|
||||
})
|
||||
else:
|
||||
rest = text
|
||||
|
||||
return rest, parsed
|
||||
|
|
|
|||
|
|
@ -257,6 +257,32 @@ Regular
|
|||
'to': u'TOCALL',
|
||||
'via': ''}
|
||||
|
||||
|
||||
Telemetry report
|
||||
-----------------------
|
||||
|
||||
|
||||
.. code:: python
|
||||
|
||||
>>> aprslib.parse("FROMCALL>APDW16,WIDE1-1,qAR,TOCALL:T#165,13.21,0.39,5.10,14.94,36.12,11111100")
|
||||
|
||||
{
|
||||
'raw': 'FROMCALL>APDW16,WIDE1-1,qAR,TOCALL:T#165,13.21,0.39,5.10,14.94,36.12,11111100',
|
||||
'from': 'FROMCALL',
|
||||
'to': 'APDW16',
|
||||
'path': ['WIDE1-1', 'qAR', 'TOCALL'],
|
||||
'via': 'TOCALL',
|
||||
'telemetry':
|
||||
{
|
||||
'seq': 165,
|
||||
'vals': [13.21, 0.39, 5.1, 14.94, 36.12],
|
||||
'bits': '11111100'
|
||||
},
|
||||
'format': 'telemetry-report',
|
||||
'text': 'T#165,13.21,0.39,5.10,14.94,36.12,11111100'
|
||||
}
|
||||
|
||||
|
||||
Telemetry configuration
|
||||
-----------------------
|
||||
|
||||
|
|
@ -296,3 +322,5 @@ Telemetry configuration
|
|||
'to': 'TOCALL',
|
||||
'via': ''}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
import unittest
|
||||
|
||||
from aprslib.parsing import parse_telemetry_report
|
||||
|
||||
|
||||
class ParseTelemetryReport(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.maxDiff = None
|
||||
|
||||
def test_valid_telemetry_report(self):
|
||||
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()
|
||||
Loading…
Reference in New Issue