ETA Pelletkessel PC25 auslesen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Liebe Community,

der nächste größere Schritt steht bei mir an: Ich möchte die Heizungsanlage (Eta PC25) einbinden.
Nun habe ich ein paar ältere Beiträge gefunden, die schienen sich aber alle auf OH2 und Textuell erstellte Things/Channels zu beziehen.

Wie fange ich denn am besten mit OH3 bei so etwas an?
Ich habe eine Beschreibung von ETA der sog "Restful Webservices". So wie ich das verstehe, ist das ein http-Request, welcher mir Quasi Zugriff auf die Struktur als CAN-Adressen (oder etwas, das ähnlich ausschaut) gibt. Die Antwort scheint xml zu sein.
https://www.meineta.at/javax.faces.reso ... efault&v=0

Nun habe ich mit der Art API noch so gut wie keine Erfahrung und mit OH3 erst recht nicht.

Wie ist denn das Vorgehen? Gibt es ein Tutorial, dass mir den richtigen weg weisst? Wenn ich nur detaillierte Fragen finde, blicke ich nicht durch, weil da einige Zusammenhänge ja allen schon klar sind.

Nun dachte ich, ich teste das mal (Webservices sind natürlich aktiviert) und nehme ReqBin zum probieren. http://192.168.178.xxx:8080/user/menu HTTP/1.1 , als MEthode wähle ich get. Das bekomme ich zurück:

Code: Alles auswählen

HTTP/1.1 404 Not Found
cache-control: no-cache
content-length: 150
content-type: application/xml;charset=UTF-8
date: Tue, 07 Jun 2022 17:06:59 GMT

<?xml version="1.0" encoding="utf-8"?>
<eta version="1.0" xmlns="http://www.eta.co.at/rest/v1">
  <error>No such application or domain</error>
</eta>
Scheitere also schon am grundlegendsten.
Versuche ich Werte direkt aufzurufen (ein paar Pfade als Beispiele findet man im Netz), kommt folgende Antwort:

Code: Alles auswählen

<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
<error>Invalid permission</error>
</eta>
Liest vl jemand mit, der das mit einer ETA-Anlage schon mal gemacht hat?
Könnt ihr mir allgemein Infos zum vorgehen geben?

LG und Danke
Jens

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ETA Pelletkessel PC25 auslesen

Beitrag von udo1toni »

Dieses HTTP/1.1 gehört da nicht hin, das ist ein Hinweis darauf, dass der Zugriff über HTTP/1.1 laufen soll.

Die Fehlermelung passt auch dazu, 404 not found.


Grundsätzlich: Wenn Du einen Thread zum Thema gefunden hast, der das in Textform konfiguriert, können wir und daran langhangeln und die passende Konfiguration für OH3 leicht erstellen, man muss das Rad nicht jedes Mal neu erfinden...

Größter Unterschied OH2 <-> OH3 dürfte hier sein, dass es unter OH2 gar kein V2-http-Binding gab, sprich, man musste die http Aufrufe direkt im Item anlegen. Jetzt muss das über ein Thing und Channel geschehen, und da gibt es tatsächlich große Unterschiede, aber nichts, was man nicht aus der alten Doku herleiten könnte.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

Re: ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Ja, kaum lässt man es weg, kommt die Baumstruktur auch zurück.

Aus der Struktur mal den Wert "Vorrat" gesucht, URL sieht dann folgendermaßen aus:
http://192.168.178.148:8080/user/var/40/10201/0/0/12015

Rückgabe:

Code: Alles auswählen

<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
<value uri="/user/var/40/10201/0/0/12015" strValue="490" unit="kg" decPlaces="0" scaleFactor="10" advTextOffset="0">4895</value>
</eta>
Rückgabe Kesseldruck schaut so aus:

Code: Alles auswählen

<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
<value uri="/user/var/40/10021/0/0/12180" strValue="1,71" unit="bar" decPlaces="2" scaleFactor="100" advTextOffset="0">171</value>
</eta>

Ich such morgen nochmal die Threads und infos zusammen, die sich mit diesen Anlagen schon befasst haben.

LG und Danke

Jens

Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

Re: ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Der Kollege hier scheint einiges weiter zu sein:
viewtopic.php?t=6246

Und hier wohl auch, aber alles textual erledigt.
https://knx-user-forum.de/forum/support ... g-eta-pc25

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ETA Pelletkessel PC25 auslesen

Beitrag von udo1toni »

Ah. Nein, das ist ein Missverständnis :)

Es handelt sich bei beiden Threads um openHAB3. Nur ist es sehr unpraktisch, die Konfiguration über Screenshots hochzuladen. Innerhalb des Thing gibt es eine Code-Ansicht. Diese wurde in den Threads verwendet, um zu zeigen, was konfiguriert wurde. Hat man einen Channel angelegt, kann das Thing auch über die Code Ansicht konfiguriert werden, man könnte also ein generic http Thing anlegen und anschließend einfach den Code dort einfügen (aber es wäre schon gut, wenn man verstanden hat, wie das alles funktioniert...)

Noch ein Tipp: Schau doch bitte mal, was passiert, wenn Du http://192.168.178.148:8080/user/var/ abfragst. Kommt ein großes xml-File zurück, in dem alle Werte enthalten sind? Dann kannst Du Dir viel Arbeit sparen...

Du legst dann einfach einen String Channel an, der dieses xml Dokument lädt.
Anschließend kannst Du mit XPATH die einzelnen Werte komfortabel den einzelnen Items zuordnen. Der String Channel übernimmt dabei die Rolle eines Caches. Vorteil: Du fragst das System nur einmal ab, bekommst aber alle Werte geliefert. Du minimierst damit also den Netzwerkverkehr.

XPATH muss installiert werden. Es handelt sich um die XPATH Transformation (aber wenn Du in den Addons nach XPATH suchst, bist Du im Zweifel schneller...)

Es gibt grundsätzlich zwei Stellen, an denen man XPATH verwenden kann, um direkt Items mit diskreten Werten zu füllen. Entweder, man macht das direkt im Channel (dann kann man aber nur einen XPATH angeben), oder man erledigt das innerhalb des Links zwischen Channel und Item, da gibt es die Sektion Profile. Wenn XPATH installiert ist, taucht unmittelbar im Profile-Bereich auch eine Option für XPATH auf.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

Re: ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Hi und danke dir schonmal für den weiteren Input.

/user/var ist leider ungültig. Unter http://192.168.178.148:8080/user/menu spuckt es mir einen Ellenlangen Katalog mit den CAN-Adressen raus. Ausschnitt:

Code: Alles auswählen

<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
<menu>
<fub uri="/120/10221" name="Solar">
<object uri="/120/10221/0/0/10990" name="Eingänge">
<object uri="/120/10221/0/11139/0" name="Kollektor">
<object uri="/120/10221/0/11139/2002" name="Zustand"/>
<object uri="/120/10221/0/11139/2011" name="Sensor Typ"/>
<object uri="/120/10221/0/11139/2049" name="Kalibrierwert"/>
<object uri="/120/10221/0/11139/2054" name="Fixwert"/>
</object>
<object uri="/120/10221/0/0/12781" name="Speicher 1 unten">
<object uri="/120/10221/0/0/12770" name="Priorität"/>
</object>
<object uri="/120/10221/0/0/12782" name="Speicher 2">
<object uri="/120/10221/0/0/12778" name="Priorität"/>
</object>
<object uri="/120/10221/0/0/12783" name="Speicher 3">
<object uri="/120/10221/0/0/12779" name="Priorität"/>
</object>
</object>
<object uri="/120/10221/0/0/10991" name="Ausgänge">
<object uri="/120/10221/0/11142/0" name="Kollektorpumpe">
<object uri="/120/10221/0/11142/2001" name="Anforderung"/>
<object uri="/120/10221/0/11142/2130" name="Ausgang"/>
<object uri="/120/10221/0/11142/2002" name="Zustand"/>
<object uri="/120/10221/0/11142/2133" name="Drehzahlsteuerung"/>
</object>
</object>
<object uri="/120/10221/0/0/19408" name="Solaranlage">
<object uri="/120/10221/0/0/19391" name="Ergänzung"/>
<object uri="/120/10221/0/0/12275" name="Kollektor">
<object uri="/120/10221/0/0/12187" name="Kollektor Min"/>
<object uri="/120/10221/0/0/12188" name="Kollektor Max"/>
<object uri="/120/10221/0/0/12189" name="Warnung Nacht"/>
<object uri="/120/10221/0/0/12197" name="Außentemperatur"/>
</object>
<object uri="/120/10221/0/0/12641" name="Startfunktion">
<object uri="/120/10221/0/0/12642" name="Beginn"/>
<object uri="/120/10221/0/0/12643" name="Ende"/>
<object uri="/120/10221/0/0/12131" name="Frostschutz"/>
<object uri="/120/10221/0/0/12040" name="Laufzeit"/>
<object uri="/120/10221/0/0/12644" name="Zykluszeit"/>
</object>
<object uri="/120/10221/0/0/12278" name="Kollektorpumpe">
<object uri="/120/10221/0/0/12275" name="Kollektor"/>
<object uri="/120/10221/0/0/12781" name="Speicher 1 unten"/>
<object uri="/120/10221/0/0/12186" name="Soll Differenz Kollektor"/>
<object uri="/120/10221/0/0/12227" name="Mindest Drehzahl"/>
<object uri="/120/10221/0/0/12133" name="Einschaltdifferenz"/>
<object uri="/120/10221/0/0/12141" name="Ausschaltdifferenz"/>
</object>
</object>
</fub>
<fub uri="/120/10601" name="PufferFlex">
<object uri="/120/10601/0/0/10990" name="Eingänge">
<object uri="/120/10601/0/11327/0" name="Fühler 1 (oben)">
<object uri="/120/10601/0/11327/2002" name="Zustand"/>
<object uri="/120/10601/0/11327/2011" name="Sensor Typ"/>
<object uri="/120/10601/0/11327/2049" name="Kalibrierwert"/>
<object uri="/120/10601/0/11327/2054" name="Fixwert"/>
</object>
<object uri="/120/10601/0/11328/0" name="Fühler 2">
<object uri="/120/10601/0/11328/2002" name="Zustand"/>
<object uri="/120/10601/0/11328/2011" name="Sensor Typ"/>
<object uri="/120/10601/0/11328/2049" name="Kalibrierwert"/>
<object uri="/120/10601/0/11328/2054" name="Fixwert"/>
</object>
<object uri="/120/10601/0/11329/0" name="Fühler 3">
<object uri="/120/10601/0/11329/2002" name="Zustand"/>
<object uri="/120/10601/0/11329/2011" name="Sensor Typ"/>
<object uri="/120/10601/0/11329/2049" name="Kalibrierwert"/>
<object uri="/120/10601/0/11329/2054" name="Fixwert"/>
</object>
<object uri="/120/10601/0/11330/0" name="Fühler 4">
<object uri="/120/10601/0/11330/2002" name="Zustand"/>
<object uri="/120/10601/0/11330/2011" name="Sensor Typ"/>
<object uri="/120/10601/0/11330/2049" name="Kalibrierwert"/>
<object uri="/120/10601/0/11330/2054" name="Fixwert"/>
</object>
<object uri="/120/10601/0/0/12197" name="Außentemperatur"/>
</object>
<object uri="/120/10601/0/0/12421" name="Einstellungen">
<object uri="/120/10601/0/0/13520" name="Gesamtvolumen"/>
<object uri="/120/10601/0/0/12520" name="Rücklauf der Verbraucher"/>
<object uri="/120/10601/0/0/12932" name="Laden mit Erzeuger">
<object uri="/120/10601/0/0/13535" name="Einschaltdifferenz"/>
</object>
<object uri="/120/10601/0/0/12667" name="Laden mit anderen Verbrauchern">
<object uri="/120/10601/0/0/13535" name="Einschaltdifferenz"/>
</object>
<object uri="/120/10601/0/0/13195" name="Puffer min"/>
<object uri="/120/10601/0/0/13225" name="Puffer aus"/>
<object uri="/120/10601/0/0/13298" name="Temperaturwarnung 1">
<object uri="/120/10601/0/0/13296" name="Warnung unter"/>
<object uri="/120/10601/0/0/13548" name="Warnung über"/>
<object uri="/120/10601/0/0/13166" name="Dauer bis Warnung"/>
</object>
<object uri="/120/10601/0/0/13550" name="Temperaturwarnung 2">
<object uri="/120/10601/0/0/13546" name="Warnung unter"/>
<object uri="/120/10601/0/0/13549" name="Warnung über"/>
<object uri="/120/10601/0/0/13551" name="Dauer bis Warnung"/>
</object>
</object>
<object uri="/120/10601/0/0/19403" name="Puffer">
<object uri="/120/10601/0/0/19391" name="Ergänzung"/>
<object uri="/120/10601/0/0/12528" name="Ladezustand"/>
<object uri="/120/10601/0/0/12942" name="Erzeuger Kessel/Puffer">
<object uri="/120/10601/0/0/13191" name="Puffer oben"/>
<object uri="/120/10601/0/0/13192" name="Puffer unten"/>
<object uri="/120/10601/0/0/12077" name="Angeforderte Leistung"/>
<object uri="/120/10601/0/0/13195" name="Puffer min"/>
<object uri="/120/10601/0/0/13225" name="Puffer aus"/>
<object uri="/120/10601/0/0/13446" name="Starten nach zusätzlichen Kriterien">
<object uri="/120/10601/0/0/13447" name="Starten nach Leistung">
<object uri="/120/10601/0/0/13448" name="Leistung über"/>
<object uri="/120/10601/0/0/13961" name="Hysterese unter Aus-Temperaturen"/>
</object>
<object uri="/120/10601/0/0/13026" name="Extra laden">
<object uri="/120/10601/0/0/13010" name="Zeitprogramm aktivieren?">
<object uri="/120/10601/0/0/13029" name="Startzeitpunkt"/>
<object uri="/120/10601/0/0/14230" name="Laden unter Außentemperatur"/>
</object>
<object uri="/120/10601/0/0/13025" name="Sofort laden"/>
<object uri="/120/10601/0/0/13537" name="Puffer min Extra laden"/>
<object uri="/120/10601/0/0/13538" name="Puffer aus Extra laden"/>
<object uri="/120/10601/0/0/13541" name="Leistung Min"/>
</object>
</object>
<object uri="/120/10601/0/0/12576" name="Restwärme Differenz"/>
<object uri="/120/10601/0/0/13194" name="Puffer oben Soll">
<object uri="/120/10601/0/0/12325" name="Hysterese"/>
<object uri="/120/10601/0/0/13482" name="Soll-Abweichung für maximale Leistung"/>
</object>
<object uri="/120/10601/0/0/12109" name="Anforderungsdifferenz"/>
<object uri="/120/10601/0/0/12100" name="Freigabe Temperatur"/>
<object uri="/120/10601/0/0/12213" name="Freigabe Differenz"/>
<object uri="/120/10601/12130/0/0" name="Ladezeiten">
<object uri="/120/10601/12130/0/1109" name="Schaltzustand"/>
<object uri="/120/10601/12130/0/1110" name="Temperatur"/>
<object uri="/120/10601/12130/0/1081" name="Montag">
<object uri="/120/10601/12130/0/1111" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1082" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1083" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1084" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12130/0/1085" name="Dienstag">
<object uri="/120/10601/12130/0/1112" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1086" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1087" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1088" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12130/0/1089" name="Mittwoch">
<object uri="/120/10601/12130/0/1113" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1090" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1091" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1092" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12130/0/1093" name="Donnerstag">
<object uri="/120/10601/12130/0/1114" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1094" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1095" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1096" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12130/0/1097" name="Freitag">
<object uri="/120/10601/12130/0/1115" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1098" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1099" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1100" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12130/0/1101" name="Samstag">
<object uri="/120/10601/12130/0/1116" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1102" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1103" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1104" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12130/0/1105" name="Sonntag">
<object uri="/120/10601/12130/0/1117" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12130/0/1106" name="Zeitfenster 1"/>
<object uri="/120/10601/12130/0/1107" name="Zeitfenster 2"/>
<object uri="/120/10601/12130/0/1108" name="Zeitfenster 3"/>
</object>
</object>
<object uri="/120/10601/0/0/13524" name="Kaskadeneinstellungen">
<object uri="/120/10601/0/0/12148" name="Umschalten ab"/>
<object uri="/120/10601/0/0/13455" name="Einschaltschwelle"/>
<object uri="/120/10601/0/0/13005" name="Ausschaltschwelle"/>
</object>
<object uri="/120/10601/0/0/13196" name="Leistungsregelung">
<object uri="/120/10601/0/0/12499" name="Effektives Puffervolumen"/>
<object uri="/120/10601/0/0/12519" name="Angestrebte Ladedauer"/>
<object uri="/120/10601/0/0/12520" name="Rücklauf der Verbraucher"/>
<object uri="/120/10601/12507/0/0" name="Ladezustand Soll">
<object uri="/120/10601/12507/0/1050" name="Lin x"/>
<object uri="/120/10601/12507/0/1051" name="Lin x1"/>
<object uri="/120/10601/12507/0/1052" name="Lin y1"/>
<object uri="/120/10601/12507/0/1053" name="Lin x2"/>
<object uri="/120/10601/12507/0/1054" name="Lin y2"/>
<object uri="/120/10601/12507/0/1056" name="Extrapol"/>
<object uri="/120/10601/12507/0/1055" name="Lin y"/>
</object>
</object>
</object>
<object uri="/120/10601/0/0/12949" name="Erzeuger Solar">
<object uri="/120/10601/0/0/13012" name="Ladestrategie Solar"/>
<object uri="/120/10601/0/0/13933" name="Puffer oben"/>
<object uri="/120/10601/0/0/12407" name="Puffer oben min Solar"/>
<object uri="/120/10601/0/0/12408" name="Puffer Soll Solar"/>
<object uri="/120/10601/0/0/13260" name="Priorität Oben"/>
<object uri="/120/10601/0/0/13011" name="Solar Vorlauf oben"/>
<object uri="/120/10601/0/0/13934" name="Puffer mitte"/>
<object uri="/120/10601/0/0/13935" name="Puffer unten"/>
<object uri="/120/10601/0/0/13261" name="Priorität Unten"/>
<object uri="/120/10601/0/0/12101" name="Solar Vorlauf"/>
<object uri="/120/10601/0/0/13014" name="Puffer max"/>
<object uri="/120/10601/0/0/12427" name="Solarvorrang">
<object uri="/120/10601/0/0/12428" name="Solarvorrang"/>
<object uri="/120/10601/0/0/12429" name="Beginn Solarvorrang"/>
<object uri="/120/10601/0/0/12430" name="Solarvorrang ändern ab"/>
<object uri="/120/10601/0/0/12431" name="Ende Solarvorrang"/>
<object uri="/120/10601/0/0/12432" name="Min. Außentemp. Solarvorrang"/>
</object>
</object>
<object uri="/120/10601/0/0/13504" name="Verbraucherniveaus">
<object uri="/120/10601/0/0/13145" name="Verbraucher 1 (oben)">
<object uri="/120/10601/0/0/13144" name="Puffer oben"/>
<object uri="/120/10601/0/0/13250" name="Puffer aus"/>
<object uri="/120/10601/0/0/13221" name="Anforderung"/>
<object uri="/120/10601/0/0/13222" name="angeforderte Temperatur"/>
<object uri="/120/10601/0/0/13188" name="Solar Überschuss">
<object uri="/120/10601/0/0/13199" name="ab Außentemperatur"/>
<object uri="/120/10601/0/0/13224" name="ab Puffertemperatur"/>
<object uri="/120/10601/0/0/13544" name="Hysterese"/>
</object>
</object>
<object uri="/120/10601/0/0/13223" name="Verbraucher 2">
<object uri="/120/10601/0/0/13201" name="Puffer oben"/>
<object uri="/120/10601/0/0/13251" name="Puffer aus"/>
<object uri="/120/10601/0/0/13202" name="Anforderung"/>
<object uri="/120/10601/0/0/13203" name="angeforderte Temperatur"/>
<object uri="/120/10601/0/0/12653" name="Solar Überschuss">
<object uri="/120/10601/0/0/12680" name="ab Außentemperatur"/>
<object uri="/120/10601/0/0/13358" name="ab Puffertemperatur"/>
<object uri="/120/10601/0/0/13543" name="Hysterese"/>
</object>
</object>
</object>
<object uri="/120/10601/0/0/12952" name="Warmwasserbereich">
<object uri="/120/10601/0/0/13434" name="Warmwasser"/>
<object uri="/120/10601/0/0/13932" name="Warmwasser Aus Fühler"/>
<object uri="/120/10601/0/0/12293" name="Soll Temperatur"/>
<object uri="/120/10601/0/0/14257" name="Solltemperatur für 'Sofort laden'"/>
<object uri="/120/10601/0/0/12133" name="Einschaltdifferenz"/>
<object uri="/120/10601/0/0/13355" name="Leistung für Warmwasserbereitung"/>
<object uri="/120/10601/0/0/12134" name="Warmwasser sofort laden"/>
<object uri="/120/10601/12235/0/0" name="Ladezeiten">
<object uri="/120/10601/12235/0/1109" name="Schaltzustand"/>
<object uri="/120/10601/12235/0/1110" name="Temperatur"/>
<object uri="/120/10601/12235/0/1081" name="Montag">
<object uri="/120/10601/12235/0/1111" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1082" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1083" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1084" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12235/0/1085" name="Dienstag">
<object uri="/120/10601/12235/0/1112" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1086" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1087" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1088" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12235/0/1089" name="Mittwoch">
<object uri="/120/10601/12235/0/1113" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1090" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1091" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1092" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12235/0/1093" name="Donnerstag">
<object uri="/120/10601/12235/0/1114" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1094" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1095" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1096" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12235/0/1097" name="Freitag">
<object uri="/120/10601/12235/0/1115" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1098" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1099" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1100" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12235/0/1101" name="Samstag">
<object uri="/120/10601/12235/0/1116" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1102" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1103" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1104" name="Zeitfenster 3"/>
</object>
<object uri="/120/10601/12235/0/1105" name="Sonntag">
<object uri="/120/10601/12235/0/1117" name="Wert außerhalb der Zeitfenster"/>
<object uri="/120/10601/12235/0/1106" name="Zeitfenster 1"/>
<object uri="/120/10601/12235/0/1107" name="Zeitfenster 2"/>
<object uri="/120/10601/12235/0/1108" name="Zeitfenster 3"/>
</object>
</object>
</object>
</object>
<object uri="/120/10601/0/0/12182" name="Sonstiges">
<object uri="/120/10601/0/0/12208" name="Puffer"/>
</object>
</fub>
<fub uri="/120/10101" name="HK">
<object uri="/120/10101/0/0/12476" name="Heizkreistyp"/>
<object uri="/120/10101/0/0/10990" name="Eingänge">
<object uri="/120/10101/0/11060/0" name="Vorlauf">
<object uri="/120/10101/0/11060/2002" name="Zustand"/>
<object uri="/120/10101/0/11060/2011" name="Sensor Typ"/>
<object uri="/120/10101/0/11060/2049" name="Kalibrierwert"/>
<object uri="/120/10101/0/11060/2054" name="Fixwert"/>
</object>
<object uri="/120/10101/0/0/12197" name="Außentemperatur"/>
</object>
aber eben leider nur die Struktur, keine Werte. Xpath werd ich mal noch installieren und mich morgen mal weiter dran wagen.

Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

Re: ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Okay, ich habe mir mein Thing jetzt mal zusammengebaut und versuche den Wert "Außentemperatur" zu bekommen.

Aufruf per Hand:

Code: Alles auswählen

http://192.168.178.148:8080/user/var/120/10221/0/0/12197
Ergebnis:

Code: Alles auswählen

<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
<value uri="/user/var/120/10221/0/0/12197" strValue="16,9" unit="°C" decPlaces="1" scaleFactor="10" advTextOffset="0">169</value>
</eta>
Mein Thing (per UI definiert) schaut derzeit so aus:

Code: Alles auswählen

UID: http:url:a6c1151ee3
label: ETA PC 25
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.148:8080
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  timeout: 3000
  bufferSize: 2048
location: Heizraum Keller
channels:
  - id: ETA_Temp_Aussen_Str
    channelTypeUID: http:number
    label: ETA Temperatur Außen
    description: ""
    configuration:
      mode: READONLY
      commandExtension: user/var/120/10221/0/0/12197
Aus dem anderen Thread habe ich den Ausdruck für XPATH gesehen:

Code: Alles auswählen

<?xml version="1.0"?>
<xsl:stylesheet 
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:eta="http://www.eta.co.at/rest/v1"
	version="1.0">
	<xsl:output indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="yes" />
	<xsl:template match="/">
		<xsl:value-of select="//eta:value div //eta:value/@scaleFactor" />
	</xsl:template>
</xsl:stylesheet>
mal abgesehen davon, dass ich die Syntax nicht völlig nachvollziehen kann, verstehe ich das so:
XSL scheint eine Art Regel zum Interpretieren von XML-Daten zu sein.
In dieses Script werden die beiden Werte value und Scalefactor übergeben, die durcheinander dividiert den Wert darstellen.

Das ganze soll wohl in ein "tranfsormationsfile" (hier im Beispiel eta_numeric.xsl) gespeichert werden.


Wie kommt nun die Verknüpfung zustande? Ich trage im item bei State Transformation einfach den Namen des Scriptes ein?
Wo liegt das Script, und wie kommt es dort hin? Wird das irgendwie aus dem User Interface heraus erzeugt, oder lege ich das über die shell an?

ICh glaube mittlerweile, dass ich schon halbwegs weit durchgestiegen bin und mir nur noch ein/zwei Zusammenhänge fehlen.

LG
Jens

Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

Re: ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Ich habe die Transformationsdatei jetzt unter %OPENHAB%/tranfsorm unter dem Namen eta_numeric.xsl angelegt (Inhalt siehe oben rein kopiert).

Code des Things:

Code: Alles auswählen

UID: http:url:a6c1151ee3
label: ETA PC 25
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://192.168.178.148:8080
  delay: 0
  stateMethod: GET
  refresh: 30
  commandMethod: GET
  timeout: 3000
  bufferSize: 2048
location: Heizraum Keller
channels:
  - id: ETA_Temp_Aussen
    channelTypeUID: http:number
    label: ETA Temperatur Außen
    description: null
    configuration:
      mode: READONLY
      commandExtension: user/var/120/10221/0/0/12197
      stateTransformation: XSLT:eta_numeric.xsl
      
Aus dem Channel hab ich mir dann das Item erstellt. Leider bleibt es bei NULL.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: ETA Pelletkessel PC25 auslesen

Beitrag von udo1toni »

Der XPATH zum Wert heißt in diesem Fall eta/value/text()
Etwas anders formatiert:

Code: Alles auswählen

\/ eta
<eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
    <value            uri="/user/var/120/10221/0/0/12197"
     /\          strValue="16,9" 
    value            unit="°C" 
                decPlaces="1" 
              scaleFactor="10" 
            advTextOffset="0">169</value>
</eta>                        /\
                            der angezeigte Text (Wert, um scaleFactor multipliziert
Du könntest auch auf strValue zugreifen, allerdings steht da ein Komma drin, womit openHAB nichts anfangen kann. Den Faktor musst Du natürlich auch berücksichtigen. holst Du strValue, musst Du den Wert als String speichern und anschließend in einer Rule das Komma mit einem Punkt ersetzen. Vielleicht kann man auch etwas im Profile tricksen, muss man mal sehen.

Die von Dir eingefügte Datei gehört zur XLT Transformation, die könnte man auch bemühen. Das Problem ist aber, dass Du dann für jeden Wert eine einzelne Datei schreiben müsstest, und die Datei ist ja nun nicht wirklich schlank.

Probiere bitte mal, ob die uri http://192.168.178.148:8080/user/var/120 vielleicht ein größeres Dokument ausspuckt. Es kann doch nicht sein, dass das Gerät nur jeweils eine Information pro Request herausrückt...
Oder wie wäre es mit http://192.168.178.148:8080/user/var/120/10221 bzw. http://192.168.178.148:8080/user/var/120/10601 oder auch http://192.168.178.148:8080/user/var/120/10101? Diese URIs sind im Katalog gelistet, für Solar, PufferFlex und HK, da sollte man sie auch aufrufen können.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Jensemann_P
Beiträge: 149
Registriert: 26. Jul 2021 20:14

Re: ETA Pelletkessel PC25 auslesen

Beitrag von Jensemann_P »

Du könntest auch auf strValue zugreifen, allerdings steht da ein Komma drin, womit openHAB nichts anfangen kann. Den Faktor musst Du natürlich auch berücksichtigen. holst Du strValue, musst Du den Wert als String speichern und anschließend in einer Rule das Komma mit einem Punkt ersetzen. Vielleicht kann man auch etwas im Profile tricksen, muss man mal sehen.
Könnte ich, aber ich denke numerische Werte sind da etwas praktischer zum weiterverarbeiten, anstatt dann später nochmal rum zu rechnen.
Die von Dir eingefügte Datei gehört zur XLT Transformation, die könnte man auch bemühen. Das Problem ist aber, dass Du dann für jeden Wert eine einzelne Datei schreiben müsstest, und die Datei ist ja nun nicht wirklich schlank.
Wieso müsste es für jeden Channel eine eigene Datei sein? In allen Implementierungen, die ich bisher dazu fand ist es so, dass Speicherwert/Scalefaktor = Messwert sind. Das sollte ja Global für alle mit der gleichen Konvertierung machbar sein. Die Syntax der Werte, die mir ETA zurück gibt ist immer gleich.
Probiere bitte mal, ob die uri http://192.168.178.148:8080/user/var/120 vielleicht ein größeres Dokument ausspuckt. Es kann doch nicht sein, dass das Gerät nur jeweils eine Information pro Request herausrückt...
Oder wie wäre es mit http://192.168.178.148:8080/user/var/120/10221 bzw. http://192.168.178.148:8080/user/var/120/10601 oder auch http://192.168.178.148:8080/user/var/120/10101? Diese URIs sind im Katalog gelistet, für Solar, PufferFlex und HK, da sollte man sie auch aufrufen können.
Leider nein :(
Habe bisher zu den ETA-Kesseln auch nur Varianten gefunden, wo jeder Wert einzeln geholt wird. Finde auch in der Doku nichts zu einem kompletten Abruf.

Antworten