Code: Alles auswählen
// Globale Variablen immer zu Beginn der Datei definieren!
var Timer tRoll = null
var nRoll = 0
rule "Alle Rolladen ohne Ausnahmen öffnen"
when
Item <TRIGGER> changed from OFF to ON
then
if(tRoll === null) { // nur falls die Rule noch nicht getriggert wurde
nRoll = 0 // Zähler auf 0
tRoll = createTimer(now.plusMillis(100), [| // Timer initialisieren
nRoll += 1 // Zähler hochzählen
if(nRoll <= gBlinds.members.size) { // Falls noch nicht am Ende der Liste angekommen
if(gBlinds.members.sortBy[name].get(nRoll).state > 0) { // aktuelles Element > 0 ?
gBlinds.members.sortBy[name].get(nRoll).sendCommand(0) // Laden hoch
tRoll.reschedule(now.plusMillis(200)) // warten und nächster Laden
} else {
tRoll.reschedule(now.plusMillis(10)) // nächster Laden
}
} else { // Liste komplett durchlaufen
tRoll = null // timer löschen
}
])
}
end
Diese Variante hat den Vorteil, dass die Rule (auch während sie ausgeführt wird) beliebig oft getriggert werden darf, ohne dass dies Auswirkungen hat, schließlich wird der Timer nur erstellt, wenn noch keiner angelegt wurde.
Es wird auch nur ein Platz im Scheduler benötigt. Auch wenn mir nicht bewusst wäre, dass es hier eine Grenze gibt, so könnte eine lange Liste im Scheduler doch Auswirkungen haben. Das Lambda wird pro Timer hinterlegt und der Code ist identisch - Platzverschwendung (RAM).