Tasmota-MQTT-Devices mit ähnlichem Verhalten wie z.B. Homematic

Begonnen von Reinerlein, 23 Dezember 2017, 16:43:08

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo,

ich versuche schon seit einiger Zeit einen Standard für mich festzulegen, wie ich MQTT-Devices (geflashed mit Tasmota) so zum Laufen bringe, dass ich sicher zwischen dem Schalt-Wunsch und einer Schalt-Bestätigung unterscheiden kann.

Bei Homematic ist das so gelöst:
- Man setzt z.B. einen Befehl "on" ab
- Im "state" steht jetzt "set_on"
- Die Funktübertragung zum Aktor erfolgt
- Es erfolgt eine Übertragung vom Aktor mit dem realen Zustand (z.B. "on")
- Im "state" wird jetzt der reale, gelieferte Zustand des Devices, "on", eingetragen

Damit sieht man am State, wenn die Komponente nicht erreichbar ist (der bleibt bei "set_on" stehen), bzw. wenn ich ein Toggle sende, erhält das Device den realen Zustand des Schaltausgangs.

Nun bringt Tasmota wenigstens die Möglichkeit mit, dass der reale Zustand als Status-Info zurückgeliefert wird.
Leider kann ich mit dem MQTT-Device-Modul nicht einen Wert übertragen lassen, und einen anderen Wert in das Reading schreiben lassen.

Ich bräuchte also etwas, was z.B. mit "on" aufgerufen wird (set device on), an das Device-Topic auch "on" weitersendet, aber in das definierte Reading (hier dann "state") ein "set_on" reinschreibt.
Dann kommt irgendwann der Status vom Device gemeldet, den ich auf "state" gelenkt habe, und überschreibt kurzerhand den Wert in "state" mit dem gemeldeten Wert "on".

Damit hätte ich wieder eine sichere Information über den wirklichen Schaltzustand. Momentan schreibt das Modul selber einfach "on" in das Reading, und ich kann keinen Unterschied mehr zwischen dem gewünschten und dem gemeldeten Zustand erkennen...

Oder geht das schon irgendwie, und ich habe es übersehen?

Danke schon mal...

Grüße
Reinerlein

AlexJ

Zitat von: Reinerlein am 23 Dezember 2017, 16:43:08
Hallo,

ich versuche schon seit einiger Zeit einen Standard für mich festzulegen, wie ich MQTT-Devices (geflashed mit Tasmota) so zum Laufen bringe, dass ich sicher zwischen dem Schalt-Wunsch und einer Schalt-Bestätigung unterscheiden kann.

Du kannst reading auf was anderes stellen, nicht auf das was geschickt wurde.
z.B. bei mir:
publishSet ON OFF cmnd/sonoff_kitchen/POWER
subscribeReading_Licht stat/sonoff_kitchen/POWER


Du sieht publish ist mit cmnd/*, und reading ist mit stat/*
Das heisst reading wird etwas spaeter durch den stat aktualisiert, nicht wenn ich in fhem auf ON druecke. So wird das reading aktualisiert auch wenn der Schalter ausserhalb fhem gedrueckt wird (Schalter oder Alexa)..

Hoffe das ist es was du gemeint hast.


Reinerlein

Hi AlexJ,

das ist nicht ganz das, was ich meinte.
In deinem Fall wird im Reading "state" dein set-Aufruf von "ON" oder "OFF" abgelegt. Die Reaktion landet dann im Reading "Licht".
Jetzt musst du z.B. mit dem Attribut "stateFormat" dafür sorgen, dass der Wert vom Reading Licht in "STATE" abgelegt wird. Das bedeutet aber wiederrum, dass du keinerlei Veränderung zwischen deinem Schalt-Wunsch (dem Set-Aufruf) und der Reaktion vom Tasmota-Image erkennen kannst.
Egal, wie du es drehst und wendest (Dein Szenario kann man ja auch andersherum gestalten): Das Problem ist, dass die Sende-Richtung denselben Wert in das Reading schreibt, wie die Empfangsrichtung, und deshalb keine Unterscheidung möglich ist...

Eine Möglichkeit wäre es noch 0 und 1 (für off und on) zu verwenden. Tasmota versteht das. Leider funktioniert diese Defintion aber nicht in dem Modul, da scheint etwas buggy zu sein (genauso wie ich keinerlei System-Topics, die mit $ beginnen subscriben kann).

Ich habe z.B. eigene ESPEasy-Images entworfen, die bei den Befehlen immer auch die Vorsilbe "set_" erlauben, und als Reaktion dann immer den echten Schaltzustand liefern. Damit kann ich direkt ein "set_on" senden (was ich per eventMap einfach umbiegen kann), und erhalte mein gewünschtes Verhalten...
Bei Tasmota geht das leider nicht (dafür hat es andere Vorteile, weswegen ich es ja gerne verwenden möchte :) )

Grüße
Reinerlein