Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizung ETA PC25

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Codebeispiel] Heizung ETA PC25

    Hallo zusammen,

    ich habe vor einiger Zeit mit openHab angefangen und möchte meine Erfahrungen im Zusammenhang mit meiner Heizung mit euch teilen. Bei der Heizung handelt es sich um eine ETA PC25, welche sich (nach Freischaltung) direkt über einen WebService ansteuern lässt. Zwar lassen sich bereits sehr viele Informationen über das TouchPanel der Heizung abfragen, aber die Historie, Temperaturkurven und Auswertemöglichkeiten fehlen völlig.

    Die Aussagen treffen wahrscheinlich auch auf andere Modelle des Herstellers ETA zu (PC 20, PC 25, PC30, ggf. auch PU7, PU11 und PU15 ?).


    Der WebService lässt sich über http://[Heizungs-IP]:8080/ erreichen. Über http://[Heizungs-IP]:8080/user/menu ist ein Menü erreichbar, wo sämtliche Verfügbaren Werte inklusive der CAN-Adresse aufgelistet werden. Das sieht z.B. wie folgt aus:


    Über die CAN-Adresse lassen sich dann die Werte abfragen, z.B. von der aktuellen Außentemperatur:


    Die Werte sind meist genauer als in der Oberfläche der Heizung abfragbar. Angezeigt wird der Wert 26kg, der "richtige" Wert ist allerdings 255 geteilt durch das Attribut scaleFactor.

    In OpenHab lässt sich das Ganze relativ simpel über das HTTP-Binding mit einem einfachen XSL-Transformationsscript einbinden.
    XSLT:
    Code:
    <?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>

    In der jeweiligen Items-Datei sieht die Einbindung dann wie folgt aus. Abgefragt werden in dem Beispiel die aktuelle Temperatur des Außenfühlers sowie der Pellet-Vorrat im Kessel. Das Ganze wird dann entsprechend persistiert und entsprechende Charts erzeugt. Hierdurch kann man z.B. relativ den Verbrauch gegen die Außentemperatur stellen etc.

    Code:
    Number Eta_Temp				"Temperatur ETA [%.1f °C]" <temperature> (Eta) { http="<[http://192.168.179.11:8080/user/var/40/10241/0/0/12197:600000:XSLT(eta_numeric.xsl)]" }
    Number Eta_Vorrat_Kessel	"Vorrat Kessel [%.1f KG]" <fire> (Eta) { http="<[http://192.168.179.11:8080/user/var/40/10021/0/0/12011:600000:XSLT(eta_numeric.xsl)]" }
    Auch das setzen von Werten ist über den WebService möglich. Ich habe das noch nicht gemacht, laut Dokumentation des WebService sollte das allerdings kein Problem sein. Die API des WebService kann über die WebSite des Herstellers runtergaladen werden.

    Ich hoffe, dass dies jemandem bei der Einbindung seiner eigenen Heizung weiterhilft.

    Viele Grüße,
    Sapl
    Angehängte Dateien

    #2
    Super, hat bei mir auf Anhieb funktioniert. Danke für die Doku
    Vorlauftemperaturen usw. kann man aber hier nicht an die Heizung senden, oder? Nur auslesen?

    Kommentar


      #3
      Hallo,
      ich würde auch gern ein paar Parameter von meiner Eta PU 15 abfragen. Kann man das Script auch mit Openhab3 verwenden? Und wenn ja, wie wird das eingebunden?
      Viele Grüße Eberhard

      Kommentar


        #4
        Moin zusammen,
        das mit OH3 würde mich auch interessieren. Einbindung per Thing, Channel und Item als string funktioniert, aber wenn ich es als Number haben möchte, funktioniert es einfach nicht. Hab es schon mit XPATH und mit deiner XSLT-Transformation versucht, aber leider bis jetzt nur NULL oder UNDEF als Ergebnis.
        Gruß, rif

        Kommentar


          #5
          Zeig doch mal Deine Konfiguration...

          Kommentar


            #6
            Moin,
            sehr gerne, hier der Code vom Thing (geht um einen ETA Scheitholzkessel):
            Code:
            UID: http:url:68c311904c
            label: ETA SH20 Kessel
            thingTypeUID: http:url
            configuration:
            authMode: BASIC
            ignoreSSLErrors: false
            baseURL: http://192.168.170.84:8080
            delay: 0
            stateMethod: GET
            refresh: 10
            commandMethod: GET
            timeout: 3000
            bufferSize: 2048
            location: Heizungsraum
            channels:
            - id: Heizung_Pufferzustand
            channelTypeUID: http:string
            label: Pufferzustand
            description: ""
            configuration:
            mode: READONLY
            stateExtension: /user/var/120/10601/0/0/12528
            - id: Heizung_Pufferzustand_Numeber
            channelTypeUID: http:number
            label: Pufferzustand_Nr
            description: ""
            configuration:
            mode: READONLY
            stateExtension: /user/var/120/10601/0/0/12528
            Dann kann ich nur noch Screenshots hochladen.
            xml.png -> xml-Antwort des Kessels beim Aufrufen der Seite
            thing.png -> thing-config
            channel-string.png -> channel-config als string
            channel-string-string-png -> item-config als string -> funktioniert, nur leider nicht als Zahl
            channel-string-number.xslt.png -> versuch, den funktionierenden string im channel als Zahl ins item zu bekommen mit der hier genannten Umwandlung -> kein Erfolg
            channel-number-png -> channel-config als number
            channel-number-number-xslt1.png -> item-config als number mit xslt-transformation -> kein Erfolg
            channel-number-number-xslt2.png -> item-config als number mit xslt-transformation andere Schreibweise, da ich mir da nicht sicher bin -> kein Erfolg

            Dazu habe ich natürlich die Transformation Services installiert und das Transformationsscript im Ordner transform abgelegt.

            Vielen Dank schon einmal im Voraus. Hänge schon seit längerem an dem Problem und komme nicht wirklich weiter und finde auch zu der Umwandlung leider nicht wirklich etwas im Netz, was mir da bisher weitergeholfen hätte.
            Gruß, rif
            Angehängte Dateien

            Kommentar


              #7
              Warum als Screenshot? Text kann man eigentlich immer per Zwischenablage kopieren und als Text einfügen...

              Grundsätzlich: die baseURL kann beliebg lang sein. Du könntest also auch als baseURL http://192.168.170.84:8080/user/var/120/10601/0/0/12528 angeben.

              Der XPath für den Wert sollte eigentlich /eta/value lauten. Aber Du musst auch noch auf etwas anderes aufpassen. Du trägst nämlich die transformation in der Verbindung zwischen Channel und Item ein. Ein Number Channel kann ausschließlich Zahlen halten, womit hier kein xml gespeichert sein kann. wenn, musst Du also entweder den String Channel mit XPath nutzen, oder aber die Transformation schon vor dem Speichern in den Channel vornehmen. Dazu gibt es die stateTransformation, in die Du dann entsprechend XPATH:/eta/value einträgst. Dann sollte im Number Channel der Wert 814 landen.

              Kommentar


                #8
                Moin,
                Punkt1: wenn du mir zeigst, wie ich bei OpenHab 3 von den Items (über die UI angelegt, nicht filebasiert) den Code anzeige, dann kopiere ich den gerne rein (so, wie ich es beim Thing mit den Channels ja auch gemacht habe). Ich habe dafür aber leider keinen Punkt gefunden, so dass ich dann die Screenshots gemacht habe.

                Punkt 2: Ich weiß, dass ich die baseURL schon komplett füllen könnte, aber ich halte es an der Stelle noch generell, da die Datenpunkte dann über die Channels kommen. So habe ich ein Thing, welches seine kompletten Daten hält.

                Punkt 3: VIELEN DANK! Die Erklärung hat mir bisher gefehlt. Jetzt habe ich die XSLT Transformation per obigem Script in den Channel geholt und schon funktioniert es mit der Number.

                Also nochmals besten Dank für die Lösung.

                Gruß
                rif

                Kommentar


                  #9
                  Immer gerne

                  Noch mal zur URL... Man kann natürlich die URL auch an beliebiger Stelle aufteilen, also z.B. nach var/, falls danach die ersten Unterschiede zwischen den einzelnen Datenpunkten auftreten...

                  Was die Items betrifft, so hast Du natürlich Recht, dass es keinen einfachen Weg gibt, diese Daten als Text zu ziehen (geht aber über die REST API...) mir ging es allerdings um das xml

                  Kommentar


                    #10
                    Hallo udo1toni,
                    vielen Dank für deine ausführlichen Erklärungen. Aber ich habe es anscheinend immernoch nicht verstanden.
                    Ich habe einen Pelletskessel PU15, dieses Jahr eingebaut.
                    Ich habe ein Thing namens "Heizung" erstellt. Dort habe ich ein Number Channel eingerichtet und in state Transformation dein "XPATH:/eta/value" eingetragen. Anschließend habe ich ein Link erstellt mit XSLT und "XSLT(eta_numeric.xls)". Aber die Anzeige des Items lautet "Null".
                    Hier der Code:
                    Code:
                    UID: http:url:e080336b24
                    label: Heizung
                    thingTypeUID: http:url
                    configuration:
                    authMode: BASIC
                    ignoreSSLErrors: false
                    baseURL: 192.168.178.86:8080/usr/var
                    delay: 0
                    stateMethod: GET
                    refresh: 30
                    commandMethod: GET
                    timeout: 3000
                    bufferSize: 2048
                    location: Heizung
                    channels:
                    - id: aussen
                    channelTypeUID: http:number
                    label: aussen
                    description: ""
                    configuration:
                    mode: READONLY
                    stateExtension: /120/10101/0/0/12197
                    stateTransformation: XPATH:/eta/value
                    Vielen Dank für deine Mühe

                    Kommentar


                      #11
                      Punkt 1: Hast Du die XPATH Transformation installiert?
                      Punkt 2: Bei der baseURL musst Du zwingend http:// mit angeben (schließlich könntest Du genauso auch https:// verwenden)
                      Punkt 3:Wie lautet die exakte Antwort, wenn Du im Browser die Adresse http://192.168.178.86:8080/usr/var/120/10101/0/0/12197 aufrufst?

                      Kommentar


                        #12
                        Guten Morgen,
                        es ist schon erschreckend, was man alles falsch machen kann.
                        Bevor ich gestern geschrieben habe, habe ich auch schon festgestellt, dass die XPATH Transformation noch nicht installiert war.
                        Heute habe ich das http:// ergänzt. Und ich habe noch einen Buchstabendreher in eta_numeric.xsl beseitigt. Diese Datei habe ich in "/etc/openhab/transform/" platziert. Da bin ich mir auch unsicher, ob das der richtige Platz ist (für openHAB3).
                        Die Antwort von oben genannter Adresse lautet:
                        Code:
                        <eta xmlns="http://www.eta.co.at/rest/v1" version="1.0">
                        <value uri="/user/var/120/10101/0/0/12197" strValue="6,5" unit="°C" decPlaces="1" scaleFactor="10" advTextOffset="0">65</value>
                        </eta>
                        Leider wird mir immer noch "NULL" angezeigt.

                        Kommentar


                          #13
                          Die xsl-Datei brauchst Du meines Wissens nicht. Trage bitte mal XPATH:number(/eta/value) als stateTransformation ein. Es sollte der Wert 65 zurückgeliefert werden.

                          Kommentar


                            #14
                            In meiner grenzenlosen Einfalt war ich der Meinung, dass die xsl-Datei die Daten aus der xml-Rückgabe extrahiert und eine eine Zahl draus macht.
                            Ich habe deinen Vorschlag jedenfalls befolgt und habe mal einen Number channel und einen string channel mit dem dazugehörigen Item (sowohl als Standard, als auch mit XSLT Transformation) angelegt. Die Ausgabe ist immer "NULL".
                            Code:
                            UID: http:url:e080336b24
                            label: Heizung
                            thingTypeUID: http:url
                            configuration:
                            authMode: BASIC
                            ignoreSSLErrors: false
                            baseURL: http://192.168.178.86:8080/usr/var
                            delay: 0
                            stateMethod: GET
                            refresh: 30
                            commandMethod: GET
                            timeout: 3000
                            bufferSize: 2048
                            location: Heizung
                            channels:
                            - id: aussen
                            channelTypeUID: http:number
                            label: aussen
                            description: ""
                            configuration:
                            mode: READONLY
                            stateExtension: /120/10101/0/0/12197
                            stateTransformation: XPATH:number(/eta/value)
                            - id: aussen1
                            channelTypeUID: http:string
                            label: aussen1
                            description: ""
                            configuration:
                            mode: READONLY
                            stateExtension: /120/10101/0/0/12197
                            stateTransformation: XPATH:number(/eta/value)
                            Ich bin darüber ziemlich unglücklich, aber ich freue mich darüber jemanden mein Leid klagen zu können und der mir im Idealfall helfen kann.

                            P.S. Mit der MQTT-Einbindung (inkl. JSON) hatte ich zwar auch meine Probleme, bin aber nicht so sehr stecken geblieben, wie hier.

                            Kommentar


                              #15
                              Geteiltes Leid ist halbes Leid...

                              Vielleicht zuerst noch mal einen schritt zurück. Channel auf string ändern und die gesamte stateTransformation raus nehmen. Natürlich muss ein verlinktes Item nun auch vom Typ String sein. Aber wir können sehen, ob das Binding überhaupt korrekt Daten ausliest.

                              Kommentar

                              Lädt...
                              X