FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: TiPpFeHlEr am 27 Oktober 2019, 17:43:01

Titel: DOIF und Zeiträume
Beitrag von: TiPpFeHlEr am 27 Oktober 2019, 17:43:01
Hi,

mein DOIF für Zeitgesteuerte Steckdose Schaltung macht nicht ganz was sie soll.
Die Steckdose wird bei jedem timer event ausgeschaltet.

[SSR2_mode]  steht auf on

log:
2019.10.27 17:30:00 5 : Cmd: >set SSR2 off<
2019.10.27 17:30:00 5 : SSR2, in fileaccess: value 0
2019.10.27 17:30:00 5 : Starting notify loop for SSR2, 1 event(s), first is off
2019-10-27 17:30:00 RPI_GPIO SSR2 off
2019.10.27 17:30:00 5 : wird an setextensions gesendet: SSR2 ?
2019.10.27 17:30:00 5 : End notify loop for SSR2
2019.10.27 17:30:00 5 : Starting notify loop for SSR2_doif, 4 event(s), first is cmd_nr: 6
2019-10-27 17:30:00 DOIF SSR2_doif cmd_nr: 6
2019-10-27 17:30:00 DOIF SSR2_doif cmd: 6
2019-10-27 17:30:00 DOIF SSR2_doif cmd_event: timer_4
2019-10-27 17:30:00 DOIF SSR2_doif cmd_6
2019.10.27 17:30:00 5 : End notify loop for SSR2_doif


definition:
defmod SSR2_doif DOIF ([[SSR2_an]-[SSR2_aus]] and [SSR2_mode] eq "auto" and [SSR2_day] =~ $wday and [SSR2_day_dummy] eq "on") (set SSR2 on) \
DOELSEIF \
([[SSR2_an_2]-[SSR2_aus_2]] and [SSR2_mode] eq "auto" and [SSR2_day_2] =~ $wday and [SSR2_day_2_dummy] eq "on") (set SSR2 on) \
DOELSEIF \
([SSR2_mode] eq "off") (set SSR2 off) \
DOELSEIF \
([SSR2_mode] eq "on") (set SSR2 on) \
DOELSEIF\
([SSR2_mode] eq "timer") (set SSR2 on-for-timer [SSR2_timer:SSR_2_timer])\
DOELSE (set SSR2 off)
attr SSR2_doif do always
attr SSR2_doif room GPIO

setstate SSR2_doif cmd_6
setstate SSR2_doif 2019-10-27 09:49:43 Device SSR2_mode
setstate SSR2_doif 2019-10-27 17:30:00 cmd 6
setstate SSR2_doif 2019-10-27 17:30:00 cmd_event timer_4
setstate SSR2_doif 2019-10-27 17:30:00 cmd_nr 6
setstate SSR2_doif 2019-02-20 05:48:12 e_SSR2_day_2_dummy_STATE off
setstate SSR2_doif 2019-02-20 05:48:10 e_SSR2_day_dummy_STATE off
setstate SSR2_doif 2019-10-27 09:49:43 e_SSR2_mode_STATE on
setstate SSR2_doif 2019-10-27 17:03:35 mode enabled
setstate SSR2_doif 2019-10-27 17:30:00 state cmd_6
setstate SSR2_doif 2019-10-27 07:00:00 timer_01_c01 28.10.2019 05:00:00
setstate SSR2_doif 2019-10-27 07:00:00 timer_02_c01 28.10.2019 07:00:00
setstate SSR2_doif 2019-10-27 17:30:00 timer_03_c02 28.10.2019 16:00:00
setstate SSR2_doif 2019-10-27 17:30:00 timer_04_c02 28.10.2019 17:30:00



list SSR2_doif:
Internals:
   DEF        ([[SSR2_an]-[SSR2_aus]] and [SSR2_mode] eq "auto" and [SSR2_day] =~ $wday and [SSR2_day_dummy] eq "on") (set SSR2 on)
DOELSEIF
([[SSR2_an_2]-[SSR2_aus_2]] and [SSR2_mode] eq "auto" and [SSR2_day_2] =~ $wday and [SSR2_day_2_dummy] eq "on") (set SSR2 on)
DOELSEIF
([SSR2_mode] eq "off") (set SSR2 off)
DOELSEIF
([SSR2_mode] eq "on") (set SSR2 on)
DOELSEIF
([SSR2_mode] eq "timer") (set SSR2 on-for-timer [SSR2_timer:SSR_2_timer])
DOELSE (set SSR2 off)
   MODEL      FHEM
   NAME       SSR2_doif
   NR         662
   NTFY_ORDER 50-SSR2_doif
   STATE      cmd_6
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2019-10-27 09:49:43   Device          SSR2_mode
     2019-10-27 17:30:00   cmd             6
     2019-10-27 17:30:00   cmd_event       timer_4
     2019-10-27 17:30:00   cmd_nr          6
     2019-02-20 05:48:12   e_SSR2_day_2_dummy_STATE off
     2019-02-20 05:48:10   e_SSR2_day_dummy_STATE off
     2019-10-27 09:49:43   e_SSR2_mode_STATE on
     2019-10-27 17:03:35   mode            enabled
     2019-10-27 17:30:00   state           cmd_6
     2019-10-27 07:00:00   timer_01_c01    28.10.2019 05:00:00
     2019-10-27 07:00:00   timer_02_c01    28.10.2019 07:00:00
     2019-10-27 17:30:00   timer_03_c02    28.10.2019 16:00:00
     2019-10-27 17:30:00   timer_04_c02    28.10.2019 17:30:00
   Regex:
   attrtimer:
     wait:
     waitdel:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'SSR2_mode','STATE') eq "auto" and InternalDoIf($hash,'SSR2_day','STATE') =~ $wday and InternalDoIf($hash,'SSR2_day_dummy','STATE') eq "on"
     1          DOIF_time($hash,2,3,$wday,$hms) and InternalDoIf($hash,'SSR2_mode','STATE') eq "auto" and InternalDoIf($hash,'SSR2_day_2','STATE') =~ $wday and InternalDoIf($hash,'SSR2_day_2_dummy','STATE') eq "on"
     2          InternalDoIf($hash,'SSR2_mode','STATE') eq "off"
     3          InternalDoIf($hash,'SSR2_mode','STATE') eq "on"
     4          InternalDoIf($hash,'SSR2_mode','STATE') eq "timer"
   days:
   devices:
     0           SSR2_mode SSR2_day SSR2_day_dummy
     1           SSR2_mode SSR2_day_2 SSR2_day_2_dummy
     2           SSR2_mode
     3           SSR2_mode
     4           SSR2_mode
     all         SSR2_mode SSR2_day SSR2_day_dummy SSR2_day_2 SSR2_day_2_dummy
   do:
     0:
       0          set SSR2 on
     1:
       0          set SSR2 on
     2:
       0          set SSR2 off
     3:
       0          set SSR2 on
     4:
       0          set SSR2 on-for-timer [SSR2_timer:SSR_2_timer]
     5:
       0          set SSR2 off
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      timer_4
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   
     timerevent timer_4
     triggerDev
     timerevents:
       timer_4
     timereventsState:
       state: on
     triggerEvents:
       timer_4
     triggerEventsState:
       state: on
   internals:
     0           SSR2_mode:STATE SSR2_day:STATE SSR2_day_dummy:STATE
     1           SSR2_mode:STATE SSR2_day_2:STATE SSR2_day_2_dummy:STATE
     2           SSR2_mode:STATE
     3           SSR2_mode:STATE
     4           SSR2_mode:STATE
     all         SSR2_mode:STATE SSR2_day:STATE SSR2_day_dummy:STATE SSR2_day_2:STATE SSR2_day_2_dummy:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   intervaltimer:
   itimer:
     all         SSR2_an SSR2_aus SSR2_an_2 SSR2_aus_2
   localtime:
     0          1572235200
     1          1572242400
     2          1572274800
     3          1572280200
   perlblock:
   readings:
   realtime:
     0          05:00:00
     1          07:00:00
     2          16:00:00
     3          17:30:00
   time:
     0          [SSR2_an]
     1          [SSR2_aus]
     2          [SSR2_an_2]
     3          [SSR2_aus_2]
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   trigger:
   triggertime:
     1572235200:
       localtime  1572235200
       hash:
     1572242400:
       localtime  1572242400
       hash:
     1572274800:
       localtime  1572274800
       hash:
     1572280200:
       localtime  1572280200
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       GPIO


wer findet den Fehler??

wenn ich das DOIF von Hand (checkall) setze, wird der richtige Befehl ausgelöst (cmd_4) also SSR2 "on"

MfG Maik

Titel: Antw:DOIF und Zeiträume
Beitrag von: amenomade am 27 Oktober 2019, 18:19:17
Aus deinem "list":
timer4 (17:30) hat getriggert.
Zitat von: CommandRefZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten.
=> DOELSE cmd6 off

Mit checkall werden tatsächlich alle Bedingungen geprüft. Die erste wahre ist die 4 => on
Titel: Antw:DOIF und Zeiträume
Beitrag von: TiPpFeHlEr am 27 Oktober 2019, 18:31:03
Ok,

Wie kann ich das Problem lösen?

Mfg Maik
Titel: Antw:DOIF und Zeiträume
Beitrag von: amenomade am 27 Oktober 2019, 18:43:48
Z.B. so: https://fhem.de/commandref_DE.html#DOIF_checkall
Titel: Antw:DOIF und Zeiträume
Beitrag von: TiPpFeHlEr am 28 Oktober 2019, 10:24:58
Zitat von: amenomade am 27 Oktober 2019, 18:43:48
Z.B. so: https://fhem.de/commandref_DE.html#DOIF_checkall

Danke funktioniert mit checkall-all