Tidone / homeassistant_eta_integration

Integration of ETA (Heating) sensors and switches to home assistant
MIT License
20 stars 1 forks source link

eta_integration working with V1 API - output of /user/menu #1

Closed parkflyer closed 9 months ago

parkflyer commented 10 months ago

As requested here the result of a /user/menu call on a ETA V1 API device (sorry, indentation got lost):

<eta version="1.0">
<menu>
<fub uri="/40/10021" name="Kessel">
<object uri="/40/10021/0/0/12010" name="Zählerstände">
<object uri="/40/10021/0/0/12153" name="Volllaststunden"/>
<object uri="/40/10021/0/0/12016" name="Gesamtverbrauch"/>
<object uri="/40/10021/0/0/12014" name="Verbrauch seit Wartung"/>
<object uri="/40/10021/0/0/12011" name="Inhalt Pelletsbehälter"/>
<object uri="/40/10021/0/0/12012" name="Verbrauch seit Entaschung"/>
<object uri="/40/10021/0/0/12013" name="Verbrauch seit Aschebox leeren"/>
</object>
<object uri="/40/10021/0/0/12000" name="Kessel">
<object uri="/40/10021/0/0/12421" name="Einstellungen"/>
<object uri="/40/10021/0/0/12180" name="Kesseldruck"/>
<object uri="/40/10021/0/0/12161" name="Kessel">
<object uri="/40/10021/0/0/12001" name="Kessel Soll"/>
<object uri="/40/10021/0/0/12317" name="Kaskade"/>
</object>
<object uri="/40/10021/0/0/12241" name="Vorlauf">
<object uri="/40/10021/0/11128/0" name="Umschaltventil">
<object uri="/40/10021/0/11128/2001" name="Anforderung"/>
</object>
<object uri="/40/10021/0/11123/0" name="Kesselpumpe">
<object uri="/40/10021/0/11123/2001" name="Anforderung"/>
<object uri="/40/10021/0/11123/2130" name="Ausgang"/>
</object>
</object>
<object uri="/40/10021/0/0/12999" name="Rücklaufmischer"/>
<object uri="/40/10021/0/0/12162" name="Abgas">
<object uri="/40/10021/0/0/13266" name="Emissionsmessung">
<object uri="/40/10021/0/0/12116" name="Art der Messung"/>
<object uri="/40/10021/0/0/13267" name="Beginn der Messung"/>
<object uri="/40/10021/0/0/13268" name="Verriegelungsdauer"/>
<object uri="/40/10021/0/0/13269" name="Jetzt starten"/>
<object uri="/40/10021/0/0/13277" name="Messung deaktivieren"/>
</object>
</object>
<object uri="/40/10021/0/0/12165" name="Abgasgebläse"/>
<object uri="/40/10021/0/0/12164" name="Restsauerstoff"/>
<object uri="/40/10021/0/0/12050" name="Entaschung">
<object uri="/40/10021/0/0/12248" name="Beginn Ruhezeit"/>
<object uri="/40/10021/0/0/12249" name="Dauer Ruhezeit"/>
<object uri="/40/10021/0/0/12012" name="Verbrauch seit Entaschung"/>
<object uri="/40/10021/0/0/12013" name="Verbrauch seit Aschebox leeren"/>
<object uri="/40/10021/0/0/12120" name="Aschebox leeren nach"/>
<object uri="/40/10021/0/0/12014" name="Verbrauch seit Wartung"/>
</object>
<object uri="/40/10021/0/0/12005" name="Pelletsbehälter">
<object uri="/40/10021/0/0/12071" name="Pelletsbehälter auffüllen"/>
<object uri="/40/10021/0/0/12011" name="Inhalt Pelletsbehälter"/>
<object uri="/40/10021/0/0/12152" name="Saugzeitpunkt"/>
<object uri="/40/10021/0/11042/0" name="Saugturbine">
<object uri="/40/10021/0/11042/2001" name="Anforderung"/>
</object>
</object>
</object>
<object uri="/40/10021/0/0/12182" name="Sonstiges">
<object uri="/40/10021/0/0/12080" name="Ein/Aus Taste"/>
<object uri="/40/10021/0/0/12112" name="Entaschentaste"/>
<object uri="/40/10021/0/0/12152" name="Saugzeitpunkt"/>
</object>
</fub>
<fub uri="/40/10201" name="Lager">
<object uri="/40/10201/0/0/12058" name="Austragung"/>
<object uri="/40/10201/0/0/12015" name="Vorrat"/>
<object uri="/40/10201/0/0/12042" name="Vorrat Warngrenze"/>
</fub>
<fub uri="/40/10241" name="Sys">
<object uri="/40/10241/0/0/10990" name="Eingänge">
<object uri="/40/10241/0/0/12197" name="Außentemperatur"/>
</object>
<object uri="/40/10241/0/0/12256" name="System">
<object uri="/40/10241/0/0/12197" name="Außentemperatur"/>
</object>
</fub>
<fub uri="/120/10111" name="Warmwasser">
<object uri="/120/10111/0/0/12129" name="Warmwasserspeicher">
<object uri="/120/10111/12130/0/0" name="Ladezeiten">
<object uri="/120/10111/12130/0/1109" name="Schaltzustand"/>
<object uri="/120/10111/12130/0/1110" name="Temperatur"/>
<object uri="/120/10111/12130/0/1081" name="Montag">
<object uri="/120/10111/12130/0/1111" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1082" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1083" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1084" name="Zeitfenster 3"/>
</object>
<object uri="/120/10111/12130/0/1085" name="Dienstag">
<object uri="/120/10111/12130/0/1112" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1086" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1087" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1088" name="Zeitfenster 3"/>
</object>
<object uri="/120/10111/12130/0/1089" name="Mittwoch">
<object uri="/120/10111/12130/0/1113" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1090" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1091" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1092" name="Zeitfenster 3"/>
</object>
<object uri="/120/10111/12130/0/1093" name="Donnerstag">
<object uri="/120/10111/12130/0/1114" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1094" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1095" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1096" name="Zeitfenster 3"/>
</object>
<object uri="/120/10111/12130/0/1097" name="Freitag">
<object uri="/120/10111/12130/0/1115" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1098" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1099" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1100" name="Zeitfenster 3"/>
</object>
<object uri="/120/10111/12130/0/1101" name="Samstag">
<object uri="/120/10111/12130/0/1116" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1102" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1103" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1104" name="Zeitfenster 3"/>
</object>
<object uri="/120/10111/12130/0/1105" name="Sonntag">
<object uri="/120/10111/12130/0/1117" name="Absenktemperatur"/>
<object uri="/120/10111/12130/0/1106" name="Zeitfenster 1"/>
<object uri="/120/10111/12130/0/1107" name="Zeitfenster 2"/>
<object uri="/120/10111/12130/0/1108" name="Zeitfenster 3"/>
</object>
</object>
<object uri="/120/10111/0/0/12133" name="Einschaltdifferenz"/>
<object uri="/120/10111/0/0/12132" name="Warmwasserspeicher Soll"/>
<object uri="/120/10111/0/0/12271" name="Warmwasserspeicher"/>
<object uri="/120/10111/0/0/12652" name="Solar abschöpfen"/>
</object>
<object uri="/120/10111/0/0/12182" name="Sonstiges">
<object uri="/120/10111/0/0/12134" name="Laden Taste"/>
</object>
</fub>
<fub uri="/120/10251" name="PU">
<object uri="/120/10251/0/0/12207" name="Puffer">
<object uri="/120/10251/0/0/12242" name="Puffer oben">
<object uri="/120/10251/12130/0/0" name="Ladezeiten">
<object uri="/120/10251/12130/0/1109" name="Schaltzustand"/>
<object uri="/120/10251/12130/0/1110" name="Temperatur"/>
<object uri="/120/10251/12130/0/1081" name="Montag">
<object uri="/120/10251/12130/0/1111" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1082" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1083" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1084" name="Zeitfenster 3"/>
</object>
<object uri="/120/10251/12130/0/1085" name="Dienstag">
<object uri="/120/10251/12130/0/1112" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1086" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1087" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1088" name="Zeitfenster 3"/>
</object>
<object uri="/120/10251/12130/0/1089" name="Mittwoch">
<object uri="/120/10251/12130/0/1113" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1090" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1091" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1092" name="Zeitfenster 3"/>
</object>
<object uri="/120/10251/12130/0/1093" name="Donnerstag">
<object uri="/120/10251/12130/0/1114" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1094" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1095" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1096" name="Zeitfenster 3"/>
</object>
<object uri="/120/10251/12130/0/1097" name="Freitag">
<object uri="/120/10251/12130/0/1115" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1098" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1099" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1100" name="Zeitfenster 3"/>
</object>
<object uri="/120/10251/12130/0/1101" name="Samstag">
<object uri="/120/10251/12130/0/1116" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1102" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1103" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1104" name="Zeitfenster 3"/>
</object>
<object uri="/120/10251/12130/0/1105" name="Sonntag">
<object uri="/120/10251/12130/0/1117" name="Absenktemperatur"/>
<object uri="/120/10251/12130/0/1106" name="Zeitfenster 1"/>
<object uri="/120/10251/12130/0/1107" name="Zeitfenster 2"/>
<object uri="/120/10251/12130/0/1108" name="Zeitfenster 3"/>
</object>
</object>
<object uri="/120/10251/0/0/12211" name="Puffer oben Min"/>
<object uri="/120/10251/0/0/12209" name="Puffer Soll"/>
<object uri="/120/10251/0/0/12667" name="Laden mit anderen Verbrauchern">
<object uri="/120/10251/0/0/13535" name="Einschaltdifferenz"/>
</object>
<object uri="/120/10251/0/0/12932" name="Laden mit Erzeuger">
<object uri="/120/10251/0/0/13535" name="Einschaltdifferenz"/>
</object>
</object>
<object uri="/120/10251/0/0/12244" name="Puffer unten">
<object uri="/120/10251/0/0/12212" name="Puffer unten Aus"/>
</object>
<object uri="/120/10251/0/0/12533" name="geforderte Leistung"/>
<object uri="/120/10251/0/0/12317" name="Kaskade"/>
<object uri="/120/10251/0/0/12270" name="Freigabe Brenner">
<object uri="/120/10251/0/0/12524" name="Brenner starten unter"/>
</object>
<object uri="/120/10251/0/0/12652" name="Solar abschöpfen">
<object uri="/120/10251/0/0/12683" name="Aktivieren ?"/>
<object uri="/120/10251/0/0/12645" name="...bis Puffer Max"/>
</object>
</object>
<object uri="/120/10251/0/0/12182" name="Sonstiges"/>
</fub>
<fub uri="/120/10101" name="HK1">
<object uri="/120/10101/0/0/12090" name="Heizkreis">
<object uri="/120/10101/0/0/12092" name="Betrieb"/>
<object uri="/120/10101/12113/0/0" name="Heizzeiten">
<object uri="/120/10101/12113/0/1109" name="Schaltzustand"/>
<object uri="/120/10101/12113/0/1110" name="Temperatur"/>
<object uri="/120/10101/12113/0/1081" name="Montag">
<object uri="/120/10101/12113/0/1111" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1082" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1083" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1084" name="Zeitfenster 3"/>
</object>
<object uri="/120/10101/12113/0/1085" name="Dienstag">
<object uri="/120/10101/12113/0/1112" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1086" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1087" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1088" name="Zeitfenster 3"/>
</object>
<object uri="/120/10101/12113/0/1089" name="Mittwoch">
<object uri="/120/10101/12113/0/1113" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1090" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1091" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1092" name="Zeitfenster 3"/>
</object>
<object uri="/120/10101/12113/0/1093" name="Donnerstag">
<object uri="/120/10101/12113/0/1114" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1094" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1095" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1096" name="Zeitfenster 3"/>
</object>
<object uri="/120/10101/12113/0/1097" name="Freitag">
<object uri="/120/10101/12113/0/1115" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1098" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1099" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1100" name="Zeitfenster 3"/>
</object>
<object uri="/120/10101/12113/0/1101" name="Samstag">
<object uri="/120/10101/12113/0/1116" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1102" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1103" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1104" name="Zeitfenster 3"/>
</object>
<object uri="/120/10101/12113/0/1105" name="Sonntag">
<object uri="/120/10101/12113/0/1117" name="Absenktemperatur"/>
<object uri="/120/10101/12113/0/1106" name="Zeitfenster 1"/>
<object uri="/120/10101/12113/0/1107" name="Zeitfenster 2"/>
<object uri="/120/10101/12113/0/1108" name="Zeitfenster 3"/>
</object>
</object>
<object uri="/120/10101/0/0/12634" name="Raum">
<object uri="/120/10101/0/0/12127" name="Raum Soll"/>
</object>
<object uri="/120/10101/0/0/12241" name="Vorlauf"/>
<object uri="/120/10101/0/0/12111" name="Heizkurve">
<object uri="/120/10101/0/0/12104" name="Vorlauf bei -10°C"/>
<object uri="/120/10101/0/0/12103" name="Vorlauf bei +10°C"/>
<object uri="/120/10101/0/0/12107" name="Vorlauf Absenkung"/>
</object>
<object uri="/120/10101/12095/0/0" name="Außentemperatur verzögert">
<object uri="/120/10101/12095/0/1071" name="Lag x"/>
<object uri="/120/10101/12095/0/1072" name="Lag Tf"/>
<object uri="/120/10101/12095/0/1073" name="Lag y"/>
</object>
<object uri="/120/10101/0/0/12096" name="Heizgrenze Tag"/>
<object uri="/120/10101/0/0/12097" name="Heizgrenze Nacht"/>
<object uri="/120/10101/0/0/12100" name="Freigabe Temperatur"/>
<object uri="/120/10101/0/0/12215" name="Freigabe Temperatur"/>
<object uri="/120/10101/0/11124/0" name="Heizkreispumpe">
<object uri="/120/10101/0/11124/2001" name="Anforderung"/>
</object>
<object uri="/120/10101/0/0/12652" name="Solar abschöpfen"/>
</object>
<object uri="/120/10101/0/0/12182" name="Sonstiges">
<object uri="/120/10101/0/0/12125" name="Tag Taste"/>
<object uri="/120/10101/0/0/12126" name="Auto Taste"/>
<object uri="/120/10101/0/0/12230" name="Nacht Taste"/>
<object uri="/120/10101/0/0/12080" name="Ein/Aus Taste"/>
<object uri="/120/10101/0/0/12218" name="Kommen Taste"/>
<object uri="/120/10101/0/0/12231" name="Gehen Taste"/>
<object uri="/120/10101/0/0/12232" name="Urlaub Beginn"/>
<object uri="/120/10101/0/0/12239" name="Urlaub Ende"/>
</object>
</fub>
</menu>
</eta>
Tidone commented 10 months ago

Thanks!

As I thought, all on/off switches end in 12080. If you call user/var/40/10021/0/0/12080, you can see the current state of the Kessel. It should be 1802 for Aus and 1803 for Ein.

I can use that to filter switches on API v1.1 without having to call the varinfo endpoint.

parkflyer commented 10 months ago

Querying of /user/var/40/10021/0/0/12080 leads to:

<eta version="1.0">
<value uri="/user/var/40/10021/0/0/12080" strValue="Ein" unit="" decPlaces="0" scaleFactor="1" advTextOffset="1802">1803</value>
</eta>

According to /user/menu this is <object uri="/40/10021/0/0/12080" name="Ein/Aus Taste"/> and returns "Ein" or "Aus", depending on the state of the On/Off switch.

Querying of /user/var/40/10021/0/0/12000 delivers

<eta version="1.0">
<value uri="/user/var/40/10021/0/0/12000" strValue="Glutabbrand" unit="" decPlaces="0" scaleFactor="1" advTextOffset="2000">2007</value>
</eta>

which is what I'm mainly looking for.

Tidone commented 10 months ago

I just updated the integration to also work on API v1.1. Some sensors may not be found correctly, but the ones that are shown in the configuration dialog should work without any problems,

Please test the integration and respond if there are any problems.

greentux commented 10 months ago

Thats what the " advTextOffset="1802" " is for. If You substract this value, You get a 0/1! I will test ist these days.

regards

parkflyer commented 10 months ago

Thank you very much, Tidone - works like a charm (so far)!

greentux commented 10 months ago

Works fine. Thanks! But any chance to integrate "/user/errors" (see API)? For me its one of the most interesting item. Pushing this message to a mobile is very nice ( aka "Aschebox jetzt entleeren" or "Zündung fehlgeschlagen"). For me the global /user/errors would be ok, I dont need the messages on node level /user/error/112 and so on...

Tidone commented 10 months ago

@parkflyer Nice, thanks for letting me know!

@greentux I already read the /user/errors endpoint and put every message in a list, but I only use it to set the binary state sensor, i.e. if there is at least one message in the list, the Error sensor is set. I looked through the possible HA entities, but I couldn't find anything which would let me print all messages. If you have an idea how to show all messages in the list in HA, please let me know!

I could add a sensor which shows the total number of error messages, and a second sensor which prints the most recent error message, if there is more than one.

greentux commented 10 months ago

I think that would be a good solution. One binary (error on/off) and and sensor with message(s). Most recent or all, your choice.

Tidone commented 9 months ago

@greentux I updated the integration to include some error sensors and events:

Also, I implemented the automatic device registration feature of HA. Now all sensors are grouped under a single device.

greentux commented 9 months ago

Cool, thanks!

Tidone commented 9 months ago

I will close this issue as both features (V1 API & Error events) have now been implemented.

Please open a new issue if you encounter a bug, or have some feature suggestions.