Hallo zusammen,
ich würde gerne verschiedene LightScenes rotierend z.B. alle 30 Minuten wechseln.
Ich bin nicht ganz sicher, ob das hier ein Lösungsansatz sein könnte.
Ich denke sleep würde hier wahrscheinlich das ganze System blockieren.
Des Weiteren fehlt mir noch eine Bedingung, um das ganze dann auch wieder zu beenden...
at *19:00:00 {
fhem("set Lichtszene_Wohnzimmer scene Lichtszene1 ");
while (1) {
fhem("set Lichtszene_Wohnzimmer scene Lichtszene2");
sleep 1800;
fhem("set Lichtszene_Wohnzimmer scene Lichtszene3");
sleep 1800;
fhem("set Lichtszene_Wohnzimmer scene Lichtszene4");
sleep 1800;
}
}
Gibt es noch eleganterer Lösungen?
Wenn du das sleep IN den fhem Befehl steckst und somit ein fhem sleep nutzt blockiert nichts...
fhem("set Lichtszene_Wohnzimmer scene Lichtszene2;sleep 1800;set Lichtszene_Wohnzimmer scene Lichtszene3;sleep 1800;set Lichtszene_Wohnzimmer scene Lichtszene4");
Ein sleep mit Name/ID kannst du canceln...
Du kannst auch eine sub bauen, die sich "global" den Laufstand merkt und z.B. per at zyklisch aufrufen...
Bzgl. Abbruch kannst du ja etwas abfragen, z.B. Zustand o.ä.
Gruß, Joachim
was spricht gegen nextScene ?
ein einfaches at das alle 30 sekunden weiter schaltet und mit disable/disableForIntervalls deaktiviert wird. wenn es zu einer bestimmten zeit mit einer bestimmten szene anfangen soll ein zusätzliches at für den anfang.
ps: nicht nur das sleep auf perl ebene ist verboten, das while ist noch viel schlimmer weil du damit nicht wieder auf die fhem ebene zurück kommst.
at in Verbindung mit nextScene klappt super.
Mit traversalOrder konnte ich sogar die Reihenfolge der Scenen festlegen und so Scenen auch ausschließen z.B. für das ausschalten der Lampen.
In der ausschalten Scene habe ich dann noch das at auf inactive gesetzt. So kann ich die Lichter auch manuell ausschalten ohne das das at weiterläuft und wieder alles anschaltet.