FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gear am 06 August 2018, 20:57:11

Titel: [Gelöst] DOIF Funktioniert nicht wenn der Verbraucher von Hand geschaltet wird
Beitrag von: Gear am 06 August 2018, 20:57:11
Hallo Zusammen,

ich habe einen Sonoff S20 der mein Nachttischlicht schaltet, ein Xiaomi Aqara Butto soll das Licht bei einfachem Klicken Toggeln und bei 4fachem Klicken die Lampe nach 30min abschalten, bzw das "AT" löschen.
Das funktioniert an sich ganz gut.

Mein Problem ist, wenn das "AT" die Lampe ausschaltet oder ich über FHEM oder direkt am S20 schalte, dann geht es nicht mehr, ich muss das DOIF neu initialisieren oder den Ausgangszustand des S20 herstellen, dann geht es wieder.

Mein DOIF:
([SZ.Bett.XMI_Aqara.Button:"single"] and [?SZ.Nachttischlicht] eq "ON")
(set SZ.Nachttischlicht OFF)
DOELSEIF ([SZ.Bett.XMI_Aqara.Button:"single"] and [?SZ.Nachttischlicht] eq "OFF")
(set SZ.Nachttischlicht ON)

DOELSEIF ([SZ.Bett.XMI_Aqara.Button:"double"])
()

DOELSEIF ([SZ.Bett.XMI_Aqara.Button:"triple"])
()

DOELSEIF ([SZ.Bett.XMI_Aqara.Button:"quadruple"] and exists($defs{'at.TMP.DOIF.SZ.Button.Bett'}))
(delete at.TMP.DOIF.SZ.Button.Bett)
DOELSEIF ([SZ.Bett.XMI_Aqara.Button:"quadruple"])
(set SZ.Nachttischlicht ON,define at.TMP.DOIF.SZ.Button.Bett at +00:30:00 set SZ.Nachttischlicht OFF)


Ich hoffe ihr könnt mir helfen, ist echt nervig, wenn man nachts aufwacht und erst den S20 suchen muss... xD

Viele Grüße und Danke
Gear
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Eistee am 06 August 2018, 21:42:13
Du hast da eine Interessante und sehr komplizierte Lösung für ein relativ einfaches Problem. Guck dir mal in der Commandref beim DOIF das Attribut wait an. Das dürfte vollkommen ausreichend sein um deine Verzögerung für das ausschalten zu realisieren. Bei dem 4x Drücken dann einfach zwei befehle jeweils in Klammern (anschalten)(ausschalten) und den zweiten Befehl mit wait verzögern.

Auf der anderen Seite musst du dir überlegen Ob du evtl bei einem händischen eingriff dein DOIF in einen anderen Pfad aktivierst. Ich würde die Bedingungen in dem DOIF immer so aufbauen das diese den Gewünschten Zustand beschreiben. Z.B. Lampe An, Lampe Aus, Lampe Verzögert Aus. Der Schalter ist ja nur ein Triggerelement das zum gewünschten Zustand führt.

Gruß Alina
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Gear am 07 August 2018, 09:35:31
Ich hab mich mit DOIF noch nie richtig auseinandergesetzt, da ich bisher noch nie soweit war da, also weil die Komponenten nach und nach gekauft und verbaut werden, wenn ein Teil drin ist.

Ich habe das für meine Büro und Wohnzimmerbeleuchtung so umgesetzt, dass ich mit einem Sonoff T1 Lichtschalter eine Lightscene auf ON oder OFF schalte.
Zudem ist im DOIF noch eine Abfrage drin, wenn die Lightscene händisch umgeschaltet wird, sobald die LS OFF ist, soll auch der Schalter den Zustand OFF bekommen, wenn die LS nicht OFF ist, dann soll der Schalter an sein.

Also müsste ich da noch irgendwie miteinbauen, wenn der Schalter den Zustand ändert, dann soll das DOIF noch mal triggern?
Wäre doof, da der S20 ja seinen Zustand meldet ubd dadurch das DOIF erneut getriggert wird oder verstehe ich das falsch und stehe ich auf dem Schlauch?
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Eistee am 07 August 2018, 15:00:07
Warum willst du von einem Schalter den Zustand ändern? Ein Schalter ist ein Eingabeelement.
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Gear am 07 August 2018, 18:53:13
Ich möchte eben beide Möglichkeiten nutzen können, also am S20 schalten oder eben über den Xiaomi Aqara Button ohne, dass es dann "klemmt".

Und das mit dem Schalter ist wieder was ganz anderes, der Sonoff T1 zeigt seinen Zustand an, also er leuchtet oder eben nicht.
Bei der Sache will ich ja nur das der Schalter "ON" zurückmeldet, wenn eben die Lightscene nicht "OFF" ist.
Das funktioniert.

Es kann auch sein, dass ich deinen Post falsch verstanden hatte.
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Eistee am 07 August 2018, 19:31:55
Dieses leuchten müsstest du dann als Ausgabegerät in FHEM ansteuern. Du machst ein getrenntes DOIF wo du mit Änderung der Lichtscene den Status für die LED im Schalter setzt. Aber das eine ist Input und das andere Output. Wenn du von Schalter redest ist eigentlich ein Input Gerät gemeint das andere ist die Schalter LED als Statusmeldung. Theoretisch könntest du die LED auch einfach in deine Lichtscene aufnehmen und so mit den anderen Lampen zusammen schalten.
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Gear am 08 August 2018, 09:33:38
Wir sind jetzt zu einem beispiel abgerutscht, dass bei mir funktioniert, war evlt mein Fehler, dass ich es genannt habe.

Zum Sonoff T1, dies ist ein Lichtschalter, werer in der Wand verbaut wird, dieser hat Touchflächen und auch relais drin, man kann diesen als Schalter ubd als Verbraucher nutzen.
Sprich, es ist wie ein Sonoff S20, wenn das Relais geschaltet ist und die LED leuchtet haz dieser schalter den state ON, andernfals ist das Relais aus und die LED auch ubd somit ist das state OFF.

Mein Problem ist, dass mein Zigbee Taster bei meinem im 1. Post geschriebenen DOIF nicht funktioniert, wenn man direkt an S20 oder in FHEM den Zustand ändert.
Das DOIF erkennt nicht, dass der Verbraucher den Zustandgeändert hat.
Zudem würde ich das auch nicht zwingend wollen, nur für einen Verbraucher eine Lightscene anzulegen und es darüber zu machen, außer es geht nicht anders.

Gibt es die Möglichkeit das DOIF so zu nutzen, dass er auch die Statusänderung erkennt und beim nächsten Mal Button drücken den richtigen CMD ausführt?
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Pfriemler am 08 August 2018, 21:54:05
Also: für mich sieht das erste DOIF wie eine Übersetzung des SZ.Bett.XMI_Aqara.Button auf einen Schaltzustand aus, in Abhängigkeit vom Schaltzustand des SZ.Nachttischlicht.
Erstens: Liefert der S20 saubere Rückmeldung über seinen Status? Hast Du ihn per MQTT angebunden?
Zweitens: Das DOIF sollte seinen Status nicht in Abhängigkeit des Schaltzustandes vom S20 ändern müssen, es sollte nur richtig reagieren. Ich sehe keinen Grund, warum es das nicht tun sollte. Ein Problem sehe ich, wenn das Attribut "do always" nicht gesetzt ist - dann wird der entsprechende Zweig nicht ausgeführt, wenn es der zuletzt ausgeführte vom DOIF war. Sprich: Wenn du den per DOIF einschaltest, von Hand aus, und dann wieder über den XMI einschalten willst, wird es ohne "do always" nicht funktionieren. Mit "do always" sollte es kein Problem sein.

Habe ich jetzt was falsch verstanden oder übersehen?
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Gear am 09 August 2018, 09:28:25
Ok, doAlways hab ich nicht in den attr aktiv, werde ich heute Abend mal testen.

Der S20 ist über MQTT angebunden und liefert auch alles sauber.

Und du siehst alles richtig und hast nichts übersehen.
Hatte mih gestern mal durch die ComRef gelesen, hab das entweder übersehen oder einfach nur verpeilt.

Danke schon mal, ich makiere als Gelöst, wenn ich es getestet habe.
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Gear am 09 August 2018, 18:52:45
Ok, super es geht!

Noch mal zu meinem Verständnis.

Wenn ich ein DOIF habe und dieses einen CMD ausgeführt hat, dann geht es nur bei doAlwasy, dass der CMD erneut ausgefürt werden kann.
Somit sollte man doAlways immer in einem DOIF haben, bei dem dies passieren kann?

Vielen Dank und beste Grüße
Gear
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Pfriemler am 09 August 2018, 21:16:30
Genau so ist es. Es gibt auch Konfigurationen, bei denen eine mehrfache Ausführung möglich  ist, aber das zu erläutern sprengt hier den Rahmen. DOIF ist eine (lohnenswerte) Wissenschaft für sich. Traditionell kenne ich DOIF als eine Art Zustandsmaschine, die durch äußere Trigger umgeschaltet wird und dabei Aktionen auslösen kann (es geht auch ohne Ausführungsteil). Ist ein Zustand bereits erreicht, ist eben nichts zu tun,  außer man erzwingt die wiederholte Ausführung eben. Dieser Unterschied zum notify ist wohl der häufigste Anfängerfehler mit dem DOIF...
Titel: Antw:DOIF: Funktioniert nicht mehr, wenn der Verbraucher von Hand geschaltet wird.
Beitrag von: Gear am 09 August 2018, 22:09:03
Ok, vielen Dank, ich muss das mit den DOIF noch mal alles lesen! =D