Initialize "vergisst" richtig zu initialisieren

Begonnen von Ralli, 13 Februar 2016, 17:34:30

Vorheriges Thema - Nächstes Thema

Ralli

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?
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Damian

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


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

Ralli

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.
Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa