FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: swsmily am 11 November 2019, 21:22:46

Titel: [Gelöst] DOIF Wait wird ignoriert
Beitrag von: swsmily am 11 November 2019, 21:22:46
Hallo,

irgendwie stehe ich auf dem Schlauch. Ich hab mehrere DOIF mit wait, die funktionieren super.
Nur bei diesem wird trotz wait 1200:0:0 das Kinderzimmerlicht auf schlafen gesetzt, wenn genau 20:30 Uhr der Bewegungsmelder bereits closed ist.
Steht der Bewegungsmelder 20:30 Uhr noch auf open und meldet danach closed, dann läuft der Timer.
Ziel ist es, dass sobald nach 20:30 Uhr keine Bewegung mehr stattfindet 20 Minuten später der Dummy Kinderzimmerlicht auf Schlafen geschaltet wird.

(([20:30 - 06:00]) and ([Bewegungsmelder_Kinderzimmer] eq "closed"))
(set Kinderzimmerlicht Schlafen)

DOELSEIF ([06:00])
(set Kinderzimmerlicht auto)

DOELSE


Im folgenden List des DOIF läuft der Timer, allerdings war bereits nach 20:30 Uhr der Bewegungsmelder nochmal aktiv.

Internals:
   DEF        (([20:30 - 06:00]) and ([Bewegungsmelder_Kinderzimmer] eq "closed"))
(set Kinderzimmerlicht Schlafen)

DOELSEIF ([06:00])
(set Kinderzimmerlicht auto)

DOELSE
   FUUID      5dc46046-f33f-3401-192b-20cb53bbc1e84568
   MODEL      FHEM
   NAME       Kinderzimmer_Schlafmodus
   NOTIFYDEV  Bewegungsmelder_Kinderzimmer,global
   NR         495
   NTFY_ORDER 50-Kinderzimmer_Schlafmodus
   STATE      cmd_3
   TYPE       DOIF
   VERSION    20423 2019-10-29 18:50:08
   READINGS:
     2019-11-11 21:12:06   Device          Bewegungsmelder_Kinderzimmer
     2019-11-11 21:11:05   cmd             3
     2019-11-11 21:11:05   cmd_event       Bewegungsmelder_Kinderzimmer
     2019-11-11 21:11:05   cmd_nr          3
     2019-11-11 21:12:06   e_Bewegungsmelder_Kinderzimmer_STATE closed
     2019-11-07 20:54:21   mode            enabled
     2019-11-11 21:11:05   state           cmd_3
     2019-11-11 06:00:00   timer_01_c01    11.11.2019 20:30:00
     2019-11-11 06:00:00   timer_02_c01    12.11.2019 06:00:00
     2019-11-11 06:00:00   timer_03_c02    12.11.2019 06:00:00
     2019-11-11 21:12:06   wait_timer      11.11.2019 21:32:06 cmd_1 Bewegungsmelder_Kinderzimmer
   Regex:
     accu:
     cond:
       Bewegungsmelder_Kinderzimmer:
         0:
           &STATE     ^Bewegungsmelder_Kinderzimmer$
         1:
   attr:
     cmdState:
     wait:
       0:
         1200
       1:
         0
       2:
         0
     waitdel:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms)) and (::InternalDoIf($hash,'Bewegungsmelder_Kinderzimmer','STATE') eq "closed")
     1          ::DOIF_time_once($hash,2,$wday)
   days:
   do:
     0:
       0          set Kinderzimmerlicht Schlafen
     1:
       0          set Kinderzimmerlicht auto
     2:
       0         
   helper:
     DEVFILTER  ^global$|^Bewegungsmelder_Kinderzimmer$
     NOTIFYDEV  global|Bewegungsmelder_Kinderzimmer
     event      closed,reportedState: closed
     globalinit 1
     last_timer 3
     sleepdevice Bewegungsmelder_Kinderzimmer
     sleepsubtimer 0
     sleeptimer 0
     timerdev   Bewegungsmelder_Kinderzimmer
     timerevent closed,reportedState: closed
     triggerDev Bewegungsmelder_Kinderzimmer
     timerevents:
       closed
       reportedState: closed
     timereventsState:
       state: closed
       reportedState: closed
     triggerEvents:
       closed
       reportedState: closed
     triggerEventsState:
       state: closed
       reportedState: closed
   internals:
     all         Bewegungsmelder_Kinderzimmer:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   intervaltimer:
   localtime:
     0          1573500600
     1          1573534800
     2          1573534800
   perlblock:
   readings:
   realtime:
     0          20:30:00
     1          06:00:00
     2          06:00:00
   time:
     0          20:30:00
     1          06:00:00
     2          06:00:00
   timeCond:
     0          0
     1          0
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0  1
     1           2
   trigger:
   triggertime:
     1573534800:
       localtime  1573534800
       hash:
   uiState:
   uiTable:
Attributes:
   wait       1200:0:0
Titel: Antw:DOIF Wait wird ignoriert
Beitrag von: Damian am 11 November 2019, 22:17:49
Es gibt zig verschiedene Bewegungsmelder-Varianten. Du musst uns schon erst mal sagen: Was ist open und was ist closed? Wie lange verweilt der Bewegungsmelder in dem jeweiligen Zustand bis er ihn wechselt.
Titel: Antw:DOIF Wait wird ignoriert
Beitrag von: swsmily am 11 November 2019, 22:25:40
Es ist ein Fibaro Motion Eye.
open bedeutet Bewegung erkannt, dort bleibt der Bewegungsmelder auch so lange, bis er eine Minute lang keine Bewegung mehr erkannt hat. Dann schaltet er den state auf closed.

Ich habe insgesamt 7 dieser Bewegungsmelder und viele DOIFs die darauf triggern. ([Bewegungsmelder_XY] eq "open") oder ([Bewegungsmelder_XY] eq "closed") passt also zum jeweiligen Zustand.
U.a. auch ein DOIF, das genau diesen Bewegungsmelder auswertet und entsprechend das Licht schaltet.

Das DOIF was mir hier Probleme macht funktioniert an sich ja auch, nur WAIT wird ignoriert. Es wird 20:30 Uhr und der Bewegungsmelder-State ist closed - aber es wartet nicht die 1200 Sekunden ab, bis es CMD_1 setzt.
Titel: Antw:DOIF Wait wird ignoriert
Beitrag von: Damian am 11 November 2019, 22:41:21
Du brauchst wohl https://fhem.de/commandref_DE.html#DOIF_timerWithWait
Titel: Antw:DOIF Wait wird ignoriert
Beitrag von: swsmily am 11 November 2019, 22:46:16
Ahhh vielen Dank! Das probiere ich aus.
Ich dachte Wait wartet immer bis das jeweilige CMD ausgeführt wird, auch wenn ein Zeitbereich angegeben ist.

Vielen Dank für die schnelle Hilfe!

EDIT:
schnell mit einem einfachen DOIF ausprobiert und funktioniert:
([22:50 - 22:51])
(set test test)

DOELSE

mit wait 20:0
ohne timerWithWait wurde es sofort 20:50 ausgeführt, mit dem Attribut hat es die 20 Sekunden gewartet.

DANKE :-)