Hallo Damian,
ich habe das folgende DOIF angelegt:
Internals:
DEF ([GEN_Aussensensor:TEMPERATURE] < 3) () DOELSE ()
NAME Frost
NR 853
NTFY_ORDER 50-Frost
STATE 0
TYPE DOIF
Helper:
Dblog:
Cmd_nr:
Eventlog:
TIME 1455376918.88285
VALUE 0
State:
Eventlog:
TIME 1455376918.777
VALUE 0
Wait_timer:
Eventlog:
TIME 1455377221.89819
VALUE 13.02.2016 19:27:01 cmd_2 GEN_Aussensensor
Readings:
2016-02-13 17:24:06 Device GEN_Aussensensor
2016-02-13 16:21:58 cmd_nr 0
2016-02-13 17:24:06 e_GEN_Aussensensor_TEMPERATURE 3.000000
2016-02-13 16:21:58 state 0
2016-02-13 16:27:01 wait_timer 13.02.2016 19:27:01 cmd_2 GEN_Aussensensor
Condition:
0 ReadingValDoIf('GEN_Aussensensor','TEMPERATURE','',AttrVal($hash->{NAME},'notexist',undef)) < 3
Devices:
0 GEN_Aussensensor
all GEN_Aussensensor
Do:
0:
0
1:
0
Helper:
event LUMINOSITY: 201.080000
globalinit 1
last_timer 0
sleepdevice GEN_Aussensensor
sleepsubtimer 0
sleeptimer 1
timerdev GEN_Aussensensor
timerevent LUMINOSITY: 201.080000
triggerDev GEN_Aussensensor
timerevents:
LUMINOSITY: 201.080000
triggerEvents:
LUMINOSITY: 201.080000
Internals:
Itimer:
Readings:
0 GEN_Aussensensor:TEMPERATURE
all GEN_Aussensensor:TEMPERATURE
Regexp:
0:
All:
State:
Trigger:
Attributes:
cmdState 1|0
initialize 0
wait 10800:10800
Sinn der Sache ist, dass wenn länger als drei Stunden weniger als 3 Grad sind, der State 1 (cmd_1), und wenn mehr oder gleich 3 Grad sind, der State 0 (cmd_2) gesetzt wird. Das funktioniert auch.
Und nach jedem Neustart von fhem oder Neu-Definieren dieses DOIF soll aber 0 als State gesetzt sein. Nach meinem Kenntnisstand wird das über das Attribut initialize erreicht.
Nach einem Ändern der Definition von DOIF (Ändern des Trigger-Devices) wechselte der State aber auf "inizialize" statt auf 0. Erst als ich das Attribut initialize nochmals neu setzte, wechselte der State wieder auf 0. Das ist jedes mal bei Änderung der Definition reproduzierbar.
Hast Du eine Erklärung?
Zitat von: Ralli am 13 Februar 2016, 17:34:30
Sinn der Sache ist, dass wenn länger als drei Stunden weniger als 3 Grad sind, der State 1 (cmd_1), und wenn mehr oder gleich 3 Grad sind, der State 0 (cmd_2) gesetzt wird. Das funktioniert auch.
Und nach jedem Neustart von fhem oder Neu-Definieren dieses DOIF soll aber 0 als State gesetzt sein. Nach meinem Kenntnisstand wird das über das Attribut initialize erreicht.
Nach einem Ändern der Definition von DOIF (Ändern des Trigger-Devices) wechselte der State aber auf "inizialize" statt auf 0. Erst als ich das Attribut initialize nochmals neu setzte, wechselte der State wieder auf 0. Das ist jedes mal bei Änderung der Definition reproduzierbar.
Hast Du eine Erklärung?
ja, es ist so programmiert, dass das Attribut
initialize dazu gedacht ist, nach dem Neustart einen definierten Zustand zu erreichen, ansonsten wird nichts gemacht und der zuletzt gespeicherte Zustand bleibt. Man hätte das Attribut auch
Default-State nennen können.
initialized wird dagegen gesetzt, wenn man zur Laufzeit das Modul ändert oder ein deaktiviertes Modul wieder aktiviert. Es sind zwei unabhängige Vorgänge. Die Frage ist, ob es sinnvoll wäre, stattdessen, so wie du es verstanden hast, den Wert aus dem Attribut "initialize" zu nehmen.
Gruß
Damian
Mmh.
Also ich fände es logisch, wenn man schon einen (Start)Wert per Attribut festlegen kann, dass dieser dann auch bei einem Initialize nach einem Disable oder nach einem Bearbeiten der Definition übernommen wird - denn dies ist ja eben Sinn der Sache, ein definierter Start-Zustand, der von Standard abweicht.