FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Stonemuc am 21 Februar 2019, 09:15:08

Titel: Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Stonemuc am 21 Februar 2019, 09:15:08
Hallo Leute,

ich hab mal wieder eine Frage zu einem DOIF, was nicht so funktioniert wie ich es mir vorgestellt habe. Ich möchte meine Lüftung per Alexa Sprachsteuerung steuern und das im SmartHome Skill. Also habe ich für alle Zustände einen dummy als Schalter angelegt, den ich per Alexa schalten kann. Die eigentliche Steuerung soll jetzt ein DOIF übernhemen.

Es gibt folgende Dummys:
Alexa.Luft mit dem Status Aus und An - hier wird die Lüftung komplett aus oder af Stufe 1 angeschalten
Alexa.Luft1 mit dem Status An - hier wird in Lüftungsstufe 1 geschallten
Alexa.Luft2 mit dem Status An - hier wird in Lüftungsstufe 2 geschalten
Alexa.Luft3 mit dem Status An - hier wird in Lüftungsstufe 3 geschalten
Alexa.LuftP mit dem Status An - hier wird die Lüftung für 60 Minuten pausiert
FanSelectorDay mit dem Status 0 1 2 3 offFor60min - hier wird der Wert für das notify, welches dann eigentlich die Heizung schaltet reingeschrieben

Mein DOIF sieht aktuell so aus und funktioniert nicht, da es nur in cmd_1 oder wenn cmd_1 erfüllt ist in cmd_2 schaltet:
define Alexa_Luftsteuerung DOIF (["Alexa.Luft:on"])(set FanSelectorDay 1)
DOELSEIF (["Alexa.Luft:Aus"]) (set FanSelectorDay 0)
DOELSEIF (["Alexa.Luft1:An"]) (set FanSelectorDay 1)
DOELSEIF (["Alexa.Luft2:An"]) (set FanSelectorDay 2)
DOELSEIF (["Alexa.Luft3:An"]) (set FanSelectorDay 3)
DOELSEIF (["Alexa.LuftP:An"]) (set FanSelectorDay offFor60min)


wie erreiche ich, dass die anderen cmd's erreicht werden - aktuell bleibt er ja in den ersten beiden Zweigen hängen, da Alexa.Luft immer auf An oder Aus steht.

Reicht es wenn ich die Zweige nach hinten packe und die anderen vorab prüfe? Oder muss ich alle, die nicht geschalten werden sollen dann im DOIF im jeweiligen Ausführungsteil extra mit "Aus" schalten?

Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Damian am 21 Februar 2019, 09:20:28
Du solltest die Devicenamen nicht als RegEx formulieren:

([Alexa.Luft:"on"])(set FanSelectorDay 1)
DOELSEIF ([Alexa.Luft:"Aus"]) (set FanSelectorDay 0)
DOELSEIF ([Alexa.Luft1:"An"]) (set FanSelectorDay 1)
DOELSEIF ([Alexa.Luft2:"An"]) (set FanSelectorDay 2)
DOELSEIF ([Alexa.Luft3:"An"]) (set FanSelectorDay 3)
DOELSEIF ([Alexa.LuftP:"An"])
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Stonemuc am 21 Februar 2019, 12:07:02
Danke - aber ich hab jetzt immernoch das Problem, das wenn ich jetzt z.B. Alexa.Luft2 auf An stelle, das DOIF in cmd_2 - also Lüftung aus geht, da die Bedingung ja zuerst geprüft und als "wahr" erkannt wird der Dummy Alexa.Luft steht jetzt z.B. auf aus, da ich vorhin die Lüftung per Sprachbefehl ausgeschalten habe.
Oder ist das DOIF dafür überhaupt nicht die erste Wahl, sondern eher ein notify?
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Per am 21 Februar 2019, 13:24:48
Zitat von: Stonemuc am 21 Februar 2019, 12:07:02Oder ist das DOIF dafür überhaupt nicht die erste Wahl, sondern eher ein notify?
Das ist eine Philosophie-Frage ;)

Wenn Alexa wirklich "Luft1", "Luft2"... liefert, sollte es funktionieren. Schau doch mal, welche Events Alexa liefert.
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Damian am 21 Februar 2019, 13:25:22
Bei DOIF werden nur die Zweige geprüft, bei denen auch der Trigger vorkommt.

Wenn du Alexa.Luft2 anstellst, dann wird nur der Zweig wo Alexa.Luft2 steht ausgewertet. Die anderen Zweige werden nicht ausgewertet.
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Stonemuc am 21 Februar 2019, 14:01:51
Alexa kann über den Custom Skill nur einen Schalter mit einem beliebigen Namen mit dem Wert An oder Aus liefern - davon habe ich 5 Stück als dummy Devices angelegt.
Wenn ich jetzt z.B. sage"Alexa.Luft2 An" - schreibt sie mir in das dummy Device den Wert An.
Das DOIF triggert, aber das DOIF schaltet trotzdem cmd_2, da der dummy mit Alexa.Luft vorher im Zweig schon mit Aus beschrieben ist und die Bedingung somit schon wahr - wie komm ich da herum?
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Per am 21 Februar 2019, 14:06:53
Der erste kann nicht Triggern, da er nur auf den Event reagiert, nicht auf den Zustand.
Deshalb meine Frage nach den ganzen "Alexa.Luft.*"-Events.
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Damian am 21 Februar 2019, 15:53:30
Zitat von: Stonemuc am 21 Februar 2019, 14:01:51
Alexa kann über den Custom Skill nur einen Schalter mit einem beliebigen Namen mit dem Wert An oder Aus liefern - davon habe ich 5 Stück als dummy Devices angelegt.
Wenn ich jetzt z.B. sage"Alexa.Luft2 An" - schreibt sie mir in das dummy Device den Wert An.
Das DOIF triggert, aber das DOIF schaltet trotzdem cmd_2, da der dummy mit Alexa.Luft vorher im Zweig schon mit Aus beschrieben ist und die Bedingung somit schon wahr - wie komm ich da herum?

Mit meinem Vorschlag kann der cmd_2 nur dann kommen, wenn Alexa.Luft ein Event "Aus" sendet und sonst nicht, also auch nicht wenn nur Alexa.Luft2  ein Event sendet.
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Stonemuc am 21 Februar 2019, 17:57:36
Vielleicht lag es am on in der ersten Bedingung...da müsste auch An stehen. Ich hab das jetzt geändert und nun passt es anscheinend....teste gerade noch und gebe Rückmeldung
Titel: Antw:Wie kann mein DOIF auf jeden DOELSEIF Zweig triggern?
Beitrag von: Stonemuc am 22 Februar 2019, 12:53:41
Nein...zu früh gefreut - er bleibt an dem Ereignis(-zweig) hängen, was er zuerst als wahr erkennt, egal welches Ereignis eigentlich triggert...