diff --git a/python/mqtt-systray.py b/python/mqtt-systray.py index a967093..4414706 100755 --- a/python/mqtt-systray.py +++ b/python/mqtt-systray.py @@ -1,8 +1,11 @@ +#!/usr/bin/python + import gi import tempfile import time import os import signal +import re import paho.mqtt.client as mqtt @@ -19,6 +22,7 @@ oldtmpfile = '' oldalertcount = 0 menu = Gtk.Menu() +#fp = open("/home/agc/local/bin/mqtt-systray.yaml") fp = open("mqtt-systray.yaml") conf = yaml.safe_load(fp) fp.close() @@ -65,18 +69,18 @@ def get_alert_text_warning(devicea, sensora): alert_text = '' if 'value' in conf['devices'][devicea]['values'][sensora]: if 'max_warning' in conf['devices'][devicea]['values'][sensora] and conf['devices'][devicea]['values'][sensora]['value'] > conf['devices'][devicea]['values'][sensora]['max_warning']: - alert_text = '!!high!! ' + alert_text = '!!high!!' elif 'min_warning' in conf['devices'][devicea]['values'][sensora] and conf['devices'][devicea]['values'][sensora]['value'] < conf['devices'][devicea]['values'][sensora]['min_warning']: - alert_text = '!!low!! ' + alert_text = '!!low!!' return alert_text def get_alert_text_critical(devicea, sensora): alert_text = '' if 'value' in conf['devices'][devicea]['values'][sensora]: if 'max_critical' in conf['devices'][devicea]['values'][sensora] and conf['devices'][devicea]['values'][sensora]['value'] > conf['devices'][devicea]['values'][sensora]['max_critical']: - alert_text = '!!HIGH!! ' + alert_text = '!!HIGH!!' elif 'min_critical' in conf['devices'][devicea]['values'][sensora] and conf['devices'][devicea]['values'][sensora]['value'] < conf['devices'][devicea]['values'][sensora]['min_critical']: - alert_text = '!!LOW!! ' + alert_text = '!!LOW!!' return alert_text def get_alert_text(devicea, sensora): @@ -141,13 +145,16 @@ def build_menu(): menu = Gtk.Menu() for device1 in conf['devices']: devname = conf['devices'][device1]['name'] - conf['devices'][device1]['menuitem'] = Gtk.MenuItem(label=devname) - submenu = Gtk.Menu() + #conf['devices'][device1]['menuitem'] = Gtk.MenuItem(label=devname) + #submenu = Gtk.Menu() + #for sensor in conf['devices'][device1]['values'].keys(): + # conf['devices'][device1]['values'][sensor]['menuitem'] = Gtk.MenuItem(label=conf['devices'][device1]['values'][sensor]['name']) + # submenu.append(conf['devices'][device1]['values'][sensor]['menuitem']) + #conf['devices'][device1]['menuitem'].set_submenu(submenu) + #menu.append(conf['devices'][device1]['menuitem']) for sensor in conf['devices'][device1]['values'].keys(): - conf['devices'][device1]['values'][sensor]['menuitem'] = Gtk.MenuItem(label=conf['devices'][device1]['values'][sensor]['name']) - submenu.append(conf['devices'][device1]['values'][sensor]['menuitem']) - conf['devices'][device1]['menuitem'].set_submenu(submenu) - menu.append(conf['devices'][device1]['menuitem']) + conf['devices'][device1]['values'][sensor]['menuitem'] = Gtk.MenuItem(label=devname+' - '+conf['devices'][device1]['values'][sensor]['name']) + menu.append(conf['devices'][device1]['values'][sensor]['menuitem']) item_dashboard = Gtk.MenuItem(label='Open Dashboard') item_dashboard.connect('activate', gtkdashboard) @@ -197,19 +204,29 @@ def build_menu(): def update_menu(): appindicator.set_menu(build_menu()) +def search_topic(devices): + for device in conf['devices'].keys(): + if device.find('+') > 0: + re_topic = device.replace('+', '.+') + if(len(re.findall(re_topic, devices)) > 0): + return device + return None + def set_value(topic, value): global oldalertcount topicds = topic.rsplit("/", 1) devices=topicds[0] devices = devices.removeprefix(mqttprefix+'/') - conf['devices'][devices]['values'][topicds[1]]['value'] = float(value) + ctopic = topicds[1] + if search_topic(devices): devices=search_topic(devices) + conf['devices'][devices]['values'][ctopic]['value'] = float(value) #update_menu() - alert_text = get_alert_text(devices, topicds[1]) - text='{}{}: {} {}'.format(alert_text, conf['devices'][devices]['values'][topicds[1]]['name'], conf['devices'][devices]['values'][topicds[1]]['value'], conf['devices'][devices]['values'][topicds[1]]['unit']) - conf['devices'][devices]['values'][topicds[1]]['menuitem'].set_label(text) - #conf['devices'][devices]['values'][topicds[1]]['menuitem'].set_label("{}".format(conf['devices'][devices]['values'][topicds[1]]['value'])) - devname = conf['devices'][devices]['name'] + alert_text = get_alert_text(devices, ctopic) + text='{} - {}: {} {} {}'.format(conf['devices'][devices]['name'], conf['devices'][devices]['values'][topicds[1]]['name'], round(conf['devices'][devices]['values'][topicds[1]]['value'], 2), conf['devices'][devices]['values'][topicds[1]]['unit'], alert_text) + conf['devices'][devices]['values'][ctopic]['menuitem'].set_label(text) + #conf['devices'][devices]['values'][ctopic]['menuitem'].set_label("{}".format(conf['devices'][devices]['values'][topicds[1]]['value'])) + #devname = conf['devices'][devices]['name'] #print(get_alert(devices)) #if get_alert(devices): devname = "! " + devname #if get_alert(devices): devname = "!!ALERT!! " + devname @@ -218,7 +235,7 @@ def set_value(topic, value): if oldalertcount != (alert_count()): oldalertcount = alert_count() appindicator.set_icon_full(get_icon(), "mqtt-icon") - os.system("notify-send '{}' '{}'".format(conf['devices'][devices]['name'], text)) + # os.system("notify-send '{}' '{}'".format(conf['devices'][devices]['name'], text)) def subscribe_mqtt(mqttc): for device in conf['devices']: @@ -231,10 +248,11 @@ def subscribe_mqtt(mqttc): def on_connect(mqttc, obj, flags, rc): print("rc: " + str(rc)) + subscribe_mqtt(mqttc) #def on_subscribe(mqttc, obj, mid, granted_qos): # print("Subscribed: " + str(mid) + " " + str(granted_qos)) def on_message(client, userdata, msg): - print(msg.topic+" "+str(msg.payload)) + #print(msg.topic+" "+str(msg.payload)) set_value(msg.topic, msg.payload) @@ -245,7 +263,7 @@ appindicator.set_title('MQTT Alert') appindicator.set_status(AppIndicator.IndicatorStatus.ACTIVE) appindicator.set_menu(build_menu()) -set_value("model1/1/1/temperature1C", "25.1") +#set_value("model1/1/1/temperature1C", "25.1") #set_value("model2/2/2/humidity2", "75") #print(conf) @@ -264,6 +282,4 @@ while connected == False: connected=True mqttc.loop_start() -subscribe_mqtt(mqttc) - Gtk.main()