Sonoff Dual R3 v2 Tasmota Rules

  • Hallo zusammen,

    ich bin neu hier und möchte mich kurz vorstellen.

    Habe schon einige SH Projekte an meinem Haus durchgezogen und Funktionieren bis jetzt :)

    Nun komme ich an eine Herausforderung was Tasmota und Rules angeht.

    Ich habe hier 3 Module geflasht und elektrisch angeschlossen, alles funktioniert soweit, nur die Rules nicht.

    Bei dem ersten Modul möchte ich sagen:

    Wenn jemand den Taster betätigt und damit das Licht einschaltet dann soll ein Timer mit X min. gestartet werden und das Licht wieder ausschalten.

    Wenn jemand den Taster für mehr als 5 Sec hält dann bleibt das Licht immer an bis jemand wieder den Taster betätigt.

    Beim dem zweiten Modul habe ich eine Wechselschaltung:

    Wenn jemand den Taster 1 oder 2 drückt so wird immer das Relais1 eingeschaltet oder ausgeschaltet.

    Wenn jemand den Taster 1 oder 2 betätigt und damit das Licht einschaltet dann soll ein Timer mit X min. gestartet werden und das Licht wieder ausschalten.

    Wenn jemand den Taster für mehr als 5 Sec hält dann bleibt das Licht immer an bis jemand wieder den Taster betätigt.

    Bitte hier um Hilfe, nicht gleich steinigen :>

    MfG

  • Tasmota Rule für die Timerfunktion bei kurzen Tasterdrücken.

    In mem1 liege die Dauer in Sekunden(?) als Parameter. Wenn der Wert häufiger geändert werden soll, ist es zweckmäßig, diesen im flüchtigen Speicher var1 ... var 16 abzulegen. memx liegt im nichtflüchtigen Speicher, der weniger Schreibzugriffe aushält als der flüchtige Speicher.

    Rule1: Statt power1#state>0 kann auch ...state=1 eingesetzt werden.

    Code
    on power1#state>0 do ruletimer1 %mem1% endon
    on rules#timer=1 do power1 0 endon
    rule1 1

    Die erste Zeile sorgt für das Starten des Timer1, wenn eingeschaltet wird. Dies ist allerdings unabhängig von der Einschaltquelle. Als Quelle könnte bspw. auch eine Sprachsteuerung vorliegen. %...% ist der Wertoperator, d.h. es wird der Wert von ... genommen - und nicht etwa ... als Text verwendet.

    Die zweite Zeile wartet auf das Ereignis Timer1 abgelaufen und schaltet aus, sobald dieses Ereignis eintritt.

    Die dritte Zeile ist in der Konsole einzugeben und aktiviert Ruleset 1.

    Das sind erst einmal die Grundlagen zur Verwendung eines Timers. Es gibt afaik 8 solcher Ruletimer, vielleicht sind es auch "nur" 4.

    Die folgende Rule reagiert ausschließlich auf ein Drücken eines Tasters. Um die Werte zu kurzen vs. langem Drücken zu erfassen, kannst du währenddessen die Ausgaben in der Konsole beobachten und daraus deine Selbsthilfeschlüsse ziehen.

    Code
    on button1#state==1 do backlog power1 1; ruletimer1 %mem1% endon

    Vielleicht kannst du weitere Dinge selbst noch herausfinden.

    Langes drücken ist afaik per button1#state==3 abzufangen - bzw. button2...

    Nun noch viel Erfolg beim experimentieren. Dies soll ein Beitrag zwecks "Hilfe zur Selbsthilfe" sein. ;)

    Ich nutze keine Buttons und hoffe, dass meine Info fehlerarm ist.

    6 Mal editiert, zuletzt von eich (15. April 2022 um 19:18)

  • Nachgereicht

    Bei einer genaueren Betrachtung deines Schaltplans sehe ich jeweils 2 in Reihe geschaltete Taster bzw. Schalter. Taster würde ich parallel schalten. In Reihe sind imho nur Schalter zweckmäßig. Es sind, soweit ich dein Anliegen erfasste, zu einer Lichtquelle zwei Taster vorhanden, die beide die gleiche Funktionalität haben sollen, also schaltungstechnisch und in der Anwendung nicht zu unterscheiden sind. Demzufolge Parallelschaltung ...

    Hm, ich benutze doch Taster - Shelly i4, noch recht frisch. Das ist eine interessante Anwendung. Ich werde mal die Scriptmöglichkeiten testen ...

    Einmal editiert, zuletzt von eich (15. April 2022 um 20:11)

  • Hallo Eich,

    Danke für deine Hilfestellung, ich versuche seit Tagen es zum laufen zu bringen.

    Deine Ersten Rules die funktionieren und die habe ich auch zum laufen gebracht.

    Doch die mit dem Button gehen nicht.

    rule1 on button1#state==1 do backlog power1 1; ruletimer1 %mem1% endon

    Meine Zeile war dann:

    rule1 on button1#state==1 do backlog power1 1; ruletimer1 %mem1%; rules#timer=1 do power1 0 endon

    rule2 on button1#state==3 do power1 1 endon

    setoption32 40

    hab hier verschiedene SwitchMode versucht, von 3-5 immer das gleiche Ergebniss

    setoption1 1 steht auch.

    BITTE UM NOCH MEHR ANREGUNGEN :>

  • Sorry, ich bin etwas von C und C++ geprägt. Der Vergleich des Statuswertes in den Rules wird mit einem einfachen Gleichheitszeichen codiert:

    Code
    on button1#state=1 ...

    Vielleicht werden Zeichenkettenwerte (Strings) per == verglichen - ich wusste das mal, als ich mich eingehend mit den Rules beschäftigte. :D

    Du kannst auch mal nur mit dem Ereignis "button1#state", also ohne Vergleich experimentieren.

    Die Rules sind Ereignis gesteuert. Die Struktur einer einzelnen Rule ist prinzipiell:

    Code
    on Ereignis do Anweisung endon

    bzw. für mehrere auszuführende Anweisungen bei eintretendem Ereignis

    Code
    on Ereignis do backlog Anweisung1; Anweisung2; Anweisung3; ... endon

    In meinen Prinzipbeispielen ist "Ereignis" ein Platzhalter für ein bestimmtes Ereignis wie power1#state ...

    Eine Rule beginnt also immer mit EINEM Ereignis und kann mehrere Anweisungen enthalten. Vor diesem Hintergrund ist deine Zeile ungeeignet, weil "rules#timer=1" ein Ereignis und keine Anweisung ist. "rules#timer=1" bedeutet, dass der ruletimer 1 abgelaufen ist und muss demzufolge hinter einem "on" stehen. Aus deiner Zeile wird dann folgendes:

    Code
    on button1#state=1 do backlog power1 1; ruletimer1 %mem1% endon
    on rules#timer=1 do power1 0 endon

    Bei den button state Werten bin ich wenig bewandert und müsste diese selbst testen. In den Tasmota Dokus sind diese afaik aber auch zumindest beispielhaft aufgeführt.

    Eine Anweisung kann auch ein Ereignis auslösen.

    Code
    on Ereignis do backlog ...; event e endon
    on event#e do ...

    "e" ist der Name bzw. der Trigger des Ereignisses und kann durch einen beliebigen syntaxgerechten Namen ersetzt werden. Das braucht man bspw. dann, wenn der Inhalt einer Variablen manipuliert werden soll. Wird bspw. der Variablen var1 ein Wert zugewiesen, was ein Ereignis ist, und soll dieser Wert verdreifacht sowie schließlich 4 addiert werden, so gelingt das folgendermaßen.

    Code
    on var1#state do backlog mult1 3; event add4to1 endon
    on event#add4to1 do add1 4 endon

    Hm, es könnte sein, dass in Zeile 1 mult1 3 das Ereignis var1#state auslöst. Dann ergäbe dies ein endlos wiederholt eintretendes Ereignis. In diesem Fall muss etwas aufwändiger codiert werden. Am Grundverständnis ändert das aber nichts.

    Hilfreich ist das Auslösen eines Ereignisses per Anweisung auch dann, wenn Anweisungen bei eintreten verschiedener Ereignisse auszuführen sind.

    Code
    on event#p1 do publish lampe1/ist/geschaltet %var5% endon
    on Ereignis1 do backlog ...; var5 1; event p1 endon
    on Ereignis2 do backlog ...; var5 0; event p1 endon

    Ereignis p1 sendet eine MQTT Nachricht mit dem Topic "lampe1/ist/geschaltet" und als Payload (Wert) der Inhalt von var5. Die Tasmota Doku bezeichnet #p1 auch als Trigger.

    Sowohl Ereignis1 als auch Ereignis2 veranlassen nach spezifischen Anweisungen, hier als ... dargestellt, das Senden der Nachricht.

    Falls dir MQTT nichts sagt, kannst du stattdessen irgendetwas anderes einsetzen, wie das Schalten einer Lampe.

    Ich hoffe, dass ich hiermit ein paar grundlegende Sachverhalte ein wenig aufhellen konnte.

    Nicht verzagen ... ;)

    4 Mal editiert, zuletzt von eich (18. April 2022 um 19:49)

  • Moin.

    Was mich schon irritiert:

    Beim dem zweiten Modul habe ich eine Wechselschaltung:

    Wenn jemand den Taster 1 oder 2 drückt so wird immer das Relais1 eingeschaltet oder ausgeschaltet.

    Wenn jemand den Taster 1 oder 2 betätigt und damit das Licht einschaltet dann soll ein Timer mit X min. gestartet werden und das Licht wieder ausschalten.

    Wenn jemand den Taster für mehr als 5 Sec hält dann bleibt das Licht immer an bis jemand wieder den Taster betätigt.

    Du hast eine Wechselschaltung.

    Mit Schaltern !! Sprichst aber von Tastern?

    Was ist den nun vorhanden? Taster oder Schalter? Bei ner Wechselschaltung geh ich von Schaltern aus. Wie willst Du damit eine 5 Sek. Tastfunktion realisieren?

    EDIT:

    Mit "button#state" funktioniert vermutlich deshalb nicht weil dein GPIO vermutlich auch als Switch (schalter) deklariert ist und nicht als Button (taster).

    Im Prinzip müsstest du auf ne Tasterschaltung umbauen, was von der Verdrahtung her kein Problem wäre.

    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

    Einmal editiert, zuletzt von HoerMirAuf (20. April 2022 um 09:19)

  • Hallo

    Habe von hier aus dem Forum eine Rule für ein Treppenhauslicht und funzt jetzt schon länger ohne Probleme.

    Beschreibung:

    # 1. kurzer Tastendruck -> Licht AN für 3 Minuten (RuleTimer1 180)

    # 2. langer Tastendruck >2sec (SetOption32 20) -> kurzes Blinken als Quittierung und -> Dauer-Licht AN

    # 3. langer Tastendruck während AN (1. oder 2. läuft) -> kurzes Blinken und -> Dauer-Licht AN

    # 4. kurzer Tastendruck immer wenn Licht AN -> dann Licht AUS

    In deinem Fall müssen dann die Schalter auf Taster geändert werden.

  • Hallo zusammen,

    ich habe hier die Schalter gegen Taster getauscht.

    Da hab ich was zum laufen gebracht mit:

    SwitchMode1 5

    "Rule1":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":98,"Free":413,"Rules":"on switch1#state=2 do backlog power1 1; ruletimer1 %mem1% endon on rules#timer=1 do power1 0 endon"

    Rule2":{"State":"ON","Once":"OFF","StopOnError":"OFF","Length":36,"Free":475,"Rules":"on switch1#state=3 do power1 1 endon


    komisch das Rule1 nicht funktioniert, wenn es mit einer 1 gekennzeichnet ist

    Rule1 on switch1#state=1 do backlog power1 1; ruletimer1 %mem1% endon on rules#timer=1 do power1 0 endon


    Es Funktioniert auch soweit jedoch ich kann es leider nicht unterbrechen so wie von premo beschrieben:

    # 4. kurzer Tastendruck immer wenn Licht AN -> dann Licht AUS


    Premo kannst du bitte deine Rules posten?

    MfG

  • Premo kannst du bitte deine Rules posten?