parsing: calculate power,height,gain,range for PHG

This commit is contained in:
Rossen Georgiev 2021-11-27 15:28:55 +00:00
parent bbe1f4dc61
commit 71a97f3438
2 changed files with 65 additions and 9 deletions

View File

@ -1,4 +1,5 @@
import re
from math import sqrt
from datetime import datetime
from aprslib import base91
from aprslib.exceptions import ParseError
@ -160,7 +161,28 @@ def parse_data_extentions(body):
print(match)
ext, phg, phgr = match[0]
body = body[len(ext):]
parsed.update({'phg': phg})
parsed.update({
'phg': phg,
'phg_power': int(phg[0]) ** 2, # watts
'phg_height': (10 * (2 ** (ord(phg[1]) - 0x30))) * 0.3048, # in meters
'phg_gain': 10 ** (int(phg[2]) / 10), # dB
})
phg_dir = int(phg[3])
if phg_dir == 0:
phg_dir = 'omni'
elif phg_dir == 9:
phg_dir = 'invalid'
else:
phg_dir = 45 * phg_dir
parsed['phg_dir'] = phg_dir
# range in km
parsed['phg_range'] = sqrt(2 * (parsed['phg_height'] / 0.3048)
* sqrt((parsed['phg_power'] / 10.0)
* (parsed['phg_gain'] / 2.0)
)
) * 1.60934
if phgr:
# PHG rate per hour

View File

@ -313,43 +313,77 @@ class DataExtentionsTC(unittest.TestCase):
})
def test_PHGR_1(self):
body = "PHG12345/text"
body = "PHG51325/text"
remaining, parsed = parse_data_extentions(body)
self.assertEqual(remaining, 'text')
self.assertEqual(parsed, {
'phg': '12345',
'phg': '51325',
'phg_rate': 5,
'phg_power': 25,
'phg_height': 6.096,
'phg_gain': 1.9952623149688795,
'phg_dir': 90,
'phg_range': 12.791023731208883,
})
def test_PHGR_2(self):
body = "PHG1234F/text"
body = "PHG5132F/text"
remaining, parsed = parse_data_extentions(body)
self.assertEqual(remaining, 'text')
self.assertEqual(parsed, {
'phg': '1234F',
'phg': '5132F',
'phg_rate': 15,
'phg_power': 25,
'phg_height': 6.096,
'phg_gain': 1.9952623149688795,
'phg_dir': 90,
'phg_range': 12.791023731208883,
})
def test_PHG_1(self):
body = "PHG1234Atext"
body = "PHG5132Atext"
remaining, parsed = parse_data_extentions(body)
self.assertEqual(remaining, 'Atext')
self.assertEqual(parsed, {
'phg': '1234',
'phg': '5132',
'phg_power': 25,
'phg_height': 6.096,
'phg_gain': 1.9952623149688795,
'phg_dir': 90,
'phg_range': 12.791023731208883,
})
def test_PHG_2(self):
body = "PHG1234text"
body = "PHG5132text"
remaining, parsed = parse_data_extentions(body)
self.assertEqual(remaining, 'text')
self.assertEqual(parsed, {
'phg': '1234',
'phg': '5132',
'phg_power': 25,
'phg_height': 6.096,
'phg_gain': 1.9952623149688795,
'phg_dir': 90,
'phg_range': 12.791023731208883,
})
def test_PHG_dir_omni(self):
body = "PHG0000text"
remaining, parsed = parse_data_extentions(body)
self.assertEqual(remaining, 'text')
self.assertEqual(parsed['phg_dir'], 'omni')
def test_PHG_dir_invalid(self):
body = "PHG0009text"
remaining, parsed = parse_data_extentions(body)
self.assertEqual(remaining, 'text')
self.assertEqual(parsed['phg_dir'], 'invalid')
def test_range(self):
body = "RNG1000text"
remaining, parsed = parse_data_extentions(body)