tasmota counter auf null

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
steinadler
Beiträge: 65
Registriert: 29. Apr 2020 19:15

tasmota counter auf null

Beitrag von steinadler »

hi
ich schonwieder
ich versuche den counter von tasmota mit openhabregel wieder auf null zu setzen
also, tasmota zählt hoch, und die regel in openhab setzt den counter von tasmota wieder auf null, der dann wieder von neuen hochzählt

mein gedanke
habe wemos d1 mit tasmota
daran einen flow sensor(zum wasserzählen)
wenn der counter einen bestimmten wert erreicht, counter wieder auf null, zählerschleife eins weiter
das mit der zählerschleife kommt noch später(soll dann jedesmal einen liter hochzählen)
den counter habe ich nun versucht mit sendCommand wieder auf null zu bringen
der befehl in der konsole von tasmota lautet counter1 0
der befehl sollte auf der konsole von tasmota ausgeführt werde, da der counter ja irgendwan mal "voll" ist

Code: Alles auswählen

Thing topic wasserzaehler "Wasseruhr" @ "Erdgeschoss" {
      Channels:
        Type number : wassersensor "Liter"   [ stateTopic="tele/wasserzaehler/SENSOR", transformationPattern="JSONPATH:$.COUNTER.C1"]
    }  

Code: Alles auswählen


//wasseruhr
        Number wassersensor "Liter [%.1f Li]"                      { channel="mqtt:topic:b8fd5e5c:wasserzaehler:wassersensor"}

Code: Alles auswählen


rule "wassersensor"
    when 
      Item wassersensor changed
       then 
         // if ( wassersensor > 110 )
             sendCommand(wassersensor, counter1 = 0)       
   end
    
die regel ist einer meiner fehlgeschlagenen versuche
danke eurer hilfe...

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: tasmota counter auf null

Beitrag von udo1toni »

Das ist auch kein Wunder (dass die Rule fehlgeschlagen ist).

Du darfst nicht einfach irgendwas hinschreiben, was in Teilen entfernt ähnlich aussieht, wie etwas, was Du irgendwo mal gesehen hast ;)

der erst Punkt ist aber, Du möchtest einen Befehl an Tasmota senden. dazu musst Du einen Channel in einem mqtt Thing anlegen, der ein commandTopic enthält. Dieses commandTopic muss das richtige zum Zurücksetzen des Counters sein. Welcher das ist, weiß ich nicht. Jedenfalls ist es keinesfalls das stateTopic ;)

Mutmaßlich (ich habe hier keine Sensoren im Einsatz) wird das commandTopic in diesem Fall cmnd/wasserzaehler/counter1 lauten. Entsprechend legst Du also einen zweiten Channel an:

Code: Alles auswählen

Thing topic wasserzaehler "Wasseruhr" @ "Erdgeschoss" {
      Channels:
        Type number : wassersensor "Liter"         [ stateTopic="tele/wasserzaehler/SENSOR", transformationPattern="JSONPATH:$.COUNTER.C1"]
        Type switch : reset        "Reset Counter" [ commandTopic="cmnd/wasserzaehler/counter1",off="0",on="0" ]
    }
Nun kannst Du ein Switch Item mit dem 2. Channel verlinken:

Code: Alles auswählen

//wasseruhr
Number wassersensor "sensorinput [%.0f]" { channel="mqtt:topic:b8fd5e5c:wasserzaehler:wassersensor" }
Switch resetwassersensor "Reset"         { channel="mqtt:topic:b8fd5e5c:wasserzaehler:reset" }
Number wasserLiter "Liter [%.0f l]" 
Nun kannst Du sowohl mit dem Kommando ON als auch mit dem Kommando OFF den Zähler zurücksetzen:

Code: Alles auswählen

rule "wassersensor reset"
when 
    Item wassersensor changed
then 
    var nLiter = 0
    if(wasserLiter.state instanceof Number)
        nLiter = wasserLiter.state as Number
    if(wassersensor.state > 110) {
        resetwassersensor.sendCommand(ON)       
        wasserLiter.postUpdate((nLiter + 1)
    }
end
Die Rule tut zweierlei: 1. liest sie den aktuellen Wert aus dem Item wasserLiter aus. Sollte es sich um eine gültige Zahl handeln, wird der Wert in der Variablen nLiter gespeichert. Ansonsten hält die Variable den Wert 0 als Ausgangswert.
2. Überschreitet der Zählerstand des Items wassersensor den Wert 110 (es ist wichtig, dass hier .state verwendet wird, es geht nicht um das Item, sondern um dessen Status), so wird zum Einen über das Item resetwassersensor der Zähler zurückgesetzt, zum Anderen wird im Item wasserLiter der Wert aus nLiter um 1 erhöht und gespeichert.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

steinadler
Beiträge: 65
Registriert: 29. Apr 2020 19:15

Re: tasmota counter auf null

Beitrag von steinadler »

wie immer, retter in der not...
ja, hattest recht, habe ich irgendwo im I.net so gelesen.
dachte, dass man mit sendCommand einen "befehl" direkt an tasmota senden kann

grosses danke, werde mich die tage daran machen, und einbauen

Benutzeravatar
udo1toni
Beiträge: 13856
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: tasmota counter auf null

Beitrag von udo1toni »

steinadler hat geschrieben: 3. Apr 2021 07:32 wie immer, retter in der not...
ja, hattest recht, habe ich irgendwo im I.net so gelesen.
dachte, dass man mit sendCommand einen "befehl" direkt an tasmota senden kann

grosses danke, werde mich die tage daran machen, und einbauen
Nein, sendCommand() sendet ausschließlich Befehle an das angegebene Item (welches die empfangenen Befehle dann an eventuell verknüpfte Channel/Bindings weiterleitet).
postUpdate() ändert derweil ausschließlich den Status des angegebenen Items. Große Ausnahme: das knx Binding unterstützt spezielle Channel, mit denen das postUpdate auf den knx-Bus weitergeleitet wird. Im Gegenzug werden solche Items dann ein received command triggern, wenn sie vum Bus ein Update empfangen.
Damit also ein Befehl an ein mit Tasmota geflashtes Gerät gesendet werden kann, muss das Item mit einem Channel verknüpft sein, welches ein commandTopic konfiguriert hat.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten