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?
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"])
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?
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.
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.
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?
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.
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.
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
Nein...zu früh gefreut - er bleibt an dem Ereignis(-zweig) hängen, was er zuerst als wahr erkennt, egal welches Ereignis eigentlich triggert...