FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: DerMatze am 28 September 2017, 18:14:13

Titel: Timer im DOIF schlägt mehrmals zu
Beitrag von: DerMatze am 28 September 2017, 18:14:13
Guten Abend,
nach vielen Suchen und probieren komme ich mit einem einfachen Timer im DIOF nicht ganz klar. Ziel ist es, bei Abwesenheit verschiedene Lichter ein und aus zu schalten. Das Ganze in einem Zeitfenster variabel mit Zufallszahlen. Mein DOIF dazu, sieht so aus:

define di_flurlicht_1 DOIF ([([10:26]+int(rand(500)))] and [?absent] eq "away")(set HM_4AB114 on-for-timer 189)
attr di_flurlicht_1 do always


Im Log stehen folgende Einträge:

2017.09.28 10:29:11 3: CUL_HM set HM_4AB114 on-for-timer 189
2017.09.28 10:32:58 3: CUL_HM set HM_4AB114 on-for-timer 189

Warum wird die Aktion 2-mal ausgeführt. Wenn ich das do always weg lasse, wird der Befehl genau einmal ausgeführt. Dann aber am darauf folgenden Tag nicht mehr.
Titel: Antw:Timer im DOIF schlägt mehrmals zu
Beitrag von: Ellert am 28 September 2017, 18:20:42
Der zufällig neuberechnete Timer liegt später als der abgelaufene Timer und der wird natürlich auch ausgewertet,

Wenn Du DOELSEIF ([00:00]) zufügst und do always weg lässt, sollte es klappen.
Titel: Antw:Timer im DOIF schlägt mehrmals zu
Beitrag von: Damian am 28 September 2017, 18:25:12
ZitatWarum wird die Aktion 2-mal ausgeführt

Ganz einfach, weil Random beim zweiten Mal 227 Sekunden länger war, als davor ;)

Lösung: random in wait unterbringen und das Attribut https://fhem.de/commandref_DE.html#DOIF_timerWithWait setzen



Titel: Antw:Timer im DOIF schlägt mehrmals zu
Beitrag von: DerMatze am 28 September 2017, 20:38:34
Danke für die schnelle Hilfe, habe es jetzt so eingebaut.
Titel: Antw:Timer im DOIF schlägt mehrmals zu
Beitrag von: DerMatze am 11 Oktober 2017, 11:53:01
Nach einigen Test funktioniert das DOIF nun genau wie es soll. Könnt ihr mir bitte die Funktion vom timerwithwait erklären?
Titel: Antw:Timer im DOIF schlägt mehrmals zu
Beitrag von: Ellert am 11 Oktober 2017, 14:26:48
timerWithWait weist DOIF an den ersten Waittimer im Timer zu berücksichtigen.
([10:00]) (Befehl)
Befehl wird um 10.00 Uhr ausgeführt

([10:00]) (Befehl)
wait 300
Befehl wird um 10.00 Uhr ausgeführt

([10:00]) (Befehl)
wait 300
timerWithWait 1
Befehl wird um 10.05 Uhr ausgeführt