diff --git a/aprslib/parsing/common.py b/aprslib/parsing/common.py index dd8d9cd..33be8ba 100644 --- a/aprslib/parsing/common.py +++ b/aprslib/parsing/common.py @@ -133,8 +133,10 @@ def parse_comment(body, parsed): def parse_data_extentions(body): parsed = {} - match = re.findall(r"^([0-9 .]{3})/([0-9 .]{3})", body) + # course speed bearing nrq + # format: 111/222/333/444text + match = re.findall(r"^([0-9 .]{3})/([0-9 .]{3})", body) if match: cse, spd = match[0] body = body[7:] @@ -151,17 +153,25 @@ def parse_data_extentions(body): if nrq.isdigit(): parsed.update({'nrq': int(nrq)}) else: - match = re.findall(r"^(PHG(\d[\x30-\x7e]\d\d[0-9A-Z]?))", body) + # PHG format: PHGabcd.... + # RHGR format: RHGabcdr/.... + match = re.findall(r"^(PHG(\d[\x30-\x7e]\d\d)([0-9A-Z]\/)?)", body) if match: - ext, phg = match[0] + print(match) + ext, phg, phgr = match[0] body = body[len(ext):] parsed.update({'phg': phg}) + + if phgr: + # PHG rate per hour + parsed['phg'] += phgr[0] + parsed.update({'phg_rate': int(phgr[0], 16)}) # as decimal else: - match = re.findall(r"^RNG(\d{4})", body) - if match: - rng = match[0] - body = body[7:] - parsed.update({'rng': int(rng) * 1.609344}) # miles to km + match = re.findall(r"^RNG(\d{4})", body) + if match: + rng = match[0] + body = body[7:] + parsed.update({'rng': int(rng) * 1.609344}) # miles to km return body, parsed diff --git a/tests/test_parse_common.py b/tests/test_parse_common.py index 82b3b90..e30210e 100644 --- a/tests/test_parse_common.py +++ b/tests/test_parse_common.py @@ -312,15 +312,36 @@ class DataExtentionsTC(unittest.TestCase): 'nrq': 345, }) - def test_PHG(self): - body = "PHG1234Atext" + def test_PHGR_1(self): + body = "PHG12345/text" remaining, parsed = parse_data_extentions(body) self.assertEqual(remaining, 'text') self.assertEqual(parsed, { - 'phg': '1234A', + 'phg': '12345', + 'phg_rate': 5, }) + def test_PHGR_2(self): + body = "PHG1234F/text" + remaining, parsed = parse_data_extentions(body) + + self.assertEqual(remaining, 'text') + self.assertEqual(parsed, { + 'phg': '1234F', + 'phg_rate': 15, + }) + + def test_PHG_1(self): + body = "PHG1234Atext" + remaining, parsed = parse_data_extentions(body) + + self.assertEqual(remaining, 'Atext') + self.assertEqual(parsed, { + 'phg': '1234', + }) + + def test_PHG_2(self): body = "PHG1234text" remaining, parsed = parse_data_extentions(body)