ZitatDu 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
ZitatDu 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:
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?
ZitatIch 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 ..."
Und das hast du versucht?
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!
ZitatIch 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:
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
Alles anzeigen
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.
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?)
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
Danke schon mal, ich gucke mir das morgen an!
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.
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.
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:
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:
ZitatThe 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 thePower1
command will be the value present before theBacklog
command is executed. This is so, because the rule will replace%var1%
BEFORE theBacklog
commands are put in theBacklog
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.