Lösung für Kreuzschaltung nach Tasmota-Flash

  • Ich habe das gleiche mit 3 Schaltern und habe es mit 3 Scripten gelöst.

    Das hat eine Zeit lang gut funktioniert, bis es, vermutlich auf Grund von Timing-Problemen dazu kam, dass sich die Lichtschalter bzw. die Scripte gegenseitig getriggert haben und ich bei mir im Stiegenhaus eine Disko hatte ;)

    Diese Aktion hat mir dann auch gleich eine der LED-Lampen gekillt vom vielen und schnellen ein/ausschalten.

    Gelöst habe ich das ganze dann so...

    Script1:

    schimmer-media.de/index.php?attachment/887/

    Script2:

    schimmer-media.de/index.php?attachment/888/

    Script3:

    schimmer-media.de/index.php?attachment/889/

    Script4 (für den Timer):

    schimmer-media.de/index.php?attachment/890/

    Der Timer ist eigentlich dafür da, um das schnelle Auslösen von Schaltvorgängen zu verhindern.

    Es funktioniert eigentlich sehr gut - hat aber einen Nachteil: Wenn man den Knopf auf dem Schalter schnell hintereinander schaltet, dann bekommt dieser den Schaltvorgang nicht mit, weil er ja gemäß dem Script ignoriert wird.

    Ich würde gerne den Schaltvorgang mit dem Schalter von dem via Script unterscheiden - dann wäre dieses Problem auch gelöst.

    Kann gut sein, dass ihr diese Scripts für komisch und übertrieben erachtet, aber es funktioniert ;)

    Für Tipps bin ich jederzeit zu haben.

    Ohne dem Timer hatte ich jedenfalls das Problem, dass ich immer wieder in Endlosschleifen geraten bin und die 3 Schalter dann wie wild geschalten haben, ohne dass ich es stoppen konnte. Einzige Change: Scripts stoppen oder Raspberry/ioBroker vom Netz nehmen.

  • Ich würde gerne den Schaltvorgang mit dem Schalter von dem via Script unterscheiden - dann wäre dieses Problem auch gelöst.

    Sowas geht am einfachsten, wenn Du einen zusätzlichen Datenpunkt (Objekt) von Hand definierst. Name z,. B. "SchalterTreppe". Dieses Objekt setzt Du per Schalter-Trigger auf TRUE, wenn ein Schalter gedrückt wird; ansonsten ist SchalterTreppe auf FALSE. So unterscheidest Du, ob ein Schalter oder ein Script die Aktion auslöst.

    In Deinen Scripten musst Du dann Deine vorhandene Logik splitten in einen Zweig mit SchalterTreppe=TRUE und den anderen mit SchalterTreppe=FALSE. Das ist an sich schon die ganze Magie.

  • Sowas geht am einfachsten, wenn Du einen zusätzlichen Datenpunkt (Objekt) von Hand definierst. Name z,. B. "SchalterTreppe". Dieses Objekt setzt Du per Schalter-Trigger auf TRUE, wenn ein Schalter gedrückt wird; ansonsten ist SchalterTreppe auf FALSE. So unterscheidest Du, ob ein Schalter oder ein Script die Aktion auslöst.

    Wie unterscheide ich bei einem Trigger, ob dieser von einem Schalter oder über ein Script getriggert wurde? Ich setze den Trigger ja auf den POWER-State und dieser ändert sich, irrelevant ob ich den Schalter physisch drücke oder den Status über das Script via Control-Commando setze.

    Wie bekomme ich es also hin diese Unterscheidung zu treffen?

    Beispiel:

    schimmer-media.de/index.php?attachment/896/

    Dieser Trigger springt immer an, egal wie ich den POWER-State ändere. Ich kann diesen über den Sonoff-Touch ändern oder über ein Script via Control-Command.

    Wie soll ich so einen neuen Datenpunkt also abhängig davon, woher das Kommando kommt, setzen?

  • ok, das ihr das gesagt habt, habe ich gelesen - bringt mir nur leider nichts, da meine Argumente unbeantwortet im Raum stehen ;)

    Ich hab wohl einen Knoten im Hirn und versuche meine Gedanken nochmals aufzuschreiben:

    1. Das Script beinhaltet einen Trigger basierend auf der POWER-Zustands-Änderung

    2. Der Trigger feuert immer gleich, egal ob die POWER-Zustands-Änderung über den Sonoff-Touch Schalter oder über einen Control-Befehl aus einem anderen Script ausgelöst wurde.

    3. Der POWER-State ändert sich im konkreten Fall wenn:

    - Ich den Schalter im EG betätige

    - Ich den Schalter im 1ten Stock beim Bad betätige

    - Ich den Schalter im 1ten Stock beim Kinderzimmer betätige

    - Bei jeder Schalterbetätigung läuft ein Script, welches jeweils die POWER-States der anderen beiden Schalter mittels "control" setzen.

    Zu welchem Zeitpunkt und auf Basis welcher Information kann ich eine Variable auf einen Status setzen der signalisiert, dass die POWER-Zustands-Änderung vom Schalter oder von einem Control-Commando kam?

    Ich skizziere das mal an Hand eines Ablaufs:

    1. Ich schalte das Licht im EG

    2. Script springt an auf Basis POWER-Zustands-Änderung EG

    3. Das Script setzt die POWER-Zustände von Bad und Kinderzimmer

    4. Die Änderung der POWER-Zustands-Änderung von Bad führt zum Anspringen von Script 2

    5. Script 2 ist jenes welche, welches die Zustände von EG und Kinderzimmer setzt. Es werden also POWER-Zustände von Bad und Kinderzimmer entsprechend angepasst.

    -> allein hier ergäbe sich schon eine Endlosschleife, wenn man nicht auf die Änderung reagieren würde, sondern auf ein Update. Dennoch ergibt sich die Endlosschleife auch mit Update hin und wieder - keine Ahnung warum.

    Setze ich eine Variable im Script, zB. vor dem Aufruf des Control-Commandos, würde ich diese ja auch dann setzen, wenn die Änderung über den physischen Schalter erfolgt ist.

    Nachdem ihr beide total überzeugt seid, dass mir eine Variable helfen würde, wäre es total super, wenn ihr mir einen Tipp geben könnt, wo ich diese setzen muss, um zu wissen, dass der Trigger-Event von einem Schalter und nicht aus einem Script kam.

    Die Scripts sind zu lange, um sie hier in die Nachricht zu packen. Daher als Anhang.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!