Initial commit
This commit is contained in:
commit
d5027f05f3
1 changed files with 106 additions and 0 deletions
106
get_data.py
Executable file
106
get_data.py
Executable file
|
|
@ -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 <value> 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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue