Ablaufplan: Umsetzung: Solange Zustand, führe Schleife aus

Hallo,

ich habe folgednen Ablaufplan:

Auslöser: Tor wird geöffnet (Öffnung = TRUE)
Solange Tor geöffnet, gib alle 10 Sekunden einen Sound (Sonos) aus
Sobald Tor geschlossen, ist die Auslöseaktion/Ablaufplan abgeschlossen

So habe ich gestartet, aber dann läuft der Ablaufplan unendlich lange bis zum nächsten „Schließen“?

Und außerdem ist es keine richtige While Schleife…

Wie kann ich hier eine While Schleife umsetzen?

Schleifen gibt es so direkt nicht im Ablaufplan. Ich würde das auch gar nicht per Ablaufplan machen sondern einfach per zyklischem Ereignis mit Bedingung. Erstelle einfach ein zyklisches Ereignis, dass alle 10 Sekunden den Sound ausgibt. Als erweiterte Bedingung gibst du dann an, dass das Tor geöffnet sein soll.

Hallo,
vielen Dank für die schnelle Rückmeldung!

Belasten solche zyklischen Ereignisse dann nicht mit der Zeit das System zu stark, wenn ich irgendwann 50 davon für verschiedenste Aufgabn parallel laufen habe, wiel sie andaurend laufen?

Dann vielleicht lieber doch einen php script mit „echter“ While Schleife?

Das habe ich mich auch schon öfter gefragt. Aber vermutlich könnten hier sehr, sehr viele davon in einer Sekunde abgearbeitet werden. Aber hier mal eine Zahl zu bekommen, was problemlos möglich ist, wäre interessant.

Ich habe jetzt keine Belastungstests durchgeführt, aber da sollte einiges gehen. Die Bedingungen werden ja rein nativ ausgewertet ohne die Brücke zu PHP zu überschreiten. Im Zweifelsfall kannst du aber statt der erweiterten Bedingung noch Ereignisse an das Ereignis hängen, welche das Hauptereignis aktivieren oder deaktivieren.

Hallo,
ich versuche jetzt im Ablaufplan unter „Aktion“ einen PHP Script mit Scheife zu setzen.

ich scheitere am Auslesen der Variable „Kontakt“:

ergibt keinen Wert für den Value:

grafik

obwohl dort false herauskommen müsste…hat eine eine Idee? :thinking:

Hier lesen:

Nutze keine Endlosschleife in einem Script.
Das blockiert dir einen ganzen PHP Thread.
Nutze lieber die von @Dr.Niels vorgeschlagene Lösung. Dafür sind zyklische Ereignisse gedacht, oder nutzt eine Script mit ScriptTimer.
Siehe Doku:
IPS_SetScriptTimer

Michael