Variablen in Rules verwenden

  • Liebe Forumsgemeinde,

    ich habe seit einigen Tagen immer wieder die entsprechende Doku zu Rules und die Beiträge hier im Forum gelesen, bin aber noch nicht so richtig weiter gekommen. Daher frage ich jetzt im Forum:

    Wert einer Variablen zuweisen

    Ich möchte Rules auf einem Plug realisieren. Ich habe Beispiele dafür gefunden, wie ich beim Eintreffen einer Bedingung eine Variable füllen kann. Aber wie funktioniert das, wenn die Variable nichts mit der Bedingung zu tun hat?

    Beispiel: Merk dir, (nach einer EInschaltverzögerung) welche Leistung beim Einschalten des Plugs verbraucht wird, in var1. ##Achtung: Rule1 ist fehlerhaft!

    Rule1 ON power1#state=1 Do Backlog Delay 40; var1 energy#power; Rule2 1 ENDON
    Backlog Rule1 1; Rule1 5

    --> Ich habe das Setzen der Variable nicht herausgefunden, gibt es eine Lösung?

    Wert einer Variablen vergleichen - Projekt: Leistungsabschaltung

    Ich möchte eine Abschaltung realisieren, wenn die verbrauchte Leistung eine Zeitlang nicht mehr fällt. Dies ist beim Laden von Akkus sehr praktisch. Leider habe ich Probleme mit dem Vergleich von Variablen. Hier im Forum gibt es schon ZIG Beiträge, die sich um das Thema drehen. Nur wird immer bei einer bestimmten Leistung abgeschaltet, ohne Variablen zu bemühen. Ich habe jedoch unterschiedliche Ladegeräte im Einsatz und weiß die Leistung vorher nicht. Daher muss ich die verbrauchte Leistung tracken. ##Achtung: Rule2 ist fehlerhaft!

    Rule1 ON power1#state=1 Do Backlog Delay 40; var1 1; Rule2 1 ENDON

    Rule2 ON energy#power DO var2 %value% ENDON ON %var2% < %var1% DO Rule3 1 ENDON ON %var2% > %var1% + 2 DO Backlog Rule3 0; var1 %var2% ENDON

    Rule3 ON energy#power < %var1% Do Backlog Ruletimer1 10; var1 %var2% ENDON ON Rules#timer=1 DO Backlog Power 0; Rule2 0; Rule3 0 ENDON

    Backlog Rule1 1; Rule1 5; Rule2 5; Rule3 5

    --> In Rule2 zündet die Bedingung "ON %var2% < %var1% DO" nicht

    Meldung:

    15:04:37 RSL: stat/tasmota_32D998/RESULT = {"POWER":"ON"}

    15:04:37 RSL: stat/tasmota_32D998/POWER = ON

    15:04:37 RUL: POWER1#STATE=1 performs "Backlog Delay 40; var1 1; Rule2 1"

    15:04:37 RSL: stat/tasmota_32D998/RESULT = {"Delay":40}

    15:04:41 RSL: stat/tasmota_32D998/RESULT = {"Var1":"1"}

    15:04:41 RSL: stat/tasmota_32D998/RESULT = {"Rule2":"ON","Once":"ON","StopOnError":"OFF","Length":134,"Free":377,"Rules":"ON energy#power DO var2 %value% ENDON ON %var2% < %var1% DO Rule3 1 ENDON ON %var2% > %var1% + 2 DO Backlog Rule3 0; var1 %var2% ENDON"}

    15:04:41 RUL: ENERGY#POWER performs "var2 0"

    15:04:41 RSL: stat/tasmota_32D998/RESULT = {"Var2":"0"}

    Vielen Dank schon mal für Eure Hilfe! Wall.e

  • HI

    --> In Rule2 zündet die Bedingung "ON %var2% < %var1% DO" nicht

    Weil der Syntax falsch ist. ;)

    Rule2

    ON energy#power DO var2 %value% ENDON

    ON %var2% < %var1% DO Rule3 1 ENDON

    ON %var2% > %var1% + 2 DO Backlog Rule3 0; var1 %var2% ENDON

    Wenn, dann so:

    Rule2

    ON energy#power DO var2 %value% ENDON

    ON var2#state<%var1% DO backlog Rule3 1; add1 2 ENDON

    ON var2#state<%var1% do Backlog Rule3 0; var1 %var2% ENDON

    Wobei ich jetzt nur den Syntax beachtet hab nicht die Funktion der Rule an sich, denn die stimmt so eher nicht

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Ach ja ...

    das was Du suchst ist im Prinzip dies:

    Rules Beispiel - Mit einem POW ein MQTT Nachricht absetzen wenn der Leistungswert über eine gewisse Zeit (10 min) unter einen Grenzwert fällt - CREATIONX - Smart Home Forum

    Nur das eben kein publish abgesetzt wird sondern der power1 ausgeschaltet wird.

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Danke für Deine schnelle Korrektur! ;)

    Ich habe die Zuweisung korrigiert. Interessant ist nun, dass bei der "statischen" Variante (das ist im Prinzip das Rules POW Beispiel mit festen Werten) die Abfrage "energy#power" in Rule2 und Rule3 zündet, aber bei der "dynamischen" Variante nicht! Bei Power1#state=1 liegt zunächst Leistung an, ich schalte die Leistung dann ab. In der "statischen" Variante schaltet der Plug nach 10sec ab. In der "dynamischen" Variante schaltet der Plug nicht ab. In var1 und var2 bleibt immer die anfängliche Leistung gespeichert :-/

    "statische" Variante: Plug schaltet aus, wenn ich den Stromverbraucher ausschalte

    Backlog Rule1 0; Rule2 0; Rule3 0

    Rule1 ON power1#state=1 DO Ruletimer1 4 ENDON

    ON Rules#Timer=1 DO Rule2 1 ENDON

    Rule2 ON energy#power<=5 DO Rule3 1 ENDON
    ON Energy#Power>5 DO Rule3 0 ENDON

    Rule3 ON energy#power<=5 DO Ruletimer2 10 ENDON

    ON Rules#timer=2 DO Backlog Power 0; Rule2 0; Rule3 0 ENDON

    Backlog Rule1 1; Rule1 5; Rule2 5; Rule3 5

    "dynamische" Variante: Plug schaltet nicht aus, wenn ich den Stromverbraucher ausschalte

    Rule1 ON power1#state=1 DO Ruletimer1 4 ENDON

    ON Rules#Timer=1 DO Backlog var1 1; Rule2 1 ENDON

    Rule2 ON energy#power DO var2 %value% ENDON

    ON var2#state<%var1% DO Rule3 1 ENDON

    ON var2#state>%var1% DO Backlog Rule3 0; var1 %var2% ENDON

    Rule3 ON energy#power < %var1% Do Backlog Ruletimer2 10; var1 %var2% ENDON

    ON Rules#timer=2 DO Backlog Power 0; Rule2 0; Rule3 0 ENDON

    Backlog Rule1 1; Rule1 5; Rule2 5; Rule3 5

    hmmmmm.....

  • Weil du überall die ONE-SHOT Funktion drüberbügelst RULE<x> 5

    ONE-SHOT (ONCE) bewirkt das ein trigger mit gleicher Auslösung nur einmal feuert.

    In Deinem Fall betrifft das in der Rule2 den trigger:

    ON energy#power do var2 %value% ENDON 
    Das ist ein Trigger ohne genaue Wertvorgabe und heißt einfach: "!ändert sich der Wert. führe aus" das macht die Rule EINMAL und fertig.

    Damit ändert sich var2 auch nur einmal und das wars.

    Deine Rule1 benötigt kein ONCE, also nimm aus Rule1 ONCE raus: Rule1 4 und verschiebe das einlesen in var2 in die Rule1:

    Code
    Rule1
    ON power1#state=1 DO Ruletimer1 4 ENDON
    ON Rules#Timer=1 DO Backlog var1 1; Rule2 1 ENDON
    ON energy#power DO var2 %value% ENDON
    Code
    Rule2
    ON var2#state<%var1% DO Rule3 1 ENDON
    ON var2#state>%var1% DO Backlog Rule3 0; var1 %var2% ENDON
    Code
    Rule3
    ON energy#power<%var1% Do Backlog Ruletimer2 10; var1 %var2% ENDON
    ON Rules#timer=2 DO Backlog Power 0; Rule2 0; Rule3 0 ENDON

    EDIT:

    bzw. beschreib doch mal genau WAS du machen möchtest.

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Vielen Dank schon mal, ich gucke mir das heute Nachmittag an! Du hast Recht: Im ersten Beispiel habe ich konkrete Abfragen zum Zünden der Rules. Im zweiten Beispiel nicht. Weil die Syntax das nicht hergibt :-/

    Kurz erst einmal die Beschreibung, was ich machen will:

    Ich habe unterschiedliche Akkulader im Einsatz. Ich möchte einen Plug mit Rules so programmieren, dass der Plug am Ende des Ladens automatisch ausschaltet.
    Ich möchte einen Plug so programmieren, dass

    - das Laden mit dem Drücken des Button am Plug gestartet wird.

    - unabhängig von den eingesteckten Ladern das Laden beendet wird, wenn alle Akkus voll sind (also nur noch ein Ruhestrom von zwischen 1 und 7W fließt, je nach eingesteckten Ladern)
    - Wenn am Anfang keine Akkuladung erfolgt (Ruhestrom zwischen 0 und 7W), sich der Plug wieder ausschaltet.

    - ein Nachstecken von Akkus möglich ist
    - Am Ende des Ladens (Strom geht nicht weiter herunter) der Plug ausschaltet

  • Da reicht es ein wenig das Beispiel zu modifizieren, damit uns die ONCE Funktion nicht das ausschalten aushebelt wenn der energy#power<=7 vor und nach dem einschalten gleich ist. Damit der <= greift muss erst mal > gewesen sein:

    Code
    rule 1 on power1#state=1 do var1 0 endon
    Code
    rule2
    on Energy#Power<=7 do rule3 1 endon
    on Energy#Power>%var1% do backlog rule3 0; var1 7 endon
    Code
    rule3
    on Energy#Power<=7 do ruletimer1 10 endon
    on rules#timer=1 do Power1 0 endon

    backlog rule1 1; rule2 1; rule1 4; rule2 5; rule3 5

    Wird manuell eingeschaltet wird die var1 auf 0 gesetzt. Der energy#power ist ja IMMER >0 also greift der Trigger und setzt die var1 auf den eigentlich Grenzwert >7, es sei denn es war eh schon >7.

    Damit würde der Trigger <=7 wieder greifen falls nach dem einschalten kein Ladestrom gezogen wird. Es wird dann die rule3 aktiv, die über den Ruletimer nach 10 Sekunden wieder ausschaltet.

    Ist der Ladestrom >7 bleibt die Rule3 inaktiv bis eben der Ladestrom sinkt.

    Wird manuell ausgeschaltet würde der Ladestrom ebenfalls <=7 fallen und nochmal ausgeschaltet werden, was keinen Unterschied macht weil schon aus ist. Könnte man aber auch mit auswerten, wenn man es ganz genau möchte.


    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Vielen Dank!

    Ich habe nun viel gelernt über das Verwenden der Rules im Zusammenhang mit Variablen. Mein "dynamisches" Beispiel von oben sollte mit ein bischen Tuning funktionieren, wenn ich für die Rule2 "ONCE" off (=4) setze.

    Leider sind die Rules ein bisschen buggy. Was mir aufgefallen ist: Nach restart der Dose ist die Rule 2 immer wieder auf "ONCE" ON (=5) :-p Und leider wird die Console mit den Kommentaren aus der Rule2 bei setzen auf ONCE=OFF vollgeschmiert und es gibt kein "Clear" für die Console. So oder so... Ein nettes Gimmick, diese Rules und halt nicht für Poweranwendungen konzipiert!

    Ich hoffe, ich komme am WE mit der Funktion durch. Wenn nicht, frage ich noch mal ;)

  • Die Rules buggy? Nicht das ich wüsste. Die arbeiten recht genau.

    Zeig doch mal was du genau jetzt eingegeben hast und auch mal ein Copy und Paste vom Log

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Jetzt bin ich sehr gespannt. Ich beobachte folgende Dinge:

    Ich hab eine sehr einfache Rule geschrieben:

    Code
    Backlog Rule1 0; Rule2 0; Rule3 0
    Rule1     ON power1#state=1 DO Ruletimer1 4 ENDON
              ON Rules#Timer=1 DO Power 0 ENDON
    Backlog Rule1 1; Rule2 4; Rule3 5

    --> Rule 2+3 habe ich gelöscht. Zum Test habe ich Rule2 auf Once = "OFF" gesetzt

    Console:

    21:57:14 CMD: Backlog Rule1 1; Rule2 4; Rule3 5

    21:57:15 RSL: stat/tasmota_32D998/RESULT = {"Rule1":"ON","Once":"ON","StopOnError":"OFF","Length":73,"Free":438,"Rules":"ON power1#state=1 DO Ruletimer1 4 ENDON ON Rules#Timer=1 DO Power 0 ENDON"}

    21:57:15 RSL: stat/tasmota_32D998/RESULT = {"Rule2":"OFF","Once":"OFF","StopOnError":"OFF","Length":0,"Free":511,"Rules":""}

    21:57:15 RSL: stat/tasmota_32D998/RESULT = {"Rule3":"OFF","Once":"ON","StopOnError":"OFF","Length":0,"Free":511,"Rules":""}

    --> Ich habe den Plug in der Steckdose raus/ rein gesteckt.

    Console:

    21:59:46 CMD: Backlog Rule1; Rule2; Rule3

    21:59:46 RSL: stat/tasmota_32D998/RESULT = {"Rule1":"ON","Once":"ON","StopOnError":"OFF","Length":60,"Free":451,"Rules":"ON power1#state=1 Do Backlog Delay 40; var1 1; Rule2 1 ENDON"}

    21:59:46 RSL: stat/tasmota_32D998/RESULT = {"Rule2":"ON","Once":"ON","StopOnError":"OFF","Length":135,"Free":376,"Rules":"ON energy#power DO var2 %value% ENDON ON var2#state<%var1% DO Rule3 1 ENDON ON var2#state>%var1+2 DO Backlog Rule3 0; var1 %var2% ENDON"}

    21:59:47 RSL: stat/tasmota_32D998/RESULT = {"Rule3":"OFF","Once":"ON","StopOnError":"OFF","Length":128,"Free":383,"Rules":"ON energy#power < %var1% Do Backlog Ruletimer1 10; var1 %var2% ENDON ON Rules#timer=1 DO Backlog Power 0; Rule2 0; Rule3 0 ENDON"}

    --> Alle drei Rules haben plötzlch falsche Inhalte und Rule 2 die falschen Status (Rule2: "ON" + Once = "ON" :-/

    --> Ich habe die Rule1 wieder ersetzt.

    Console:

    22:03:23 CMD: Rule1 ON power1#state=1 DO Ruletimer1 4 ENDON ON Rules#Timer=1 DO Power 0 ENDON

    22:03:23 RUL: Stored uncompressed, would compress from 73 to 57 (-22%)

    22:03:23 RSL: stat/tasmota_32D998/RESULT = {"Rule1":"ON","Once":"ON","StopOnError":"OFF","Length":73,"Free":438,"Rules":"ON power1#state=1 DO Ruletimer1 4 ENDON ON Rules#Timer=1 DO Power 0 ENDON"}

    --> Hier habe ich den Button gedrückt. Der Plug schaltet aus. Er war vom Einstöpseln noch in "POWER" = "ON".

    22:03:27 RSL: stat/tasmota_32D998/RESULT = {"POWER":"OFF"}

    22:03:27 RSL: stat/tasmota_32D998/POWER = OFF

    22:03:28 RSL: tele/tasmota_32D998/STATE = {"Time":"2022-03-27T22:03:28","Uptime":"0T00:05:09","UptimeSec":309,"Vcc":3.557,"Heap":29,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER":"OFF","Wifi":{"AP":1,"SSId":"WLAN zur Klause","BSSId":"38:10:D5:81:3E:0E","Channel":1,"RSSI":46,"Signal":-77,"LinkCount":1,"Downtime":"0T00:00:03"}}

    22:03:28 RSL: tele/tasmota_32D998/SENSOR = {"Time":"2022-03-27T22:03:28","ENERGY":{"TotalStartTime":"2022-03-23T21:06:39","Total":0.001,"Yesterday":0.000,"Today":0.001,"Period":1,"Power":0,"ApparentPower":0,"ReactivePower":0,"Factor":0.00,"Voltage":221,"Current":0.000}}

    --> Hier habe ich den Button gedrückt. Der Plug schaltet ein

    22:03:31 RSL: stat/tasmota_32D998/RESULT = {"POWER":"ON"}

    22:03:31 RSL: stat/tasmota_32D998/POWER = ON

    22:03:31 RUL: POWER1#STATE=1 performs "Ruletimer1 4"

    22:03:31 RSL: stat/tasmota_32D998/RESULT = {"T1":4,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}

    22:03:35 RUL: RULES#TIMER=1 performs "Power 0"

    22:03:35 RSL: stat/tasmota_32D998/RESULT = {"POWER":"OFF"}

    22:03:35 RSL: stat/tasmota_32D998/POWER = OFF

    --> Der Plug hat nach 4sec ausgeschaltet. Fein!!!

    --> Hier habe ich den Button gedrückt. Der Plug schaltet wieder ein

    22:03:40 RSL: stat/tasmota_32D998/RESULT = {"POWER":"ON"}

    22:03:40 RSL: stat/tasmota_32D998/POWER = ON

    22:03:40 RUL: POWER1#STATE=1 performs "Ruletimer1 4"

    22:03:40 RSL: stat/tasmota_32D998/RESULT = {"T1":4,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}

    --> hier bleibt der Plug "hängen"

    Funktion:

    --> Beim ersten Drücken des Button schaltet der Plug nach 4sec aus.

    --> Beim zweiten Drücken des Button schaltet der Plug nicht aus! :-/


    Meine Fragen:
    (1) Was muss ich machen, dass meine aktuellen Rules + Status bei Aus-/ Einstecken nicht verloren gehen?
    (2) Was muss ich machen, damit der Plug bei "On Rules#Tmer=1" auch beim zweiten Mal zündet?

    3 Mal editiert, zuletzt von wall_e (27. März 2022 um 23:38)

  • Moin.

    --> Ich habe den Plug in der Steckdose raus/ rein gesteckt.

    --> Alle drei Rules haben plötzlch falsche Inhalte und Rule 2 die falschen Status (Rule2: "ON" + Once = "ON" :-/

    Das klingt für mich als hättest du am savedata herumgespielt ;) (savedata<1/0>)

    Dann werden Änderungen nicht automatisch gespeichert, es sei denn, es erfolgt ein reboot mit restart 1 oder man speichert manuell.

    Funktion:

    --> Beim ersten Drücken des Button schaltet der Plug nach 4sec aus.

    --> Beim zweiten Drücken des Button schaltet der Plug nicht aus! :-/

    Das ist ein Ergebnis des ONCE Befehls.

    Der Event rules#timer1=1 wurde ja bereits einmal ausgeführt. Der Event-Value für rules#timer1 nimmt auch keinen "0" oder anderen Wert an wenn der Ruletimer neu gestartet wird. Der rules#timer1 sendet nur immer wieder ein "1" bei Ablauf und der Trigger "rules#timer=1" wird bei ONCE eben nur einmal ausgeführt.

    Deswegen muss man echt vorsichtig mit dem ONCE sein, muss sich gut überlegen WANN, OB und WO man das setzt und darf nicht vergessen:

    ES GILT FÜRS GANZR RULESET!

    Am besten kann man sich hier einlesen:

    Rules - Tasmota

    Es gab von mir zwar man vor Jahren den Versuch einer deutschen Übersetzung in diesem Forum, die sind hoffnungslos überaltert und bei der Dynamik wie sich Tasmota entwickelt hat, hab ich es aufgegeben das aktuell zu halten.

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

    Einmal editiert, zuletzt von HoerMirAuf (28. März 2022 um 07:23)

  • Arrrrgh... Spannender Anfängerfehler...

    Ich habe laut Anleitung https://www.tasmota.info/sp112-flash/#messwerte
    Spannung (279V) und Leistung kalibriert. Und dann Savedata 0 gesetzt ?(

    Jetzt ist SaveData 1 gesetzt und schon werden die Rules gespeichert - so einfach!

    Noch mal was gelernt... Dann kann ich mit ONCE und der Brechstange "Restart 1" ...

    Code
    Backlog Rule1 0
    Rule1 	ON power1#state=1 DO Ruletimer1 4 ENDON ON Rules#Timer=1 DO Backlog Power 0; restart 1 ENDON
    Backlog Rule1 1; Rule1 5

    Oder elegant mit ONCE = OFF arbeiten!

    Code
    Rule1 	ON power1#state=1 DO Ruletimer1 4 ENDON ON Rules#Timer=1 DO Power 0 ENDON
    Backlog Rule1 1; Rule1 4
  • Guten Morgen HoerMirAuf ! Obwohl ich in letzter Zeit viel Arduino/ ESP programmiere, komme ich mit der Variablenzuweisung hier in Tasmota überhaupt nicht klar. Und ich habe wiklich zu Rules alles durchgelesen, englisch ist nicht das Problem. Darf ich noch mal meine Eingangsfrage stellen: WIE weise ich Variablen RICHTIG zu?

    Sehr einfaches Beispiel: Ich speichere testweise var1=13, var2=aktuelle Leistung und var3= var2+3

    Code
    Rule1 0
    Rule1 ON energy#power DO Backlog var2 %value%; var1 10; add1 3; var3 %var2%; add3 3 ENDON
    Backlog Rule1 1; Rule1 4

    ### Erwartete Ergebnisse:

    var1 = 13 (10+3)

    var2 = 20 (19W oder 20W Energieverbrauch)

    var3 = var2 + 3 (also 22 oder 23)

    ### Tatsächliches Ergebnis:

    var1 = 10

    var2 = 20 (19W oder 20W Energieverbrauch)

    var3 = 0

    Der Knaller: Es wird in der Console ein RESULT "Var2":"20" festgestellt, aber innerhalb des Backlog hat var2 unterschiedliche Werte: 19 oder 20 (fett)

    Console:

    09:38:23 RSL: stat/tasmota_32D998/RESULT = {"Var2":"20"}

    09:38:23 RUL: ENERGY#POWER performs "Backlog var2 19; var1 10; add1 3; var3 20; add3 3"

    09:38:23 RSL: stat/tasmota_32D998/RESULT = {"Var2":"20"}

    09:38:23 RUL: ENERGY#POWER performs "Backlog var2 19; var1 10; add1 3; var3 20; add3 3"

    09:38:23 RSL: stat/tasmota_32D998/RESULT = {"Var2":"20"}

    09:38:23 CMD: var

    09:38:23 RSL: stat/tasmota_32D998/RESULT = {"Var1":"10","Var2":"20","Var3":"0","Var4":"","Var5":"","Var6":"","Var7":"","Var8":"","Var9":"","Var10":"","Var11":"","Var12":"","Var13":"","Var14":"","Var15":"","Var16":""}

    09:38:25 RSL: stat/tasmota_32D998/RESULT = {"Var2":"18"}

    09:38:25 RUL: ENERGY#POWER performs "Backlog var2 19; var1 10; add1 3; var3 18; add3 3"

  • Du hast var2 mit var3 verglichen .... ;)

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • OK, das ist aber keine Begründung dafür, dass var1 =10 und nicht 13 ist! ;)

    OMG... Um eine Zuweisung zu machen, muss ich immer

    ON Event#temp DO Var3 %Var2% ENDON

    schreiben. Probiere ich aus.

  • Schön, korrigiert: Ich lese mit event#getvar2 var2 aus und weise diese var3 zu. Coder ist aber nach wie falsch: var 1 ist trotz "add1 3" noch immer 10 und Var3 ist leer

    Code
    Backlog Rule1 0
    Rule1   ON energy#power DO Backlog Var2 %value%; Var1 10; Add1 3 ENDON 
            ON Event#getvar2 DO Backlog Var3 %value%; Add3 3 ENDON
    Backlog Rule1 1; Rule1 4

    Das Ergebnos ist nicht besser:
    11:40:46 RSL: stat/tasmota_32D998/RESULT = {"Var2":"18"}

    11:40:46 RUL: ENERGY#POWER performs "Backlog Var2 19; Var1 10; Add1 3"

    11:40:46 RSL: stat/tasmota_32D998/RESULT = {"Var2":"18"}

    11:40:47 RUL: ENERGY#POWER performs "Backlog Var2 19; Var1 10; Add1 3"

    11:40:47 CMD: var

    11:40:47 RSL: stat/tasmota_32D998/RESULT = {"Var1":"10","Var2":"18","Var3":"","Var4":"","Var5":"","Var6":"","Var7":"","Var8":"","Var9":"","Var10":"","Var11":"","Var12":"","Var13":"","Var14":"","Var15":"","Var16":""}

    11:40:48 RSL: stat/tasmota_32D998/RESULT = {"Var1":"10"}

    11:40:48 RUL: ENERGY#POWER performs "Backlog Var2 19; Var1 10; Add1 3"

    11:40:48 RSL: stat/tasmota_32D998/RESULT = {"Var2":"18"}

    11:40:48 RUL: ENERGY#POWER performs "Backlog Var2 19; Var1 10; Add1 3"

    11:40:48 RSL: stat/tasmota_32D998/RESULT = {"Var2":"18"}

  • Ich denk mal Dein Problem ist der Trigger on energy#power do

    Bei einem sich permanent ändernden Wert und das ist der Energy#Power, wird der Trigger andauernd mit jedem Programm-loop ausgeführt.

    Ich denk mal das Tasmota aber mit dem abarbeiten nicht mehr hinterherkommt.

    Bei dem Testbeispiel:

    on event#test do backlog var8 5; add8 10 endon

    Funktioniert das wunderbar:

    Code
    12:54:29.285 CMD: event test
    12:54:29.291 MQT: stat/Pflanzenleuchte/RESULT = {"Event":"Done"}
    12:54:29.612 RUL: EVENT#TEST performs "backlog var8 5; add8 10"
    12:54:29.620 MQT: stat/Pflanzenleuchte/RESULT = {"Var8":"5"}
    12:54:29.871 MQT: stat/Pflanzenleuchte/RESULT = {"Add8":"15.000"}
    12:54:40.034 CMD: var
    12:54:40.042 MQT: stat/Pflanzenleuchte/RESULT = {"Var1":"","Var2":"","Var3":"","Var4":"","Var5":"","Var6":"","Var7":"","Var8":"15.000","Var9":"","Var10":"","Var11":"","Var12":"","Var13":"","Var14":"","Var15":"","Var16":""}

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Ich lese mit event#getvar2 var2 aus

    Wo wird den der event getriggert?? Davon seh ich nix.

    Du willst bei Änderung von var2 var3 bearbeiten?

    Dann ginge das so:

    on var2#state do backlog var3 %value%;  add3 3 endon

    EDIT:

    bzw. wenn du mit einem Variabeln Wert arbeiten willst dann:

    %var<x>%

    Beispiel

    on energy#power do var1 %var2% endon

    EDIT2:

    oder du baust eine Hysterese +-1 ein, damit der energy#power erst ab einer gewissen Größenänderung erneut getriggert wird.

    Code
    on energy#power>%var1% do backlog var1 %value%; var2 %value%; add1 1; sub2 1; event TuWas endon
    on energy#power<%var2% do backlog var1 %value%; var2 %value%; add1 1; sub2 1; event TuWas endon
    on event#TuWas do <was auch immer> endon

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    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

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

    3 Mal editiert, zuletzt von HoerMirAuf (29. März 2022 um 14:54)

  • Ich wollte folgendes tun:

    Ich habe das Problem, dass es mit TASMOTA entweder bei ONCE = ON keine Möglichkeit gibt, die aktuelle Leistung (plus Hysterese) zu verarbeiten oder bei ONCE = OFF TASMOTA schlichtweg falsch arbeitet, weil es mit dem Schieben von Registern nicht hinter herkommt. Meines Erachtens nach ist die Verarbeitung leider mit der heißen Nadel gestrickt und darüber hinaus die Rule Verarbeitung auch leider nicht so erklärt, dass ich es verstehe: Was zündet wann, ...

    Ich muss das Projekt damit wohl leider dem Hasen geben...