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