diff --git a/CHANGELOG.md b/CHANGELOG.md index 53dbf32..3107002 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,18 +1,27 @@ # Changelog -### __[v2.5.2]__ - unreleased + +### __[v2.5.3]__ - unreleased ##### Added -- fhemCmd-Plugin: New plugin fhemCmd to execute commands in FHEM home automation. [#457](https://github.com/Schrolli91/BOSWatch/pull/457) -- Add field "ricFuncChar" in data structure for POC messages as a combination of "ric" and "functionChar" for using in RegEx filter. [#459](https://github.com/Schrolli91/BOSWatch/pull/459) ##### Changed -- Divera Plugin: Add individual alarms for FMS, ZVEI and POC. [#451](https://github.com/Schrolli91/BOSWatch/pull/451) -- install.sh: local git repo available at /opt/boswatch (or at your own path). Updates easier with `git pull` in /opt/boswatch. [#452](https://github.com/Schrolli91/BOSWatch/pull/452) ##### Deprecated ##### Removed ##### Fixed +##### Security + + +### __[v2.5.2]__ - 08.01.2021 +##### Added +- fhemCmd-Plugin: New plugin fhemCmd to execute commands in FHEM home automation. [#457](https://github.com/Schrolli91/BOSWatch/pull/457) +- Add field "ricFuncChar" in data structure for POC messages as a combination of "ric" and "functionChar" for using in RegEx filter. [#459](https://github.com/Schrolli91/BOSWatch/pull/459) +- MQTT Plugin: Send alarms to an MQTT broker [#498](https://github.com/Schrolli91/BOSWatch/pull/498) +##### Changed +- Divera Plugin: Add individual alarms for FMS, ZVEI and POC. [#451](https://github.com/Schrolli91/BOSWatch/pull/451) +- install.sh: local git repo available at /opt/boswatch (or at your own path). Updates easier with `git pull` in /opt/boswatch. [#452](https://github.com/Schrolli91/BOSWatch/pull/452) +- Telegram Plugin: Add support for simple HTML style message formatting. [#482](https://github.com/Schrolli91/BOSWatch/pull/482) +##### Fixed - install.sh: old version of mysql-connector-python removed; add new via pip [#452](https://github.com/Schrolli91/BOSWatch/pull/452) [#445](https://github.com/Schrolli91/BOSWatch/issues/445) - GPIOcontrol plugin: Fixing indentation errors. [#465](https://github.com/Schrolli91/BOSWatch/pull/465) -##### Security ### __[v2.5.1]__ - 28.04.2020 @@ -126,7 +135,7 @@ Zum schreiben des Changelog's siehe: http://keepachangelog.com/de/1.0.0/ -### __[v#.#]__ - date +### __[v#.#]__ - unreleased ##### Added ##### Changed ##### Deprecated diff --git a/config/config.template.ini b/config/config.template.ini index 8d2a9a4..e20a7eb 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -183,6 +183,7 @@ hue = 0 Divera = 0 gpiocontrol = 0 fhemCmd = 0 +mqtt = 0 # for developing - template-module template = 0 @@ -426,14 +427,17 @@ GoogleAPIKey = # Use the following format: CityOfOrigin+Street+Number RoutingOrigin = MyCity+MyStreet+MyNumber -#Wildcards can be used, see end of the file! +# Wildcards can be used, see end of the file! +# In addition, feel free to use simple HTML stlye tags like %FMS% FMS_message = %DATE% %TIME%: %FMS% -#Wildcards can be used, see end of the file! +#W ildcards can be used, see end of the file! +# In addition, feel free to use simple HTML stlye tags like %ZVEI% ZVEI_message = %DATE% %TIME%: %ZVEI% -#Wildcards can be used, see end of the file! -POC_message = %MSG% +# Wildcards can be used, see end of the file! +# In addition, feel free to use simple HTML stlye tags like %DESCR% +POC_message = %DESCR%%BR%%MSG% [yowsup] @@ -547,6 +551,11 @@ commandFMS = set SteckdoseSchlafzimmerEinsatz on-for-timer 90 commandZVEI = commandPOC = +[mqtt] +#Adress from MQTT-Broker +brokeraddress = 192.168.178.27 +topic = alarm/data + ##################### ##### Not ready yet # ##################### diff --git a/includes/globalVars.py b/includes/globalVars.py index b0b50fb..14c7ea9 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,7 +9,7 @@ Global variables """ # version info -versionNr = "2.5.2" +versionNr = "2.5.3" branch = "dev" buildDate = "unreleased" diff --git a/plugins/Telegram/Telegram.py b/plugins/Telegram/Telegram.py index 2120d75..837aea0 100644 --- a/plugins/Telegram/Telegram.py +++ b/plugins/Telegram/Telegram.py @@ -94,7 +94,7 @@ def run(typ,freq,data): bot = telegram.Bot(token='%s' % BOTTokenAPIKey) # Send message to chat via Telegram BOT API logging.debug("Send message to chat via Telegram BOT API") - bot.sendMessage('%s' % BOTChatIDAPIKey, text) + bot.sendMessage('%s' % BOTChatIDAPIKey, text, parse_mode=telegram.ParseMode.HTML) # Generate location information only for specific RIC if typ == "POC" and data["ric"] == RICforLocationAPIKey: diff --git a/plugins/mqtt/mqtt.py b/plugins/mqtt/mqtt.py new file mode 100644 index 0000000..683d7d6 --- /dev/null +++ b/plugins/mqtt/mqtt.py @@ -0,0 +1,121 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- + +""" +@author: KS + +@requires: paho-mqtt +""" + +# +# Imports +# +import logging # Global logger +from includes import globalVars # Global variables + +# Helper function, uncomment to use +from includes.helper import timeHandler +from includes.helper import wildcardHandler +from includes.helper import configHandler + +import paho.mqtt.client as mqtt +import json + +## +# +# onLoad (init) function of plugin +# will be called one time by the pluginLoader on start +# +def onLoad(): + """ + While loading the plugins by pluginLoader.loadPlugins() + this onLoad() routine is called one time for initialize the plugin + + @requires: nothing + + @return: nothing + @exception: Exception if init has an fatal error so that the plugin couldn't work + + """ + try: + ########## User onLoad CODE ########## + pass + ########## User onLoad CODE ########## + except: + logging.error("unknown error") + logging.debug("unknown error", exc_info=True) + raise + +## +# +# Main function of plugin +# will be called by the alarmHandler +# +def run(typ,freq,data): + """ + This function is the implementation of the Plugin. + + If necessary the configuration hast to be set in the config.ini. + + @type typ: string (FMS|ZVEI|POC) + @param typ: Typ of the dataset + @type data: map of data (structure see readme.md in plugin folder) + @param data: Contains the parameter for dispatch + @type freq: string + @keyword freq: frequency of the SDR Stick + + @requires: If necessary the configuration hast to be set in the config.ini. + + @return: nothing + @exception: nothing, make sure this function will never thrown an exception + """ + try: + if configHandler.checkConfig("mqtt"): #read and debug the config (let empty if no config used) + + logging.debug(globalVars.config.get("mqtt", "brokeraddress")) + logging.debug(globalVars.config.get("mqtt", "topic")) + ########## User Plugin CODE ########## + broker_address = globalVars.config.get("mqtt", "brokeraddress") + topic = globalVars.config.get("mqtt", "topic") + mqttClient = mqtt.Client() + + if typ == "FMS": + x = { + "fms": data["fms"], + "status": data["status"], + "direction": data["direction"], + "directionText": data["directionText"], + "tsi": data["tsi"], + "description": data["description"], + "timestamp": timeHandler.curtime() + } + elif typ == "ZVEI": + x = { + "zvei": data["zvei"], + "description": data["description"], + "timestamp": timeHandler.curtime() + } + elif typ == "POC": + functionText = "%FUNCTEXT%" + functionText = wildcardHandler.replaceWildcards(functionText, data) + x = { + "ric": data["ric"], + "function": data["function"], + "functionText": functionText, + "functionChar": data["functionChar"], + "msg": data["msg"], + "bitrate": data["bitrate"], + "description": data["description"], + "timestamp": timeHandler.curtime() + } + else: + logging.warning("Invalid Typ: %s", typ) + + y = json.dumps(x) + mqttClient.connect(broker_address) + mqttClient.publish(topic,y) + ########## User Plugin CODE ########## + + except: + logging.error("unknown error") + logging.debug("unknown error", exc_info=True) diff --git a/plugins/mqtt/requirements.txt b/plugins/mqtt/requirements.txt new file mode 100644 index 0000000..8579e8b --- /dev/null +++ b/plugins/mqtt/requirements.txt @@ -0,0 +1 @@ +paho-mqtt