NEWS
Tasmota Rules?
Tasmota Rules?
-
Hallo,
da ich etliche Tasmota Zwischenmessstecker habe und die Werte gerne über gesendete mqtt Nachrichten in iobroker bekommen möchte, das aber nicht ganz so einfach war, wollte ich mal meine Lösung vorstellen.
Gut an IOBROKER ist das mit dem MQTT Broker/Client Adapter man auf externe Programme wie mosquito verzichten kann. Daher habe ich diesen Adapter als sink für die mqtt Nachrichten verwendet:

Konfiguriert wird der Adapter als Server/Broker. Verwendet habe ich Port 1833 ohne WebSockets. Benutzer und Passwort sind vergeben:
Auf den Tasmotageräten wird dann die iobroker-IP konfiguriert mit dem User und dem Passwort.
Ein passender Name unter Topic kann man dort auch vergeben:

Damit die Werte regelmäßig an iobroker gesendet werden kann man in der Konsole von Tasmota Pausenwert zwischen zwei Nachrichten mittels
TelePeriod 10z.B. auf 10 s ändern.Im Objektbaum findet man dann Nachrichten unter mqtt/<Index> in mehreren Unterverzeichnissen wieder. Ich benutze aber die Werte unter tele/<vergebenerName>/SENSOR da ich dann das Gerät auch mal tauschen kann und im Gerät nur wieder den gleichen Namen einstellen muss:

{ "Time": "2024-02-20T10:59:50", "ENERGY": { "TotalStartTime": "2023-12-31T11:37:00", "Total": 90.376, "Yesterday": 0.023, "Today": 0.01, "Period": 0, "Power": 1, "ApparentPower": 2, "ReactivePower": 2, "Factor": 0.44, "Voltage": 228, "Current": 0.01 } }In den anderen Feldern kann man weitere Werte des Gerätes ermitteln.
Leider werden die Werte aber nicht weiter einzeln ausgegeben. So muss man nun das verschachtelte JSON auslesen um die Werte dann im Objektbaum unter 0_userdata zu speichern. Dazu habe ich mir dort in einem mir passenden Verzeichnis einen Channel angelegt und darunter dann die States für Arbeit und Leistung. Ein weiterer Wert Anzahl dient dazu die Anzahl der eingeschalteten Frostschutz-Heizungen im Zelt zu ermitteln:

Um die Einzelwerte dann in meine neuen State zu bekommen benutze ich ein Blockly Script:

Es macht in etwa folgendes:
Wenn sich SENSOR ändert dann lese das JSON aus SENSOR und speichere Ihn eine Variablejobject.
Dann speichere jeweils die Werte von Arbeit und Leistung in meinem erzeuten State Objekte indem das passende JSON-Attribut in ein Object und dann in eine Zahl verwandelt wird.
Meine Anzahl wird dann auch gleich noch berechnet.Das wars auch schon.
Hier noch das ganze für einen Satz von Temperatursensoren welche ich auch über ein Tasmota-Gerät auslese:

Ich hatte dazu ein Sonoff Basic R2 verwendet welches ein internes Netzteil als galvanische Trennung zwischen benutzt, das Relais und die Verbindungstrippe raus geworfen damit ich die 2pol. Ausgangsbuchse als Anschluss für die DS18B20 Sensoren verwenden kann. Ich konnte 9 Stück damit parasitär betreiben. Ein weiterer im Gerät eingelöteter läuft nicht-parasitär (Hier DS18B20-1). Angeschlossen habe ich dann aktuell nur 5 Stück + der Interne.

Ich hoffe ich kann mit meiner kurzen Beschreibung Leuten weiter helfen.
Mein nächstes Ziel ist dann noch über mqtt auch die Relais zu schalten.
Ich haben ansonsten noch die Software evcc, ein OpenDTU und einen Bayern-Lüfter via mqtt angebunden. Das dann aber später vielleicht in einem eigenen Tröt.
@tasuanetrukiat
Ich hänge mich hier mal dran.
Ja, man kann mit "Teleperiod" die Sendezyklen einstellen.
Ich denke, das ist auch das, was man als "Telemetry period" unter Logging im UI einstellen kann.Mich wurmt aber, dass das immer nur zyklisch ist und nicht ad hoc bei Bedarf (bei manchen Themen wäre das viel besser).
Ich meine, mal gelesen zu haben, dass man so eine "sende sofort, wenn sich Wert geändert hat" Sachen auch irgendwie im Tasmota umgesetzt bekommen kann.
Weiss hier jemand, wie?
-
@tasuanetrukiat
Ich hänge mich hier mal dran.
Ja, man kann mit "Teleperiod" die Sendezyklen einstellen.
Ich denke, das ist auch das, was man als "Telemetry period" unter Logging im UI einstellen kann.Mich wurmt aber, dass das immer nur zyklisch ist und nicht ad hoc bei Bedarf (bei manchen Themen wäre das viel besser).
Ich meine, mal gelesen zu haben, dass man so eine "sende sofort, wenn sich Wert geändert hat" Sachen auch irgendwie im Tasmota umgesetzt bekommen kann.
Weiss hier jemand, wie?
Google mal nach PowerDelta ( so meine ich , heißt das)
Teleperiod ist10sek das Niedrigste.Bei Tasmota Geräten nimmt man den Sonoff Adapter.
Die sind aufeinander eingespielt und liefern dir fertige Datenpunkte. -
@tasuanetrukiat
Ich hänge mich hier mal dran.
Ja, man kann mit "Teleperiod" die Sendezyklen einstellen.
Ich denke, das ist auch das, was man als "Telemetry period" unter Logging im UI einstellen kann.Mich wurmt aber, dass das immer nur zyklisch ist und nicht ad hoc bei Bedarf (bei manchen Themen wäre das viel besser).
Ich meine, mal gelesen zu haben, dass man so eine "sende sofort, wenn sich Wert geändert hat" Sachen auch irgendwie im Tasmota umgesetzt bekommen kann.
Weiss hier jemand, wie?
@bertderkleine sagte in Tasmota MQTT Werte erhalten:
"sende sofort, wenn sich Wert geändert hat"
das kann per Rule oder Scripting ausgeführt werden.
Bsp Rule :
ON Trigger xy DO publish xy ENDON -
@bertderkleine sagte in Tasmota MQTT Werte erhalten:
"sende sofort, wenn sich Wert geändert hat"
das kann per Rule oder Scripting ausgeführt werden.
Bsp Rule :
ON Trigger xy DO publish xy ENDON@ralla66 sagte in Tasmota MQTT Werte erhalten:
@bertderkleine sagte in Tasmota MQTT Werte erhalten:
"sende sofort, wenn sich Wert geändert hat"
das kann per Rule oder Scripting ausgeführt werden.
Bsp Rule :
ON Trigger xy DO publish xy ENDONKlasse,
ich glaube das mit den rules geht tatsächlich so, wie ich das gerne hätte. Leider kann ich aber die Doku nicht richtig lesen.
Ich habe in der Konsole mal den Befehl "Status 8" abgesetzt, der erwähnt wird. Raus kommt z.B.:stat/tasmota_CO2/STATUS8 = {"StatusSNS":{"Time":"2024-03-17T14:23:26","MHZ19B":{"Model":"B","CarbonDioxide":732,"Temperature":21.0},"TempUnit":"C"}}Mir ist nicht klar, wie ich jetzt daraus einen Trigger machen soll, wenn ich auf eine Änderung von "CarbonDioxide" mit einem Senden der Daten reagieren will.
In der Doku liest es sich so simpel:
DS18B20#Temperature whenever the temperature of sensor DS18B20 updates (also unchanged)
Der Sensor ist eigentlich der MHZ19B. Aber diese JSON Darstellung mit all den Klammern verwirrt mich.
Weisst Du, wie es nun richtig lauten würde? So?
MHZ19B#CarbonDioxide -
@ralla66 sagte in Tasmota MQTT Werte erhalten:
@bertderkleine sagte in Tasmota MQTT Werte erhalten:
"sende sofort, wenn sich Wert geändert hat"
das kann per Rule oder Scripting ausgeführt werden.
Bsp Rule :
ON Trigger xy DO publish xy ENDONKlasse,
ich glaube das mit den rules geht tatsächlich so, wie ich das gerne hätte. Leider kann ich aber die Doku nicht richtig lesen.
Ich habe in der Konsole mal den Befehl "Status 8" abgesetzt, der erwähnt wird. Raus kommt z.B.:stat/tasmota_CO2/STATUS8 = {"StatusSNS":{"Time":"2024-03-17T14:23:26","MHZ19B":{"Model":"B","CarbonDioxide":732,"Temperature":21.0},"TempUnit":"C"}}Mir ist nicht klar, wie ich jetzt daraus einen Trigger machen soll, wenn ich auf eine Änderung von "CarbonDioxide" mit einem Senden der Daten reagieren will.
In der Doku liest es sich so simpel:
DS18B20#Temperature whenever the temperature of sensor DS18B20 updates (also unchanged)
Der Sensor ist eigentlich der MHZ19B. Aber diese JSON Darstellung mit all den Klammern verwirrt mich.
Weisst Du, wie es nun richtig lauten würde? So?
MHZ19B#CarbonDioxide@bertderkleine sagte in Tasmota MQTT Werte erhalten:
MHZ19B#CarbonDioxide
keine Ahnung ob der mit Tasmota Rules unterstützt wird,
wenn wäre der Anfang
On MHZ19B#CarbonDioxide>0 do Publish xy Endon
also jedesmal getriggert wenn der Wert größer 0 ist.
Zum testen kann ja bei do erst einmal ein Relay mit Power geschaltet werden.
Sowas halt:
ON MHZ19B#CarbonDioxide>0 DO Power1 1 ENDONwenn das mit Rules nicht geht dann mit scripting schnitzen,
mit =>websend [192.168.2.xxx] /cm?cmnd=status 10 Abfrage an den ESP selbst,
auswerten des JSON nach Wert mit
mit >E
;Executed when a Tasmota MQTT RESULT message is received
Wert=WebQuery#StatusSNS#MHZ19B#CarbonDioxide
danach das publish -
@ralla66 sagte in Tasmota MQTT Werte erhalten:
@bertderkleine sagte in Tasmota MQTT Werte erhalten:
"sende sofort, wenn sich Wert geändert hat"
das kann per Rule oder Scripting ausgeführt werden.
Bsp Rule :
ON Trigger xy DO publish xy ENDONKlasse,
ich glaube das mit den rules geht tatsächlich so, wie ich das gerne hätte. Leider kann ich aber die Doku nicht richtig lesen.
Ich habe in der Konsole mal den Befehl "Status 8" abgesetzt, der erwähnt wird. Raus kommt z.B.:stat/tasmota_CO2/STATUS8 = {"StatusSNS":{"Time":"2024-03-17T14:23:26","MHZ19B":{"Model":"B","CarbonDioxide":732,"Temperature":21.0},"TempUnit":"C"}}Mir ist nicht klar, wie ich jetzt daraus einen Trigger machen soll, wenn ich auf eine Änderung von "CarbonDioxide" mit einem Senden der Daten reagieren will.
In der Doku liest es sich so simpel:
DS18B20#Temperature whenever the temperature of sensor DS18B20 updates (also unchanged)
Der Sensor ist eigentlich der MHZ19B. Aber diese JSON Darstellung mit all den Klammern verwirrt mich.
Weisst Du, wie es nun richtig lauten würde? So?
MHZ19B#CarbonDioxidekannst ja mal testen mit Tasmota Scripting, IP ersetzt du mit der ESP IP,
Datenpunkt wird in Mqtt erstellt ( nach reboot )
Debug Infos stehen in der Tasmota Konsole,>D Timer=0 Wert=0 >BS +>subscribe EA, cmnd/Sensor/MHZ19B >S Timer+=1 if Timer>2 then =>websend [192.168.2.xxx] /cm?cmnd=status 10 print ----- Websend Status 10 ----- endif if Timer>2 then +>publish Sensor/MHZ19B %Wert% print ----- publish %Wert% ----- Timer=0 endif >E Wert=WebQuery#StatusSNS#MHZ19B#CarbonDioxide >W MHZ19B_CarbonDioxideist{m} %0Wert% # -
kannst ja mal testen mit Tasmota Scripting, IP ersetzt du mit der ESP IP,
Datenpunkt wird in Mqtt erstellt ( nach reboot )
Debug Infos stehen in der Tasmota Konsole,>D Timer=0 Wert=0 >BS +>subscribe EA, cmnd/Sensor/MHZ19B >S Timer+=1 if Timer>2 then =>websend [192.168.2.xxx] /cm?cmnd=status 10 print ----- Websend Status 10 ----- endif if Timer>2 then +>publish Sensor/MHZ19B %Wert% print ----- publish %Wert% ----- Timer=0 endif >E Wert=WebQuery#StatusSNS#MHZ19B#CarbonDioxide >W MHZ19B_CarbonDioxideist{m} %0Wert% #@ralla66 sagte in Tasmota MQTT Werte erhalten:
kannst ja mal testen mit Tasmota Scripting, IP ersetzt du mit der ESP IP,
Datenpunkt wird in Mqtt erstellt ( nach reboot )
Debug Infos stehen in der Tasmota Konsole,>D Timer=0 Wert=0 >BS +>subscribe EA, cmnd/Sensor/MHZ19B >S Timer+=1 if Timer>2 then =>websend [192.168.2.xxx] /cm?cmnd=status 10 print ----- Websend Status 10 ----- endif if Timer>2 then +>publish Sensor/MHZ19B %Wert% print ----- publish %Wert% ----- Timer=0 endif mit >E Wert=WebQuery#StatusSNS#MHZ19B#CarbonDioxide >W MHZ19B_CarbonDioxideist{m} %0Wert% #Danke Dir! Praktisch kann ich das leider aktuell nicht umsetzen, da der ESP32 ein tasmota drauf hat nur mit Konsole und Berry Scripting Konsole.
Das mit dem Firmware selbst basteln muss ich mir irgendwann erst mal reinziehen. Das ist für mich noch ein dickes Brett. -
@ralla66 sagte in Tasmota MQTT Werte erhalten:
kannst ja mal testen mit Tasmota Scripting, IP ersetzt du mit der ESP IP,
Datenpunkt wird in Mqtt erstellt ( nach reboot )
Debug Infos stehen in der Tasmota Konsole,>D Timer=0 Wert=0 >BS +>subscribe EA, cmnd/Sensor/MHZ19B >S Timer+=1 if Timer>2 then =>websend [192.168.2.xxx] /cm?cmnd=status 10 print ----- Websend Status 10 ----- endif if Timer>2 then +>publish Sensor/MHZ19B %Wert% print ----- publish %Wert% ----- Timer=0 endif mit >E Wert=WebQuery#StatusSNS#MHZ19B#CarbonDioxide >W MHZ19B_CarbonDioxideist{m} %0Wert% #Danke Dir! Praktisch kann ich das leider aktuell nicht umsetzen, da der ESP32 ein tasmota drauf hat nur mit Konsole und Berry Scripting Konsole.
Das mit dem Firmware selbst basteln muss ich mir irgendwann erst mal reinziehen. Das ist für mich noch ein dickes Brett.ok

nur mal so, Wemos unter 5 Euro -
@ralla66 sagte in Tasmota MQTT Werte erhalten:
kannst ja mal testen mit Tasmota Scripting, IP ersetzt du mit der ESP IP,
Datenpunkt wird in Mqtt erstellt ( nach reboot )
Debug Infos stehen in der Tasmota Konsole,>D Timer=0 Wert=0 >BS +>subscribe EA, cmnd/Sensor/MHZ19B >S Timer+=1 if Timer>2 then =>websend [192.168.2.xxx] /cm?cmnd=status 10 print ----- Websend Status 10 ----- endif if Timer>2 then +>publish Sensor/MHZ19B %Wert% print ----- publish %Wert% ----- Timer=0 endif mit >E Wert=WebQuery#StatusSNS#MHZ19B#CarbonDioxide >W MHZ19B_CarbonDioxideist{m} %0Wert% #Danke Dir! Praktisch kann ich das leider aktuell nicht umsetzen, da der ESP32 ein tasmota drauf hat nur mit Konsole und Berry Scripting Konsole.
Das mit dem Firmware selbst basteln muss ich mir irgendwann erst mal reinziehen. Das ist für mich noch ein dickes Brett.@bertderkleine Hast Du Dir schon mal den tasmota device manager angeschaut und versucht rules zu basteln?
Ich habs zwar noch nie gemacht - aber zumindest hast Du da auch eine Oberfläche:

Musst halt mal stöbern zumindest hat der einen Rules Editor: https://github.com/jziolkowski/tdm/wiki/Screenshots#rules-editor
-
So, ich habe jetzt mal
rule1 ON MHZ19B#CarbonDioxide DO publish tele/tasmota_CO2/SENSOR/ %value% ENDON rule1 1benutzt.
Das geht grundsätzlich in die richtige Richtung. Es sendet jetzt alle paar Sekunden ein Update raus.
Defekte sind noch
a) das Update wird eben alle paar Sekunden gesendet, auch wenn sich der CO2 Wert selbst nicht verändert hat. Noch verstehe ich nicht, was es triggert. Vielleicht findet eine Messung öfters statt, aber ergibt keinen neuen Zahlenwert und wird das triggert dann trotzdem.
b) der CO2-Wert wird über das eigentliche JSON geklatscht, welches ja mehr als nur die eine Zahl beinhaltete. Zwischenzeitlich erscheint das "richtige" JSON immer wieder aufgrund des normalen zyklischen Sendens (habe ich auf 60 Sek gestellt). Hier ist also die Frage, wie ich innerhlab des JSON Pakets nur das eine Feld überschreibe. -
So, ich habe jetzt mal
rule1 ON MHZ19B#CarbonDioxide DO publish tele/tasmota_CO2/SENSOR/ %value% ENDON rule1 1benutzt.
Das geht grundsätzlich in die richtige Richtung. Es sendet jetzt alle paar Sekunden ein Update raus.
Defekte sind noch
a) das Update wird eben alle paar Sekunden gesendet, auch wenn sich der CO2 Wert selbst nicht verändert hat. Noch verstehe ich nicht, was es triggert. Vielleicht findet eine Messung öfters statt, aber ergibt keinen neuen Zahlenwert und wird das triggert dann trotzdem.
b) der CO2-Wert wird über das eigentliche JSON geklatscht, welches ja mehr als nur die eine Zahl beinhaltete. Zwischenzeitlich erscheint das "richtige" JSON immer wieder aufgrund des normalen zyklischen Sendens (habe ich auf 60 Sek gestellt). Hier ist also die Frage, wie ich innerhlab des JSON Pakets nur das eine Feld überschreibe.@bertderkleine Normale Status kannst du unter stat abfragen - tele gibt Dir immer periodisch eine Ausgabe - das ist überflüssig. Der tele Ast wird immer von tasmota selbst getriggert. Wie gesagt mach Dir einen entsprechenden DP unter stat. Allerdings habe ich auch die Standardordnung in Tasmota geändert - weil ich prefixes lieber unter den Geräten habe. Sowas geht natürlich nicht mit dem Sonoff Adapter sondern nur mit MQTT.
-
@bertderkleine Normale Status kannst du unter stat abfragen - tele gibt Dir immer periodisch eine Ausgabe - das ist überflüssig. Der tele Ast wird immer von tasmota selbst getriggert. Wie gesagt mach Dir einen entsprechenden DP unter stat. Allerdings habe ich auch die Standardordnung in Tasmota geändert - weil ich prefixes lieber unter den Geräten habe. Sowas geht natürlich nicht mit dem Sonoff Adapter sondern nur mit MQTT.
@mickym Ich nutze auch den MQTT Adapter. Der Wert unter "stat" ist aber wertlos für mich, da er aktuell z.B. zwei Stunden alt ist.
Das mit dem tele passt also hier schon. -
@mickym Ich nutze auch den MQTT Adapter. Der Wert unter "stat" ist aber wertlos für mich, da er aktuell z.B. zwei Stunden alt ist.
Das mit dem tele passt also hier schon.Teste mal so mit cmnd:
Der Ordner in Mqtt muß da sein MHZ19B/CarbonDioxidebla bla .....................DO publish cmnd/MHZ19B/CarbonDioxide %value% ENDON
Trigger, Wert in eine Var schreiben, wenn neuer Wert ist >x oder <x der Var dann führe Rule aus.
-
Was hat das denn noch mit dem Threadtitel und der Kategorie Projektvorstellung zu tun?
-
Google mal nach PowerDelta ( so meine ich , heißt das)
Teleperiod ist10sek das Niedrigste.Bei Tasmota Geräten nimmt man den Sonoff Adapter.
Die sind aufeinander eingespielt und liefern dir fertige Datenpunkte.@haselchen Hallo, ich hoffe du hast einen Tipp für mich. Ich habe mittlerweile 6x ESP8266 mit Tasmota über den Sonoff-Adapter eingebunden, in den jeweiligen Konsolen den Befehl Teleperiod 10 eingetragen. Bei einem ESP scheint das aber nicht zu funktionieren, dieser sendet sekündlich seine Werte, siehe auch Bild. Mit Teleperiod 1 habe ich zurückgesetzt, danach Teleperiod 10 neu eingegeben, dennoch werden die Werte sekündlich gesendet.
Ich freue mich auf deine Rückmeldung, vielen Dank!

-
@homoran sagte in Tasmota Rules?:
Was hat das denn noch mit dem Threadtitel und der Kategorie Projektvorstellung zu tun?
Ich hab das jetzt mal abgetrennt und verschoben!
@BertDerKleine bitte den provisorischen Threadtitel anpassen. -
@haselchen Hallo, ich hoffe du hast einen Tipp für mich. Ich habe mittlerweile 6x ESP8266 mit Tasmota über den Sonoff-Adapter eingebunden, in den jeweiligen Konsolen den Befehl Teleperiod 10 eingetragen. Bei einem ESP scheint das aber nicht zu funktionieren, dieser sendet sekündlich seine Werte, siehe auch Bild. Mit Teleperiod 1 habe ich zurückgesetzt, danach Teleperiod 10 neu eingegeben, dennoch werden die Werte sekündlich gesendet.
Ich freue mich auf deine Rückmeldung, vielen Dank!

Puh, da stellst Du ja ne Frage

Auf Anhieb keine Idee.
Aber man kann sich ja ranarbeiten.
Welche Tasmota Version?Edit1:
Hier sind noch nützliche Commands mit Erklärungen
https://tasmota.github.io/docs/Commands/Edit2:
Für ESP8266
https://tasmota.github.io/docs/Configuration-Procedure-for-New-Devices/