NEWS
[GELÖST] Timer in Schleife mit Listenelementen
-
Moin,
ich verzweifle grade an einem Blockly mit Timeouts. Ich weiß, es gibt schon einen Adapter zur Rollladensteuerung, aber ich möchte mein eigenes Ding nach meiner Vorstellung programmieren. Und zwar so, wie ich es bereits unter FHEM gemacht hatte.
Ich habe mir ein Skript gebaut, welches mir unter 0_userdata eine Ordnerstruktur zur Konfiguration und mit Statuswerten anlegt für meine vorhanden Rollläden. Soweit so gut. Nun möchte ich diese natürlich steuern. In einem Datenpunkt liegt das eigentlich Rollladendevice bzw. dessen LEVEL-Datenpunkt. Außerdem kann ich dort konfigurieren, dass ich eine Zufallszeit in Sekunden und einen Offset in Minuten habe. Kommt nun der Timer, dass die Rollläden zum Beispiel geschlossen werden sollen, dann packe ich alle Rollläden in eine Liste und arbeite diese ab.
Dazu möchte ich dort dynamische Timer in Abhängigkeit der Zufallszahl und des Offsets erzeugen, damit die Rollläden jeden Tag in einer zufälligen Reihenfolge fahren (der Offset hat den Sinn, dass ich einen Rollladen definiert zu letzt fahren lassen kann). Das anlegen der Timer (bzw. der Timeouts) klappt auch super.Nun habe ich aber das Problem, dass dieses Timeouts alle mit den Werten des letzten Listeneintrags ausgeführt werden. Und ich habe momentan keine Idee, wie ich dort die individuellen Werte (vom Zeitpunkt des Anlegen) aufheben könnte. Hat da jemand einen schlauen Rat für mich?
-
Ich glaube, ich habe einen Workaround gefunden. Statt Timeouts zu erzeugen, werde ich direkt einen Steuerungsblock mit Verzögerung verwenden. Die Idee ist mir grade in der Pause gekommen. Mal kurz getestet auf einem Dummy-DP und scheint zu klappen.
Der Datenpunkt "Dummy_Text" wird hintereinander (mit den zufälligen Zeitabständen) mit dem Datenpunkt des zu steuernden Rollladen upgedatet. Und der Rollladen, der als letztes dran sein soll, erscheint auch dort als letztes. Alles so, wie ich es möchte.
-
@cluni Solche Ideen hatte ich auch mal. Der ShutterController genügt mir auch nicht.
Als Gedankenanstoss: Ich setzte morgens zu einer bestimmten Zeit für jede Aktion von jedem Rollladen einen Scheduler, ebenfalls abhänging vom Sonnenaufgang/-untergang mit einer zufälligen Komponente (damit die Rollläden eben nicht gleichzeitig fahren) und das sieht dann im Log so aus:
-
@rene55 vielen Dank. Ich habe meine Idee gestern Abend mal mit dem Schließen durchgespielt - klappt mit dem "schreibe"-Block ganz gut und macht das, was ich gerne möchte. Für den Log (momentan nur zu debug-Zwecken) mache ich einfach das gleiche mit einem Datenpunkt, reagiere mit einem Trigger auf die Änderung und gebe dann den DP als Log aus:
Die ganze Abhandlung (inklusiver der Check der Vorbedingungen wie Anwesenheit und der Einstellung, ob die Automatik ausgeschaltet ist uswusf.) läuft bei mir für alle Rollläden in einem einzigen Schedule-Trigger, der nur bei Änderung der allgemeinen Einstellungen der Rollladensteuerung und nach Abarbeitung des Schedulers für die nächste Aktion automatisch berechnet wird. Und vor der Ausführung vom steure-Block wird z.B. auch geschaut, ob dieser Rollladen nur bei Anwesenheit, nur bei Abwesenheit, in beiden Fällen oder gar nicht fahren soll.
Der oben gezeigte Screenshot ist natürlich nur ein kleiner Ausschnitt aus dem Scheduler, der hier für die Erklärung von Bedeutung ist.