Moin.
Ganz kapiert hab ich das zwar immer noch nicht, aber ich glaube zumindest schon mal den Ansatz einer Ahnung zu haben, wie die Idee dahinter ist. Herzlichen Dank für Deine Antwort!
Der Switchmode gibt scheinbar an, wann eine button#state Aktion ausgelöst werden soll, und in meinem Fall reicht daher button#state, weil ich ja gerne auf beiden Flanken triggern möchte, würde ich zwar gerne toggeln erkennen aber auf die high-Flanke anders reagieren als auf die low-Flanke, dann könnte ich mittels button#state==0 und button#state==1 noch den aktuellen Zustand auswerden und entsprechend behandeln. Wäre das so korrekt?
Naja ...nicht ganz. Mal generell erklärt:
Das Grundelement in Tasmota ist das Relais. Das erzeugt eine Webbutton und wenn ich zu dem Relais einen Button oder Switch konfiguriere ist dieser erst mal funktional mit dem Relais verbunden.
Der Switchmode gibt das Schaltverhalten des Relais bei Button/Switch Betätigung an
https://tasmota.github.io/docs/Commands/
Und Button#State ist ein Rule Trigger der eine Aktion auslöst, wenn der Button Level auf HIGH oder LOW steht.
https://tasmota.github.io/docs/Rules/
Direkt "Flankengesteuert" ist das weniger, bzw. wenn man von Flankensteuerung spricht wird bei Definiton des GPIO's auf Button, nur eine Flanke ausgewertet. Das Relais toggelt beim drücken des Tasters oder beim loslassen (Switchmode 0 oder eben 4)
Anders ist das dann beim Switch#State. Also wenn ich den GPIO als Switch, statt Button definiere. Steht dann z.B. der Switchmode auf "follow" folgt das Relais dem Schalterzustand. Ist der geschlossen ist das Relais ON ist der Schalter offen, ist das Relais OFF .... wenn man das auf Flanken überträgt könnte man sagen bei steigender ON bei fallender OFF.
Beim Button (Taster ... die Zustandsänderung ist ja nur vorübergehend, solange ich eben den Taster drücke) macht daher auch ein Wert im Button#State nicht viel Sinn, da interessiert eigentlich nur wurde geändert, ob steigend oder fallend kann ich ja über den Switchmode festlegen. Beim Switch#State macht das aber dann durchaus Sinn: Ist der Switch geschlossen oder offen, denn dieser Zustand bleibt ja dauerhaft bis zur nächsten Betätigung. Von der Flankenvorstellung würde ich mich da aber lösen, besser ist es sich da auf die HIGH/LOW Zustände der GPIO's zu beziehen.
Deshalb gibt es ja auch die "ONE-SHOT (Once)" Funktion in den Rules. Weil der Trigger ja nicht auf die Flanke (die wäre ja eben immer nur einmal pro Betätigung) reagiert sondern auf den GPIO-Level und somit auch ohne "ONCE" permanent nachtriggert.
weil ich ja gerne auf beiden Flanken triggern möchte, würde ich zwar gerne toggeln erkennen aber auf die high-Flanke anders reagieren als auf die low-Flanke, dann könnte ich mittels button#state==0 und button#state==1 noch den aktuellen Zustand auswerden und entsprechend behandeln. Wäre das so korrekt?
Nö, denn es gibt ja keinen Button#State==0 oder Button#State==1
Möchtest du also unterschiedliche verhalten bei HIGH und LOW Signal eines GPIO's muss der erst mal als Switch definiert werden,
Damit werden dann beide Schaltzustände ausgwertet. Nicht vergessen der Switch ist immer noch intern mit dem Relais verknüpft.
Switch1 bezieht sich auf Relais1 usw. Soll z.B. der HIGH Wert etwas anderes schalten als der LOW Wert dann muss ich zum einen den Switch funktional vom Relais entkoppeln. Das geht mit Setoption114, wirkt sich aber auf ALLE Switch und Relais aus.
Setze ich jetzt Switchmode 2 kann ich dann durch ne Rule und Switch#State jeden einzelnen Schalterzustand abfragen und muss den aber auch über ne Rule mit einer Funktion verknüpfen.
Bsp.:
Relais1 auf einem GPIO
Relais2 auf einem GPIO
Switch1 auf einem GPIO
Switch2 auf einem GPIO
setoption114
switchmode2
rule1
on switch1#state==0 do power1 1 endon on switch1#state==1 do power2 1 endon
on switch2#state==0 do power1 0 endon on switch2#state==1 do power2 0 endon
Funktion:
Wird Schalter1 (oder auch Taster) geschlossen schaltet Relais2 EIN, wird dieser geöffnet schaltet Relais1 EIN
Wird Schalter2 (oder auch Taster) geschlossen schaltet Relais2 AUS, wird dieser geöffnet schaltet Relais1 AUS
Der Switch1 schaltet also BEIDE Reiais EIN und Switch2 BEIDE AUS Ich hab das extra mal verkreuzt um die Funktion deutlicher zu machen aber mann kann natürlich auch für 3 Relais die Standartfunktion für die Button nachbilden und für einen eben eine ganz eigene Funktion machen. Eben bei 0 Das Relais Toggeln und bei 1 z.B. einen Websend absetzen etc.
Ich hoffe da hilft fürs Verständniss weiter.