Hauptmenü

Tado Template

Begonnen von witschi87, 17 Dezember 2021, 23:15:51

Vorheriges Thema - Nächstes Thema

witschi87

Hallo Zusammen,

ich versuche gerade ein Template für Tado Heizkörperthermostate zu erstellen, komme da aber aufgrund verschiedener Punkte nicht weiter.
In fhem ist lediglich ein Device vorhanden - über dies wird alles gesteuert. Bei mir heißt es einfach "tado"
Nun war meine Idee dummy-devices für die einzelnen Thermostate anzulegen, da lande ich aber in einer Sackgasse.

In Tablet-UI konnte das relativ einfach realisiert werden:

<div class="cell" data-type="thermostat" data-temp="Temperatur_Badezimmer_OG" data-min="15" data-max="30" data-device="tado" data-set="timedZoneOverlay 6 7200" data-get="DesiredTemp_Badezimmer_OG"></div>
<div class="cell">
<div data-type="label" data-device="tado" data-get="Luftfeuchtigkeit_Badezimmer_OG" data-fix="0" data-part="4" data-limits="[0,40,60]" data-colors='["#bb6242","#aa6900","#bb6242"]' data-unit="%" class="bigger thin"></div>
<div>Luftfeuchte</div>
</div>


Theoretisch wäre noch denkbar für jedes Thermostat ein eigenes Template anzulegen und die Readings entsprechend direkt im Template zu hinterlegen - das wäre aber die unschönste Lösung, wie ich finde.
Und ehrlich gesagt wird mir auch noch nicht so ganz klar, wie das Template aussehen müsste, damit das funktioniert.
Kann mir da jemand helfen?

LuGu

Hallo witschi87,

das ist der völlig falsche Ansatz.
Ich glabe, du solltest dich erstmal in die Doku einlesen.
Da ist der Aufbau eigener Templates sehr gut beschrieben.
https://github.com/jemu75/fhemApp#readme
Man kann sich auch gut an den vorhandenen Templates orientieren (z.B. templ_thermostat.json) und das dann an die eigenen Geräte anpassen.

Gruß LuGu
FHEM mit RPi3 (Visu über FTUI)
HMCCU mit piVCCU3 / MQTT2 mit zigbee2mqtt

jemu75

Zitat von: witschi87 am 17 Dezember 2021, 23:15:51
Hallo Zusammen,

ich versuche gerade ein Template für Tado Heizkörperthermostate zu erstellen, komme da aber aufgrund verschiedener Punkte nicht weiter.
In fhem ist lediglich ein Device vorhanden - über dies wird alles gesteuert. Bei mir heißt es einfach "tado"
Nun war meine Idee dummy-devices für die einzelnen Thermostate anzulegen, da lande ich aber in einer Sackgasse.

In Tablet-UI konnte das relativ einfach realisiert werden:

<div class="cell" data-type="thermostat" data-temp="Temperatur_Badezimmer_OG" data-min="15" data-max="30" data-device="tado" data-set="timedZoneOverlay 6 7200" data-get="DesiredTemp_Badezimmer_OG"></div>
<div class="cell">
<div data-type="label" data-device="tado" data-get="Luftfeuchtigkeit_Badezimmer_OG" data-fix="0" data-part="4" data-limits="[0,40,60]" data-colors='["#bb6242","#aa6900","#bb6242"]' data-unit="%" class="bigger thin"></div>
<div>Luftfeuchte</div>
</div>


Theoretisch wäre noch denkbar für jedes Thermostat ein eigenes Template anzulegen und die Readings entsprechend direkt im Template zu hinterlegen - das wäre aber die unschönste Lösung, wie ich finde.
Und ehrlich gesagt wird mir auch noch nicht so ganz klar, wie das Template aussehen müsste, damit das funktioniert.
Kann mir da jemand helfen?

Habe ich das richtig verstanden, dass du mehrere Thermostate von tado im Einsatz hast und es in FHEM nur ein device dafür gibt? Bisher habe ich das Konzept von FHEM so verstanden, dass es pro Aktor/Sensor mind. 1 manchmal sogar mehrere Devices gibt. Das es auch umgekehrt geht, also ein Device in das sich mehrere Aktoren/Sensoren reinteilen, war mir bisher nicht bekannt.

witschi87

Ja, genau das ist mein Problem. Es gibt nur ein device (tado) und darin verschiedenste Readings. Für die eingestellte Temperatur, die gemessene Temperatur, Luftfeuchtigkeit, etc. Und das Pro Thermostat. Deswegen habe ich an Dummys gedacht, da ich ja die appOptions angeben muss. Und das im Idealfall pro Thermostat.

jemu75

Zitat von: witschi87 am 18 Dezember 2021, 09:34:22
Ja, genau das ist mein Problem. Es gibt nur ein device (tado) und darin verschiedenste Readings. Für die eingestellte Temperatur, die gemessene Temperatur, Luftfeuchtigkeit, etc. Und das Pro Thermostat. Deswegen habe ich an Dummys gedacht, da ich ja die appOptions angeben muss. Und das im Idealfall pro Thermostat.

Kannst du bitte mal list von dem tado Device senden.

witschi87

Klar!

Zitat

Internals:
   DEF        c.wittstock@me.com
   FUUID      60709d4d-1234-1234-1234-010d72c0ad3c52a7
   LastRequest OK
   NAME       tado
   NEXT_UPDATE Sat Dec 18 10:58:09 2021
   NR         50
   STATE      reachable
   TADO_USER  c.wittstock@me.com
   TOKEN_FILE ./FHEM/FhemUtils/TadoAPI_token_tado
   TOKEN_LIFETIME 1639821837363.6688
   TOKEN_LIFETIME_HR Sat Dec 18 11:04:08 2021
   TYPE       TadoAPI
   OLDREADINGS:
   READINGS:
     2021-12-18 10:57:10   ActiveZones     6
     2021-12-18 10:57:09   Battery_VA0237969920 NORMAL
     2021-12-18 10:57:09   Battery_VA1232934912 NORMAL
     2021-12-18 10:57:09   Battery_VA1331501312 NORMAL
     2021-12-18 10:57:09   Battery_VA3076266240 NORMAL
     2021-12-18 10:57:09   Battery_VA3985577728 NORMAL
     2021-12-18 10:57:09   Battery_VA4180550144 NORMAL
     2021-12-18 10:57:09   ChildLockEnabled_VA0237969920 0
     2021-12-18 10:57:09   ChildLockEnabled_VA1232934912 0
     2021-12-18 10:57:09   ChildLockEnabled_VA1331501312 0
     2021-12-18 10:57:09   ChildLockEnabled_VA3076266240 0
     2021-12-18 10:57:09   ChildLockEnabled_VA3985577728 0
     2021-12-18 10:57:09   ChildLockEnabled_VA4180550144 0
     2021-12-18 10:57:09   DesiredTemp_Badezimmer_OG OFF
     2021-12-18 10:57:09   DesiredTemp_Badezimmer_UG OFF
     2021-12-18 10:57:09   DesiredTemp_Buero 18
     2021-12-18 10:57:09   DesiredTemp_Esszimmer 22
     2021-08-16 19:39:59   DesiredTemp_Raum 6 20
     2021-12-18 10:57:09   DesiredTemp_Schlafzimmer OFF
     2021-12-18 10:57:09   DesiredTemp_Wohnzimmer 22
     2021-12-18 10:57:09   GeoLocation_2301786 present
     2021-12-18 10:57:09   GeoLocation_3007413 present
     2021-10-15 09:47:09   GeoTracking_1280347 1
     2021-12-18 10:57:09   GeoTracking_1456920 0
     2021-12-18 10:57:09   GeoTracking_2301786 1
     2021-12-18 10:57:09   GeoTracking_3007413 1
     2021-12-18 10:57:09   Heizleistung_Badezimmer_OG 0
     2021-12-18 10:57:09   Heizleistung_Badezimmer_UG 0
     2021-12-18 10:57:09   Heizleistung_Buero 0
     2021-12-18 10:57:09   Heizleistung_Esszimmer 13
     2021-08-16 19:39:59   Heizleistung_Raum 6 0
     2021-12-18 10:57:09   Heizleistung_Schlafzimmer 0
     2021-12-18 10:57:09   Heizleistung_Wohnzimmer 22
     2021-12-18 10:57:09   Luftfeuchtigkeit_Badezimmer_OG 52.3
     2021-12-18 10:57:09   Luftfeuchtigkeit_Badezimmer_UG 49.1
     2021-12-18 10:57:09   Luftfeuchtigkeit_Buero 58
     2021-12-18 10:57:09   Luftfeuchtigkeit_Esszimmer 52.6
     2021-06-23 20:01:30   Luftfeuchtigkeit_Raum 5 58.2
     2021-12-18 10:57:09   Luftfeuchtigkeit_Schlafzimmer 63.4
     2021-12-18 10:57:09   Luftfeuchtigkeit_Wohnzimmer 52.9
     2021-12-18 10:57:09   OverlayType_Badezimmer_OG no overlay
     2021-12-18 10:57:09   OverlayType_Badezimmer_UG no overlay
     2021-12-18 10:57:09   OverlayType_Buero no overlay
     2021-12-18 10:57:09   OverlayType_Esszimmer no overlay
     2021-08-16 19:39:59   OverlayType_Raum 6 no overlay
     2021-12-18 10:57:09   OverlayType_Schlafzimmer no overlay
     2021-12-18 10:57:09   OverlayType_Wohnzimmer no overlay
     2021-12-18 10:57:09   Temperatur_Badezimmer_OG 20.5
     2021-12-18 10:57:09   Temperatur_Badezimmer_UG 23.5
     2021-12-18 10:57:09   Temperatur_Buero 19.4
     2021-12-18 10:57:09   Temperatur_Esszimmer 22.3
     2021-08-16 19:39:59   Temperatur_Raum 6 0.0
     2021-12-18 10:57:09   Temperatur_Schlafzimmer 18.6
     2021-12-18 10:57:09   Temperatur_Wohnzimmer 21.8
     2021-05-24 21:22:32   Zone4Lock       timer
Attributes:
   homeID     123456
   updateIntervall 60


LuGu

Zitat von: witschi87 am 18 Dezember 2021, 09:34:22
Ja, genau das ist mein Problem. Es gibt nur ein device (tado) und darin verschiedenste Readings. Für die eingestellte Temperatur, die gemessene Temperatur, Luftfeuchtigkeit, etc. Und das Pro Thermostat. Deswegen habe ich an Dummys gedacht, da ich ja die appOptions angeben muss. Und das im Idealfall pro Thermostat.

Sorry,
das hatte ich wohl überlesen, wahrscheinlich weil ich so ein Multidevice noch nicht kenne.  Das macht die ganze Sache natürlich schwieriger. Das ist ja dann mehr ein Gateway. Ich denke auch, du musst in fhem einzelne Devices anlegen. Mehrere Templates wird nicht funktionieren, da du in deinem Tado Device unter appOptions ja nur ein Template angeben kannst.

Gruß LuGu
FHEM mit RPi3 (Visu über FTUI)
HMCCU mit piVCCU3 / MQTT2 mit zigbee2mqtt

witschi87

Deswegen dachte ich an dummys denen ich dann die entsprechenden templates zuweiset und pro Thermostat ein Template anlege.
Ansonsten wüsste ich nicht, wie ich in fhem einzelne Devices dafür anlege. Könnt ihr da helfen?

witschi87

Kann mir mal jemand ein list seines Thermostat-Devices zusenden, damit ich das Template vergleichen und hoffentlich besser verstehen kann?
Daaaanke :)

jemu75

#9
Zitat von: witschi87 am 18 Dezember 2021, 11:40:54
Kann mir mal jemand ein list seines Thermostat-Devices zusenden, damit ich das Template vergleichen und hoffentlich besser verstehen kann?
Daaaanke :)

Ein fertiges Template für ein Thermostat findest du in der Hilfe unter https://github.com/jemu75/fhemApp#template-thermostat

Im Device selbst ist das Thermostat dann z.B. wie folgt eingebunden
{ "template": "thermostat", "connected": { "receiver": "chn_sen.hm.og.ar", "valve": "heat.hm.og.ar" } }

Da das Thermostat im konkreten Fall einen Heizkreis der Fußbodenheizung steuert, kommt der Parameter "connected" zum Einsatz. Hierüber kann man mehrere Devices in einem Template zusammenführen. Weiterhin verwenden Homematicthermostate mehrere Funkkanäle. Jeder Kanal wird in einem separaten Device in Fhem abgebildet. Auch hierfür kommt im konkreten Beispiel der Parameter "connected" zum Einsatz. Hier werden also insgesamt 3 verschiedene Fhem Devices in einem Template zusammen geführt.

Bei dir wäre ja genau das Gegenteil der Fall. Ein Device auf mehrere Templates verteilen. Der sinnvollste Weg wäre sicher, wenn du das tado "sammeldevice" in fhem auf jeweils ein device pro Thermostat aufsplittest.

witschi87

Das klingt genau wonach ich suche, aber wie bekomme ich das hin? Dafür sind keine fhem Kenntnisse wohl noch zu rudimentär. :(

jemu75

Zitat von: witschi87 am 18 Dezember 2021, 12:32:37
Das klingt genau wonach ich suche, aber wie bekomme ich das hin? Dafür sind keine fhem Kenntnisse wohl noch zu rudimentär. :(

Ich hatte sowas bisher auch noch nicht und habe spontan keine Idee. Vielleicht schaust du mal, ob es für tado einen Forenbereich gibt. Dort könntest du mal fragen, ob jemand eine Idee hat, wie man pro Thermostat ein device in Fhem generiert.  :)

jemu75

Also ich habe selbst gerade nochmal hier im Forum geschaut. Ich bin hierauf aufmerksam geworden. https://forum.fhem.de/index.php?topic=96641.0

Wenn ich das richtig verstehe, wird zwar für die Verbindung zur tado cloud ein Fhem Device (als bridge) generiert. Weiterhin wird aber auch geschrieben, dass für jedes tado Gerät ein separates Fhem Device angelegt wird.
Also müsstest du eigentlich für jedes Thermostat ein separates Device haben.

witschi87

#13
Das hilft leider nicht weiter, denn

Zitat
Über ein

get devices

wird pro physikalischem Device ein FHEM Device angelegt. Diese können nicht direkt benutzt werden um Temperaturen auszulesen oder zu setzen. Das funktioniert lediglich über die Zonen. Es ist aber möglich die einzelnen Devices "anzupingen". Diese geben dann eine Nachricht oder ein Leuchtsignal aus. Damit lässt sich jederzeit die Kommunikation testen.

Somit bleibt das lesen und schreiben über das Gateway. Ich kann doch aber sicher ein dummy anlegen, bei welchem ich Aktionen definiere, die auf einem anderen Device ausgeführt werden? Also externe Befehle sozusagen?

EDIT: Vielleicht hätte ich erst testen sollen. Ich habe mit der von dir gezeigten Bibliothek nun für jedes Thermostat ein Device. Ich teste nun mal ein eigenes Template zu bauen! :)

witschi87

#14
mühsam ernährt sich das Eichhörnchen, aber ich komme weiter... :D
Ich habe nun mein eigenes Template erstellt:


{
  "name": "tado",
  "author": "witschi87",
  "date": "2021-12-17",
  "status": {
    "bar": ["link:ONLINE:100:success","link:OFFLINE:0:success"],
    "error": ["Connected.receiver.Readings.Activity.Value:^(?!alive):100:error:keine Verbindung"]
  },
  "main": [
    {
      "leftBtn": "mdi-minus",
      "leftClick": ["desired-temp:17.5:temperature %i-0.5","desired-temp::"],
      "leftLong": ["desired-temp::automatic"],
      "text": ["desired-temp:off:aus", "desired-temp::%n.1°C"],
      "rightBtn": "mdi-plus",
      "rightClick": ["desired-temp:25:","desired-temp::temperature %i0.5"],
      "rightLong": ["desired-temp::automatic"]
    }
  ],
  "info": {
    "left1": ["open-window:null::mdi-window-closed","open-window:1::mdi-window-open"],
    "left2": ["overlay-active:1::mdi-clock-time-four-outline"],
    "mid1": ["measured-temp::%n.1°C:mdi-thermometer"],
    "mid2": ["measured-humidity::%n%:mdi-water"],
    "right1": ["link:ONLINE::mdi-wifi","link:::mdi-wifi-off"]
  }
}


Die Info-Leiste funktioniert super. Die Funktionalität der Plus- und Minus-Buttons ebenfalls. Jedoch aktualisiert sich die Anzeige nach dem Klick nicht. Es bleibt die alte Temperatur stehen.
Ich glaube, dass ich das Device mit einem "get update" aktualisieren muss. Wie kann ich den Befehl direkt hinterher senden?

jemu75

Zitat von: witschi87 am 18 Dezember 2021, 21:51:52
mühsam ernährt sich das Eichhörnchen, aber ich komme weiter... :D
Ich habe nun mein eigenes Template erstellt:


{
  "name": "tado",
  "author": "witschi87",
  "date": "2021-12-17",
  "status": {
    "bar": ["link:ONLINE:100:success","link:OFFLINE:0:success"],
    "error": ["Connected.receiver.Readings.Activity.Value:^(?!alive):100:error:keine Verbindung"]
  },
  "main": [
    {
      "leftBtn": "mdi-minus",
      "leftClick": ["desired-temp:17.5:temperature %i-0.5","desired-temp::"],
      "leftLong": ["desired-temp::automatic"],
      "text": ["desired-temp:off:aus", "desired-temp::%n.1°C"],
      "rightBtn": "mdi-plus",
      "rightClick": ["desired-temp:25:","desired-temp::temperature %i0.5"],
      "rightLong": ["desired-temp::automatic"]
    }
  ],
  "info": {
    "left1": ["open-window:null::mdi-window-closed","open-window:1::mdi-window-open"],
    "left2": ["overlay-active:1::mdi-clock-time-four-outline"],
    "mid1": ["measured-temp::%n.1°C:mdi-thermometer"],
    "mid2": ["measured-humidity::%n%:mdi-water"],
    "right1": ["link:ONLINE::mdi-wifi","link:::mdi-wifi-off"]
  }
}


Die Info-Leiste funktioniert super. Die Funktionalität der Plus- und Minus-Buttons ebenfalls. Jedoch aktualisiert sich die Anzeige nach dem Klick nicht. Es bleibt die alte Temperatur stehen.
Ich glaube, dass ich das Device mit einem "get update" aktualisieren muss. Wie kann ich den Befehl direkt hinterher senden?

Wird der Wert von desired-temp im Fhem Device nach ändern der Solltemperatur (temperature) geändert? Ich hätte vermutet, dass du desired-temp ändern musst. Falls nicht, dann evtl. auch mal prüfen, ob das Attribut event-on-change-reading gesetzt ist. Diese verhindert ggf. das der Wert aktualisiert wird.

witschi87

desired-temp steht leider nur in den Readings. Im set steht nur temperature. Und leider verändert sich desired-temp dann nicht sofort, sondern erst nach einem ,,get update".
Und ein reading kann ich doch nicht setzen, oder sehe ich das falsch?
Und event-on-change-reading ist nicht gesetzt.

jemu75

Zitat von: witschi87 am 19 Dezember 2021, 13:23:23
desired-temp steht leider nur in den Readings. Im set steht nur temperature. Und leider verändert sich desired-temp dann nicht sofort, sondern erst nach einem ,,get update".
Und ein reading kann ich doch nicht setzen, oder sehe ich das falsch?
Und event-on-change-reading ist nicht gesetzt.

Ich kenne mich mit den Tado Geräten leider nicht aus. Bei Homematic setzt man die Soll Temperatur mit desired-temp. Das reading wird dann auch sofort aktualisiert. Klingt aber auch merkwürdig, dass man die readings nach dem Setzen der Temperatur erst nochmal aktualisieren muss.

donjonsn

Ich habe das gleiche Problem mit EnOcean Thermostaten. Die Temperatur wird über desired-temp gesetzt, es gibt allerdings kein Reading mit gleichem Titel, sondern es wird das Reading setpointTempSet gesetzt. Im FHEM Frontend sieht man diese Änderung allerdings auch erst nach einem Reload der Seite. Mit den event-on-* Attributen habe ich auch probiert ein Event zu bekommen, ohne Erfolg. Gibt es die Möglichkeit, die Reading ggf. mit kurzem Delay neu zu laden?