Neues Modul: Tado Heizungssystem

Begonnen von strategy, 28 Januar 2019, 21:40:08

Vorheriges Thema - Nächstes Thema

strategy

Zitat von: Karflyer am 11 Dezember 2019, 16:05:50
@Matthias

...

Wäre schön, wenn du die Änderungen bei deinem nächsten Update berücksichtigen würdest.

Gruß
Stefan

Hallo Stefan,

habe die Änderungen gerade in das Repository übernommen.
Das sind leider die Dinge die ich nicht testen kann, da ich nur einen kleinen Umfang der Tado Hardware im Einsatz habe. Daher bin ich bei solchen Sachen auf Euer Feedback angewiesen...

Dafür auch nochmal ein Lob: Ihr seid immer gut dabei die Dinge zu testen und mir Feedback zu geben.


Gruß,
Matthias

strategy

Zitat von: dl7vea am 08 Dezember 2019, 20:42:58
Es ist so, dass einerseits die einzelnen Devices bei tado den Status "away" bekommen. Jede Zone hat darüber hinaus in der API einen "tadoMode", den man auslesen kann. Dieser steht entweder auf HOME oder AWAY. Gesetzt wird AWAY erst wenn alle angemeldeten Geräte aus dem Haus sind. Also das ist das event, bei dem tado dann auch die Heizung in den Away Modus setzt. Und soweit ich das sehe, werden alle Zonen gleichzeitig gesetzt. (Voraussetzung ist natürlich, dass die "Geo-Steuerung" für die Zone aktiviert ist. Sonst wird das wohl nicht passieren.)

Ich habe für mich eine kleine Erweiterung in das Modul gemacht, um diesen Wert aus der API in ein Reading zu bringen. Vielleicht kann ich dem Autor ja diese Änderung zukommen lassen und er baut sie ein.

Gruß Axel


Vielen Dank Axel,

vor allem für die fertigen Änderungen via PM.
Ich habe auch diese Änderungen übernommen und ins Repository eingestellt. Da ich die Anwesenheitssteuerung von Tado nicht nutze (Fußbodenheizung) hatte ich bisher auch nicht allzu viel Zeit und Muße in die Möglichkeiten investiert, die Tado hier offeriert. Daher steht bei mir aktuell in jeder Zone der Wert HOME. Sollte die Anpassung nicht funktionieren, gebt mir doch eine kurze Rückmeldung.

Die Änderung fügt jeder Zone / jedem Room ein neues Reading Tado-Mode hinzu...


Gruß,
Matthias

Karflyer

Hallo Matthias,

ich habe die aktuelle Version des Moduls gerade eingespielt. Dabei erhalte ich die gleiche Fehlermeldung die ich eigentlich schon korrigiert hatte. Ich habe geshen, dass du den korrigierten Block so nicht übernommen hast. Der Block beginnt in der Zeile 185 in der 98_TadoDevice.pm und müsste so aussehen:

if ($values[11] eq 'ONLINE'){
if ($values[8] ne 'OFF') {
if ($values[9] ne '') {
readingsSingleUpdate($hash, 'state', sprintf("T: %.1f °C desired: %.1f °C H: %.1f%%", $values[3], $values[8], $values[9]), 1);
} else {
    if ($values[3] ne '') {
                                        readingsSingleUpdate($hash, 'state', sprintf("T: %.1f °C desired: %.1f °C", $values[3], $values[8]), 1);
    } else {
                                        readingsSingleUpdate($hash, 'state', sprintf("desired: %.1f °C", $values[8]), 1);
    }
}
} else {
if ($values[9] ne '') {
   readingsSingleUpdate($hash, 'state', sprintf("T: %.1f °C desired: off H: %.1f%%", $values[3],  $values[9]), 1);
  } else {
   if ($values[3] ne '') {
readingsSingleUpdate($hash, 'state', sprintf("T: %.1f °C desired: off", $values[3]), 1);
   } else {
                                                 readingsSingleUpdate($hash, 'state', "desired: off", 1);
   }
}
}
} else {
readingsSingleUpdate($hash, 'state', "Device is in status '$values[11]'.", 1);
}


Zwei kleine 'Schönheitsfehler'.
In der Zeile 1013 der 98_Tado.pm ist der Loglevel mit '2' zu hoch für diese Meldung. Besser wäre '4':
log3 $name, 4, "$name: trying to dispatch message: $message";

In den Internals der Devices wird keine Versionsnummer der Module ausgegeben:
FVERSION 98_Tado.pm:?/2019-12-18

Gruß
Stefan

dl7vea

Hallo Matthias,

vielen Dank für das Einarbeiten der Änderungen. Ich habe die Module bei mir upgedated. Auf den ersten Blick sieht alles sehr gut aus. Ich werde es am heutigen Tage noch beobachten...

Viele Grüße

Axel.

Karflyer

#169
Hallo Matthias,

wenn ich einen der Heizkörper manuell verstelle, habe ich die folgende Fehlermledung im Log (bei eingeschaltetem Stacktrace):
2019.12.18 18:36:41 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_Tado.pm line 1274.
2019.12.18 18:36:41 1: stacktrace:
2019.12.18 18:36:41 1:     main::__ANON__                      called by ./FHEM/98_Tado.pm (1269)
2019.12.18 18:36:41 1:     (eval)                              called by ./FHEM/98_Tado.pm (1288)
2019.12.18 18:36:41 1:     main::Tado_UpdateZoneCallback       called by FHEM/HttpUtils.pm (634)
2019.12.18 18:36:41 1:     main::__ANON__                      called by fhem.pl (751)


In der Zeile 1269 des dazugehörigen Blocks heißt es:
if (not $d->{overlay}->{termination}->{type} eq 'MANUAL')

Ist das 'not' hier korrekt oder müsste es heißen:
if ($d->{overlay}->{termination}->{type} eq 'MANUAL')

Gruß
Stefan

strategy

Hallo Stefan,

keine Ahnung was ich da fabriziert habe. Ich hoffe diesmal habe ich die Änderungen komplett übernommen..

Zitat von: Karflyer am 18 Dezember 2019, 10:45:32

In den Internals der Devices wird keine Versionsnummer der Module ausgegeben:
FVERSION 98_Tado.pm:?/2019-12-18


Hier musst du mir auf die Sprünge helfen. Was meinst du mit Versionsnummer?


Ich hab mir auch Dein anderes Problem angeschaut:

Zitat von: Karflyer am 18 Dezember 2019, 18:50:10

In der Zeile 1269 des dazugehörigen Blocks heißt es:
if (not $d->{overlay}->{termination}->{type} eq 'MANUAL')

Ist das 'not' hier korrekt oder müsste es heißen:
if ($d->{overlay}->{termination}->{type} eq 'MANUAL')


Das not ist in diesem Fall korrekt.
Wenn du die Heizung manuell einstellst bleibt die Einstellung dauerhaft erhalten und der termination type ist "MANUAL".
Setzt man die Einstellung dagegen mit einem Timer (als z.B. eine Stunde) steht im termination type der Wert "TIMER" und die übrigen 3 Attribute beschreiben den Timer.

Du hast ja vorher mit HTTPMOD gearbeitet. Daher kennst du ja die URLs und deren Zusammensetzung. vielleicht kannst du mir einen Beispiel-Request schicken den ich analysieren kann.

Bei mir sieht eine manuelle Schaltung am Heizungsregler so aus:

"termination": {
            "type": "MANUAL",
            "typeSkillBasedApp": "MANUAL",
            "projectedExpiry": null
        }


Wenn ich über die App mit Timer schalte sieht es so aus:

"termination": {
            "type": "TIMER",
            "typeSkillBasedApp": "TIMER",
            "durationInSeconds": 3600,
            "expiry": "2019-12-18T22:48:20Z",
            "remainingTimeInSeconds": 3307,
            "projectedExpiry": "2019-12-18T22:48:20Z"
        }


(Beides jeweils Auszüge aus dem kompletten JSON)

Ich hab allerdings nur Wandthermostate und keine Heizungsthermostate oder ähnliches.
Möglicherweise gibt es da andere Informationen...


Gruß,
Matthias
Kannst du mal den entsprechenden Call des Rest Services im Browser oder mit

Karflyer

Hallo Matthias,

Zitat
    In den Internals der Devices wird keine Versionsnummer der Module ausgegeben:
    Code: [Auswählen]

    FVERSION 98_Tado.pm:?/2019-12-18

Hier musst du mir auf die Sprünge helfen. Was meinst du mit Versionsnummer?

Hier beziehe ich mich auf das Fragezeichen in FVERSION. Hier steht normalerweise die Versionsnummer des Moduls.

ZitatWenn ich über die App mit Timer schalte sieht es so aus:
Code: [Auswählen]

"termination": {
            "type": "TIMER",
            "typeSkillBasedApp": "TIMER",
            "durationInSeconds": 3600,
            "expiry": "2019-12-18T22:48:20Z",
            "remainingTimeInSeconds": 3307,
            "projectedExpiry": "2019-12-18T22:48:20Z"
        }

Diese Informationen erhalte ich auch in Form von Readings, wenn ich das über FHEM setze (für ein Heizkörperthermostat). Das gleiche gilt auch wenn ich das über die Tado-App (Android) setze. Bis hierhin also alles OK. Wenn ich aber direkt am Heizkörperthermostat die Temperatur verstelle, gibt es diese Informationen nicht (auch nicht in der App). Deshalb brauchen wir hier eine Änderung des Codes.
Zeile 1269 bis Zeile 1275 in der Tado.pm wird ersetzt durch:
if (not $d->{overlay}->{termination}->{type} eq 'MANUAL'){
                #overlay-overlay-durationInSeconds
                my $overlayDurationInSeconds = $d->{overlay}->{termination}->{durationInSeconds};
$message .= defined $overlayDurationInSeconds ? $overlayDurationInSeconds.";" : ";";
#overlay-overlay-termination-expiry
                my $overlayExpiry = $d->{overlay}->{termination}->{expiry};
$message .= defined $overlayExpiry ? $overlayExpiry.";" : ";";
#overlay-overlay-termination-remainingTimeInSeconds
                my $overlayRemainingTimeInSeconds = $d->{overlay}->{termination}->{remainingTimeInSeconds};
$message .= defined $overlayRemainingTimeInSeconds ? $overlayRemainingTimeInSeconds.";" : ";";
            } else {
    $message .=  ";;;";
}


Kannst du den Code bitte in dein Modul einbauen.
Vielen Dank noch einmal für dein Engagement. Hast du vor, das Modul im SVN einzustellen? Ich finde, es hat bereits einen Stand erreicht, wo das Sinn macht.

Grüße
Stefan

RangeMethod

Hallo,

vielen Dank für das tolle Modul!
Funktioniert bei mir alles bestens, bis auf eine Kleinigkeit.
Bei uns kann ein Mobile Device nicht importiert werden (Iphone)
Zwei Android Geräte gehen ohne Probleme.

Hat noch jemand dieses Problem?

Viele Grüße
Sebastian

strategy


Zitat von: Karflyer am 20 Dezember 2019, 19:38:13

Kannst du den Code bitte in dein Modul einbauen.
Vielen Dank noch einmal für dein Engagement. Hast du vor, das Modul im SVN einzustellen? Ich finde, es hat bereits einen Stand erreicht, wo das Sinn macht.



Hallo Stefan,

die Änderungen habe ich eingebaut und eingestellt. Neben dem Umbau auf optionale Informationen hast du da ja direkt noch einen Fehler gefunden. Da war tatsächlich ein Semikolon zu wenig und damit haben sich ggf. alle Folgewerte um eins verschoben...
Merci.

strategy

Zitat von: RangeMethod am 21 Dezember 2019, 21:20:13
Hallo,

vielen Dank für das tolle Modul!
Funktioniert bei mir alles bestens, bis auf eine Kleinigkeit.
Bei uns kann ein Mobile Device nicht importiert werden (Iphone)
Zwei Android Geräte gehen ohne Probleme.

Hat noch jemand dieses Problem?

Viele Grüße
Sebastian

Hallo Sebastian,

wir hatten hier schon mal eine Diskussion darüber wie die Geräte registriert sind.
Wenn alle Geräte unter einem Account (einer registrierten Mail-Adresse) laufen, dann solltest du auch alle Geräte sehen. Wenn es nicht so ist, muss ich mir das nochmal anschauen.
Wenn das Apple Gerät eine andere Email Adresse verwendet, gibt die Tado Webseite immer nur die Geräte zurück die mit der jeweiligen Mailadresse registriert sind. Dann müsstest du mal in der Historie schauen, da gibt es glaube ich einen Lösungsvorschlag / Workaround für dieses Szenario.

Gruß,
Matthias

dl7vea

Hallo zusammen,

ich habe mir jetzt auch mal alle Devices generieren lassen. Aktuell haben diese keine readings. Es gibt jedoch einen Wert, der interessant ist. dDas ist der "batteryState". Da ich versuche alle irgendwie mit Batterien ausgestatteten Geräte mit fhem zu überwachen, wäre das ein wichtiges Feld. Lässt sich das in einer der folgenden Versionen einbauen?

Viele Grüße Axel.

jle

Hallo Matthias,
danke für das tolle Modul!

Seit kurzem kann man in der Tado App den Modus zwischen HOME und AWAY manuell hin und her schalten.

Für mich wäre es super, wenn ich das auch aus deinem FHEM Modul heraus machen könnte, da ich das Tado Geofencing nicht nutze aber mein SmartHome durchaus Unterscheidungen zwischen ,,Zuhause" und ,,Nicht Zuhause" macht.

Wäre klasse, wenn du dir das evtl. für ein künftiges Update mal anschauen könntest :-)
Ich kann gerne beim Testen unterstützen.

Danke

Viele Grüße!

strategy

Hallo jle,

vielen Dank für das positive Feedback.

Bzgl. Deines Wunsches:

Zitat von: jle am 10 April 2020, 22:01:23

Seit kurzem kann man in der Tado App den Modus zwischen HOME und AWAY manuell hin und her schalten.

Für mich wäre es super, wenn ich das auch aus deinem FHEM Modul heraus machen könnte, da ich das Tado Geofencing nicht nutze aber mein SmartHome durchaus Unterscheidungen zwischen ,,Zuhause" und ,,Nicht Zuhause" macht.


Ich habe die API analysiert und eine entsprechende Funktion gefunden.
Es gibt jetzt auf der Ebene der TadoBridge ein set presence mit dem Du Home und Away manuell setzen kannst.
Entsprechend gibt es auch ein passendes Reading um den aktuellen Status einzusehen. Man sieht den Status aber auch in jeder Zone.


Hallo Axel,

Zitat von: dl7vea am 24 Januar 2020, 14:25:28
Hallo zusammen,

ich habe mir jetzt auch mal alle Devices generieren lassen. Aktuell haben diese keine readings. Es gibt jedoch einen Wert, der interessant ist. dDas ist der "batteryState". Da ich versuche alle irgendwie mit Batterien ausgestatteten Geräte mit fhem zu überwachen, wäre das ein wichtiges Feld. Lässt sich das in einer der folgenden Versionen einbauen?

Viele Grüße Axel.

habe ich mir auch angeschaut. Scheinbar habe ich den Battery State sogar einmalig ausgelesen und in ein internal geschrieben.
Das ist natürlich totaler Quatsch. Ich habe die Stelle überarbeitet und schreibe den Batteriestatus nun in ein Reading. Bei der Qualität des Wertes würde ich aber nicht zu viel erwarten.

Außerdem habe ich die Dokumentation für die Module Tado und TadoBridge überarbeitet und versucht auch die zugehörigen Readings zu dokumentieren.
Ich fänd es super wenn Ihr diese Dokumentation mal prüfen und kommentieren könnten. Ich bin für jeden Verbesserungsvorschlag dankbar.

Viele Grüße,
Matthias

Borkk

Hallo Zusammen,

Seit ein paar Tagen meldet das Modul TadoBridge im state ERROR und im Log tauchen diese beiden Zeilen auf.

2020.05.16 18:33:44 3: error while requesting https://my.tado.com/api/v2/homes/44.../state?username= ...entfernt... - read from https://my.tado.com:443 timed out
2020.05.16 18:33:44 3: error while requesting https://my.tado.com/api/v2/homes/44.../zones/2/state?username=...entfernt... - read from https://my.tado.com:443 timed out


Aber irgendwie scheint er doch zu pollen, da die Devices aktuelle Werte haben?  Der Fehler geht aber auch nicht weg, es kann also keine vorübergehende Nichterreichbarkeit der Seite sein. Was kann das sein?
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...

Borkk

Scheint ein Problem seitens Tado gewesen zu sein.. Der Fehler ist ohne zutun verschwunden.
Docker@DS220+ FHEM, ConBeeII, Homebridge, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana,
Raspberrymatic@Raspi3: HmIP Akt- /Sensoren, Shelly´s, Tibber Puls, Alexa, ASC, Gardena, Netatmo, E-Paper, FritzBox; Tado°, HOMEMODE, iBeacon, OLED ; ESP32/8266, SwitchBot ...