Beiträge von HoerMirAuf

    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. ;)

    Hi

    Hast Du noch einen klärenden Satz warum ich "state==2" nicht benötige

    Der Trigger button#state löst immer bei Button-Änderung aus. Das dann getoggelt wird bestimmt der Switchmode (steht default auf 0 = toggle). Also muss auch nur auf die Änderung des Button Zustandes abgefragt werden.

    Ist der Switchmode 0 steht der Button bzw. Switch#state sowieso immer auf 2 also ist das dann auch kein Abfragekriterium sondern nur DAS der Button#state überhaupt getriggert wurde.

    Hi.

    hmmm ok, dann darf nicht auf ONCE gestellt werden. rule1 4 schaltet once wieder aus.

    Eigentlich ja logisch, der Trigger bleibt ja immer derselbe.


    Wenn du sagst du hast es mit "=" Probiert, wie schaut dann deine Rule aus? Damit sollte es nämlich schon gehen.

    Moin.

    Eigentlich hört sich das nicht danach an, als wenn hier eine hochkomplizierte abfrage nötig ist. aber ich habe es mit mehreren Versuchen nicht geschaft
    Das einzige was ich hinbekommen habe ist 1 Status zu senden wenn der Wert über 500 Steigt.

    Doch, das ist kompliziert, denn diese Abfrage erfordert:

    WENN "Wert grösser als" UND "Wert kleiner als" DANN <Befehl>

    also

    IF AND THEN


    Das geht nicht mit den Standart Rules sondern nur wenn:

    Conditional Rules im Binarie einkompiliert sind.

    https://tasmota.github.io/docs…imulate-ifelseifelseendif


    Oder eben gleich Script. Ich selbst hab bisher nicht mit Conditional Rules gearbeitet.... das mach in dann lieber auf nem Raspi. ;)

    Ein zweites Login mit eingeschränkten Rechten oder so gibt es ja nicht (oder?).

    Nö, gibt es nicht.



    Noch nee andere Chance oder Trick (evtl. über "Vorlage konfigurieren" und da GPIO oder so "ändern" ?)

    Schaut schlecht aus, denn der Web-Button wird immer mit dem konfigurieren eines Relais erstellt und ohne Relais geht's eben nicht.


    Möglich das sich das Web-IF mit Script dahingehende modifizieren lässt ... aber da bin ich leider raus,

    Nochmal ganz blöd nachfrag... Wenn ich die GPIO's "ausschalte", wie kann ich denn dann überhaupt noch schalten?

    Schalten geht dann natürlich über die Button nicht mehr.


    Ist aber ja auch nur um auszutesten ob es über die Button GPIO's einkoppelt, was ich vermute.

    Wenn das der Fall ist, wird es schwierig das zu beheben. Entweder räumlich weiter auseinander oder eben schirmen.

    Moin.


    Naja ...da sind ja auch 4 Taster auf dem 4CH ... die sind ja auch GPIO's zugeordnet.

    Du kannst ja mal auf Generic stellen oder eine Template erstellen das auf dem 4CH basiert und eben diese GPIO's auf denen die Taster sind einfahc auf NONE stellen. Wenn dann nichts mehr schaltet dann weißt du das der Schaltimpuls über einen Taster GPIO induziert wird,

    Moin.


    Ist der Trafo relativ nahe am Sonoff? Die Auschaltspzite kann durchaus eine Spannung in einen GPIO induzieren. Vor allem wenn dieser nicht mit nem Pulldown beschaltet ist. Kannst du recht leicht testen indem du die GPIO (besnders die für die Taster) mal auf "NONE" konfigurierst.

    Wie die Helfinger schon sagte musst du den GND wohl direkt am Chip an den GPIO0 Pin verbinden.

    Den Chip hab ich dir mit einem roten Kreis makiert. Welcher der Pins davon der GPIO0 ist kann ich dir nicht sagen weil das Bild zu unscharf ist um das Genau zu identifizieren.. Deshalb auch der Pinout vom ESP. Und dann da wirklich nen Draht hinzulöten ohne den Chip zu killen ist so ne Sache.


    EDIT: Der markierte PIN muss auf GND um in den Flashmodus zu kommen.