Timer im DOIF schlägt mehrmals zu

Begonnen von DerMatze, 28 September 2017, 18:14:13

Vorheriges Thema - Nächstes Thema

DerMatze

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.

Ellert

#1
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.

Damian

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



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

DerMatze

#3
Danke für die schnelle Hilfe, habe es jetzt so eingebaut.

DerMatze

Nach einigen Test funktioniert das DOIF nun genau wie es soll. Könnt ihr mir bitte die Funktion vom timerwithwait erklären?

Ellert

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