diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f953781..af2b2dbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,14 @@ # Changelog +### __[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) +##### Changed +- Telegram-Plugin: Aufrufe der Google API erfolgen per SSL und ohne zusätzliche Bibliotheken [#382](https://github.com/Schrolli91/BOSWatch/pull/382) + -### __[v2.4.1]__ - 23.20.2018 +### __[v2.4.1]__ - 23.10.2018 ##### Added - Pushover-Plugin: Priorität für einzelne RIC und ZVEI in config einstellbar [#378](https://github.com/Schrolli91/BOSWatch/pull/378) ##### Changed diff --git a/README.md b/README.md index 19a918df..4f4ed231 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,18 @@ -### Fast support on https://bwcc.boswatch.de (Mattermost-Server) -#### Forum: https://boswatch.de +![# BOSWatch](/boswatch.png) + +:satellite: Python Script to receive and decode German BOS Information with rtl_fm and multimon-NG :satellite: + +#### WICHTIG +**Es wird darauf hingewiesen, dass für die Teilnahme am BOS-Funk nur nach den Technischen Richtlinien der BOS zugelassene Funkanlagen verwendet werden dürfen.** +**Der BOS-Funk ist ein nichtöffentlicher mobiler Landfunk. Privatpersonen gehören nicht zum Kreis der berechtigten Funkteilnehmer.** _(Quelle: TR-BOS)_ + +#### Notice: +The intercept of the German BOS radio is **strictly prohibited** and will be prosecuted. the use is **only authorized** personnel permitted. +The software was developed using the Multimon-NG code, a function in the real operation can not be guaranteed. -### Arbeiten an BOSWatch 3 gestartet -#### Work on BOSWatch 3 has started -## see: https://boswatch.de/index.php?thread/29-boswatch-3/ +### Fast support on https://bwcc.boswatch.de (Mattermost) +##### Work on BOSWatch 3 has started |Branch|Code Qualität|CI-Build| |---|---|---| @@ -14,22 +22,11 @@ **Unterstützung gesucht** -Zur Weiterentwicklung des Programms benötigen wir Deine Mithilfe - bitte melde dich per Issue, wenn du Anwender in einem verschlüsselten POCSAG-Netz und im (legalen) Besitz des dazugehörigen Schlüssels bist. +Zur Weiterentwicklung des Programms benötigen wir Deine Mithilfe - bitte melde dich per Issue, wenn du Anwender in einem verschlüsselten POCSAG-Netz und im **legalen** Besitz des dazugehörigen Schlüssels bist. In der Zukunft wollen wir die Möglichkeit schaffen, codierte Nachrichten zu entschlüsseln (und nur dann, wenn der Schlüssel bekannt ist!), dafür brauchen wir Dich als Tester! **Readme ist veraltet** - bitte im [Wiki](https://github.com/Schrolli91/BOSWatch/wiki) nachschauen! -![# BOSWatch](/boswatch.png) - -:satellite: Python Script to receive and decode German BOS Information with rtl_fm and multimon-NG :satellite: - -#### WICHTIG -**Es wird darauf hingewiesen, dass für die Teilnahme am BOS-Funk nur nach den Technischen Richtlinien der BOS zugelassene Funkanlagen verwendet werden dürfen.** -**Der BOS-Funk ist ein nichtöffentlicher mobiler Landfunk. Privatpersonen gehören nicht zum Kreis der berechtigten Funkteilnehmer.** _(Quelle: TR-BOS)_ - -#### Notice: -The intercept of the German BOS radio is **strictly prohibited** and will be prosecuted. the use is **only authorized** personnel permitted. -The software was developed using the Multimon-NG code, a function in the real operation can not be guaranteed. **Please** only use Code from **master**-Branch - thats **the only stable!** @@ -78,7 +75,7 @@ For the other functions see "Usage" below. For the RegEX filter functions see Section `[Filters]` http://www.regexr.com/ - RegEX test tool an documentation -If RegEX is enabled - only alloewd data will pass ! +If RegEX is enabled - only allowed data will pass ! Syntax: `INDIVIDUAL_NAME = TYP;DATAFIELD;PLUGIN;FREQUENZ;REGEX` (separator `;`) - `TYP` = the data typ (FMS|ZVEI|POC) diff --git a/config/config.template.ini b/config/config.template.ini index bda5904c..e2800ed5 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -403,6 +403,9 @@ RICforLocationAPIKey = # This is your Google API key. # Required if you want to create a map based on location information received with the above RIC. GoogleAPIKey = +# Define your start address for the routing +# Use the following format: CityOfOrigin+Street+Number +RoutingOrigin = MyCity+MyStreet+MyNumber #Wildcards can be used, see end of the file! FMS_message = %DATE% %TIME%: %FMS% diff --git a/includes/globalVars.py b/includes/globalVars.py index 35038684..d12aff4a 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,9 +9,9 @@ """ # version info -versionNr = "2.4.1" +versionNr = "2.4.2" branch = "master" -buildDate = "23.10.2018" +buildDate = "11.03.2019" # Global variables config = 0 diff --git a/plugins/Telegram/Telegram.py b/plugins/Telegram/Telegram.py index 451fe548..2120d75c 100644 --- a/plugins/Telegram/Telegram.py +++ b/plugins/Telegram/Telegram.py @@ -4,7 +4,7 @@ """ Plugin to send FMS-, ZVEI- and POCSAG-messages via Telegram @author: Peter Laemmle -@requires: Telegram BOT token, Telegram chat ID, library python-telegram-bot and optional googlemaps +@requires: Telegram BOT token, Telegram chat ID, library python-telegram-bot and optional requests and json """ # @@ -15,7 +15,7 @@ from telegram.error import (TelegramError, Unauthorized, BadRequest, NetworkError) from includes import globalVars # Global variables if globalVars.config.get("Telegram","RICforLocationAPIKey"): - import urllib, googlemaps + import requests, json # Helper function, uncomment to use from includes.helper import wildcardHandler @@ -26,6 +26,7 @@ BOTChatIDAPIKey = None RICforLocationAPIKey = None GoogleAPIKey = None +RoutingOrigin = None ## # @@ -43,12 +44,14 @@ def onLoad(): global BOTChatIDAPIKey global RICforLocationAPIKey global GoogleAPIKey + global RoutingOrigin configHandler.checkConfig("Telegram") BOTTokenAPIKey = globalVars.config.get("Telegram","BOTTokenAPIKey") BOTChatIDAPIKey = globalVars.config.get("Telegram","BOTChatIDAPIKey") RICforLocationAPIKey = globalVars.config.get("Telegram","RICforLocationAPIKey") GoogleAPIKey = globalVars.config.get("Telegram","GoogleAPIKey") + RoutingOrigin = globalVars.config.get("Telegram","RoutingOrigin") return @@ -98,12 +101,20 @@ def run(typ,freq,data): # Generate map logging.debug("Extract address from POCSAG message") address = "+".join(data["msg"].split(')')[0].split('/',1)[1].replace('(',' ').split()) - + # Retrieve directions using Google API + logging.debug("Retrieve polylines from Directions API") + url = "".join(["https://maps.googleapis.com/maps/api/directions/json?origin=", + RoutingOrigin, "&destination=", address, "&mode=driving&key=", GoogleAPIKey]) + response = json.loads(requests.get(url).content.decode('utf-8')) + logging.debug("Directions API return status: %s" % response['status']) + # Retrieve static maps using Google API logging.debug("Retrieve maps from Google") - url = "".join(["http://maps.googleapis.com/maps/api/staticmap?markers=", address, "&size=480x640&maptype=roadmap&zoom=16&language=de&key=", GoogleAPIKey]) - urllib.urlretrieve(url, "overview_map.png") - url = "".join(["http://maps.googleapis.com/maps/api/staticmap?markers=", address, "&size=240x320&scale=2&maptype=hybrid&zoom=17&language=de&key=", GoogleAPIKey]) - urllib.urlretrieve(url, "detail_map.png") + url = "".join(["https://maps.googleapis.com/maps/api/staticmap?&size=480x640&maptype=roadmap&path=enc:", + response['routes'][0]['overview_polyline']['points'], "&language=de&key=", GoogleAPIKey]) + with open("overview_map.png", "wb") as img: img.write(requests.get(url).content) + url = "".join(["https://maps.googleapis.com/maps/api/staticmap?markers=", + address, "&size=240x320&scale=2&maptype=hybrid&zoom=17&language=de&key=", GoogleAPIKey]) + with open("detail_map.png", "wb") as img: img.write(requests.get(url).content) # Send message and map with Telegram logging.debug("Send message and maps via Telegram BOT") @@ -112,10 +123,15 @@ def run(typ,freq,data): # Geocoding of address logging.debug("Geocode address") - gcode = googlemaps.Client(key='%s' % GoogleAPIKey) - gcode_result = gcode.geocode(address) + url = "".join(["https://maps.googleapis.com/maps/api/geocode/json?address=", + address, "&language=de&key=", GoogleAPIKey]) + gcode_result = json.loads(requests.get(url).content) + logging.debug("Geocoding API return status: %s" % gcode_result['status']) logging.debug("Send location via Telegram BOT API") - bot.sendLocation('%s' % BOTChatIDAPIKey, gcode_result[0]['geometry']['location']['lat'], gcode_result[0]['geometry']['location']['lng'], disable_notification='true') + bot.sendLocation('%s' % BOTChatIDAPIKey, + gcode_result[results][0]['geometry']['location']['lat'], + gcode_result[results][0]['geometry']['location']['lng'], + disable_notification='true') else: logging.warning("Invalid Typ: %s", typ) except Unauthorized: diff --git a/service/install_service.sh b/service/install_service.sh index 2789a353..d97dc408 100644 --- a/service/install_service.sh +++ b/service/install_service.sh @@ -45,6 +45,7 @@ elif [ "$action" == "r" ]; then # we want to remove the service # and remove it rm /etc/systemd/system/boswatch.service + echo "BosWatch service removed" else # error handling echo "Invalid input - please try again" exit 1