From 52fe249ab66973a1a01700763e0ca98dc6c4bd65 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 5 Sep 2019 08:26:24 +0200 Subject: [PATCH 01/10] Filtering for geo-data instead of checking for locations in a specific plugin, a central approach is done here; at the moment, a regex containing coordinates is to be found in the poc-text. The coordinates are parsed and afterwards stored into data as lon/lat. --- includes/decoders/poc.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/includes/decoders/poc.py b/includes/decoders/poc.py index 30a0e22..9c53cbc 100644 --- a/includes/decoders/poc.py +++ b/includes/decoders/poc.py @@ -124,6 +124,19 @@ def decode(freq, decoded): if "Alpha:" in decoded: #check if there is a text message poc_text = decoded.split('Alpha: ')[1].strip().replace('','').replace('','').replace('','').replace('','').strip() + 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: + 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) + else: + has_geo = False else: poc_text = "" @@ -132,7 +145,10 @@ def decode(freq, decoded): # 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") From 33b633c475a49b4a0ef57b282a7549df1006fae6 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 5 Sep 2019 08:27:44 +0200 Subject: [PATCH 02/10] Update config.template.ini Performing changes to provide regex for searching coordinates in poc-text --- config/config.template.ini | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/config.template.ini b/config/config.template.ini index 04742ca..a8806c6 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -115,6 +115,10 @@ netIdent_ric = 0174760, 1398098 # you can hold one entry per netIdent_ric [0] or the whole history [1] netIdent_history = 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). From ad0673b3577cb376e430359f4aa0fd48085f9a35 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 5 Sep 2019 08:29:57 +0200 Subject: [PATCH 03/10] Update CHANGELOG.md --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc5f34a..8d55877 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +### __[v2.#]__ - 05.09.2019 +##### Added +##### Changed +- 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 +##### Security ### __[v#.#]__ - date ##### Added From 7decb88d8bb7ad7f48b558ee1b5c12111c1b67be Mon Sep 17 00:00:00 2001 From: Florian Date: Sat, 7 Sep 2019 13:41:19 +0200 Subject: [PATCH 04/10] Update CHANGELOG.md --- CHANGELOG.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d55877..097f8f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,6 @@ # Changelog -### __[v2.#]__ - 05.09.2019 -##### Added -##### Changed -- 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 -##### Security + ### __[v#.#]__ - date ##### Added @@ -21,6 +14,14 @@ - Asynchrone Alarme: Bei asynchroner Verarbeitung von schnell aufeinander folgenden Alarmen, wurde der Inhalt der Objekte typ, freq und data bereits vor dem Abschluss der Verarbeitung eines Alarms wieder überschrieben. Ergebnis hiervon war die Vermischung von RICs und Texten unterschiedlicher Alarme. Lösung über copy.deepcopy() [#394](https://github.com/Schrolli91/BOSWatch/issues/394) ##### Security +### __[v2.#]__ - 05.09.2019 +##### Added +##### Changed +- 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 +##### Security ### __[v2.4.2]__ - 11.03.2019 ##### Added From dab072d03c9d4ee1554de0b1990e23c3e9ca4308 Mon Sep 17 00:00:00 2001 From: Florian Date: Sat, 7 Sep 2019 22:12:58 +0200 Subject: [PATCH 05/10] Update CHANGELOG.md --- CHANGELOG.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 097f8f3..57fccaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog - +### __[v#.#]_ - date +##### Added +##### Changed +##### Deprecated +##### Removed +##### Fixed +##### Security ### __[v#.#]__ - date @@ -8,20 +14,14 @@ - 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 - Asynchrone Alarme: Bei asynchroner Verarbeitung von schnell aufeinander folgenden Alarmen, wurde der Inhalt der Objekte typ, freq und data bereits vor dem Abschluss der Verarbeitung eines Alarms wieder überschrieben. Ergebnis hiervon war die Vermischung von RICs und Texten unterschiedlicher Alarme. Lösung über copy.deepcopy() [#394](https://github.com/Schrolli91/BOSWatch/issues/394) ##### Security -### __[v2.#]__ - 05.09.2019 -##### Added -##### Changed -- 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 -##### Security + ### __[v2.4.2]__ - 11.03.2019 ##### Added From 6130efa76215cd4855e4cb1be66960dd8d74822b Mon Sep 17 00:00:00 2001 From: Florian Date: Sat, 7 Sep 2019 22:57:04 +0200 Subject: [PATCH 06/10] Update poc.py Exceptionhandling in case no regex is specified --- includes/decoders/poc.py | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/includes/decoders/poc.py b/includes/decoders/poc.py index 9c53cbc..65f29d0 100644 --- a/includes/decoders/poc.py +++ b/includes/decoders/poc.py @@ -123,22 +123,29 @@ 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() - 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: - 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) - else: - has_geo = False - else: - poc_text = "" + poc_text = decoded.split('Alpha: ')[1].strip().replace('','').replace('','').replace('','').replace('','').strip() + 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: + logging.error("Exception caused by searching for geo-tag") + 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): From 9d8c9c986cad4dd5e2fe922a100926830dd38b9b Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Sun, 8 Sep 2019 18:14:24 +0200 Subject: [PATCH 07/10] edit changelog --- CHANGELOG.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57fccaf..3629d7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,4 @@ # Changelog -### __[v#.#]_ - date -##### Added -##### Changed -##### Deprecated -##### Removed -##### Fixed -##### Security ### __[v#.#]__ - date @@ -22,7 +15,6 @@ ##### Security - ### __[v2.4.2]__ - 11.03.2019 ##### Added - Telegram-Plugin: In der generierten Übersichtkarte wird eine Anfahrtsroute integriert. Der Abfahrtsort ist konfiguierbar. [#382](https://github.com/Schrolli91/BOSWatch/pull/382) From 216ee05f183224429d3beab16ad95f2d20029f3f Mon Sep 17 00:00:00 2001 From: Florian Date: Sat, 21 Sep 2019 00:32:52 +0200 Subject: [PATCH 08/10] Update config.template.ini Implementing global switch to enable geo-decoding --- config/config.template.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/config.template.ini b/config/config.template.ini index a8806c6..9e05679 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -115,6 +115,9 @@ 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 From 0c19b5ece5b0a645607d0ecb9187881622514584 Mon Sep 17 00:00:00 2001 From: Florian Date: Sat, 21 Sep 2019 00:35:28 +0200 Subject: [PATCH 09/10] Update poc.py Switch to enable decoding --- includes/decoders/poc.py | 50 +++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/includes/decoders/poc.py b/includes/decoders/poc.py index 65f29d0..5389041 100644 --- a/includes/decoders/poc.py +++ b/includes/decoders/poc.py @@ -123,30 +123,32 @@ 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() - 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: - logging.error("Exception caused by searching for geo-tag") - has_geo = False - else: - poc_text = "" - + poc_text = decoded.split('Alpha: ')[1].strip().replace('','').replace('','').repl$ + if globalVars.config.getint("POC","geo_enable"): + try: + logging.debug("Using %s to find geo-tag in %s", globalVars.config.get("POC","geo_format"),$ + 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): From d45214627a3a887122fd0df67ddd5010a473c810 Mon Sep 17 00:00:00 2001 From: Florian Date: Sat, 21 Sep 2019 23:50:46 +0200 Subject: [PATCH 10/10] Update poc.py Fixing brokes line-ends --- includes/decoders/poc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/decoders/poc.py b/includes/decoders/poc.py index 5389041..6ab9aa0 100644 --- a/includes/decoders/poc.py +++ b/includes/decoders/poc.py @@ -123,10 +123,10 @@ 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('','').repl$ + 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"),$ + 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...")