tado.com in FHEM integrieren (Problem HTTPMOD)

Begonnen von linuxq, 19 März 2014, 12:17:33

Vorheriges Thema - Nächstes Thema

linuxq

Hallo,

ich nutze eine Heizungssteuerung von tado.com. Diese würde ich gerne teilweise in FHEM integrieren. Ich nutze seit gestern erst FHEM und nun suche ich Infos/Howtos, wie ich dies mit FHEM umsetzen kann. Zumindest mal:

-Ist-Temperatur anzeigen, loggen und im Chart darstellen
-Heizung ein-/ausschalten

Zur Info: Ich habe eine "Homebrew" Tado-App für BB10 in Arbeit und kann per HTTPRequest in JS z.B. die Temperaturen, Sollwerte, Status der Steuerung (HOME, AWAY,... HEAT,COOLDOWN,...) abfragen / ändern und bekomme die Antwort als JSON zurück. Auch Heizung an/abschalten oder Sollwerte ändern ist mit meiner App kein Problem. Alles als HTTPREQUESTs. In JS für meine BB10-App läuft das wunderbar.

Ich muß z.B. für den Sollwert einen Request raussenden:

"https://tado.url/mobile/1.3/apiBefehl"

und erhalte ein JSON zurück, welches Isttemperatur, Solltemperatur etc. enthält. Wie kann ich das mit FHEM umsetzen? Gibt es da Tutorials?


rudolfkoenig

Es gibt ein HTTPMOD Modul, mit etwas Glueck kann man es einfach verwenden.
Ansonsten wuerde ich dieses Modul kopieren und anpassen.

linuxq

Hmm, ich bekomme es nicht hin. Die Response sieht so aus:
{"success":true,"operation":"HOME","operationTrigger":"SYSTEM","insideTemp":21.88,"setPointTemp":20.5,"controlPhase":"STEADY","boxConnected":true,"gwConnected":true,"tsConnected":true,"currentUserPrivacyEnabled":false,"currentUserGeoStale":false,"deviceUpdating":false,"homeId":0815}

Und ich habe es so versucht:
################### Tado ###########################
define tadoCS HTTPMOD https://dierichtige.url?username=0815_fritz&password=loginhashcode 60
attr tadoCS requestHeader1 Content-Type: application/json
attr tadoCS requestHeader2 Accept: */*

attr tadoCS readingsName2 insideTemp
attr tadoCS readingsName3 setPointTemp
attr tadoCS readingsRegex2 insideTemp":([\d\.]+)
attr tadoCS readingsRegex3 setPointTemp":([\d\.]+)
attr tadoCS stateFormat {sprintf(ReadingsVal($name,"insideTemp",0))}
attr tadoCS userReadings VLRL {sprintf("%u %u", ReadingsVal($name, "insideTemp",0))}
define FileLog_Heizraum FileLog ./log/Heizraum-%Y%m%d.log tadoCD:VLRL:.*
attr FileLog_Heizraum nrarchive 1
attr FileLog_Heizraum room Heizraum


Aber im Log sehe ich nur:
ZitatHTTPMOD: Response didn't match Reading(s) insideTemp, setPointTemp

Wo ist mein Fehler? Sorry, sind meine ersten "Gehversuche" mit FHEM :(

rudolfkoenig

Ich sehe erstmal keinen Fehler, allerdings habe ich mit HTTPMOD auch keine Erfahrung. Ich habe die Diskussion nach Sonstiges verschoben, da laut MAINTAINER.txt der HTTPMOD Autor hier die Meldungen haben moechte.

Steht diese Response so in fhem log? Siehe mit attr tadoCS verbose 5

linuxq

OK, kann ich irgendwie die komplette Antwort mitloggen?

Gesendet von meinem Z10 mit Tapatalk


linuxq

Ok, mit Verbose 5 sehe ich, daß die Antwort leer ist.

2014.03.19 22:29:05 4: HTTPMOD: GetUpdate called, hash = HASH(0x1be4460), name = tadoCS
2014.03.19 22:29:06 5: HTTPMOD: Callback called: Hash: HASH(0x1be4460), Name: tadoCS, buffer:

2014.03.19 22:29:06 5: HTTPMOD: Trying to extract Reading insideTemp with regex /insideTemp":([\d\.]+)/...
2014.03.19 22:29:06 5: HTTPMOD: Trying to extract Reading setPointTemp with regex /setPointTemp":([\d\.]+)/...
2014.03.19 22:29:06 3: HTTPMOD: Response didn't match Reading(s) insideTemp, setPointTemp
2014.03.19 22:29:06 4: HTTPMOD: response was


Wenn ich nun die JSON in eine Datei auf meinem Server lege und diese dann abfrage, stimmen die Werte! Also liegt es am Aufruf von:

define tadoCS HTTPMOD https://dierichtige.url?username=0815_fritz&password=loginhashcode 60

Mit wget abgerufen oder in per Browser, kommen die richtigen JSON-Daten. Was könnte mein Fehler sein?

rudolfkoenig

Kannst du bitte in 98_HTTPMOD.pm vor der Zeile mit HttpUtils_NonblockingGet folgendes einfuegen:
$hash->{noshutdown} = 1;
und danach FHEM neustarten und testen?

linuxq

Super, Danke! Das hat geholfen! Nun muß ich noch ein Tutorial zu speichern und Diagrammdarstellung suchen.

Noch eine Frage: Wie kann ich einen Switch erstellen, der je nach Stellung eine andere URL aufruft?

Das wäre die simpelste Methode, um die Heizung am Tadoserver in den Manuellen oder Automatischen Betrieb zu nehmen.  Ich muß mich mal in FHEM einarbeiten. Die Möglichkeiten scheinen endlos :)

rudolfkoenig

Diese Zeile sollte von HTTPMOD Autor entweder fest oder optional per Attribut eingebaut werden.
Unterschiedliche URL's kann man mit zwei HTTPMODs bauen.

Speichern: Siehe FileLog/DbLog
Diagramm: In FileLog auf Create SVG Plot klicken.
Siehe auch http://forum.fhem.de/index.php/topic,11275.msg75594.html#msg75594


linuxq

Danke, das Diagramm habe ich vorhin hinbekommen , nachdem ich die HowTos gelesen habe. :D

Noch eine andere Frage. Durch den Befehl:
attr tado_temp stateFormat {sprintf("Ist: %.2f°C,   Soll: %.2f°C", ReadingsVal($name,"temperature",0), ReadingsVal($name,"setPointTemp",0))}

Bekomme ich die 2 Werte (ich will noch mehrere umsetzen) in einer Zeile dargestellt:

"tado_temp  Ist: 21.02°C, Soll: 20.00°C"

Wie kann ich die Werte als eine Liste darstellen? So ähnlich:

Temperatur Wohnzimmer:  20.05°C
Solltemperatur:         20.50°C
Status:       HOME
Regelung:  AUFHEIZEN

Und wie setze ich die als Elemente, die auch in der Android-App "andFHEM" darstellbar sind?

rudolfkoenig

Liste: readingsGroup. andFHEM: keine Ahnung.

michaelfhem

Hallo zusammen,

hat sich hier noch was getan. Ich wäre an einer Möglichkeit interessiert die SollTemperatur meiner Buderus GB142 von fhem zu steuern und ein paar Messwerte zu lesen. Ist tado dafür als manuelles Gateway geeignet? Es gibt ja auch noch Selfmade Lösungen ( http://ems-gateway.myds.me/dokuwiki/doku.php?id=start) die allerdings schon einiges an technischen Knnowhow erfordern.

Grüße Michi
raspberry Pi 3 + jessie + fhem
Devices: Fritz Dect 200, Homematic (HMLan-Gateway), FS20 (CUL-Stick), Hue-Gateay, Sonos

disaster123

Hi  linuxq,

bist du weiter gekommen? Hast du die Tado URLs via Proxy gesniffed? Offiziell stehe die ja nirgendwo.

Grüße Stefan

linuxq

Hallo,

ich habe nicht weiter gemacht. Das werde ich in der Heizperiode wieder versuchen. Ich habe my.tado.com in Chrome aufgerufen und dann den WebInspektor von Chrome genommen, um den Traffic nach zu verfolgen ;)

Momentaner Stand ist folgender:

################### Tado ###########################
define tado_temp HTTPMOD https://my.tado.com/mobile/1.3/getCurrentState?username=801_meinname&password=meinpassworthash 600
attr tado_temp readingsName1 tempist
attr tado_temp readingsName2 tempsoll
attr tado_temp readingsName3 operation
attr tado_temp readingsName4 controlPhase
attr tado_temp readingsRegex1 insideTemp":([\d\.]+)
attr tado_temp readingsRegex2 setPointTemp":([\d\.]+)
attr tado_temp readingsRegex3 operation":"([\w\.]+)
attr tado_temp readingsRegex4 controlPhase":"([\w\.]+)
attr tado_temp requestHeader1 Content-Type: application/json
attr tado_temp requestHeader2 Accept: */*

define FileLog_Tado FileLog ./log/Tado-%Y.log tado_temp
attr FileLog_Tado logtype temptado4:Plot,text
attr FileLog_Tado nrarchive 1

define tado_tempchart SVG FileLog_Tado:temptado4:CURRENT
attr tado_tempchart group tado_graph
attr tado_tempchart label "Temperatur Wohnzimmer: Min: $data{min1}°C, Max: $data{max1}°C, Aktuell: $data{currval1}°C"
attr tado_tempchart room Heizung

define tado_status readingsGroup tado_temp:tempist, tado_temp:operation, tado_temp:controlPhase, tado_temp:tempsoll, Wetter:temperature
attr tado_status alias Status der Heizung (tado°)
attr tado_status group tado
attr tado_status mapping {"operation" => "Modus", "controlPhase" => "Status", "tempist" => "aktuelle Temperatur", "tempsoll" => "Solltemperatur", "temperature" => "Außentemperatur"}
attr tado_status nostate 1
attr tado_status notime 1
attr tado_status room Heizung


Damit erhalte ich ein Temperaturchart mit Soll- und Isttemperatur und den aktuellen Status und die Werte.

Wie kann ich, wenn der Istwert der Heizung (tempist) unter 15° fällt, eine Aktion auslösen?

Kann mit DAU da, jemand helfen? Das ganze soll ja auch nur 1 mal geschehen, jedes mal, wenn der Wert unterschritten wird. So als "Alarm", wenn die Heizung ausfallen sollte.

Gruß

LinuxQ


vossy74

Hallo,

hast Du diesbezüglich noch etwas dazu herausgefunden?
Ich kann mich schon nicht authentifizieren.

Wenn ich folgendes im Browser eingebe bekomme ich ein authentication failed. Melde ich mich vorher auf der Hompage an , bekomme ich die gewünschte Ausgabe, solange ich da angemeldet und auf dem gleichen Rechner bleibe

https://my.tado.com/mobile/1.4/getCurrentState?username=emailadresse&passwort=passwort

Wie logst du dich da ein?
VG
Lars