aboutsummaryrefslogtreecommitdiffstats
path: root/mqtt_temps.py
diff options
context:
space:
mode:
authorDennis Eriksen <d@ennis.no>2023-01-30 20:05:25 +0100
committerDennis Eriksen <d@ennis.no>2023-01-30 20:05:25 +0100
commit577f3b123b319414b4fa50ff9d2838015ccb372e (patch)
treeffccfa8ce30f1e1876e66adec6fe67276c3d1ad9 /mqtt_temps.py
parentadding a few dependencies (diff)
downloadenergyscripts-577f3b123b319414b4fa50ff9d2838015ccb372e.tar.gz
adding handler for tempsensors on mqtt
Diffstat (limited to 'mqtt_temps.py')
-rw-r--r--mqtt_temps.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/mqtt_temps.py b/mqtt_temps.py
new file mode 100644
index 0000000..bda7b0f
--- /dev/null
+++ b/mqtt_temps.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+import json
+import psycopg2
+import paho.mqtt.client as mqtt
+
+mqtt_server = os.environ['el_mqtt_server']
+mqtt_port = int(os.environ['el_mqtt_port'])
+keepalive = int(os.environ['el_mqtt_keepalive'])
+mqtt_topic = os.environ['el_mqtt_topic']
+
+pg_db = os.environ['el_pg_db']
+pg_host = os.environ['el_pg_host']
+pg_user = os.environ['el_pg_user']
+pg_pass = os.environ['el_pg_pass']
+pg_table = "mqtt_temps"
+
+
+# The callback for when the client receives a CONNACK response from the server.
+def on_connect(client, userdata, flags, rc):
+ print("Connected with result code "+str(rc))
+
+ # Subscribing in on_connect() means that if we lose the connection and
+ # reconnect then subscriptions will be renewed.
+ client.subscribe(mqtt_topic)
+
+# The callback for when a PUBLISH message is received from the server.
+def on_message(client, userdata, msg):
+ if msg.topic.startswith('zigbee2mqtt/tmp'):
+ #print("TMP!! - " + msg.topic.split('/')[1])
+ data = json.loads(msg.payload)
+ if 'temperature' in data and 'humidity' in data:
+ values = (msg.topic.split('/')[1], data['temperature'], data['humidity'], data['battery'], data['linkquality'], data['voltage'])
+ print(values)
+ todb(values)
+
+# Write values to database
+def todb(values):
+ conn = psycopg2.connect(database=pg_db, host=pg_host, user=pg_user, password=pg_pass)
+ cur = conn.cursor()
+ try:
+ cur.execute("INSERT INTO " + pg_table + " (name, temperature, humidity, battery, linkquality, voltage) VALUES(%s,%s,%s,%s,%s,%s)", values)
+ conn.commit()
+ except (Exception, psycopg2.Error) as error:
+ conn.rollback()
+ print("Error while connecting to PostgreSQL", error)
+ raise error
+ finally:
+ cur.close()
+ conn.close()
+
+
+
+# mqtt
+client = mqtt.Client()
+client.on_connect = on_connect
+client.on_message = on_message
+
+client.connect(mqtt_server, mqtt_port, keepalive)
+
+# Blocking call that processes network traffic, dispatches callbacks and
+# handles reconnecting.
+# Other loop*() functions are available that give a threaded interface and a
+# manual interface.
+client.loop_forever()