Rule zum senden von Werten unabhänig von TelePeriod

  • Hallo, ich benötige Mal eure Hilfe.

    Ich überwache die Leistung meiner PV Anlage mit einem Mod-Bus Zähler DDS238-2.

    Das läuft soweit alles super bis auf die Tatsache dass Tasmota eine Änderung der Werte für die aktuelle Leistung nur im Abstand der TelePeriod an den IObroker sendet.Aktuell schalte ich über folgende Rule die TelePeriod morgens bei einer Leistung der PV Anlage über 10 Watt auf TelePeriod 10 und wenn Abends dann die Leistung unter 10 Watt fällt in der Nacht auf TelePeriod 600 zurück.


    Rule1 ON Energy#Power>10 DO TelePeriod 10 ENDON ON Energy#Power<10 DO TelePeriod 600 ENDON

    Rule1 5


    Meine Frage ist, wie müsste eine Rule aussehen die die aktuelle Leistung sofort bei Änderung ( unabhänig von der TelePeriod ) an den IObroker sendet?

    Ich habe schon etwas in dieser Art probiert aber ohne Erfolg.

    ON Energy#Power DO publish state/Energy/Power %value%


    Danke schon mal für eure hilfe.


    Die normale Ausgabe in der Konsole sieht so aus:

    23:22:18.830 MQT: tele/tasmota_CFE6A1/STATE = {"Time":"2021-05-17T23:22:18","Uptime":"1T03:13:17","UptimeSec":97997,"Heap":28,"SleepMode":"Dynamic","Sleep":100,"LoadAvg":9,"MqttCount":5,"Wifi":{"AP":2,"SSId":"XX","Channel":13,"RSSI":60,"Signal":-70,"LinkCount":3,"Downtime":"0T00:00:15"}}

    23:22:18.842 MQT: tele/tasmota_CFE6A1/SENSOR = {"Time":"2021-05-17T23:22:18","ENERGY":{"TotalStartTime":"2021-05-17T19:05:45","Total":147.020,"Yesterday":2.400,"Today":2.240,"ExportActive":0.000,"Period":0,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":1.00,"Frequency":50,"Voltage":234,"Current":0.000},"DS18B20-1":{"Id":"01143BF853AA","Temperature":20.4},"DS18B20-2":{"Id":"01186D5227FF","Temperature":20.3},"TempUnit":"C"}

  • Moin.


    Ich würde das mit ner Hysterese lösen damit nicht dauernd gesendet wird.

    Im Beispiel wird die Hsystere +-2 über dir Variabel var3 gesetzt.

    Code
    Rule1
    on system#boot do backlog var1 0; var2 0; var3 2 endon
    on energy#power>%var1% do backlog publish stat/ENERGY/RESULT {"ENERGY":"%value%"}; var1 %value%; var2 %value%; add1 %var3%; sub2 %var3% endon
    on energy#power<%var2% do backlog publish stat/ENERGY/RESULT {"ENERGY":"%value%"}; var1 %value%; var2 %value%; add1 %var3%; sub2 %var3% endon

    Beim booten wird wie erwähnt erst mal die var1 und var2 auf 0 gesetzet und die var3 mit dem Hysteresenwert beschrieben.

    Dann wertet die Rule aus, ist der wert größer var1 wird zum einen MQTT Befehl abgesetzt

    (Müsste eigentlich im IOBroker einen eigenen Datenpunkt "ENERGY" anlegen, eben das was in der geschweiften Klammer vor dem %value% steht)

    Es werden auch die var1 und var2 mit dem aktuellen Energiewert beschrieben und zu var1 der Hysteresenwert addiert und von var2 subtrahiert.

    Dasselbe passiert wenn der Energiewert kleiner var2 (also der aktuelle Energiewert abzüglich Hsysteresenwert) wird.


    Rule 1 aktivieren:

    Rule1 1

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

    Einmal editiert, zuletzt von HoerMirAuf ()

  • Moin HoerMirAuf,

    danke für deine Hilfe.

    Ich habe die Rule in der Konsole eingefügt und mit " Rule1 1 " gestartet.

    Leider sendet die Rule jetzt 2-3 mal pro Sekunde den aktuellen Wert.

    Das geht so ca 20 -30 Minuten und dann scheint die Rule abzustürzen, jedenfalls kommen dann garkeine Werte mehr.

    Erst nach einem Neustart der Rule kommen dann wieder die Werte 2-3 mal pro Sekunde.


    Mir ist gerade noch aufgefallen dass in der Ausgabe der Konsole die Var1 mit %value% beschrieben wird, während in Var2 "60" steht ( 60 ist die aktuelle Leistung )

    und in Var3 "2" steht.

    Müsste in Var1 nicht auch eine Zahl anstelle von %value% stehen ?

  • Moin.


    oh ja, ein Tippfehler, sorry. Bei einem Value fehlt hinten das %, da funktioniert natürlich die ganze Rule nicht wenn var1 nicht richtig beschrieben wird.

    hier korrigiert:


    Code
    Rule1
    on system#boot do backlog var1 0; var2 0; var3 2 endon
    on energy#power>%var1% do backlog publish stat/ENERGY/RESULT {"ENERGY":"%value%"}; var1 %value%; var2 %value%; add1 %var3%; sub2 %var3% endon
    on energy#power<%var2% do backlog publish stat/ENERGY/RESULT {"ENERGY":"%value%"}; var1 %value%; var2 %value%; add1 %var3%; sub2 %var3% endon

    Hab es Sicherheitshalber im Originalpost auch korrigiert.

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

  • HoerMirAuf


    ist es möglich diese obige Rule von dir, mit:

    Code
    ON tele-SR04#distance DO Backlog var4 %value%; event checklimit=%value%; event senddistance ENDON
    ON event#checklimit>30 DO var4 31 ENDON
    ON event#checklimit<5 DO var4 4 ENDON
    ON event#senddistance DO Backlog SCALE1 %var4%, 31, 4, 0, 100; event pubdata ENDON
    ON event#pubdata DO publish stat/Wassertank_prozent/RESULT {"Wassertank_prozent":"%var4%"} ENDON

    dieser zu kombinieren?


    Code
    on system#boot do backlog var1 0; var2 0; var3 1 endon
    on SR04#distance>%var1% do backlog publish stat/Wassertank_Distance/RESULT {"Wassertank_Distance":"%value%"}; var1 %value%; var2 %value%; add1 %var3%; sub2 %var3% endon
    on SR04#distance<%var2% do backlog publish stat/Wassertank_Distance/RESULT {"Wassertank_Distance":"%value%"}; var1 %value%; var2 %value%; add1 %var3%; sub2 %var3% endon

    so funktioniert sie bei mir.


    Hätte gerne den Tankinhalt in Prozent der mir ja mit der Rule ausgerechnet wird, aber eben Aktuell ohne die Teleperiode verändern zu müssen.

  • Hi


    Code
    on system#boot do backlog var1 0; var2 0; var3 1 endon
    on SR04#distance>%var1% do event checklimit=%value%; var4 %value% ; event senddistance endon
    on SR04#distance<%var2% do event checklimit=%value%; var4 %value% ; event senddistance endon
    on event#checklimit>30 do var1 31 endon
    on event#checklimit<5 do var1 4 endon
    on event#senddistance do backlog scale1 %var1%, 31, 4, 0, 100; event pubdata endon
    on event#pubdata do backlog publish stat/Wassertank_Distance/RESULT {"Wassertank_prozent":"%var1%"}; var1 %var4%; var2 %var4%; add1 %var3%; sub2 %var3% endon

    EDIT

    Ups ... mir ist eben aufgefallen, das ich 2 backlogs vergessen habe. var1 hatte ich auch doppelt verwendet.

    Das sollte zwar nicht machen aber nicht elegant.


    Hier Überarbeitet:

    Code
    Rule1
    on system#boot do backlog var1 0; var2 0; var3 1 endon
    on SR04#distance>%var1% do backlog var4 %value%; var5 %value%; event checklimit=%value%; event senddistance endon
    on SR04#distance<%var2% do backlog var4 %value%; var5 %value%; event checklimit=%value%; event senddistance endon
    on event#checklimit>30 do var4 31 endon
    on event#checklimit<5 do var4 4 endon
    on event#senddistance do backlog scale1 %var4%, 31, 4, 0, 100; event pubdata endon
    on event#pubdata do backlog publish stat/Wassertank_Distance/RESULT {"Wassertank_prozent":"%var4%"}; var1 %var5%; var2 %var5%; add1 %var3%; sub2 %var3% endon

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

    5 Mal editiert, zuletzt von HoerMirAuf ()

  • Hi.


    Du hast das mit Rule1 davor eingegeben?

    Also Rule1 on system#boot ....


    Sollte ja inzwischen eigentlich klar sein das das immer mit vor die Rule gehört ;)

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

  • Moin,


    Hehe ja, dass habe selbst ich langsam kapiert :)

    In meinem Fall:

    Code
    rule2
    on system#boot do backlog var1 0; var2 0; var3 1 endon
    on SR04#distance>%var1% do backlog var4 %value%; var5 %value%; event checklimit=%value%; event senddistance endon
    on SR04#distance<%var2% do backlog var4 %value%; var5 %value%; event checklimit=%value%; event senddistance endon
    on event#checklimit>30 do var4 31 endon
    on event#checklimit<5 do var4 4 endon
    on event#senddistance do backlog scale1 %var4%, 31, 4, 0, 100; event pubdata endon
    on event#pubdata do backlog publish stat/Wassertank_Distance/RESULT {"Wassertank_prozent":"%var4%"}; var1 %var5%; var2 %var5%; add1 %var3%; sub2 %var3% endon

    als Ergebnis bekomme ich dann:


    Code
    07:18:35 MQT: stat/Hochbeet94/RESULT = {"Rule2":"ON","Once":"OFF","StopOnError":"OFF","Free":511,"Rules":""}
  • Moin. Welche FW Version?

    Bei mir passt das spielend in den Speicher zumal dir Rules seit geraumer Zeit kompermiert werden und deswegen weit über 1000 Zeichen fassen.


    Oder du hast es abgetippt und immer "Enter" gedrückt nach jeder Zeile.


    Zitat

    rule2 on system#boot do backlog var1 0; var2 0; var3 1 endon on SR04#distance>%var1% do backlog var4 %value%; var5 %value%; event checklimit=%value%; event senddistance endon on SR04#distance<%var2% do backlog var4 %value%; var5 %value%; event checklimit=%value%; event senddistance endon on event#checklimit>30 do var4 31 endon on event#checklimit<5 do var4 4 endon on event#senddistance do backlog scale1 %var4%, 31, 4, 0, 100; event pubdata endon on event#pubdata do backlog publish stat/Wassertank_Distance/RESULT {"Wassertank_prozent":"%var4%"}; var1 %var5%; var2 %var5%; add1 %var3%; sub2 %var3% endon

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini

    Einmal editiert, zuletzt von HoerMirAuf ()

  • HoerMirAuf


    ahh mein Fehler, hatte eine alte Tasmota Firmware noch drauf. Er nimmt die Rule nun.

    Aber da passt noch was nicht!

    Add1 und Sub2 passen nicht, sowie scale1 wird die Falsche Zahl gepublished. Var4 passt doch eigentlich wieso nimmt er 8.175 und nicht die 84.537?



    Edit: Add1 und Sub2 passen nur der Wert der gesendet wird ist der falsche noch.

  • Hi


    ahhh, mein Fehler. Sorry. Hatte noch nicht groß mit scale gearbeitet.

    Versuches es mal mit:

    scale4 %var4%, 31, 4, 0, 100;

    Online Compiler


    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    mosquitto/bash/html/cgi auf RPI 2B+/Sprachsteuerung via IFTTT/4xGoogle-Home-Mini