Poolheizung, Solarthermie
-
Longlive -
26. Juni 2020 um 19:35 -
Erledigt
-
-
-
-
ahhh.. super
habe jetzt mal etwas rumgespielt!
Code
Alles anzeigenRule2 on clock#timer=2 do backlog power1 0; rule3 1 endon on clock#timer=4 do backlog power1 0; rule3 1 endon rule3 ON DS18B20-1#temperature DO event t2=%value% ENDON ON DS18B20-2#temperature DO event t1=%value% ENDON ON event#t1<%mem3% DO var1 1 ENDON ON event#t1>=%mem3% DO var1 0 ENDON ON event#t1 DO Backlog var2 %value%; add2 3 ENDON ON event#t1 DO Backlog var3 %value%; add3 6 ENDON ON event#t2>%var3% DO Power1 %var1% ENDON ON event#t2<%var2% DO Power1 0 ENDON on clock#timer=1 do backlog power1 1; rule3 0 endon on clock#timer=3 do backlog power1 1; rule3 0 endon
so funktioniert es mal nach meinen paar Tests, kann man die Rules so machen?
Benötige ich "event Timer1 endon" und dann "on event#timer1 do blabla endon" überhaupt, was macht das für ein Unterschied?
Vielen Vielen Dank für deine Hilfe
Vielen
-
Hi.
Hab's jetzt nicht ins kleinste Detail überprüft aber wenn die Rule so geht, passt doch.
Event brauchst du, weil eine Änderung einer Varibale innerhalb einer Rule <on ... endon> während deren Laufzeit nicht berücksichtigt wird.
Wenn also in der Variable der Wert geändert wird, kommt das erst in einer weiteren Rule <on ... endon> zum tragen.
Bei jedem event trigger wird der aktuelle vorher veränderte Variablen Wert verwendet.
Deshalb ist es auch nicht unwichtig in welcher Reihenfolge Rules angewendet werden.
-
Super danke dir, es funktioniert nun endlich so wie es soll
Code
Alles anzeigenrule1 ON DS18B20-1#temperature DO event t1=%value% ENDON ON DS18B20-2#temperature DO event t2=%value% ENDON ON event#t2>%mem3% DO var1 1 ENDON ON event#t2<=%mem3% DO var1 0 ENDON on event#t1 do backlog var2 %value%; var3 %value%; event a2=3; event a3=5 endon on event a2 do add2 %value% endon on event a3 do add3 %value% endon ON event#t2>%var2% DO Power1 %var1% ENDON ON event#t2<%var3% DO Power1 0 ENDON ON power1#state=1 Do RuleTimer1 1800 ENDON ON rules#timer=1 do Power1 off ENDON
Ich habe zusätzlich noch einen Timer eingefügt, für den Fall das mal ein Fühler ausfällt die Pumpe nicht ständig Läuft.
Eine Kleinigkeit hätte ich aber noch, er weigert sich beharrlich neue Rules an zu nehmen, dh. wenn ich den Basic vom Strom nehme hat er oftmals die abgeänderte rule nicht gespeichert, und noch alte Daten drinnen.
Also speichere ich etliche male, mitunter lösche ich die Rule mit " Rule1 " " und schaue ob nun endlich die Rule nach Stromlos gespeichert wurde.
Das weitere ist das die Rule grundsätzlich nach Strom abklemmen neu gestartet werden muss.
Kann ich das irgendwie einstellen das nach einem neuen Booten die Rule weiterhin Läuft?
Gerne auch über den Zeitplan, scheint aber nicht zu funktionieren?
Hallo Zusammen,
dies ist mein erster Post in diesem Forum. Herzlichen Dank für die vielen Anregungen für mein erstes Tasmota Projekt. Ich konnte am Wochenende dank Euch viel lernen und folgendes umsetzen: Flashen, Compilieren, erste Rules testen usw.
Die oben von mir kopierte Rule funktioniert bei mir tadellos. Ich würde nur gerne wissen wie sich die Werte 3 und 5 mittels console ändern lassen. Den Wert mem3 kann ich mit folgendem Kommando ändern bzw. setzen: mem3 40
Wie gelingt mir dies mit diesen Werten? Bitte beachtet, dass ich kein Programmierer bin und vielleicht am Anfang etwas Starthilfe benötige
Über Hilfe würde ich mich sehr freuen.
Vielen Dank.
-
event a2, event a3 sind so, wie deine Codezeile lautet, events bzw. trigger für solche events. Innerhalb des eventhandlers (Ereignisbehandler) steht der jeweilige Wert (hier 3, 5) per %value% zur Verfügung. a2, a3 sind Ereignisnamen, keine Variable. Die Werte 3 und 5 sind Parameter, die per value an den eventhandler a2 bzw. a3 übergeben werden.
mem3 ist der Name einer Variablen, ebenso bspw. var1. memx liegt im nichtflüchtigen Speicher (nvs=non volatile storage), während varx im flüchtigen Speicher (RAM) liegt. Bei Stromausfall oder zwischenzeitlichem Abschalten der Stromversorgung bleibt der memx-Inhalt erhalten, der varx-Inhalt geht verloren. memx verträgt weniger Schreibzugriffe (speichern) als varx.
Somit ist hoffentlich erkennbar, warum event a2=3 grundsätzlich etwas völlig anderes ist als bspw. mem3 40.
Fachgerechter (notfalls übergehen): 3 bzw. 5 sind sog. Aktualparameter. Diese werden mit dem Auslösen des Ereignisses an den jeweiligen eventhandler übergeben. Einem eventhandler steht ein solcher Aktualparameter-Wert per Formalparameter value zur Verfügung.
Wenn du variable Werte als Aktualparameter verwenden willst, kannst du dafür eine Variable einsetzen, bspw. so:
Damit wird der Wert (=Inhalt) der Variable var1 als Aktualparameter an den eventhandler a2 übergeben.
Ich weiß derzeit nicht mehr, ob man per Kommando ein Ereignis auslösen kann. Wenn dies geht, dann einfach so:
Ich hoffe, deine Unsicherheit hiermit nicht vergrößert zu haben.
Nachgereicht:
Das Speichern in einer Variablen (bspw. mem3 40) entspricht etwa dem Notieren auf einem Zettel.
Das Auslösen eines Ereignisses (bspw. event a2=3) entspricht etwa einer Aufforderung, etwas mit dem Wert 3 zu tun.
-
-
Deine letzte Codezeile ist dann geeignet, wenn du einen nicht konstanten Parameter verwenden willst, dessen Wert bspw. vom Anwender gelegentlich geändert werden können soll. Auch wenn deine Rule leicht pflegbar sein soll, ist die Verwendung einer mem-Variablen ein gutes Mittel.
Wenn allerdings der Aktualparameter an dieser Stelle grundsätzlich unveränderlich festliegt, lohnt die Verwendung einer mem-Variablen kaum.
Wenn du bspw. codest
und der Wert 123 ist per se nicht veränderbar, brauchst du dafür %mem1% nicht wirklich.
-