Variablen in Rules verwenden

  • Zitat

    Du willst bei Änderung von var2 var3 bearbeiten?

    Dann ginge das so:

    Nein. Ich wollte bei Änderung von var2 die Variable var3 neu setzen auf den Wert: var3 = var2 + 3

  • Mein Pseudocode sieht so aus:

    Code
    Rule1 	ON power1#state=1 DO Ruletimer1 4 ENDON 
            ON Rules#Timer=1 DO Backlog var1 0; Rule2 1 ENDON
    Rule2   ON energy#power DO var2 %value% ENDON 
            ON event#getvar2 < %var1% DO Rule3 1 ENDON 
            ON event#getvar2 > %var1% + 3 DO Backlog Rule3 0; var1 %var2% ENDON   ## gemeint ist: var1=var2
    Rule3   ON energy#power < %var1% Do Backlog Ruletimer2 10; var1 %var2% ENDON  ## gemeint ist: var1=var2
            ON Rules#timer=2 DO Backlog Power 0; Rule2 0; Rule3 0; restart 1 ENDON
  • Wie gesagt:

    was willst du mit on event#getvar2?

    Der Trigger um das auszuführen lautet "event getvar2" solange der nicht irgendwie aufgerufen wird, wird da auch nix passieren?

    Und das hast du versucht?

    HoerMirAuf
    25. März 2022 um 09:27

    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

  • Zitat

    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, ...

    Das ist nur Pseudocode! Es scheint nur möglich zu sein, var2 über "event getvar2" mit ONCE = OFF abzufragen. Tasmota rechnet bei ONCE = OFF aber falsch. Da hat es keinen Sinn, dass ich 100% Code abliefere.

  • Da hat es keinen Sinn, dass ich 100% Code abliefere.

    Ich glaub da macht es auch keinen Sinn 100% supporten zu wollen.

    Es scheint nur möglich zu sein, var2 über "event getvar2" mit ONCE = OFF abzufragen

    Ich weiß auch nicht was ich dir noch sagen soll ... ich hab's weiter oben schon erwähnt: "on var2#state[=<>!] do ..."

    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

  • Und das hast du versucht?

    Code
    rule2
    on Energy#Power<=7 do rule3 1 endon
    on Energy#Power>%var1% do backlog rule3 0; var1 7 endon

    Danke - aber das funktioniert für das Zuweisen von dynamischen Werte nicht:

    rule2

    on Energy#Power<=7 do rule3 1 endon

    on Energy#Power>%var1% do backlog rule3 0; var1 %var2% endon

  • Ich finde es total super, wie aktiv Du bist und bedanke mich aufrichtig für Deinen Support!

    Zitat

    Ich weiß auch nicht was ich dir noch sagen soll ... ich hab's weiter oben schon erwähnt: "on var2#state[=<>!] do ..."

    Ich benötige nicht den Status, sondern den Wert. Wenn var1 %var2% nicht als Zuweisung funktioniert, dann hilft mir der Status var2#state doch auch nicht. Oder???

  • Ändert sich der WERT einer Variablen wird der trigger var<x>#state ausgelöst. Der Status IST der Wert.

    Nimm's nicht böse aber auch wenn du da: https://tasmota.github.io/docs/Rules/ schon gelesen hast, ist dir doch einiges entgangen.

    Aber man lernt eben am besten in der Praxis.

    Nehmen wir Dein Beispiel, ich geh da jetzt gar nicht auf Funktion ein sondern auf den Syntax und wie sowas aufgebaut wird sondern als Verständnissbeispiel:

    Die Rule1 ist denk ich klar. Da wird mit "Power1 1" der Ruletimer gestartet und nach Ablauf die var1 auf 0 gesetzt und Rule2 aktiviert.

    Aber!!! Warum var1 0? Wenn Dein Trigger in Rule2 mit var1, also mit 0!! vergleicht?

    Aber weiter zu Rule2:

    Du möchtest mit dem Wert var2 arbeiten, in den wird ja immer der energy#power geschrieben.

    Code
    Rule2
    ON energy#power DO var2 %value% ENDON
    ON var2#state<%var1% DO Rule3 1 ENDON

    Bei jeder Änderung des Wertes in var2 wird dieser mit var1 verglichen und bei < abgearbeitet.

    DAS: >%var1% + 3 DO gibt es nicht.

    Wenn du eine Wert brauchst wie var1 +3 musst du das in einer separaten Variabeln (ich verwende einfach mal var16) verwalten.

    on var1#state do backlog var16 %value%; add16 3 endon

    Das wäre dann nach Deinem Beispiel ( Aber bedenke, Du hast var1 in Rule1 auf 0 gesetzt - Denkfehler? Oder nur Versuche zum verstehen?)

    Code
    Rule2
    ON var1#state DO backlog var16 %value%; add16 3 ENDON 
    ON energy#power DO var2 %value% ENDON
    ON var2#state<%var1% DO <irgendwas> ENDON
    ON var2#state>%var16% DO Backlog <etwas>; <und noch was anderes> ENDON

    Wobei ich jetzt hier nicht weiß durch was sich var1 ändern soll da hier keine Rule für angelegt ist

    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

  • Hmm, nach meiner etwas zurückliegenden Erfahrung mit den Rules gelingt keine zusammengesetzte Wertänderung einer Variablen in einer backlog Anweisung. Dafür braucht es mehrere Anweisungen, bspw. zwei.

    Prinzipbeispiel: <trigger> ist ein Platzhalter für irgendeinen Trigger.

    Code
    on <trigger> do backlog var1 3; add1 2 endon

    Hier erwartet man vermutlich in var1 den Wert 5, darin steht aber der Wert 3. Gründe dafür liegen in der Abarbeitung der Rules, was ich mal genauer wusste, aber jetzt nicht parat habe.

    Folgendes sollte gelingen, um das Gewünschte zu erhalten: 'v1plus2' ist ein Ereignisname, welcher durch einen besser passenden ersetzt werden kann.

    Code
    on <trigger> do backlog var1 3; event v1plus2 endon on event#v1plus2 do add1 2 endon

    Deine Ziele habe ich jetzt nicht genau erlesen, weshalb ich dazu auf die Schnelle nichts schreiben kann. Ich vermute aber, dass in obigem ein Kernproblem liegt.

  • Hier erwartet man vermutlich in var1 den Wert 5, darin steht aber der Wert 3. Gründe dafür liegen in der Abarbeitung der Rules, was ich mal genauer wusste, aber jetzt nicht parat habe.

    Bei Start der Rule wird der Variablenwert eingelesene und externe Änderungen in der Variabeln zur Rule-Laufzeit nicht mehr berücksichtigt. Das stimmt.

    Interne Änderungen werden aber durchaus verarbeitet und berücksichtigt:

    HoerMirAuf
    29. März 2022 um 12:55

    Das gilt nicht nur für einen Event Trigger sondern auch für jeden anderen.

    Deine Ziele habe ich jetzt nicht genau erlesen, weshalb ich dazu auf die Schnelle nichts schreiben kann. Ich vermute aber, dass in obigem ein Kernproblem liegt.

    Ich denke eher das das Funktionskonzept der Rules mit Trigger-Wirkung noch nicht ganz verstanden wurden. ;)

    Und zugegeben das ist auch nicht so auf den ersten Blick zu erfassen.


    EDIT:

    Jetzt weiß ich was eich meint:

    Zitat

    The following won't work:

    Rule1 ON event#setvar1 DO Backlog var1 %value%; Power1 %var1% ENDON

    At least not as you probably would expect. The var1 value used by the Power1 command will be the value present before the Backlog command is executed. This is so, because the rule will replace %var1% BEFORE the Backlog commands are put in the Backlog command stream.

    ja das stimmt das ein Trigger INNERHALB der Rule den zu beginn eingelesenen Wert verwendet.

    Deshalb ja in meinen Beispielen die Auslagerungin den Event bzw. die Auswertung des var<x>#state in einer separaten Rule.


    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

    2 Mal editiert, zuletzt von HoerMirAuf (30. März 2022 um 11:54)