diff --git a/python/mqtt-systray.py b/python/mqtt-systray.py index 4414706..a967093 100755 --- a/python/mqtt-systray.py +++ b/python/mqtt-systray.py @@ -1,11 +1,8 @@ -#!/usr/bin/python - import gi import tempfile import time import os import signal -import re import paho.mqtt.client as mqtt @@ -22,7 +19,6 @@ 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() @@ -69,18 +65,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): @@ -145,16 +141,13 @@ 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() - #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]['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=devname+' - '+conf['devices'][device1]['values'][sensor]['name']) - menu.append(conf['devices'][device1]['values'][sensor]['menuitem']) + 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']) item_dashboard = Gtk.MenuItem(label='Open Dashboard') item_dashboard.connect('activate', gtkdashboard) @@ -204,29 +197,19 @@ 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+'/') - ctopic = topicds[1] - if search_topic(devices): devices=search_topic(devices) - conf['devices'][devices]['values'][ctopic]['value'] = float(value) + conf['devices'][devices]['values'][topicds[1]]['value'] = float(value) #update_menu() - 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'] + 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'] #print(get_alert(devices)) #if get_alert(devices): devname = "! " + devname #if get_alert(devices): devname = "!!ALERT!! " + devname @@ -235,7 +218,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']: @@ -248,11 +231,10 @@ 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) @@ -263,7 +245,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) @@ -282,4 +264,6 @@ while connected == False: connected=True mqttc.loop_start() +subscribe_mqtt(mqttc) + Gtk.main() diff --git a/src/main.ino b/src/main.ino index 8248f4c..fa3d21a 100644 --- a/src/main.ino +++ b/src/main.ino @@ -77,19 +77,14 @@ JsonDocument analyzeTH_type1(JsonArray payloadrh) { JsonDocument analyzeTH_type2(JsonArray payloadrh) { JsonDocument doc; - uint8_t errcode = payloadrh[1].as(); - doc["errcode"] = errcode; - if(errcode == 0) { - int16_t payloadtemp = payloadrh[3].as(); - payloadtemp += payloadrh[2].as() << 8; - doc["temperature_C"] = payloadtemp / 100.0; - uint8_t payloadhumidity = payloadrh[4].as(); - doc["humidity"] = payloadhumidity; - } + int16_t payloadtemp = payloadrh[2].as(); + payloadtemp += payloadrh[1].as() << 8; + doc["temperature_C"] = payloadtemp / 100.0; + uint8_t payloadhumidity = payloadrh[3].as(); + doc["humidity"] = payloadhumidity; return doc; } - void logJson(JsonDocument jsondata) { if(jsondata["model"].is()) { @@ -112,14 +107,11 @@ void logJson(JsonDocument jsondata) { jsondata["battery_V"] = adoc["battery_V"]; jsondata["battery_percent"] = adoc["battery_percent"]; jsondata["temperature_C"] = adoc["temperature_C"]; - } else if(jsondata["len"].as() == 5 && ((payloadrh[0].as() & 0b00100000 ) > 0)) { + } else if(jsondata["len"].as() == 4 && ((payloadrh[0].as() & 0b00100000 ) > 0)) { treatrh = true; JsonDocument adoc = analyzeTH_type2(payloadrh); - jsondata["errcode"] = adoc["errcode"]; - if(jsondata["errcode"] == 0) { - jsondata["temperature_C"] = adoc["temperature_C"]; - jsondata["humidity"] = adoc["humidity"]; - } + jsondata["temperature_C"] = adoc["temperature_C"]; + jsondata["humidity"] = adoc["humidity"]; } if(treatrh == true) { jsondata.remove("from");