diff --git a/config/config.template.ini b/config/config.template.ini index afdb49c..f9f6239 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -128,6 +128,7 @@ jsonSocket = 0 notifyMyAndroid = 0 Sms77 = 0 FFAgent = 0 +Pushover = 0 # for developing template-module template = 0 @@ -356,6 +357,32 @@ accessToken = selectiveCallCode = +[Pushover] +# Pushover API Key +api_key = + +# Pushover Userkey or Groupkey to receive message +user_key = + +# Title of the message +title = BOSWatch Message + +# Adapt Pocsag Subric (a,b,c,d) to Pushover Priorities (see https://pushover.net/api#priority) +SubA = 0 +SubB = 2 +SubC = 1 +SubD = 0 + +# how often should Pushover re-alert in seconds (emergency-messages) +retry = 30 + +# when should Pushover stop to re-alert in seconds (emergency-messages) +expire = 90 + +# use HTML in messages (0/1) +html = 1 + + ##################### ##### Not ready yet # ##################### diff --git a/plugins/Pushover/Pushover.py b/plugins/Pushover/Pushover.py new file mode 100644 index 0000000..50112d5 --- /dev/null +++ b/plugins/Pushover/Pushover.py @@ -0,0 +1,122 @@ +#!/usr/bin/python +# -*- coding: cp1252 -*- + +""" +Pushover-Plugin to send FMS-, ZVEI- and POCSAG - messages to Pushover Clients + +@author: Ricardo Krippner + +@requires: Pushover-Configuration has to be set in the config.ini +""" + +import time +import logging # Global logger +import httplib #for the HTTP request +import urllib +from includes import globals # Global variables + +from includes.helper import timeHandler +from includes.helper import configHandler + +## +# +# 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 + """ + # nothing to do for this plugin + return + + +## +# +# Main function of Pushover-plugin +# will be called by the alarmHandler +# +def run(typ,freq,data): + """ + This function is the implementation of the Pushover-Plugin. + It will send the data to Pushover API + + @type typ: string (FMS|ZVEI|POC) + @param typ: Typ of the dataset + @type data: map of data (structure see interface.txt) + @param data: Contains the parameter + @type freq: string + @keyword freq: frequency of the SDR Stick + + @requires: Pushover-Configuration has to be set in the config.ini + + @return: nothing + """ + try: + if configHandler.checkConfig("Pushover"): #read and debug the config + + try: + # + # Pushover-Request + # + logging.debug("send Pushover %s", typ) + + if data["function"] == '1': + priority = globals.config.get("Pushover", "SubA") + elif data["function"] == '2': + priority = globals.config.get("Pushover", "SubB") + elif data["function"] == '3': + priority = globals.config.get("Pushover", "SubC") + elif data["function"] == '4': + priority = globals.config.get("Pushover", "SubD") + else: + priority = 0 + + conn = httplib.HTTPSConnection("api.pushover.net:443") + conn.request("POST", "/1/messages.json", + urllib.urlencode({ + "token": globals.config.get("Pushover", "api_key"), + "user": globals.config.get("Pushover", "user_key"), + "message": ""+data["description"]+"
"+data["msg"].replace(";", "
"), + "html": globals.config.get("Pushover", "html"), + "title": globals.config.get("Pushover", "title"), + "priority": priority, + "retry": globals.config.get("Pushover", "retry"), + "expire": globals.config.get("Pushover", "expire") + }),{"Content-type": "application/x-www-form-urlencoded"}) + + except: + logging.error("cannot send Pushover request") + logging.debug("cannot send Pushover request", exc_info=True) + return + + else: + try: + # + # check Pushover-Response + # + response = conn.getresponse() + if str(response.status) == "200": #Check Pushover Response and print a Log or Error + logging.debug("Pushover response: %s - %s" , str(response.status), str(response.reason)) + else: + logging.warning("Pushover response: %s - %s" , str(response.status), str(response.reason)) + except: #otherwise + logging.error("cannot get Pushover response") + logging.debug("cannot get Pushover response", exc_info=True) + return + + finally: + logging.debug("close Pushover-Connection") + try: + request.close() + except: + pass + + except: + logging.error("unknown error") + logging.debug("unknown error", exc_info=True)