diff --git a/boswatch.py b/boswatch.py index b1ceb85..4ee4946 100644 --- a/boswatch.py +++ b/boswatch.py @@ -131,6 +131,10 @@ try: zvei_id = 0 zvei_id_old = 0 zvei_time_old = 0 + + poc_id = 0 + poc_id_old = 0 + poc_time_old = 0 #ConfigParser @@ -140,6 +144,7 @@ try: config.read(script_path+"/config.ini") fms_double_ignore_time = int(config.get("FMS", "double_ignore_time")) zvei_double_ignore_time = int(config.get("ZVEI", "double_ignore_time")) + poc_double_ignore_time = int(config.get("POC", "double_ignore_time")) #MySQL config useMySQL = int(config.get("Module", "useMySQL")) #use MySQL support? @@ -165,6 +170,7 @@ try: log("set to standard configuration") fms_double_ignore_time = 5 zvei_double_ignore_time = 5 + poc_double_ignore_time = 10 useMySQL = 0 useHTTPrequest = 0 @@ -312,6 +318,103 @@ try: log("ZVEI to HTTP failed","error") else: log("No valid ZVEI: "+zvei_id) + #POCSAG512 Decoder Section + #check POCSAG512: -> validate -> check double alarm -> log -> (MySQL) + #POCSAG512: Address: 1234567 Function: 1 Alpha: XXMSG MEfeweffsjh + + if "POCSAG512:" in decoded: + log("recived POCSAG1200") + poc_id = decoded[20:27] #POC Code + poc_sub = decoded[39].replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1") + if decoded.__contains__("Alpha:"): + poc_text = decoded.split('Alpha: ')[1].strip().rstrip('').strip() + else: + poc_text = "" + if len(poc_id) == 7: #if POC is valid + if poc_id == poc_id_old and timestamp < poc_time_old + poc_double_ignore_time: #check for double alarm + log("POC512 double alarm: "+poc_id_old) + poc_time_old = timestamp #in case of double alarm, poc_double_ignore_time set new + else: + log("POCSAG512: "+poc_id+""+poc_sub+""+poc_text,"info") + poc_id_old = poc_id #save last id + poc_time_old = timestamp #save last time + + if useMySQL: #only if MySQL is active + log("POC to MySQL") + try: + connection = mysql.connector.connect(host = str(dbserver), user = str(dbuser), passwd = str(dbpassword), db = str(database)) + cursor = connection.cursor() + cursor.execute("INSERT INTO "+tablePOC+" (time,ric,funktion,text) VALUES (%s,%s,%s,%s)",(curtime(),poc_id,poc_sub,poc_text,)) + cursor.close() + connection.commit() + except: + log("POC512 to MySQL failed","error") + finally: + connection.close() #Close connection in every case + + if useHTTPrequest: #only if HTTPrequest is active + log("POC512 to HTTP") + try: + httprequest = httplib.HTTPConnection(url) + httprequest.request("HEAD", "/") + httpresponse = httprequest.getresponse() + if str(httpresponse.status) == "200": #Check HTTP Response an print a Log or Error + log("HTTP response: "+str(httpresponse.status)+" - "+str(httpresponse.reason)) + else: + log("HTTP response: "+str(httpresponse.status)+" - "+str(httpresponse.reason),"error") + except: + log("POCSAG512 to HTTP failed","error") + else: + log("No valid POCSAG512: "+poc_id) + + #POCSAG1200 Decoder Section + #check POCSAG1200: -> validate -> check double alarm -> log -> (MySQL) + #POCSAG1200: Address: 1234567 Function: 1 Alpha: XXMSG MEfeweffsjh + + if "POCSAG1200:" in decoded: + log("recived POCSAG1200") + poc_id = decoded[21:28] #POC Code + poc_sub = decoded[40].replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1") + if decoded.__contains__("Alpha:"): + poc_text = decoded.split('Alpha: ')[1].strip().rstrip('').strip() + else: + poc_text = "" + if len(poc_id) == 7: #if POC is valid + if poc_id == poc_id_old and timestamp < poc_time_old + poc_double_ignore_time: #check for double alarm + log("POC1200 double alarm: "+poc_id_old) + poc_time_old = timestamp #in case of double alarm, poc_double_ignore_time set new + else: + log("POCSAG1200: "+poc_id+""+poc_sub+""+poc_text,"info") + poc_id_old = poc_id #save last id + poc_time_old = timestamp #save last time + + if useMySQL: #only if MySQL is active + log("POC to MySQL") + try: + connection = mysql.connector.connect(host = str(dbserver), user = str(dbuser), passwd = str(dbpassword), db = str(database)) + cursor = connection.cursor() + cursor.execute("INSERT INTO "+tablePOC+" (time,ric,funktion,text) VALUES (%s,%s,%s,%s)",(curtime(),poc_id,poc_sub,poc_text,)) + cursor.close() + connection.commit() + except: + log("POC1200 to MySQL failed","error") + finally: + connection.close() #Close connection in every case + + if useHTTPrequest: #only if HTTPrequest is active + log("POC1200 to HTTP") + try: + httprequest = httplib.HTTPConnection(url) + httprequest.request("HEAD", "/") + httpresponse = httprequest.getresponse() + if str(httpresponse.status) == "200": #Check HTTP Response an print a Log or Error + log("HTTP response: "+str(httpresponse.status)+" - "+str(httpresponse.reason)) + else: + log("HTTP response: "+str(httpresponse.status)+" - "+str(httpresponse.reason),"error") + except: + log("POCSAG1200 to HTTP failed","error") + else: + log("No valid POCSAG1200: "+poc_id) except KeyboardInterrupt: @@ -324,4 +427,4 @@ finally: multimon_ng.terminate() log("multimon-ng terminated") log("exiting BOSWatch") - exit(0) \ No newline at end of file + exit(0)