From 2f97b2447aa5b05e9b339d92302723231414079d Mon Sep 17 00:00:00 2001 From: stf <7o5rfu92t@ctrlc.hu> Date: Sun, 4 Apr 2021 20:03:29 +0200 Subject: [PATCH] [enh] added parsing of phg field --- aprslib/parsing/common.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/aprslib/parsing/common.py b/aprslib/parsing/common.py index dd8d9cd..3c4d743 100644 --- a/aprslib/parsing/common.py +++ b/aprslib/parsing/common.py @@ -1,5 +1,6 @@ import re from datetime import datetime +from math import sqrt from aprslib import base91 from aprslib.exceptions import ParseError from aprslib.parsing import logger @@ -155,7 +156,7 @@ def parse_data_extentions(body): if match: ext, phg = match[0] body = body[len(ext):] - parsed.update({'phg': phg}) + parsed.update({'phg': parse_phg(phg)}) else: match = re.findall(r"^RNG(\d{4})", body) if match: @@ -165,6 +166,24 @@ def parse_data_extentions(body): return body, parsed +def parse_phg(body): + print(body) + power = int(body[0]) ** 2 # Watt + haat = (10 * 2 ** (ord(body[1])-48)) # feet + gain = int(body[2]) # db + if body[3]=='0': + direction="omni" + elif body[3]=='9': + direction='invalid' + else: + direction = int(body[3]) * 45 + trange = sqrt(2*haat*sqrt((power/10)*(10**(gain/10))/2)) + return {"power": "%sW" % power, + "haat": "%.3fm" % (haat * 0.3048), + "gain": "%sdb" % gain, + "dir": direction, + "range": "%.3fkm" % (trange * 1.609)} + def parse_comment_altitude(body): parsed = {} match = re.findall(r"^(.*?)/A=(\-\d{5}|\d{6})(.*)$", body)