MQTT Systray menu disposition and + in MQTT
This commit is contained in:
parent
2e2687d3f7
commit
9a715056f1
|
|
@ -1,8 +1,11 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
|
import re
|
||||||
|
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
|
|
||||||
|
|
@ -19,6 +22,7 @@ oldtmpfile = ''
|
||||||
oldalertcount = 0
|
oldalertcount = 0
|
||||||
menu = Gtk.Menu()
|
menu = Gtk.Menu()
|
||||||
|
|
||||||
|
#fp = open("/home/agc/local/bin/mqtt-systray.yaml")
|
||||||
fp = open("mqtt-systray.yaml")
|
fp = open("mqtt-systray.yaml")
|
||||||
conf = yaml.safe_load(fp)
|
conf = yaml.safe_load(fp)
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
@ -141,13 +145,16 @@ def build_menu():
|
||||||
menu = Gtk.Menu()
|
menu = Gtk.Menu()
|
||||||
for device1 in conf['devices']:
|
for device1 in conf['devices']:
|
||||||
devname = conf['devices'][device1]['name']
|
devname = conf['devices'][device1]['name']
|
||||||
conf['devices'][device1]['menuitem'] = Gtk.MenuItem(label=devname)
|
#conf['devices'][device1]['menuitem'] = Gtk.MenuItem(label=devname)
|
||||||
submenu = Gtk.Menu()
|
#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():
|
for sensor in conf['devices'][device1]['values'].keys():
|
||||||
conf['devices'][device1]['values'][sensor]['menuitem'] = Gtk.MenuItem(label=conf['devices'][device1]['values'][sensor]['name'])
|
conf['devices'][device1]['values'][sensor]['menuitem'] = Gtk.MenuItem(label=devname+' - '+conf['devices'][device1]['values'][sensor]['name'])
|
||||||
submenu.append(conf['devices'][device1]['values'][sensor]['menuitem'])
|
menu.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 = Gtk.MenuItem(label='Open Dashboard')
|
||||||
item_dashboard.connect('activate', gtkdashboard)
|
item_dashboard.connect('activate', gtkdashboard)
|
||||||
|
|
@ -197,19 +204,29 @@ def build_menu():
|
||||||
def update_menu():
|
def update_menu():
|
||||||
appindicator.set_menu(build_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):
|
def set_value(topic, value):
|
||||||
global oldalertcount
|
global oldalertcount
|
||||||
topicds = topic.rsplit("/", 1)
|
topicds = topic.rsplit("/", 1)
|
||||||
devices=topicds[0]
|
devices=topicds[0]
|
||||||
devices = devices.removeprefix(mqttprefix+'/')
|
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()
|
#update_menu()
|
||||||
|
|
||||||
alert_text = get_alert_text(devices, topicds[1])
|
alert_text = get_alert_text(devices, ctopic)
|
||||||
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'])
|
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'][topicds[1]]['menuitem'].set_label(text)
|
conf['devices'][devices]['values'][ctopic]['menuitem'].set_label(text)
|
||||||
#conf['devices'][devices]['values'][topicds[1]]['menuitem'].set_label("{}".format(conf['devices'][devices]['values'][topicds[1]]['value']))
|
#conf['devices'][devices]['values'][ctopic]['menuitem'].set_label("{}".format(conf['devices'][devices]['values'][topicds[1]]['value']))
|
||||||
devname = conf['devices'][devices]['name']
|
#devname = conf['devices'][devices]['name']
|
||||||
#print(get_alert(devices))
|
#print(get_alert(devices))
|
||||||
#if get_alert(devices): devname = "! " + devname
|
#if get_alert(devices): devname = "! " + devname
|
||||||
#if get_alert(devices): devname = "!!ALERT!! " + devname
|
#if get_alert(devices): devname = "!!ALERT!! " + devname
|
||||||
|
|
@ -218,7 +235,7 @@ def set_value(topic, value):
|
||||||
if oldalertcount != (alert_count()):
|
if oldalertcount != (alert_count()):
|
||||||
oldalertcount = alert_count()
|
oldalertcount = alert_count()
|
||||||
appindicator.set_icon_full(get_icon(), "mqtt-icon")
|
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):
|
def subscribe_mqtt(mqttc):
|
||||||
for device in conf['devices']:
|
for device in conf['devices']:
|
||||||
|
|
@ -231,10 +248,11 @@ def subscribe_mqtt(mqttc):
|
||||||
|
|
||||||
def on_connect(mqttc, obj, flags, rc):
|
def on_connect(mqttc, obj, flags, rc):
|
||||||
print("rc: " + str(rc))
|
print("rc: " + str(rc))
|
||||||
|
subscribe_mqtt(mqttc)
|
||||||
#def on_subscribe(mqttc, obj, mid, granted_qos):
|
#def on_subscribe(mqttc, obj, mid, granted_qos):
|
||||||
# print("Subscribed: " + str(mid) + " " + str(granted_qos))
|
# print("Subscribed: " + str(mid) + " " + str(granted_qos))
|
||||||
def on_message(client, userdata, msg):
|
def on_message(client, userdata, msg):
|
||||||
print(msg.topic+" "+str(msg.payload))
|
#print(msg.topic+" "+str(msg.payload))
|
||||||
set_value(msg.topic, 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_status(AppIndicator.IndicatorStatus.ACTIVE)
|
||||||
appindicator.set_menu(build_menu())
|
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")
|
#set_value("model2/2/2/humidity2", "75")
|
||||||
#print(conf)
|
#print(conf)
|
||||||
|
|
||||||
|
|
@ -264,6 +282,4 @@ while connected == False:
|
||||||
connected=True
|
connected=True
|
||||||
mqttc.loop_start()
|
mqttc.loop_start()
|
||||||
|
|
||||||
subscribe_mqtt(mqttc)
|
|
||||||
|
|
||||||
Gtk.main()
|
Gtk.main()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue