]> the.earth.li Git - energenie-attiny.git/commitdiff
Add periodic uptime information to MQTT listener
authorJonathan McDowell <noodles@earth.li>
Mon, 21 Sep 2020 19:15:53 +0000 (20:15 +0100)
committerJonathan McDowell <noodles@earth.li>
Mon, 21 Sep 2020 19:15:53 +0000 (20:15 +0100)
mqtt-power

index ee7b67246332803ca39e2f994f38b4c025fc1509..d2723cba9a6f58e48a1d93fff537494429cddaa8 100755 (executable)
@@ -20,6 +20,7 @@ import time
 import sys
 
 import hid
+import json
 import paho.mqtt.client as mqtt
 
 debug = False
@@ -61,6 +62,19 @@ def mqtt_message(client, device, message):
     control_relay(device, relay, state)
 
 
+def uptime():
+    with open('/proc/uptime', 'r') as f:
+        seconds = int(float(f.readline().split()[0]))
+
+    days = seconds // 86400
+    seconds %= 86400
+    hours = seconds // 3600
+    seconds %= 3600
+    minutes = seconds // 60
+    seconds %= 60
+
+    return "{}T{}:{}:{}".format(days, hours, minutes, seconds)
+
 relay = None
 for dev in hid.enumerate(0x16c0, 0x05df):
     if dev['manufacturer_string'] == 'www.dcttech.com':
@@ -86,4 +100,9 @@ client.subscribe(prefix.format(serno_str))
 client.loop_start()
 
 while True:
-    time.sleep(60)
+    state = {
+        'Time': time.strftime('%Y-%m-%dT%H:%M:%S', time.gmtime()),
+        'Uptime': uptime()
+    }
+    client.publish("relay/{}/state".format(serno_str), json.dumps(state))
+    time.sleep(300)