Beiträge von HoerMirAuf

    Oh sorry,


    ich hatte nen Tippfehler in meiner Rule1:

    Zitat

    Rule1

    ON ON System#Boot DO backlog var1 15; Ruletimer1 1 ENDON

    ON Rules#Timer=1 DO Rule2 1 ENDON

    ON event#x DO backlog Rule2 0; ruletimer1 %var1% ENDON

    Muss heißen:

    Code
    Rule1
    ON System#Boot DO backlog var1 15; Ruletimer1 1 ENDON
    ON Rules#Timer=1 DO Rule2 1 ENDON
    On event#x DO backlog rule2 0; ruletimer1 %var1% ENDON

    Ausglöst wird das ganze entweder mit einem Systemstart oder wenn du in der konsole:

    backlog rule1 1; var1 15; event x 

    eingibst.

    An sich fängt das ganze immer nach dem systemstart automatisch an zu arbeiten

    HI Das mit dem backlog passt, wenn Du meherer Befehle verketten möchtest.

    Sollte auch mit 9 LED's gehen. Für's LED setzen brauchst aber kein backlog. Grenze ist die maximale Anzahl der Zeichen in einem Ruleset.

    Funktioniert das "BREAK" am ende der Anweisung nicht und die nächste Bedingung wird trotzdem auch noch ausgeführt?

    Ah .... mein Denkfehler! Ich hab dich die Rule auf "ONCE setzen lassen. Dadurch wird ja z.B. der Befehl "<40" nur einmal ausgeführt und damit auch der Break, also greift beim nächsten Programm-loop "<45" usw. usw. und erzeugt ein Lauflicht.


    Du kannst meherer Pixel gleichzeitig setzen LED1 <Wert für LED1>  <Wert für LED2> ... das spart viele Zeichen und dann geht das locker für 9 LED's


    Ich hab dir das mal in 2 Rules aufgebaut mit Messintervall 15 Sekunden, der wird in var1 beim Systemboot geschrieben und ist veränderbar:

    Code
    Rule1
    ON System#Boot DO backlog var1 15; Ruletimer1 1 ENDON
    ON Rules#Timer=1 DO Rule2 1 ENDON
    ON event#x DO backlog Rule2 0; ruletimer1 %var1% ENDON
    Code
    Rule2
    ON AM2301#Humidity>66 DO backlog LED1 222222 000000 000000 000000 000000 000000 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<30 DO backlog LED1 10004c 000000 000000 000000 000000 000000 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<35 DO backlog LED1 10004c 00144c 000000 000000 000000 000000 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<40 DO backlog LED1 10004c 00144c 00444c 000000 000000 000000 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<45 DO backlog LED1 10004c 00144c 00444c 004C39 000000 000000 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<50 DO backlog LED1 10004c 00144c 00444c 004C39 004C16 000000 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<55 DO backlog LED1 10004c 00144c 00444c 004C39 004C16 464C00 000000 000000 000000;event x BREAK
    ON AM2301#Humidity<60 DO backlog LED1 10004c 00144c 00444c 004C39 004C16 464C00 4C3600 888888 000000;event x BREAK
    ON AM2301#Humidity<66 DO backlog LED1 10004c 00144c 00444c 004C39 004C16 464C00 4C3600 888888 999999;event x ENDON

    backlog rule1 1; rule1 4; rule2 4

    "Log-Output"?

    Ja, was steht den in der Konsole als Rückmeldung. Bitte mal hier posten.

    Rule1 und 2 aus meinem Beispiel sind auch in Deinem Fall nicht nötig.


    Für Dich ist die Rule3 Wichtig.


    Mach mal das:

    Code
    Rule1
    ON AM2301#Temperature>23 DO color2 #FF0400 BREAK
    ON AM2301#Temperature<19 DO color2 #0019FF BREAK
    ON AM2301#Temperature<20 DO color2 #48FF00 BREAK
    ON AM2301#Temperature<21 DO color2 #B7FF5E BREAK
    ON AM2301#Temperature<22 DO color2 #FFF600 BREAK
    ON AM2301#Temperature<23 DO color2 #FF9D00 ENDON

    backlog rule 2 "; rule3  " rule1 1;rule1 5

    Hi.


    (wusste bis vor einer Woche gar nicht, das es Tasmota Rules gibt ;) ...)

    Dann viel Spaß damit. Kann man sehr viel mit machen.


    Sollte das in eine Rule passen (?), hat jemand evtl. so etwas schon umgesetzt, Stichwort Beispiel-Code...

    Jepp, passt in Rule. Ich hab das zwar nicht mit Temperaturen umgesetzet aber mit CO2 Werten. Im Prinzip dasselbe, nur eben ein anderer Trigger.

    Schau dir mal die Rule3 in dem Thread an:


    Willst Du wirklich nur mit der einen Rule arbeiten, dann würde ich die noch auf "ONCE" setzten damit nur bei Wertänderung getriggert wird.

    Ich hatte das mit meherern Rules und nem Ruletimer als Meßintervall gemacht.

    Wäre dann so etwas:

    Code
    Rule3
    ON AM2301#Temperature>23 DO color2 #FF0400 BREAK
    ON AM2301#Temperature<19 DO color2 #0019FF BREAK
    ON AM2301#Temperature<20 DO color2 #48FF00 BREAK
    ON AM2301#Temperature<21 DO color2 #B7FF5E BREAK
    ON AM2301#Temperature<22 DO color2 #FFF600 BREAK
    ON AM2301#Temperature<23 DO color2 #FF9D00 ENDON

    Ok ... doch nicht so hübsch wie erhofft.

    Setzt man den ledpwmmode 1 und den ledpwmon auf auf etwas anderes ls 0 oder 255, dann erzeugt das Fehlfarben auf einigen LED des WS2812 und beim dimmen ein unschönes flackern..... merkwürdig

    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:

    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.




    Hi Leutz.


    Ich hab nen WEMOS an dem ich sowohl ein WS2812 Neopixel als auch ein PWM-LED betreiben möchte.

    Sobald man einen GPIO auf WS2812 stellt, wars das mit einem PWM Slider bzw. PWM Controlling.


    Ich hab zwar hier was gefunden:

    WS2812 and PWM at the same time? · Discussion #11658 · arendst/Tasmota
    moin I'm building a wall clock with WS2812 LEDs. Question: can you configure WS2812 LEDs and 1-2 PWM outputs at the same time? At the same time, I haven't got…
    github.com

    Aber der dort erwähnt Workarount mit LEDPWMMODE und LEDPWMON bekomme ich nicht zum laufen.


    Hat das schon mal jemand hier an den Start bekommen?


    Ach ja. erforderlichen Treiber sind alle mit einkompiliert und entweder PWM oder WS2812 geht tadellos.

    Ä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

    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?

    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

    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":""}

    Das ist ja aber nur wieder bei Tasmota. Wie ist es bei esp easy. Ich hab ja in der Software nur die Möglichkeit einmal sda und Scl auf einen gpio zuzuweisen.

    Sollte nicht anders als bei Tasmota sein. Deshalb ja I2C-BUS


    Du brauchst nur jeweils einen SDA/SCL GPIO. Die I2C Slaves werden alle parallel am Bus angeschlossen aber dürfen dann nicht dieselbe Adresse haben.(Lässt sich in der Regel am I2C Sensor mit Steck/Lötbrücken ändern) (wie DejaWuest bereits erwähnte)


    Übersichtliche Erklärung:

    Einführung in Microcontroller

    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.