FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Loredo am 10 Oktober 2015, 12:42:15

Titel: DOIF löst später aus als per Wait Timer definiert
Beitrag von: Loredo am 10 Oktober 2015, 12:42:15
Hallo Damian,


ich habe etwas seltsames beobachtet, was ich mir nicht erklären kann.


Ich habe einen DOIF Wait Timer auf ein Reading definiert:




## Day: after first resident was awoken (delayed by wait timer)
DOELSEIF
(
[rgr_Residents:lastState] eq "awoken"
)
(
IF ([HouseMode:state] eq "morning") (
msg audio @rgr_Residents -1 Tagesmodus wird etabliert.
)
)
(
set HouseMode:FILTER=state=morning day
)



Zusätzlich ist das wait_timer Attribut wie folgt gesetzt (der DOIF Auszug oben steht an 3. Stelle in einem langen DOIF Konstrukt):



0:0:5400,10:0:0,10:0:0,10:0:0,10



Damit möchte ich erreichen, dass 90 Minuten nachdem der erste Bewohner aufgestanden ist das Haus in den Tagesmodus wechselt (zuvor angekündigt durch eine Ansage), was grundsätzlich auch passiert, aber leider nicht zum erwarteten Zeitpunkt.


Anhand des Zeitstempels beim Reading rgr_Residents:lastState sehe ich aktuell, dass das Event um 11:00:52 ausgelöst wurde. Demnach würde ich erwarten, dass der DOIF Waittimer nun um 12:30:53 den ersten Befehl ausführt und 10 Sekunden später den zweiten. Allerdings sehe ich im Reading wait_timer des DOIF diese Zeit hier:



10.10.2015 12:48:01 cmd_3_1 rgr_Residents



Kannst du dir erklären wieso hier nochmals 1732 Sekunden draufgerechnet werden?


Ich kann mir das nicht erklären ;-(






Hier die vollständigen Listings beider Devices:




Internals:
   DEF        ## Morning: by the latest
(
[{twilight("Twilight","sr_weather","06:20","08:30")}] and
[?HouseMode:state] eq "night"
)
(
set HouseMode morning
)


## Morning: by wakeup but not before 3am
DOELSEIF
(
[rgr_Residents:residentsTotalWakeup] > 0 and
[?HouseMode:state] eq "night"
)
(
set HouseMode morning
)


## Day: after first resident was awoken (delayed by wait timer)
DOELSEIF
(
[rgr_Residents:lastState] eq "awoken"
)
(
IF ([HouseMode:state] eq "morning") (
msg audio @rgr_Residents -1 Tagesmodus wird etabliert.
)
)
(
set HouseMode:FILTER=state=morning day
)


## Day: by last resident leaving the house
DOELSEIF
(
([di_Residents:state] eq "absent" or [di_Residents:state] eq "gone") and
[HouseMode:state] eq "morning"
)
(
set HouseMode day
)


## Evening: Summer while residents nearby
DOELSEIF
(
[{twilight("Twilight","ss_indoor","18:00","20:45")}] and
[?DST:state] eq "summer" and
[?rgr_Residents:state] ne "gone"
)
(
msg audio @rgr_Residents -1 Abend Modus wird etabliert.
)
(
IF ([rgr_Residents:state] eq "gone") (
set HouseMode:FILTER=state!=night night
),
IF ([rgr_Residents:state] ne "gone") (
set HouseMode:FILTER=state=morning evening,
set HouseMode:FILTER=state=day evening
)
)


## Evening/Night: Sommer while residents extended time absent
DOELSEIF
(
[{twilight("Twilight","ss_indoor","18:00","20:45")}] and
[?DST:state] eq "summer" and
[?rgr_Residents:state] eq "gone"
)
(
set HouseMode:FILTER=state=morning night,
set HouseMode:FILTER=state=day night
)




## Evening: Winter while residents nearby
DOELSEIF
(
[{twilight("Twilight","ss_weather","15:30","18:30")}] and
[?DST:state] eq "normal" and
[?rgr_Residents:state] ne "gone"
)
(
msg audio @rgr_Residents -1 Abend Modus wird etabliert.
)
(
IF ([rgr_Residents:state] eq "gone") (
set HouseMode:FILTER=state!=night night
),
IF ([rgr_Residents:state] ne "gone") (
set HouseMode:FILTER=state=morning evening,
set HouseMode:FILTER=state=day evening
)
)


## Evening/Night: Winter while residents extended time absent
DOELSEIF
(
[{twilight("Twilight","ss_weather","15:30","18:30")}] and
[?DST:state] eq "normal" and
[?rgr_Residents:state] eq "gone"
)
(
set HouseMode:FILTER=state!=night night
)


## Night: by time
DOELSEIF
(
[23:15:00]
)
(
IF ([HouseMode:state] ne "night") (
msg audio @rgr_Residents -1 Nacht Modus wird etabliert.
)
)
(
set HouseMode:FILTER=state!=night night
)


   NAME       di_HouseMode_controller
   NR         201
   NTFY_ORDER 50-di_HouseMode_controller
   STATE      morning
   TYPE       DOIF
   Readings:
     2015-10-10 11:18:48   Device          rgr_Residents
     2015-10-10 07:54:20   cmd_event       timer_1
     2015-10-10 07:54:20   cmd_nr          1
     2015-10-10 07:54:20   e_HouseMode_state morning
     2015-10-10 11:00:53   e_di_Residents_state present
     2015-10-10 11:18:48   e_rgr_Residents_lastState awoken
     2015-10-10 11:18:48   e_rgr_Residents_residentsTotalWakeup 0
     2015-10-10 07:54:20   state           morning
     2015-10-10 11:02:46   timer_1_c1      11.10.2015 08:30:00
     2015-10-10 11:02:46   timer_2_c5      10.10.2015 18:07:38
     2015-10-10 11:02:46   timer_3_c6      10.10.2015 18:07:38
     2015-10-10 11:02:46   timer_4_c7      10.10.2015 17:16:52
     2015-10-10 11:02:46   timer_5_c8      10.10.2015 17:16:52
     2015-10-10 11:02:46   timer_6_c9      10.10.2015 23:15:00
     2015-10-10 11:18:01   wait_timer      10.10.2015 12:48:01 cmd_3_1 rgr_Residents
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and ReadingValDoIf('HouseMode','state','') eq "night"
     1          ReadingValDoIf('rgr_Residents','residentsTotalWakeup','') > 0 and ReadingValDoIf('HouseMode','state','') eq "night"
     2          ReadingValDoIf('rgr_Residents','lastState','') eq "awoken"
     3          (ReadingValDoIf('di_Residents','state','') eq "absent" or ReadingValDoIf('di_Residents','state','') eq "gone") and ReadingValDoIf('HouseMode','state','') eq "morning"
     4          DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and ReadingValDoIf('DST','state','') eq "summer" and ReadingValDoIf('rgr_Residents','state','') ne "gone"
     5          DOIF_time_once($hash,$hash->{timer}{2},$wday,"") and ReadingValDoIf('DST','state','') eq "summer" and ReadingValDoIf('rgr_Residents','state','') eq "gone"
     6          DOIF_time_once($hash,$hash->{timer}{3},$wday,"") and ReadingValDoIf('DST','state','') eq "normal" and ReadingValDoIf('rgr_Residents','state','') ne "gone"
     7          DOIF_time_once($hash,$hash->{timer}{4},$wday,"") and ReadingValDoIf('DST','state','') eq "normal" and ReadingValDoIf('rgr_Residents','state','') eq "gone"
     8          DOIF_time_once($hash,$hash->{timer}{5},$wday,"")
   Days:
   Devices:
     1           rgr_Residents
     2           rgr_Residents
     3           di_Residents HouseMode
     all         rgr_Residents di_Residents HouseMode
   Do:
     0:
       0          set HouseMode morning
     1:
       0          set HouseMode morning
     2:
       0          IF ([HouseMode:state] eq "morning") ( msg audio @rgr_Residents -1 Tagesmodus wird etabliert. )
       1          set HouseMode:FILTER=state=morning day
     3:
       0          set HouseMode day
     4:
       0          msg audio @rgr_Residents -1 Abend Modus wird etabliert.
       1          IF ([rgr_Residents:state] eq "gone") ( set HouseMode:FILTER=state!=night night ), IF ([rgr_Residents:state] ne "gone") ( set HouseMode:FILTER=state=morning evening, set HouseMode:FILTER=state=day evening )
     5:
       0          set HouseMode:FILTER=state=morning night, set HouseMode:FILTER=state=day night
     6:
       0          msg audio @rgr_Residents -1 Abend Modus wird etabliert.
       1          IF ([rgr_Residents:state] eq "gone") ( set HouseMode:FILTER=state!=night night ), IF ([rgr_Residents:state] ne "gone") ( set HouseMode:FILTER=state=morning evening, set HouseMode:FILTER=state=day evening )
     7:
       0          set HouseMode:FILTER=state!=night night
     8:
       0          IF ([HouseMode:state] ne "night") ( msg audio @rgr_Residents -1 Nacht Modus wird etabliert. )
       1          set HouseMode:FILTER=state!=night night
   Helper:
     globalinit 1
     last_timer 6
     sleepdevice rgr_Residents
     sleepsubtimer 0
     sleeptimer 2
   Internals:
   Itimer:
   Readings:
     1           rgr_Residents:residentsTotalWakeup
     2           rgr_Residents:lastState
     3           di_Residents:state HouseMode:state
     all         rgr_Residents:residentsTotalWakeup rgr_Residents:lastState di_Residents:state HouseMode:state
   Realtime:
     0          08:30:00
     1          18:07:38
     2          18:07:38
     3          17:16:52
     4          17:16:52
     5          23:15:00
   State:
   Time:
     0          {twilight("Twilight","sr_weather","06:20","08:30")}
     1          {twilight("Twilight","ss_indoor","18:00","20:45")}
     2          {twilight("Twilight","ss_indoor","18:00","20:45")}
     3          {twilight("Twilight","ss_weather","15:30","18:30")}
     4          {twilight("Twilight","ss_weather","15:30","18:30")}
     5          23:15:00
   Timecond:
     0          0
     1          4
     2          5
     3          6
     4          7
     5          8
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0
     4           1
     5           2
     6           3
     7           4
     8           5
   Trigger:
Attributes:
   DbLogExclude .*
   DbLogInclude state
   alias      Automation: House Mode Controller
   cmdState   morning|morningWakeup|day|dayAbsent|eveningSummer|eveningSummerAbsent|eveningWinter|eveningWinterAbsent|night
   comment    TODO: morning>day ohne aktiven Wecker
   devStateIcon morning.*:weather_sunrise day.*:scene_day evening.*:weather_sunset night.*:scene_night initialized:unknown
   event-on-change-reading state
   room       Apartment,Automation,Residents
   wait       0:0:5400,10:0:0,10:0:0,10:0:0,10





Internals:
   GUESTS     rg_Guest
   NAME       rgr_Residents
   NR         100
   NTFY_ORDER 50-rgr_Residents
   ROOMMATES  rr_Julian
   STATE      home
   TYPE       RESIDENTS
   CHANGETIME:
   Readings:
     2015-10-10 11:18:48   fhemMsgAudio    Tagesmodus wird etabliert.
     2015-10-10 11:18:48   fhemMsgAudioGw  Sonos_Living_Room:OK
     2015-10-10 11:18:48   fhemMsgAudioPrio -1
     2015-10-10 11:18:48   fhemMsgAudioState 1
     2015-10-10 11:18:48   fhemMsgAudioTitle Announcement
     2015-10-10 09:53:19   fhemMsgLight    Die Luftqualität ist schlecht, bitte bei Gelegenheit lüften.
     2015-10-10 09:53:19   fhemMsgLightGw  HUEGroup0:USER_DISABLED
     2015-10-10 09:53:19   fhemMsgLightPrio 0
     2015-10-10 09:53:19   fhemMsgLightState 2
     2015-10-10 09:53:19   fhemMsgLightTitle Announcement
     2015-10-05 16:54:27   fhemMsgPush     Die Luftqualität ist sehr schlecht geworden, bitte lüften.
     2015-10-05 16:54:27   fhemMsgPushGw   msgPush.Julian:OK
     2015-10-05 16:54:27   fhemMsgPushPrio 1
     2015-10-05 16:54:27   fhemMsgPushState 1
     2015-10-05 16:54:27   fhemMsgPushTitle System Message
     2015-10-10 11:18:48   fhemMsgState    1
     2015-10-10 11:18:48   fhemMsgStateTypes audio:1
     2015-10-10 11:00:52   lastActivity    home
     2015-10-10 11:00:52   lastActivityBy  Julian
     2015-10-10 11:00:52   lastActivityByDev rr_Julian
     2015-10-09 00:18:31   lastArrival     2015-10-09 00:18:31
     2015-10-10 10:59:46   lastAwake       2015-10-10 10:59:46
     2015-10-09 00:16:56   lastDeparture   2015-10-09 00:16:56
     2015-10-09 00:18:31   lastDurAbsence  00:01:35
     2015-10-09 00:18:31   lastDurAbsence_cr 2
     2015-10-09 00:16:56   lastDurPresence 00:02:19
     2015-10-09 00:16:56   lastDurPresence_cr 2
     2015-10-10 10:59:46   lastDurSleep    06:51:00
     2015-10-10 10:59:46   lastDurSleep_cr 411
     2015-10-10 04:08:46   lastSleep       2015-10-10 04:08:46
     2015-10-10 11:00:52   lastState       awoken
     2015-10-09 00:18:31   presence        present
     2015-10-09 00:18:31   residentsAbsent 0
     2015-10-09 00:18:31   residentsAbsentDevs -
     2015-10-09 00:18:31   residentsAbsentNames -
     2015-10-10 10:59:46   residentsAsleep 0
     2015-10-10 10:59:46   residentsAsleepDevs -
     2015-10-10 10:59:46   residentsAsleepNames -
     2015-10-10 11:00:52   residentsAwoken 0
     2015-10-10 11:00:52   residentsAwokenDevs -
     2015-10-10 11:00:52   residentsAwokenNames -
     2015-10-08 22:02:07   residentsGone   0
     2015-10-08 22:02:07   residentsGoneDevs -
     2015-10-08 22:02:07   residentsGoneNames -
     2015-10-10 04:08:46   residentsGotosleep 0
     2015-10-10 04:08:46   residentsGotosleepDevs -
     2015-10-10 04:08:46   residentsGotosleepNames -
     2015-10-10 11:00:52   residentsHome   1
     2015-10-10 11:00:52   residentsHomeDevs rr_Julian
     2015-10-10 11:00:52   residentsHomeNames Julian
     2015-07-19 13:43:57   residentsTotal  1
     2015-10-09 00:18:31   residentsTotalAbsent 0
     2015-10-09 00:18:31   residentsTotalAbsentDevs -
     2015-10-09 00:18:31   residentsTotalAbsentNames -
     2015-07-19 13:43:57   residentsTotalGuests 0
     2015-07-19 13:43:54   residentsTotalGuestsAbsent 0
     2015-10-01 19:12:09   residentsTotalGuestsAbsentDevs -
     2015-10-01 19:12:09   residentsTotalGuestsAbsentNames -
     2015-07-19 13:43:57   residentsTotalGuestsPresent 0
     2015-10-01 19:12:09   residentsTotalGuestsPresentDevs -
     2015-10-01 19:12:09   residentsTotalGuestsPresentNames -
     2015-10-09 00:18:31   residentsTotalPresent 1
     2015-10-09 00:18:31   residentsTotalPresentDevs rr_Julian
     2015-10-09 00:18:31   residentsTotalPresentNames Julian
     2015-10-10 10:59:46   residentsTotalWakeup 0
     2015-10-10 10:59:46   residentsTotalWakeupDevs -
     2015-10-10 10:59:46   residentsTotalWakeupNames -
     2015-09-24 21:06:59   residentsTotalWayhome 0
     2015-10-01 19:12:09   residentsTotalWayhomeDevs -
     2015-10-01 19:12:09   residentsTotalWayhomeNames -
     2015-10-10 11:00:52   state           home
Attributes:
   DbLogExclude .*
   alias      Residents
   devStateIcon .*home:status_available@green .*absent:status_away_1@orange .*gone:status_standby .*none:control_building_empty .*gotosleep:status_night@green:asleep .*asleep:status_night@green .*awoken:status_available@green:home
   group      Home State
   icon       people_sensor
   msgContactAudio Sonos_Living_Room|Sonos_Kitchen|Sonos_Bedroom
   msgContactLight HUEGroup0
   room       Apartment,Residents
   sortby     0


Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Loredo am 10 Oktober 2015, 12:51:17
Dazu muss ich noch etwas ergänzen:


Jetzt wurde das erste Kommando gerade ausgelöst, das zweite jedoch nicht nach weiteren 10 Sekunden wie erwartet. Stattdessen steht der wait_timer jetzt wieder auf einen noch späteren Zeitpunkt 14:18:01 und wieder für das erste Kommando. Es wurden also nochmal 90 Minuten drauf gerechnet. Wie kann das sein?




Internals:
   DEF        ## Morning: by the latest
(
   [{twilight("Twilight","sr_weather","06:20","08:30")}] and
   [?HouseMode:state] eq "night"
)
(
   set HouseMode morning
)


## Morning: by wakeup but not before 3am
DOELSEIF
(
   [rgr_Residents:residentsTotalWakeup] > 0 and
   [?HouseMode:state] eq "night"
)
(
   set HouseMode morning
)


## Day: after first resident was awoken (delayed by wait timer)
DOELSEIF
(
   [rgr_Residents:lastState] eq "awoken"
)
(
   IF ([HouseMode:state] eq "morning") (
      msg audio @rgr_Residents -1 Tagesmodus wird etabliert.
   )
)
(
   set HouseMode:FILTER=state=morning day
)


## Day: by last resident leaving the house
DOELSEIF
(
   ([di_Residents:state] eq "absent" or [di_Residents:state] eq "gone") and
   [HouseMode:state] eq "morning"
)
(
   set HouseMode day
)


## Evening: Summer while residents nearby
DOELSEIF
(
   [{twilight("Twilight","ss_indoor","18:00","20:45")}] and
   [?DST:state] eq "summer" and
   [?rgr_Residents:state] ne "gone"
)
(
   msg audio @rgr_Residents -1 Abend Modus wird etabliert.
)
(
   IF ([rgr_Residents:state] eq "gone") (
      set HouseMode:FILTER=state!=night night
   ),
   IF ([rgr_Residents:state] ne "gone") (
      set HouseMode:FILTER=state=morning evening,
      set HouseMode:FILTER=state=day evening
   )
)


## Evening/Night: Sommer while residents extended time absent
DOELSEIF
(
   [{twilight("Twilight","ss_indoor","18:00","20:45")}] and
   [?DST:state] eq "summer" and
   [?rgr_Residents:state] eq "gone"
)
(
   set HouseMode:FILTER=state=morning night,
   set HouseMode:FILTER=state=day night
)




## Evening: Winter while residents nearby
DOELSEIF
(
   [{twilight("Twilight","ss_weather","15:30","18:30")}] and
   [?DST:state] eq "normal" and
   [?rgr_Residents:state] ne "gone"
)
(
   msg audio @rgr_Residents -1 Abend Modus wird etabliert.
)
(
   IF ([rgr_Residents:state] eq "gone") (
      set HouseMode:FILTER=state!=night night
   ),
   IF ([rgr_Residents:state] ne "gone") (
      set HouseMode:FILTER=state=morning evening,
      set HouseMode:FILTER=state=day evening
   )
)


## Evening/Night: Winter while residents extended time absent
DOELSEIF
(
   [{twilight("Twilight","ss_weather","15:30","18:30")}] and
   [?DST:state] eq "normal" and
   [?rgr_Residents:state] eq "gone"
)
(
   set HouseMode:FILTER=state!=night night
)


## Night: by time
DOELSEIF
(
   [23:15:00]
)
(
   IF ([HouseMode:state] ne "night") (
      msg audio @rgr_Residents -1 Nacht Modus wird etabliert.
   )
)
(
   set HouseMode:FILTER=state!=night night
)


   NAME       di_HouseMode_controller
   NR         201
   NTFY_ORDER 50-di_HouseMode_controller
   STATE      cmd_3_1
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       State:
         Dblog:
           TIME       1444474081.01834
           VALUE      cmd_3_1
   Readings:
     2015-10-10 12:48:01   Device          rgr_Residents
     2015-10-10 12:48:01   cmd_event       rgr_Residents
     2015-10-10 12:48:01   cmd_nr          3
     2015-10-10 12:48:01   cmd_seqnr       1
     2015-10-10 07:54:20   e_HouseMode_state morning
     2015-10-10 11:00:53   e_di_Residents_state present
     2015-10-10 12:48:01   e_rgr_Residents_lastState awoken
     2015-10-10 12:48:01   e_rgr_Residents_residentsTotalWakeup 0
     2015-10-10 12:48:01   state           cmd_3_1
     2015-10-10 11:02:46   timer_1_c1      11.10.2015 08:30:00
     2015-10-10 11:02:46   timer_2_c5      10.10.2015 18:07:38
     2015-10-10 11:02:46   timer_3_c6      10.10.2015 18:07:38
     2015-10-10 11:02:46   timer_4_c7      10.10.2015 17:16:52
     2015-10-10 11:02:46   timer_5_c8      10.10.2015 17:16:52
     2015-10-10 11:02:46   timer_6_c9      10.10.2015 23:15:00
     2015-10-10 12:48:01   wait_timer      10.10.2015 14:18:01 cmd_3_1 rgr_Residents
   Condition:
     0             DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and   ReadingValDoIf('HouseMode','state','') eq "night"
     1             ReadingValDoIf('rgr_Residents','residentsTotalWakeup','') > 0 and   ReadingValDoIf('HouseMode','state','') eq "night"
     2             ReadingValDoIf('rgr_Residents','lastState','') eq "awoken"
     3             (ReadingValDoIf('di_Residents','state','') eq "absent" or ReadingValDoIf('di_Residents','state','') eq "gone") and   ReadingValDoIf('HouseMode','state','') eq "morning"
     4             DOIF_time_once($hash,$hash->{timer}{1},$wday,"") and   ReadingValDoIf('DST','state','') eq "summer" and   ReadingValDoIf('rgr_Residents','state','') ne "gone"
     5             DOIF_time_once($hash,$hash->{timer}{2},$wday,"") and   ReadingValDoIf('DST','state','') eq "summer" and   ReadingValDoIf('rgr_Residents','state','') eq "gone"
     6             DOIF_time_once($hash,$hash->{timer}{3},$wday,"") and   ReadingValDoIf('DST','state','') eq "normal" and   ReadingValDoIf('rgr_Residents','state','') ne "gone"
     7             DOIF_time_once($hash,$hash->{timer}{4},$wday,"") and   ReadingValDoIf('DST','state','') eq "normal" and   ReadingValDoIf('rgr_Residents','state','') eq "gone"
     8             DOIF_time_once($hash,$hash->{timer}{5},$wday,"")
   Days:
   Devices:
     1           rgr_Residents
     2           rgr_Residents
     3           di_Residents HouseMode
     all         rgr_Residents di_Residents HouseMode
   Do:
     0:
       0             set HouseMode morning
     1:
       0             set HouseMode morning
     2:
       0             IF ([HouseMode:state] eq "morning") (      msg audio @rgr_Residents -1 Tagesmodus wird etabliert.   )
       1             set HouseMode:FILTER=state=morning day
     3:
       0             set HouseMode day
     4:
       0             msg audio @rgr_Residents -1 Abend Modus wird etabliert.
       1             IF ([rgr_Residents:state] eq "gone") (      set HouseMode:FILTER=state!=night night   ),   IF ([rgr_Residents:state] ne "gone") (      set HouseMode:FILTER=state=morning evening,      set HouseMode:FILTER=state=day evening   )
     5:
       0             set HouseMode:FILTER=state=morning night,   set HouseMode:FILTER=state=day night
     6:
       0             msg audio @rgr_Residents -1 Abend Modus wird etabliert.
       1             IF ([rgr_Residents:state] eq "gone") (      set HouseMode:FILTER=state!=night night   ),   IF ([rgr_Residents:state] ne "gone") (      set HouseMode:FILTER=state=morning evening,      set HouseMode:FILTER=state=day evening   )
     7:
       0             set HouseMode:FILTER=state!=night night
     8:
       0             IF ([HouseMode:state] ne "night") (      msg audio @rgr_Residents -1 Nacht Modus wird etabliert.   )
       1             set HouseMode:FILTER=state!=night night
   Helper:
     globalinit 1
     last_timer 6
     sleepdevice rgr_Residents
     sleepsubtimer 0
     sleeptimer 2
   Internals:
   Itimer:
   Readings:
     1           rgr_Residents:residentsTotalWakeup
     2           rgr_Residents:lastState
     3           di_Residents:state HouseMode:state
     all         rgr_Residents:residentsTotalWakeup rgr_Residents:lastState di_Residents:state HouseMode:state
   Realtime:
     0          08:30:00
     1          18:07:38
     2          18:07:38
     3          17:16:52
     4          17:16:52
     5          23:15:00
   State:
   Time:
     0          {twilight("Twilight","sr_weather","06:20","08:30")}
     1          {twilight("Twilight","ss_indoor","18:00","20:45")}
     2          {twilight("Twilight","ss_indoor","18:00","20:45")}
     3          {twilight("Twilight","ss_weather","15:30","18:30")}
     4          {twilight("Twilight","ss_weather","15:30","18:30")}
     5          23:15:00
   Timecond:
     0          0
     1          4
     2          5
     3          6
     4          7
     5          8
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0
     4           1
     5           2
     6           3
     7           4
     8           5
   Trigger:
Attributes:
   DbLogExclude .*
   DbLogInclude state
   alias      Automation: House Mode Controller
   cmdState   morning|morningWakeup|day|dayAbsent|eveningSummer|eveningSummerAbsent|eveningWinter|eveningWinterAbsent|night
   comment    TODO: morning>day ohne aktiven Wecker
   devStateIcon morning.*:weather_sunrise day.*:scene_day evening.*:weather_sunset night.*:scene_night initialized:unknown
   event-on-change-reading state
   room       Apartment,Automation,Residents
   wait       0:0:5400,10:0:0,10:0:0,10:0:0,10


Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Damian am 10 Oktober 2015, 14:07:38
Offenbar triggert sich das Modul selbst. Denn die Ausführung von cmd_3_1

   IF ([HouseMode:state] eq "morning") (      msg audio @rgr_Residents -1 Tagesmodus wird etabliert.   )

führt offenbar wieder zu einem Trigger über rgr_Residents.

Möglicherweise sorgt die neue Version für Abhilfe:

http://forum.fhem.de/index.php/topic,41859.msg341029.html#msg341029

Gruß

Damian
Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Loredo am 10 Oktober 2015, 14:35:39
Ok.
Ich probiere später mal die andere Version, schaue aber auch mal ob ich den Loop irgendwie verhindert kriege.

Und ja es stimmt schon, in rgr_Residents werden andere (!) Readings bei diesem Befehl aktualisiert. Aber das Reading, auf welches das DOIF eigentlich nur reagieren soll (lastState) bleibt eben unverändert. Warum löst das DOIF denn dann trotzdem aus?



Gruß
Julian
Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Damian am 10 Oktober 2015, 14:46:57
Zitat von: Loredo am 10 Oktober 2015, 14:35:39
Ok.
Ich probiere später mal die andere Version, schaue aber auch mal ob ich den Loop irgendwie verhindert kriege.

Und ja es stimmt schon, in rgr_Residents werden andere (!) Readings bei diesem Befehl aktualisiert. Aber das Reading, auf welches das DOIF eigentlich nur reagieren soll (lastState) bleibt eben unverändert. Warum löst das DOIF denn dann trotzdem aus?



Gruß
Julian

Weil bei Readingabfragen, der Art [<Device>:<Reading>] bereits ein beliebiger Trigger des Devices zählt. Wenn du nur auf die Änderung des Readings triggern willst, dann musst du mit Event-Triggern arbeiten: [<Device>:?<Reading>]

Gruß

Damian

Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Loredo am 10 Oktober 2015, 14:49:39
Ah, ok verstanden. Mit Event-Triggern zu arbeiten macht doch aber dann generell Sinn, allein schon aus Performancegründen. Warum ist das denn kein Standardverhalten? Gibts da Vor- oder Nachteile?
Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Damian am 10 Oktober 2015, 15:13:57
Zitat von: Loredo am 10 Oktober 2015, 14:49:39
Ah, ok verstanden. Mit Event-Triggern zu arbeiten macht doch aber dann generell Sinn, allein schon aus Performancegründen. Warum ist das denn kein Standardverhalten? Gibts da Vor- oder Nachteile?

Das sind zwei grundsätzlich verschiedene Dinge:

Ein Event-Trigger ist immer nur zum Tiggerzeitpunkt wahr und ist dann 1 sonst 0, Eine Readingabfrage liefert den tatsächlichen Inhalt des Readings, den man abfragen kann und das unabhängig davon, ob der Trigger vom diesem Reading kommt oder nicht.

Wenn man nur Event-Trigger hätte, dann würden alle AND-Abfragen immer unwahr sein. Denn zu einem Zeitpunkt ist immer nur ein Event-Trigger wahr.


Gruß

Damian

Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Damian am 10 Oktober 2015, 20:23:39
Zitat von: Damian am 10 Oktober 2015, 14:07:38
Offenbar triggert sich das Modul selbst. Denn die Ausführung von cmd_3_1

   IF ([HouseMode:state] eq "morning") (      msg audio @rgr_Residents -1 Tagesmodus wird etabliert.   )

führt offenbar wieder zu einem Trigger über rgr_Residents.

Möglicherweise sorgt die neue Version für Abhilfe:

http://forum.fhem.de/index.php/topic,41859.msg341029.html#msg341029


Ich habe eine solche Konstellation bei mir gerade getestet. Ich konnte das Verhalten reproduzieren. Mit der o. g. Version tritt das Problem durch den Selbsttrigger nicht mehr auf.

Gruß

Damian

Titel: Antw:DOIF löst später aus als per Wait Timer definiert
Beitrag von: Loredo am 11 Oktober 2015, 16:36:42
Hervorragend, vielen herzlichen Dank für die Ausführungen!