[gelöst] DOIF List abweichend von tatsächlichen Stati - Erklärung

Begonnen von holle75, 15 Juni 2020, 15:16:23

Vorheriges Thema - Nächstes Thema

holle75

Hallo ihr, ein DOIF welches jahrelang lief, schaltet nun neuerdings falsch. Seit welchem Update weiß ich nicht genau, da einer der Trigger Temperaturabhängig ist und es nunmal jetzt erst Sommer wurde.

Dieses List habe ich gemacht, nachdem der waittimer den Wechsel in cmd_2 angekündigt hatte, obwohl die Bedingung "e_Container_SENSOR_XtenderTransfer_sensor closed" cmd_1 hätte bestehen lassen sollen.

Internals:
   DEF        ([Container_TEMPFEUCHTESENSOR:temperature] > 23 and [Astro:SunAz] > 100 and [Astro:SunAz] < 270 and [Astro:SunAlt] > 28 and ([?AnwesenheitHaupt:statStateDaypresent] gt "01:00:00" or [AnwesenheitHaupt:state] eq "present") and [Container_SENSOR_XtenderTransfer:sensor] eq "closed")
(set KLIMA_AnAusTimer on)
DOELSE (set KLIMA_AnAusTimer off)
   FUUID      5c86875d-f33f-6bb4-0add-1580258b007324cc
   MODEL      FHEM
   NAME       Container_XTENDER_Schalter_KLIMAAnAusDOIF
   NOTIFYDEV  Container_SENSOR_XtenderTransfer,global,Container_TEMPFEUCHTESENSOR,AnwesenheitHaupt,Astro
   NR         1052
   NTFY_ORDER 50-Container_XTENDER_Schalter_KLIMAAnAusDOIF
   STATE      cmd_1
   TYPE       DOIF
   VERSION    22030 2020-05-25 14:10:16
   READINGS:
     2020-06-15 15:00:40   Device          AnwesenheitHaupt
     2020-06-15 13:26:46   cmd             1
     2020-06-15 13:26:46   cmd_event       Container_SENSOR_XtenderTransfer
     2020-06-15 13:26:46   cmd_nr          1
     2020-06-15 15:00:40   e_AnwesenheitHaupt_state present
     2020-06-15 14:58:38   e_Astro_SunAlt  60.9
     2020-06-15 14:58:38   e_Astro_SunAz   237
     2020-06-15 14:47:49   e_Container_SENSOR_XtenderTransfer_sensor closed
     2020-06-15 14:40:46   e_Container_TEMPFEUCHTESENSOR_temperature 23.3
     2020-06-03 12:23:54   last_cmd        cmd_1
     2020-06-13 15:22:08   mode            enabled
     2020-06-15 13:26:46   state           cmd_1
     2020-06-15 14:47:49   wait_timer      15.06.2020 15:02:49 cmd_2 Container_SENSOR_XtenderTransfer
   Regex:
     accu:
     cond:
       AnwesenheitHaupt:
         0:
           state      ^AnwesenheitHaupt$:^state:
       Astro:
         0:
           SunAlt     ^Astro$:^SunAlt:
           SunAz      ^Astro$:^SunAz:
       Container_SENSOR_XtenderTransfer:
         0:
           sensor     ^Container_SENSOR_XtenderTransfer$:^sensor:
       Container_TEMPFEUCHTESENSOR:
         0:
           temperature ^Container_TEMPFEUCHTESENSOR$:^temperature:
   attr:
     cmdState:
     wait:
       0:
         120
       1:
         900
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Container_TEMPFEUCHTESENSOR','temperature') > 23 and ::ReadingValDoIf($hash,'Astro','SunAz') > 100 and ::ReadingValDoIf($hash,'Astro','SunAz') < 270 and ::ReadingValDoIf($hash,'Astro','SunAlt') > 28 and (::ReadingValDoIf($hash,'AnwesenheitHaupt','statStateDaypresent') gt "01:00:00" or ::ReadingValDoIf($hash,'AnwesenheitHaupt','state') eq "present") and ::ReadingValDoIf($hash,'Container_SENSOR_XtenderTransfer','sensor') eq "closed"
   do:
     0:
       0          set KLIMA_AnAusTimer on
     1:
       0          set KLIMA_AnAusTimer off
   helper:
     DEVFILTER  ^global$|^Container_SENSOR_XtenderTransfer$|^Astro$|^Container_TEMPFEUCHTESENSOR$|^AnwesenheitHaupt$
     NOTIFYDEV  global|Container_SENSOR_XtenderTransfer|Astro|Container_TEMPFEUCHTESENSOR|AnwesenheitHaupt
     event      present,statStateDaypresent: 12:22:44
     globalinit 1
     last_timer 0
     sleepdevice Container_SENSOR_XtenderTransfer
     sleepsubtimer 0
     sleeptimer 1
     timerdev   AnwesenheitHaupt
     timerevent present,statStateDaypresent: 12:22:44
     triggerDev AnwesenheitHaupt
     timerevents:
       present
       statStateDaypresent: 12:22:44
     timereventsState:
       state: present
       statStateDaypresent: 12:22:44
     triggerEvents:
       present
       statStateDaypresent: 12:22:44
     triggerEventsState:
       state: present
       statStateDaypresent: 12:22:44
   internals:
   perlblock:
   readings:
     all         Container_TEMPFEUCHTESENSOR:temperature Astro:SunAz Astro:SunAlt AnwesenheitHaupt:state Container_SENSOR_XtenderTransfer:sensor
   trigger:
   uiState:
   uiTable:
Attributes:
   devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@green:disable cmd_2:general_an@yellow:disable
   group      System
   icon       frost
   room       System,Anwesenheit
   sortby     003
   wait       120:900


Nachdem das DOIF dann tatsächlich auf cmd_2 gegangen ist, dieses List:
Internals:
   DEF        ([Container_TEMPFEUCHTESENSOR:temperature] > 23 and [Astro:SunAz] > 100 and [Astro:SunAz] < 270 and [Astro:SunAlt] > 28 and ([?AnwesenheitHaupt:statStateDaypresent] gt "01:00:00" or [AnwesenheitHaupt:state] eq "present") and [Container_SENSOR_XtenderTransfer:sensor] eq "closed")
(set KLIMA_AnAusTimer on)
DOELSE (set KLIMA_AnAusTimer off)
   FUUID      5c86875d-f33f-6bb4-0add-1580258b007324cc
   MODEL      FHEM
   NAME       Container_XTENDER_Schalter_KLIMAAnAusDOIF
   NOTIFYDEV  Container_SENSOR_XtenderTransfer,global,Container_TEMPFEUCHTESENSOR,AnwesenheitHaupt,Astro
   NR         1052
   NTFY_ORDER 50-Container_XTENDER_Schalter_KLIMAAnAusDOIF
   STATE      cmd_2
   TYPE       DOIF
   VERSION    22030 2020-05-25 14:10:16
   READINGS:
     2020-06-15 15:00:40   Device          AnwesenheitHaupt
     2020-06-15 15:02:50   cmd             2
     2020-06-15 15:02:50   cmd_event       Container_SENSOR_XtenderTransfer
     2020-06-15 15:02:50   cmd_nr          2
     2020-06-15 15:00:40   e_AnwesenheitHaupt_state present
     2020-06-15 14:58:38   e_Astro_SunAlt  60.9
     2020-06-15 14:58:38   e_Astro_SunAz   237
     2020-06-15 14:47:49   e_Container_SENSOR_XtenderTransfer_sensor closed
     2020-06-15 14:40:46   e_Container_TEMPFEUCHTESENSOR_temperature 23.3
     2020-06-03 12:23:54   last_cmd        cmd_1
     2020-06-13 15:22:08   mode            enabled
     2020-06-15 15:02:50   state           cmd_2
     2020-06-15 15:02:49   wait_timer      no timer
   Regex:
     accu:
     cond:
       AnwesenheitHaupt:
         0:
           state      ^AnwesenheitHaupt$:^state:
       Astro:
         0:
           SunAlt     ^Astro$:^SunAlt:
           SunAz      ^Astro$:^SunAz:
       Container_SENSOR_XtenderTransfer:
         0:
           sensor     ^Container_SENSOR_XtenderTransfer$:^sensor:
       Container_TEMPFEUCHTESENSOR:
         0:
           temperature ^Container_TEMPFEUCHTESENSOR$:^temperature:
   attr:
     cmdState:
     wait:
       0:
         120
       1:
         900
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Container_TEMPFEUCHTESENSOR','temperature') > 23 and ::ReadingValDoIf($hash,'Astro','SunAz') > 100 and ::ReadingValDoIf($hash,'Astro','SunAz') < 270 and ::ReadingValDoIf($hash,'Astro','SunAlt') > 28 and (::ReadingValDoIf($hash,'AnwesenheitHaupt','statStateDaypresent') gt "01:00:00" or ::ReadingValDoIf($hash,'AnwesenheitHaupt','state') eq "present") and ::ReadingValDoIf($hash,'Container_SENSOR_XtenderTransfer','sensor') eq "closed"
   do:
     0:
       0          set KLIMA_AnAusTimer on
     1:
       0          set KLIMA_AnAusTimer off
   helper:
     DEVFILTER  ^global$|^Container_SENSOR_XtenderTransfer$|^Astro$|^Container_TEMPFEUCHTESENSOR$|^AnwesenheitHaupt$
     NOTIFYDEV  global|Container_SENSOR_XtenderTransfer|Astro|Container_TEMPFEUCHTESENSOR|AnwesenheitHaupt
     event      present,statStateDaypresent: 12:22:44
     globalinit 1
     last_timer 0
     sleepdevice Container_SENSOR_XtenderTransfer
     sleepsubtimer -1
     sleeptimer -1
     timerdev   AnwesenheitHaupt
     timerevent present,statStateDaypresent: 12:22:44
     triggerDev AnwesenheitHaupt
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: Container_SENSOR_XtenderTransfer
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: Container_SENSOR_XtenderTransfer
       state: cmd_2
     timerevents:
       present
       statStateDaypresent: 12:22:44
     timereventsState:
       state: present
       statStateDaypresent: 12:22:44
     triggerEvents:
       present
       statStateDaypresent: 12:22:44
     triggerEventsState:
       state: present
       statStateDaypresent: 12:22:44
   internals:
   perlblock:
   readings:
     all         Container_TEMPFEUCHTESENSOR:temperature Astro:SunAz Astro:SunAlt AnwesenheitHaupt:state Container_SENSOR_XtenderTransfer:sensor
   trigger:
   uiState:
   uiTable:
Attributes:
   devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@green:disable cmd_2:general_an@yellow:disable
   group      System
   icon       frost
   room       System,Anwesenheit
   sortby     003
   wait       120:900


die Bedingungen für cmd_2 sind weiterhin nicht gegeben, oder anders gesagt, cmd_1 sollte weiterhin wahr sein. Was übersehe ich?

Danke und Grüße
H.

Damian

#1
Das Event kommt von:

  2020-06-15 15:02:50   cmd_event       Container_SENSOR_XtenderTransfer

Der Inhalt wurde aber nicht aktualisiert:

2020-06-15 14:47:49   e_Container_SENSOR_XtenderTransfer_sensor closed

Du müsstest mal loggen was da vom Container_SENSOR_XtenderTransfer genau kommt.

Edit: ich sehe gerade, dass um 14:47:49 das wait angestoßen wurde - > hier alles ok

Ich kann mir jetzt keinen Reim drauf machen, warum der DOELSE-Fall wahr wurde. Da die Bedingung von Perl ausgewertet wird und an der Stelle im DOIF nichts geändert wurde, wird man sich an das Problem herantasten müssen. Evtl. ohne wait testen. 
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

#2
Hallo Damian, ja, der event kommt von [Container_SENSOR_XtenderTransfer:sensor] ... halbstündlich, da für den Log regelmäßig ein add-Event erzeugt wird.

aber das sollte eben das DOIF, da cmd_1 die Bedingung "... and [Container_SENSOR_XtenderTransfer:sensor] eq "closed" enthält, in cmd_1 belassen. Ich verstehe nicht, was das DOIF dazu veranlasst in cmd_2 zu wollen.

Was sein könnte, aber das ist eine spätere Nebenbeobachtung, ist, dass der Part "[Container_TEMPFEUCHTESENSOR:temperature] > 23" so in etwa in der Zeit nicht mehr erfüllt war, allerdings finde ich in dem List keinerlei Bezug dazu.

Wo würde ich im List sehen, dass "[Container_TEMPFEUCHTESENSOR:temperature] > 23" der Grund ist? Bzw. ist es nachvollziehbar, dass das der Grund ist wenns nunmal nicht angezeigt wird? Gott, mal wieder schwer zu beschreiben.

Damian

ja, ich habe meinen Beitrag gerade aktualisiert:
Zitat
Ich kann mir jetzt keinen Reim drauf machen, warum der DOELSE-Fall wahr wurde. Da die Bedingung von Perl ausgewertet wird und an der Stelle im DOIF nichts geändert wurde, wird man sich an das Problem herantasten müssen. Evtl. ohne wait testen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

Zitat von: holle75 am 15 Juni 2020, 20:14:26
Wo würde ich im List sehen, dass "[Container_TEMPFEUCHTESENSOR:temperature] > 23" der Grund ist? Bzw. ist es nachvollziehbar, dass das der Grund ist wenns nunmal nicht angezeigt wird? Gott, mal wieder schwer zu beschreiben.

oder anders gesagt, "Container_TEMPFEUCHTESENSOR" ist in seinen Events eingeschränkt (nur alle 0,5 Grad) .... wenn jetzt das add-event den "Container_SENSOR_XtenderTransfer"-Event triggert, sollten alle Stati von alles Devices überprüft werden, Bedingung von "Container_TEMPFEUCHTESENSOR" wäre nicht mehr wahr, aber "Container_SENSOR_XtenderTransfer" wird als Trigger gelistet ???? ... und der alte Event (23.3) von "Container_TEMPFEUCHTESENSOR" steht noch im List?

Könnte das sein?

Damian

Zitat von: holle75 am 15 Juni 2020, 20:24:57
oder anders gesagt, "Container_TEMPFEUCHTESENSOR" ist in seinen Events eingeschränkt (nur alle 0,5 Grad) .... wenn jetzt das add-event den "Container_SENSOR_XtenderTransfer"-Event triggert, sollten alle Stati von alles Devices überprüft werden, Bedingung von "Container_TEMPFEUCHTESENSOR" wäre nicht mehr wahr, aber "Container_SENSOR_XtenderTransfer" wird als Trigger gelistet ???? ... und der alte Event (23.3) von "Container_TEMPFEUCHTESENSOR" steht noch im List?

Könnte das sein?

ja, wenn natürlich nicht alle Änderungen der angegebenen Devices ein Event produzieren, dann sieht man eben nicht die ganze Wahrheit.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

Yay, danke dir. Halbe Wahrheit reicht mir, solange ich sie mir erklären kann :)