From 12bdf25243f2bb614b2e93ac3209f7a2ea7b456b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Tue, 10 Apr 2018 18:54:30 +0200 Subject: [PATCH] Added Support for FANET beacons --- CHANGELOG.md | 2 +- ogn/parser/aprs_comment/fanet_parser.py | 17 +++++++++++++++++ ogn/parser/parse.py | 2 ++ ogn/parser/pattern.py | 5 +++++ tests/parser/test_parse.py | 3 +++ tests/parser/test_parse_fanet.py | 22 ++++++++++++++++++++++ tests/parser/valid_beacon_data/fanet.txt | 8 ++++++++ 7 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 ogn/parser/aprs_comment/fanet_parser.py create mode 100644 tests/parser/test_parse_fanet.py create mode 100644 tests/parser/valid_beacon_data/fanet.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 38e49cc..e3781a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # CHANGELOG ## Unreleased -- parser: Added support for OGNLT24 (LT24), OGSKYL (Skylines), OGSPID (Spider) and OGSPOT (Spot) +- parser: Added support for OGNLT24 (LT24), OGSKYL (Skylines), OGSPID (Spider), OGSPOT (Spot) and OGNFNT (Fanet) - parser: Added support for (server) comments ## 0.8.2: - 2018-01-20 diff --git a/ogn/parser/aprs_comment/fanet_parser.py b/ogn/parser/aprs_comment/fanet_parser.py new file mode 100644 index 0000000..6eb7a02 --- /dev/null +++ b/ogn/parser/aprs_comment/fanet_parser.py @@ -0,0 +1,17 @@ +import re + +from ogn.parser.utils import fpm2ms +from ogn.parser.pattern import PATTERN_FANET_POSITION_COMMENT + +from .base import BaseParser + + +class FanetParser(BaseParser): + def __init__(self): + self.beacon_type = 'fanet' + + @staticmethod + def parse_position(aprs_comment): + ac_match = re.search(PATTERN_FANET_POSITION_COMMENT, aprs_comment) + return {'id': ac_match.group('id') if ac_match.group('id') else None, + 'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms if ac_match.group('climb_rate') else None} diff --git a/ogn/parser/parse.py b/ogn/parser/parse.py index 391003c..b7f7791 100644 --- a/ogn/parser/parse.py +++ b/ogn/parser/parse.py @@ -6,6 +6,7 @@ from ogn.parser.pattern import PATTERN_APRS, PATTERN_APRS_POSITION, PATTERN_APRS from ogn.parser.exceptions import AprsParseError, OgnParseError from ogn.parser.aprs_comment.ogn_parser import OgnParser +from ogn.parser.aprs_comment.fanet_parser import FanetParser from ogn.parser.aprs_comment.lt24_parser import LT24Parser from ogn.parser.aprs_comment.naviter_parser import NaviterParser from ogn.parser.aprs_comment.flarm_parser import FlarmParser @@ -81,6 +82,7 @@ def parse_aprs(message, reference_date, reference_time=None): dstcall_parser_mapping = {'APRS': OgnParser(), + 'OGNFNT': FanetParser(), 'OGFLR': FlarmParser(), 'OGNTRK': TrackerParser(), 'OGNSDR': ReceiverParser(), diff --git a/ogn/parser/pattern.py b/ogn/parser/pattern.py index 99f7837..35715df 100644 --- a/ogn/parser/pattern.py +++ b/ogn/parser/pattern.py @@ -5,6 +5,11 @@ PATTERN_APRS_POSITION = re.compile(r"^(?P