Tasmota rules Zeitsteuerung - keine Wirkung

  • Code
    <img src="https://forum.creationx.de/index.php?attachment/9082/&thumbnail=1" class="woltlabAttachment" data-attachment-id="9082" id="wcfImgAttachment1"><img src="https://forum.creationx.de/index.php?attachment/9084/&thumbnail=1" class="woltlabAttachment" data-attachment-id="9084" id="wcfImgAttachment1"><img src="https://forum.creationx.de/index.php?attachment/9083/&thumbnail=1" class="woltlabAttachment" data-attachment-id="9083" id="wcfImgAttachment1">

    Hallo,

    ich hab schon oft verschiedenes programmiert, aber bei diesem mächtigen TASMOTA und seinen rules komm ich nicht voran.

    Installation, Einstellungen sind erledigt. Schalter funktionieren.

    Spezielles über rules leider nicht. Mir fehlt auch irgend ein „Debugger“ für Zwischenergebnisse, was passiert und Test.


    Normal erarbeite ich mich in neue Sprachen mit einfachen Beispielen. Komm aber nicht weiter.


    Problem: Die Relais sollen zeitgesteuert abfallen: D.h. Schalter 1 wird eingeschaltet: on, Relais auch sofort: on, nach xx min dann: off, was sicher auch dann der Schalter als Rückmeldung anzeigt. (ähnlich Treppenhauslicht)


    Vorläufiges Endziel: (Bild 3) Alle Schalter sollen nur das Relais 1 (power1) zeitgesteuert nach drei verschiedenen Zeiten ausschalten.


    In der Konsole eingegeben :

    rule on //rule aktiv


    Code
    rule1 on button1#state do backlog power1 %value%; ruletimer1 200 endon on rules#timer=1 do power1 off endon



    Danke schon mal für eure Hilfe

  • 00:00:00.001 HDW: ESP8266EX

    00:00:00.050 CFG: aus Flash geladen von F7, Anzahl 53

    00:00:00.055 QPC: Count 1

    00:00:00.080 Projekt tasmota - Tasmota Version 12.0.2(tasmota)-2_7_4_9(2022.06.20 12:45:11)

    00:00:00.519 WIF: verbinden mit AP1 WLH Channel 1 BSSId 74:42:7F:AF:49:15 in Modus 11n als tasmota-997D7C-7548...

    00:00:01.753 WIF: verbunden

    00:00:02.006 HTP: Web-Server aktiv bei tasmota-997D7C-7548 mit IP-Adresse 192.168.178.53

    18:34:14.014 RSL: INFO1 = {"Info1":{"Module":"Generica (18) test 1","Version":"12.0.2(tasmota)","FallbackTopic":"cmnd/DVES_997D7C_fb/","GroupTopic":"cmnd/tasmotas/"}}

    18:34:14.024 RSL: INFO2 = {"Info2":{"WebServerMode":"Admin","Hostname":"tasmota-997D7C-7548","IPAddress":"192.168.178.53"}}

    18:34:14.034 RSL: INFO3 = {"Info3":{"RestartReason":"Power On","BootCount":15}}

    18:34:14.041 RSL: RESULT = {"POWER1":"OFF"}

    18:34:14.042 RSL: POWER1 = OFF

    18:34:14.044 RSL: RESULT = {"POWER2":"OFF"}

    18:34:14.048 RSL: POWER2 = OFF

    18:34:17.467 QPC: Reset

    18:34:18.426 RSL: STATE = {"Time":"2022-07-31T18:34:18","Uptime":"0T00:00:09","UptimeSec":9,"Heap":29,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":0,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"WLH","BSSId":"74:42:7F:AF:49:15","Channel":1,"Mode":"11n","RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}

    18:34:18.450 RSL: SENSOR = {"Time":"2022-07-31T18:34:18","Switch1":"ON","Switch2":"ON"}

    18:35:42.637 RSL: RESULT = {"POWER1":"ON"}

    18:35:42.639 RSL: POWER1 = ON

    18:35:49.673 RSL: RESULT = {"POWER1":"OFF"}

    18:35:49.675 RSL: POWER1 = OFF

    18:35:52.027 RSL: RESULT = {"POWER2":"ON"}

    18:35:52.029 RSL: POWER2 = ON

    18:35:53.253 RSL: RESULT = {"POWER2":"OFF"}

    18:35:53.255 RSL: POWER2 = OFF

    18:38:09.646 CMD: rule

    18:38:09.652 RSL: RESULT = {"Rule1":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":100,"Free":411,"Rules":"on button1#state do backlog power1 %value%; ruletimer1 60 endon on rules#timer=1 do power1 off endon"}}

  • Tja - das Verwirrspiel mit der Kopplung von Button und Power !

    kann mit Setoption73 oder Setoption114 aufgehoben werden, macht es aber nicht einfacher


    1. Lösung:

    Mit jedem Relay welches auf einem IO eingeführt wird gibt es einen Button.

    Neben dem 1. Relay sollten 3 weitere eingebaut werden welche die Referenzen zum Schalten bilden.


    rule1 on VAR1#state do backlog power1 1; ruletimer1 %VAR1% endon on rules#timer=1 do backlog "zeit" %VAR1%; power1 0;power2 0;power3 0; power4 0; endon

    on power2#state=1 do backlog "status" %status%; VAR1 6 endon

    on power3#state=1 do backlog "status" %status%; VAR1 7 endon

    on power4#state=1 do backlog "status" %status%; VAR1 5 endon


    Eine Ausgabe welche Zeit aktiv wird zeigt das Protokoll


    VAR1#STATE performs "backlog power1 1; ruletimer1 6"

    14:49:33.901 RSL: RESULT = {"POWER1":"ON"}

    14:49:33.903 RSL: POWER1 = ON

    14:49:34.104 RSL: RESULT = {"T1":6,"T2":0,"T3":0,"T4":0,"T5":0,"T6":0,"T7":0,"T8":0}

    14:49:40.172 RUL: RULES#TIMER=1 performs "backlog "zeit" 6; power1 0;power2 0;power3 0; power4 0;"


    Sicherlich nicht die beste Lösung - aber mal ein Anfang.

  • Hallo karoCB,


    vielen Dank.

    Klappt erst mal. Ich hab es zwar noch nicht ganz verstanden, aber der Anfang ist gemacht und Erfolg beflügelt.

    Ich muss aber dennoch sagen, dass Tasmota doch wohl sehr viel Einzelwissen erfordert. Eine Sprache (z..B. C++ bei Arduino ) ist logischer zu begreifen.

    Trotzdem, wenn mann´s kann .... die Ergebnisse überzeugen. (was bei C++ hunderte Zeilen sind)


    Danke und Gruß

  • muss so sein bei der begrenzten Leistungsfähigkeit der CPU.

    Rule-Verarbeitung mit Setoptionen auf verschieden Templates ist schon eine sehr spezielle Programmierungsart um eine Interrupt-Programmierung zu ermöglichen.


    Die zusätzlichen Ausgaben sind nicht zur Verwirrung, sondern um zu zeigen das man noch etwas ausgeben kann:

    Skript reicht auch so!


    rule1 on VAR1#state do backlog power1 1; ruletimer1 %VAR1% endon

    on rules#timer=1 do backlog power1 0;power2 0;power3 0; power4 0; endon

    on power4#state=1 do VAR1 15 endon

    on power2#state=1 do VAR1 16 endon

    on power3#state=1 do VAR1 17 endon

  • :) - schade, ich dacht ich kann was lernen.


    Dann kommt die Beschriftung sicherlich auf die Buttons und der aktuelle Status steht drüber?

    Siehe "Interlock" als Haupteinstellung - um nur immer einen Button (oder auch bestimmte) nur aktiv (on) zuzulassen.