Waterkotte Wärmepumpe EcoTouch

Begonnen von dero, 09 Januar 2014, 14:42:53

Vorheriges Thema - Nächstes Thema

dero

Hi,

hat jemand eine Waterkotte Wärmepumpe mit EcoTouch (siehe auch Easy-Con Mobile)?

Ich bin gerade dabei den Service zu reverseengineeren.

Einloggen:

http://wp.fritz.box/cgi/login?username=admin&password=wtkadmin

Result:

1
#S_OK
IDALToken=9a33c8ec810346f458a5651590e89be7


Außentemperaturfühler abfragen:

http://wp.fritz.box/cgi/readTags?n=1&t1=A1

Gibt

#A1 S_OK
192 98

98 -> 9.8 °C haben wir es gerade.

Das würde ich gerne in ein "Wettermodul" bauen. Kann jemand helfen.

dero

rudolfkoenig


dero

Das Problem ist, dass man einloggen muss, d.h. es sind zwei Calls notwendig. Evtl. muss man auch Cookies speichern, es sei denn, die Pumpe authentifiziert via IP.

Phili

Hallo Der,

hattest du an dem Thema weitergearbeitet? Wir haben jetzt auch eine Waterkotte mit easycon Software. Ich suche nach einer Möglichkeit die Werte der WP in Fhem zu loggen.

Pseudex

#4
Hallo. Wir haben in unserem neuem Haus auch eine Waterkotte Wärmepumpe. Gestern habe ich es erfolgreich geschafft Werte aus dem Webserver zu lesen. Dazu nutze ich httpmod.
Hier mal mein code. Alles habe ich noch nicht ausgelesen.
Schön ist, dass man auch alle Register vom Webserver auf einmal abfragen kann. Siehe requestData



define HeizungHTTP HTTPMOD http://heizung.fritz.box/cgi/readTags 300
attr HeizungHTTP userattr disable event-on-change-reading reAuthRegex reading1Expr reading1Name reading1Regex reading2Expr reading2Name reading2Regex reading3Expr reading3Name reading3Regex reading4Expr reading4Name reading4Regex reading5Expr reading5Name reading5Regex reading[1-4]+Expr reading[1-4]Expr readingsExpr.* readingsRegex requestData requestHeader requestHeader.* requestHeader1 requestHeader2 requestHeader3 requestHeader4 sid0URL sid1IDRegex sidURL stateFormat verbose
attr HeizungHTTP alias Heizung
attr HeizungHTTP disable 0
attr HeizungHTTP event-on-change-reading Temperatur
attr HeizungHTTP group Temperatur
attr HeizungHTTP reAuthRegex .*E_NEED_LOGIN.*
attr HeizungHTTP reading1Expr $val/10
attr HeizungHTTP reading1Name Temperatur
attr HeizungHTTP reading1Regex #A1\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading2Expr $val/10
attr HeizungHTTP reading2Name Quelleneintrittstemperatur
attr HeizungHTTP reading2Regex #A4\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading3Expr $val/10
attr HeizungHTTP reading3Name Quellenaustrittstemperatur
attr HeizungHTTP reading3Regex #A5\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading4Expr $val/10
attr HeizungHTTP reading4Name Verdampfungstemperatur
attr HeizungHTTP reading4Regex #A6\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP reading5Expr $val/10
attr HeizungHTTP reading5Name Sauggastemperatur
attr HeizungHTTP reading5Regex #A7\s+S_OK\n\d+\s(-{0,1}\d+)
attr HeizungHTTP requestData n=5&t1=A1&t2=A4&t3=A5&t4=A6&t5=A7
attr HeizungHTTP requestHeader1 User-Agent: curl/7.45.0
attr HeizungHTTP requestHeader2 Accept: */*
attr HeizungHTTP requestHeader3 Cookie: IDALToken=$sid
attr HeizungHTTP sid1Data username=admin&password=wtkadmin
attr HeizungHTTP sidURL http://heizung.fritz.box/cgi/login
attr HeizungHTTP sid1IDRegex .*IDALToken=([0-9a-z]*).*
attr HeizungHTTP stateFormat Temperatur °CC


update 1: sid angepasst
update 2: regexp angepasst (das Vorzeichen wurde ignoriert. Dachte schon der Temp Sensor für außen geht nur bis 0°C runter)

\s+S_OK\n\d+\D+(\d+) -> \s+S_OK\n\d+\s(-{0,1}\d+)



hier mal ein Beispiel wie man Werte an die Heizung senden kann.

#Sollwert schreiben
attr HeizungHTTP set01Data returnValue=true&n=1&t1=I263&v1=$val
attr HeizungHTTP set01Map 0:-2,1:-1.5,2:-1,3:-0.5,4:0,5:0.5,6:1,7:1.5,8:2
attr HeizungHTTP set01Max 8
attr HeizungHTTP set01Min 0
attr HeizungHTTP set01Name setOffset_Heizen
attr HeizungHTTP set01URL http://heizung.fritz.box/cgi/writeTags

#Istwert einlesen
attr HeizungHTTP reading25Expr $val/2-2
attr HeizungHTTP reading25Name Offset_Heizen
attr HeizungHTTP reading25Regex #I263\s+S_OK\n\d+\s(-{0,1}\d+)

#Istwert auf Sollwert schreiben (zur Anzeige bei Auswahl)
attr HeizungHTTP userReadings setOffset_Heizen { ReadingsVal("HeizungHTTP","Offset_Heizen",0);;;; }

#Befehl anzeigen
attr HeizungHTTP webCmd setOffset_Heizen

Phili

Hi Pseudex,

hab mal dein Codesnippsel ausprobiert aber bei mir kommt nix an:
httpheader
HTTP/1.1 500 Internal Server Error Content-type: text/plain Content-length: 14 Connection: close Date: Wed, 25 Nov 2015 22:00:53 GMT Server: 0.4


Wenn ich den request direkt über den browser absetze bekomme ich die Werte zurück. Irgendwelche Ideen woran das liegen könnte?

Gruß
Philipp

Phili

edit:
funktioniert! Hatte die URL falsch angepasst. Super Ansatz für mich zum weitermachen und plots erstellen! :)

Viele Dank!

dero

Habe das hier:


define Heizung HTTPMOD http://192.168.178.42/cgi/readTags 300
attr Heizung userattr reAuthRegex reading1Expr reading1Name reading1Regex reading2Expr reading2Name reading2Regex reading3Expr reading3Name reading3Regex reading4Expr reading4Name reading4Regex reading5Expr reading5Name reading5Regex reading6Expr reading6Name reading6Regex requestData requestHeader1 requestHeader2 requestHeader3 sid1IDRegex sidURL stateFormat
attr Heizung reAuthRegex .*E_NEED_LOGIN.*
attr Heizung reading1Expr $val/10
attr Heizung reading1Name temp_outside
attr Heizung reading1Regex A1\s+S_OK\n\d+\D+(\d+)
attr Heizung reading2Expr $val/10
attr Heizung reading2Name temp_water
attr Heizung reading2Regex A19\s+S_OK\n\d+\D+(\d+)
attr Heizung reading3Expr ($val-4)/2
attr Heizung reading3Name temp_adjust
attr Heizung reading3Regex I263\s+S_OK\n\d+\D+(\d+)
attr Heizung reading4Expr $val/10
attr Heizung reading4Name temp_heating_set
attr Heizung reading4Regex A31\s+S_OK\n\d+\D+(\d+)
attr Heizung reading5Expr $val/10
attr Heizung reading5Name temp_return
attr Heizung reading5Regex A10\s+S_OK\n\d+\D+(\d+)
attr Heizung reading6Expr $val
attr Heizung reading6Name alarm
attr Heizung reading6Regex I52\s+S_OK\n\d+\D+(\d+)
attr Heizung requestData n=6&t1=A1&t2=A19&t3=I263&t4=A31&t5=A10&t6=I52
attr Heizung requestHeader1 User-Agent: curl/7.45.0
attr Heizung requestHeader2 Accept: */*
attr Heizung requestHeader3 Cookie: IDALToken=$sid
attr Heizung sid1IDRegex .*IDALToken=([0-9a-z]*).*
attr Heizung sidURL http://192.168.178.42/cgi/login?username=admin&password=wtkadmin
attr Heizung stateFormat {sprintf("Außentemperatur %.1f °C, Temperaturanpassung %.1f K", ReadingsVal($name,"temp_outside",0), ReadingsVal($name,"temp_adjust",0))}


und bekomme leider folgende Fehlermeldung:


2015.11.26 20:47:55 5: Heizung: HandleSendQueue called, qlen = 2
2015.11.26 20:47:55 4: Heizung: HandleSendQueue sends request type Auth1 to URL http://192.168.178.42/cgi/login?username=admin&password=wtkadmin, data , header , timeout 2
2015.11.26 20:47:55 4: HttpUtils url=http://192.168.178.42/cgi/login?username=admin&password=wtkadmin
2015.11.26 20:47:55 4: http://192.168.178.42/cgi/login?username=admin&password=wtkadmin: HTTP response code 400
2015.11.26 20:47:55 4: HttpUtils http://192.168.178.42/cgi/login?username=admin&password=wtkadmin: Got data, length: 190
2015.11.26 20:47:55 5: Heizung: Read Callback: Request type was Auth1,
header: HTTP/1.1 400 Bad Request
Content-type: text/html
Connection: close
Date: Thu, 26 Nov 2015 19:47:56 GMT
Server: 0.4,
buffer: <HTML><HEAD><TITLE>Error 400</TITLE></HEAD><BODY><H1>Error 400</H1><P>Bad Request</P><p><HR>IDAL - HTTP daemon. Based on ABYSS Web Server ver.0.4 © 2000 Moez Mahfoudh.</p></BODY></HTML>
2015.11.26 20:47:55 5: Heizung: Read could not match buffer to IDRegex .*IDALToken=([0-9a-z]*).*
2015.11.26 20:47:56 5: Heizung: HandleSendQueue called, qlen = 1
2015.11.26 20:47:56 4: Heizung: HandleSendQueue sends request type Update to URL http://192.168.178.42/cgi/readTags, data n=6&t1=A1&t2=A19&t3=I263&t4=A31&t5=A10&t6=I52, header User-Agent: curl/7.45.0
Accept: */*
Cookie: IDALToken=$sid, timeout 2
2015.11.26 20:47:56 4: HttpUtils url=http://192.168.178.42/cgi/readTags
2015.11.26 20:47:56 4: http://192.168.178.42/cgi/readTags: HTTP response code 500
2015.11.26 20:47:56 4: HttpUtils http://192.168.178.42/cgi/readTags: Got data, length: 14
2015.11.26 20:47:56 5: Heizung: Read Callback: Request type was Update,
header: HTTP/1.1 500 Internal Server Error
Content-type: text/plain
Content-length: 14
Connection: close
Date: Thu, 26 Nov 2015 19:47:57 GMT
Server: 0.4,
buffer: #E_NEED_LOGIN


Also quasi Fehler 400 bei Authentikation.

Habt Ihr eine Idee?

dero

Pseudex

#8
Hmm. Das hatte ich noch nicht beim login. Du kannst mal versuchen username und Passwort als data zu senden.
Dann natürlich noch die sidurl anpassen

attr HeizungHTTP sid1Data username=admin&password=wtkadmin
attr HeizungHTTP sidURL http://heizung.fritz.box/cgi/login


edit: 10:20

gerade habe ich deinen code mal eingefügt und ich bekomme werte aus der Heizung.
Im browser kannst du die login url ausführen oder?

edit:

nun geht die Methode direkt über die URL die params zu schicken auch bei mir nicht mehr.
Habe es dann auf sid1Data umgebaut und ich kann wieder Daten lesen.
Da wurde wohl im HTTPMod was geändert. Seitdem ich gestern ein fhem update gemacht habe, geht es nicht mehr!
http://heizung.fritz.box/cgi/login?username=admin&password=wtkadmin
Es kann auch dran liegen, dass deinem Heizungs-Webserver der Header nicht gefällt.

Phili

#9
Bei mir war es das gleiche, nach einem fhem update vorgestern ging das "direkte" auslesen nicht mehr. Mit der Variante sid1data geht es wieder. Danke für den Tipp!

Was mir noch auffällt: Heute Nacht waren es außen unter 0°C, jedoch werden die Werte als positiv dargestellt. Hat das was mit dem regex zu tun? Im Browser zeigt es korrekt -33 an.

Philipp

dero

Ja, es ging auch VOR dem Update einmal kurz. Ich nehme auch mal an, etwas in HTTPMOD wurde geändert!

Danke!

dero

#11
Minuszeichen:

Statt \d nehmen wir [-\d]


A1\s+S_OK\n\d+\s([-\d]+)


Ich habe übrigens das # vor A weggelassen, da FHEM das irgendwie nicht im Web-Interface darstellen konnte...

Phili

Danke dero.

Bei mir sieht das ganze jetzt so aus. Plane jetzt noch irgendwie darzustellen wann die Außeneinheit mit Verdichter läuft.

Philipp

dero

Nen Push+EMail wenn der Alarm kommt wäre nett. Hatte schonmal einen stillen Ausfall der WP, wo die dann fast eine Woche auf Heizstab lief... $$$$$$

Warte immernoch auf eine Entschädigung von Waterkotte...

Pseudex

das mit der Push Mail ist schon möglich.
Ich nutze zum Beispiel Pushbullet um Nachrichten auf mein Telefon zu senden. Habe aber die Fehler von der Heizung noch nicht ausgelesen.
Für Waschmaschine und Spülmaschine habe ich meldungen gemacht, wenn die fertig sind.

Aber um das mit dem Heizstab zu vermeiden hat uns der Elektriker empfohlen, die Sicherung am Heizstab aus zu schalten.
Wenn dann ein Problem mit der WP ist, wird es erstmal nur kalt.