commit d5027f05f39028f90acde0fcb260a67a2e5878f6 Author: Leopold Date: Sun Mar 15 10:03:08 2026 +0100 Initial commit diff --git a/get_data.py b/get_data.py new file mode 100755 index 0000000..5604a88 --- /dev/null +++ b/get_data.py @@ -0,0 +1,106 @@ +#!/usr/bin/python + +import requests, sys, re, time + +import paho.mqtt.client as mqtt +import xml.etree.ElementTree as ET + +NAMESPACE = "http://www.eta.co.at/rest/v1" + +# MQTT Broker +mqttBroker = '192.168.0.11' +mqttPort = 1883 +mqttuser = 'eta' +mqttpasswort = 'uiRCX0vWs6lIYbWL' + +# Aktuelle Werte auf Console ausgeben (True | False) +printValues = True + +# ETA REST API +BASEURL = "http://192.168.0.55:8080" + +endpoints = [ + { 'key': 'Abgas_Geblase_RPM', 'endpoint': '/user/var/48/10391/0/11120/2111' }, + { 'key': 'Abgas_Geblaese_BS', 'endpoint': '/user/var/48/10391/0/0/12299' }, + { 'key': 'Abgas_Geblaese_O2', 'endpoint': '/user/var/48/10391/0/11108/0' }, + { 'key': 'Abgas_Geblaese_Temp', 'endpoint': '/user/var/48/10391/0/11110/0' }, + { 'key': 'Aussen_Temp', 'endpoint': '/user/var/120/10101/0/0/12197' }, + { 'key': 'HK1_Mischer', 'endpoint': '/user/var/120/10101/0/11125/2127' }, + { 'key': 'HK1_Modus', 'endpoint': '/user/var/120/10101/0/0/12092' }, + { 'key': 'HK1_Pumpe', 'endpoint': '/user/var/120/10101/0/11124/0' }, + { 'key': 'HK1_Temp', 'endpoint': '/user/var/120/10101/0/11060/0' }, + { 'key': 'Isoliertuer', 'endpoint': '/user/var/48/10391/0/11193/0' }, + { 'key': 'Kessel_Pumpe', 'endpoint': '/user/var/48/10391/0/11123/0' }, + { 'key': 'Kessel_RL_mischer', 'endpoint': '/user/var/48/10391/0/11163/2127' }, + { 'key': 'Kessel_RL_temp', 'endpoint': '/user/var/48/10391/0/11160/0' }, + { 'key': 'Kessel_Stellmotor_oben', 'endpoint': '/user/var/48/10391/0/11094/2071' }, + { 'key': 'Kessel_Stellmotor_unten', 'endpoint': '/user/var/48/10391/0/11095/2071' }, + { 'key': 'Kessel_Temp', 'endpoint': '/user/var/48/10391/0/11109/0' }, + { 'key': 'Kessel_BS', 'endpoint': '/user/var/48/10391/0/0/12153' }, + { 'key': 'Kessel_BS_seit_Wartung', 'endpoint': '/user/var/48/10391/0/0/12404' }, + { 'key': 'Kessel_Heizbetriebe', 'endpoint': '/user/var/48/10391/0/0/12017' }, + { 'key': 'Kessel_RL_Temp_niedrig', 'endpoint': '/user/var/48/10391/0/0/12222' }, + { 'key': 'Kessel_Zaehler_Uebertemp', 'endpoint': '/user/var/48/10391/0/0/12540' }, + { 'key': 'Puffer_Anfahrentlastung', 'endpoint': '/user/var/120/10601/0/11159/0' }, + { 'key': 'Puffer_Ladung', 'endpoint': '/user/var/120/10601/0/0/12528' }, + { 'key': 'Puffer_Temp1', 'endpoint': '/user/var/120/10601/0/11327/0' }, + { 'key': 'Puffer_Temp2', 'endpoint': '/user/var/120/10601/0/11328/0' }, + { 'key': 'Puffer_Temp3', 'endpoint': '/user/var/120/10601/0/11329/0' }, + { 'key': 'Puffer_Temp4', 'endpoint': '/user/var/120/10601/0/11330/0' }, + { 'key': 'Puffer_Temp5', 'endpoint': '/user/var/120/10601/0/11331/0' }, + { 'key': 'Innen_Temp', 'endpoint': '/user/var/120/10101/0/11237/2293' }, + { 'key': 'Innen_Temp_Soll', 'endpoint': '/user/var/120/10101/0/11237/2291' } +] + +# MQTT init +def on_connect(client, userdata, flags, rc, properties=None): + if rc != 0: + print("Connection to MQTT broker failed with rc = ", rc) + +try: + client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="eta", protocol=mqtt.MQTTv5) + client.username_pw_set(mqttuser, mqttpasswort) + client.on_connect = on_connect + client.connect(mqttBroker, mqttPort) + client.loop_start() +except: + print("MQTT connection error:", e) + sys.exit(1) + +while True: + for item in endpoints: + api_url = BASEURL + item['endpoint'] + + try: + response = requests.get(api_url, timeout=5) + response.raise_for_status() + except Exception as e: + print(f"HTTP error for {item['key']}: {e}") + continue + + content = response.text + + try: + root = ET.fromstring(content) + except ET.ParseError as e: + print(f"XML parse error for {item['key']}: {e}") + continue + + value = None + + # Each element is in the ETA namespace + for elem in root.iter(f"{{{NAMESPACE}}}value"): + if elem.attrib.get("uri") == item["endpoint"]: + value = elem.attrib.get("strValue") + break + + if value is None: + print(f"No matching value found for {item['key']}") + continue + + if printValues: + print(f"{item['key']}: {value}") + + client.publish(f"neues-haus/keller/zentralheizung/{item['key']}", value) + + time.sleep(60)