parsing: calculate power,height,gain,range for PHG
This commit is contained in:
parent
bbe1f4dc61
commit
71a97f3438
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue