diff --git a/CHANGELOG.md b/CHANGELOG.md index dc5f34a..3629d7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Hue-Plugin: Geräte die mit einer Hue bridge verbunden sind können aus BOSWatch ein- und ausgeschaltet werden. [#394](https://github.com/Schrolli91/BOSWatch/issues/394) ##### Changed - FFAgent Plugin: zusätzliches OrderedDict "alarmHeadersOrdered" implementiert um das HTTP Header Ordering sicherzustellen. Zusätzlich den HTTP Request mittels Session implementiert um das Header Ordering zu bewahren. Zusätzliches Debug Logging für die Header implementiert. [#356] (https://github.com/Schrolli91/BOSWatch/issues/356) +- POC-Decoder: Im POC-Text wird nach einem RegEx, welcher Koordinaten enthält, gesucht. Werden diese gefunden, so stehen zwei neu befüllte Data-Felder Lon bzw Lat zur Verfügung. ##### Deprecated ##### Removed ##### Fixed diff --git a/config/config.template.ini b/config/config.template.ini index 04742ca..9e05679 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -115,6 +115,13 @@ netIdent_ric = 0174760, 1398098 # you can hold one entry per netIdent_ric [0] or the whole history [1] netIdent_history = 0 +# With some message, coordinates can be sent to determine the destination +# Do you want to enable this feature? (0 - off | 1 - on) +geo_enable = 0 +# If a RIC contains coordinates, specify the regex used to decode them +geo_format = #C(\d{2})(\d{5}),(\d{2})(\d{5})# +geo_order = LON, lon, LAT, lat + [multicastAlarm] # Configure multicastAlarm if your POCSAG network uses an optimized transmission scheme for alarms with more than one RIC (often found in Swissphone networks). diff --git a/includes/decoders/poc.py b/includes/decoders/poc.py index 30a0e22..6ab9aa0 100644 --- a/includes/decoders/poc.py +++ b/includes/decoders/poc.py @@ -123,16 +123,41 @@ def decode(freq, decoded): logging.debug("POCSAG Bitrate: %s", bitrate) if "Alpha:" in decoded: #check if there is a text message - poc_text = decoded.split('Alpha: ')[1].strip().replace('','').replace('','').replace('','').replace('','').strip() + poc_text = decoded.split('Alpha: ')[1].strip().replace('','').replace('','').replace('','').replace('','').strip() + if globalVars.config.getint("POC","geo_enable"): + try: + logging.debug("Using %s to find geo-tag in %s", globalVars.config.get("POC","geo_format"),poc_text) + m = re.search(globalVars.config.get("POC","geo_format"),poc_text) + if m: + logging.debug("Found geo-tag in message, parsing...") + has_geo = True + geo_order = globalVars.config.get("POC","geo_order").split(',') + if geo_order[0].lower == "lon": + lat = m.group(1) + "." + m.group(2) + lon = m.group(3) + "." + m.group(4) + else: + lon = m.group(1) + "." + m.group(2) + lat = m.group(3) + "." + m.group(4) + logging.debug("Finished parsing geo; lon: %s, lat: %s", lon, lat) + else: + logging.debug("No geo-tag found") + has_geo = False + except: + has_geo = False + logging.error("Exception parsing geo-information",exc_info=true) + else: + has_geo = False else: poc_text = "" - if re.search("[0-9]{7}", poc_id) and re.search("[1-4]{1}", poc_sub): #if POC is valid if isAllowed(poc_id): # check for double alarm if doubleFilter.checkID("POC", poc_id+poc_sub, poc_text): - data = {"ric":poc_id, "function":poc_sub, "msg":poc_text, "bitrate":bitrate, "description":poc_id} + data = {"ric":poc_id, "function":poc_sub, "msg":poc_text, "bitrate":bitrate, "description":poc_id, "has_geo":has_geo} + if has_geo == True: + data["lon"] = lon + data["lat"] = lat # Add function as character a-d to dataset data["functionChar"] = data["function"].replace("1", "a").replace("2", "b").replace("3", "c").replace("4", "d")