FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Sirel am 10 September 2016, 11:55:19

Titel: DOIF für als Zufallszeitgenerator
Beitrag von: Sirel am 10 September 2016, 11:55:19
Hallo zusammen,
ich habe ein DOIF angelegt, welches zufallsgesteuert Zeitpunkte generiert, welche wiederum von anderen DOIFs abgefragt werden. Grund ist, ich möchte mein "Zeitmanagement" in einem Punkt bündeln.
Es wird zurzeit eine Uhrzeit für Werktage und eine für Wochenenden generiert. Die Uhrzeit an Werktage ist immer früher, die an Wochenenden immer später.
([([wakeupzeit]+int(rand(1800))+2700)|8] ##Rollladenöffnung frühenstens Werktags in Abwesenheit
or [([10:30]+int(rand(3600)))|7]) ## Rollladenöffnung WoE in Abwesenheit

()
DOELSE

Heute wurde um 10:59 Uhr die Zeit für morgen neu berechnet. Morgen sollen die Rollläden jetzt um 11:15 hochfahren.
In dem DOIF, welches die Rollläden steuert, steht aber noch 10:59 Uhr. Die Zeit für die Werktage wurde aber korrekt übernommen.
Ist so eine zentrales Zeitmanagement eigentlich möglich, oder geht das systemische gar nicht? In dem Moment, wenn das steuernde DOIF auslösen soll, bekommt es ja direkt einen neuen Wert vorgegeben? Wie könnte eine Alternative aussehen?

Vielen Dank und Grüße,
Max
Titel: Antw:DOIF für als Zufallszeitgenerator
Beitrag von: Ellert am 10 September 2016, 12:08:05
Du könntest die abhängigen DOIF über die Aktualisierung des Zeitgebers steuern, statt über die Timer.

(["Zeitgeber:cmd x"] and <weitere Bedingungen>) (set ...)
Titel: Antw:DOIF für als Zufallszeitgenerator
Beitrag von: Sirel am 10 September 2016, 12:34:00
Hi Ellert,
zur Zeit fragen die anderen DOIFs die Readings vom ZeitgeberDOIf ab und übernehme die Zeiten daraus.
Du würdes stattdessen das Kommando abfragen... Gar keine schlechte Idee. Das bleibt ja stehen. Allerdings würde das Cmd immer 1 sein, da es in meinem Fall keine weiteren Kommandos gibt.

Ggf wirk die Cmd Anfrage auch noch in die Richtung, dass eine Bedingung im SteuerungsDOIf immer wahr ist, bis sich die erste Zeit wieder aktualisiert.

Max
Titel: Antw:DOIF für als Zufallszeitgenerator
Beitrag von: Sirel am 10 September 2016, 18:56:44
Hat sonst keiner das Problem, dass eine zufällig ermittelte Uhrzeit in mehreren DOIFs verwendet werden soll?
Die Uhrzeiten aktualisieren sich doch immer dann, wenn die zuvor "gewürfelte" Uhrzeit erreicht ist, oder? D.h aber auch, dass mit dieser Uhrzeit in einem weiteren DOIF nicht gerechnet werden kann - zumindestens nicht addiert.

Über weitere Ideen wäre ich sehr dankbar.

Viele Grüße,
Max
Titel: Antw:DOIF für als Zufallszeitgenerator
Beitrag von: Damian am 10 September 2016, 20:21:50
Zufällige Zeitberechnung der Art [([06:00]+rand(1800))] hat den Nachteil, dass zwei mal hintereinander geschaltet werden kann.

Bsp. berechnete Zeit gestern 06:10 Uhr. Um 06:10 Uhr wird getriggert und neue Zeit berechnet z. B. 06:15 Uhr. Damit wird innerhalb von fünf Minuten zwei mal getriggert, das will man normalerweise nicht.

Ich würde das über eine zufällige Zeitverzögerung lösen:

di DOIF ([06:00]) ....

attr di wait rand(1800)

hier wird immer nur einmal pro Tag mit zufälliger Verzögerung getriggert.

Gruß

Damian


Titel: Antw:DOIF für als Zufallszeitgenerator
Beitrag von: Sirel am 10 September 2016, 21:06:43
Hi Damian,
Danke für den Tip! Ich glaube mittlerweile auch, dass es so nicht funktionier. Warum ich frage hat folgenden Hintergrund:
Ich habe eine Einbruchschutz und eine Abwesenheitssimulation.
Der Einbruchschutz fährt die Rollläden bei Bewegung im Aussenbereich runter und nach frühestens 10 min. wieder hoch. Es muss zudem hell sein, weil wenn es dunkel ist, die Anwesenheitssimulation die Rollläden runtergefahren hat.
Hochfahren tut die Simulation die Rollläden am We aber immer erst später, da ist es dann schon hell. D.h, wenn vor dem Hochfahrzeitpunkt eine Bewegung draußen war, fährt der Einbruchschutz die Rollläden vorher hoch. Daher muss ich diese zwei DOIFs irgendwie synchronisieren.

Das einzige was ich machen könnte, wäre die Waitzeit bei der Anwesenheitssimulation abzufragen. Finde ich aber nicht wirklich elegant.

Muss ich noch mal drüber grübeln.

Vielen Dank und Grüße,

Max
Titel: Antw:DOIF für als Zufallszeitgenerator
Beitrag von: Damian am 10 September 2016, 21:23:28
Zitat von: Sirel am 10 September 2016, 21:06:43
Hi Damian,
Danke für den Tip! Ich glaube mittlerweile auch, dass es so nicht funktionier. Warum ich frage hat folgenden Hintergrund:
Ich habe eine Einbruchschutz und eine Abwesenheitssimulation.
Der Einbruchschutz fährt die Rollläden bei Bewegung im Aussenbereich runter und nach frühestens 10 min. wieder hoch. Es muss zudem hell sein, weil wenn es dunkel ist, die Anwesenheitssimulation die Rollläden runtergefahren hat.
Hochfahren tut die Simulation die Rollläden am We aber immer erst später, da ist es dann schon hell. D.h, wenn vor dem Hochfahrzeitpunkt eine Bewegung draußen war, fährt der Einbruchschutz die Rollläden vorher hoch. Daher muss ich diese zwei DOIFs irgendwie synchronisieren.

Das einzige was ich machen könnte, wäre die Waitzeit bei der Anwesenheitssimulation abzufragen. Finde ich aber nicht wirklich elegant.

Muss ich noch mal drüber grübeln.

Vielen Dank und Grüße,

Max

Ich finde, die Lösung hat schon Ellert vorgeschlagen.

Ein allgemeines DOIF, was nichts anderes macht, als zu gewünschten Zeiten zufällig den Zustand ändert. Alle anderen richtigen sich danach.

define di DOIF ([06:00] DOELSEIF ([22:00]) DOELSEIF ...

wait rand(1800):rand(1000):...


Triggern kannst du dann mit [di:"cmd 1"]  oder [di:"cmd 2"] usw.