[gelöst] DOIF Funktioniert nicht immer

Begonnen von bommel-bs, 27 September 2018, 21:12:43

Vorheriges Thema - Nächstes Thema

bommel-bs

Hallo,

ich steuere meine Rolladen per DOIF.
Bei dieser Anweisung habe ich das Problem, das sie nicht immer ausgeführt wird.
Internals:
   DEF        ([({sunrise(0,"08:30", "9:00")}) | 7] and [wech] eq "wech")
   (set KinderZimmer_Rolladen_Fenster on,
    set KinderZimmer_Rolladen_Balkon on)
DOELSEIF ([({sunrise(0,"07:30", "9:00")}) | 6] and [wech] eq "wech") 
   (set KinderZimmer_Rolladen_Fenster on,
    set KinderZimmer_Rolladen_Balkon on)
DOELSEIF ([({sunrise(0,"07:30", "9:00")} ) | AT ]  and [wech] eq "wech") 
   (set KinderZimmer_Rolladen_Fenster on,
    set KinderZimmer_Rolladen_Balkon on)
DOELSEIF ([({sunset(-600, "16:00", "22:00")} ) ] and [KinderZimmer_Balkontuer:state] eq "open")
   (set KinderZimmer_Rolladen_Fenster off,
    set KinderZimmer_Rolladen_Balkon 50)
DOELSEIF ([({sunset(-600, "16:00", "22:00")} ) ] and [KinderZimmer_Balkontuer:state] eq "closed")
   (set KinderZimmer_Rolladen_Fenster off,
    set KinderZimmer_Rolladen_Balkon off)
DOELSEIF ([({sunset(-600, "16:00", "22:00")} ) ] and [KinderZimmer_Balkontuer:state] eq "tilted")
   (set KinderZimmer_Rolladen_Fenster off,
    set KinderZimmer_Rolladen_Balkon 10)
   MODEL      FHEM
   NAME       di_KinderZimmer_Rolladen
   NR         594
   NTFY_ORDER 50-di_KinderZimmer_Rolladen
   STATE      cmd_5
   TYPE       DOIF
   READINGS:
     2018-09-27 20:44:14   Device          KinderZimmer_Balkontuer
     2018-09-25 19:44:16   cmd             5
     2018-09-25 19:44:16   cmd_event       timer_5
     2018-09-25 19:44:16   cmd_nr          5
     2018-09-27 07:56:45   e_KinderZimmer_Balkontuer_state closed
     2018-09-25 18:53:17   mode            enabled
     2018-09-25 19:44:16   state           cmd_5
     2018-09-27 08:30:21   timer_01_c01    28.09.2018 08:30:00|7
     2018-09-27 07:30:11   timer_02_c02    28.09.2018 07:30:00|6
     2018-09-27 07:30:11   timer_03_c03    28.09.2018 07:30:00|AT
     2018-09-27 19:37:04   timer_04_c04    28.09.2018 19:34:43
     2018-09-27 19:37:04   timer_05_c05    28.09.2018 19:34:43
     2018-09-27 19:37:04   timer_06_c06    28.09.2018 19:34:43
     2018-09-25 19:44:16   wait_timer      no timer
   Regex:
   attr:
     cmdState:
     wait:
       0:
         int(rand(600))
       1:
         int(rand(600))
       2:
         int(rand(600))
       3:
         int(rand(600))
       4:
         int(rand(600))
       5:
         int(rand(600))
     waitdel:
   condition:
     0          DOIF_time_once($hash,0,$wday,"7") and InternalDoIf($hash,'wech','STATE') eq "wech"
     1          DOIF_time_once($hash,1,$wday,"6") and InternalDoIf($hash,'wech','STATE') eq "wech"
     2          DOIF_time_once($hash,2,$wday,"AT")  and InternalDoIf($hash,'wech','STATE') eq "wech"
     3          DOIF_time_once($hash,3,$wday) and ReadingValDoIf($hash,'KinderZimmer_Balkontuer','state') eq "open"
     4          DOIF_time_once($hash,4,$wday) and ReadingValDoIf($hash,'KinderZimmer_Balkontuer','state') eq "closed"
     5          DOIF_time_once($hash,5,$wday) and ReadingValDoIf($hash,'KinderZimmer_Balkontuer','state') eq "tilted"
   days:
     0          7
     1          6
     2          AT
   devices:
     0           wech
     1           wech
     2           wech
     3           KinderZimmer_Balkontuer
     4           KinderZimmer_Balkontuer
     5           KinderZimmer_Balkontuer
     all         wech KinderZimmer_Balkontuer
   do:
     0:
       0          set KinderZimmer_Rolladen_Fenster on,      set KinderZimmer_Rolladen_Balkon on
     1:
       0          set KinderZimmer_Rolladen_Fenster on,     set KinderZimmer_Rolladen_Balkon on
     2:
       0          set KinderZimmer_Rolladen_Fenster on,      set KinderZimmer_Rolladen_Balkon on
     3:
       0          set KinderZimmer_Rolladen_Fenster off,     set KinderZimmer_Rolladen_Balkon 50
     4:
       0          set KinderZimmer_Rolladen_Fenster off,     set KinderZimmer_Rolladen_Balkon off
     5:
       0          set KinderZimmer_Rolladen_Fenster off,     set KinderZimmer_Rolladen_Balkon 10
     6:
   helper:
     event      contact: closed (to KZ_HZ)   << addLog
     globalinit 1
     last_timer 6
     sleepdevice timer_5
     sleepsubtimer -1
     sleeptimer -1
     timerdev   
     timerevent timer_5
     triggerDev KinderZimmer_Balkontuer
     DOIF_eventas:
       cmd_nr: 5
       cmd: 5
       cmd_event: timer_5
       state: cmd_5
     timerevents:
       timer_5
     timereventsState:
       contact: closed (to KZ_HZ)   << addLog
     triggerEvents:
       contact: closed (to KZ_HZ)   << addLog
     triggerEventsState:
       contact: closed (to KZ_HZ)   << addLog
   internals:
     0           wech:STATE
     1           wech:STATE
     2           wech:STATE
     all         wech:STATE
   interval:
   intervalfunc:
   itimer:
   localtime:
     0          1538116200
     1          1538112600
     2          1538112600
     3          1538156083
     4          1538156083
     5          1538156083
   readings:
     3           KinderZimmer_Balkontuer:state
     4           KinderZimmer_Balkontuer:state
     5           KinderZimmer_Balkontuer:state
     all         KinderZimmer_Balkontuer:state
   realtime:
     0          08:30:00
     1          07:30:00
     2          07:30:00
     3          19:34:43
     4          19:34:43
     5          19:34:43
   time:
     0          ({sunrise(0,"08:30","9:00")})
     1          ({sunrise(0,"07:30","9:00")})
     2          ({sunrise(0,"07:30","9:00")})
     3          ({sunset(-600,"16:00","22:00")})
     4          ({sunset(-600,"16:00","22:00")})
     5          ({sunset(-600,"16:00","22:00")})
   timeCond:
     0          0
     1          1
     2          2
     3          3
     4          4
     5          5
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   timers:
     0           0
     1           1
     2           2
     3           3
     4           4
     5           5
   trigger:
   triggertime:
     1538112600:
       localtime  1538112600
       hash:
     1538116200:
       localtime  1538116200
       hash:
     1538156083:
       localtime  1538156083
       hash:
   uiState:
   uiTable:
Attributes:
   room       99_System
   timerWithWait 1
   wait       int(rand(600)):int(rand(600)):int(rand(600)):int(rand(600)):int(rand(600)):int(rand(600)):


Wenn ich das DOIF inizialisiere funktioniert es immer. Ich habe noch keine regelmäßigkeit gefunden, wann es geht und wann nicht.

Danke
Stefan

Pfriemler

Spontan fällt mir nur auf, dass die letzten drei Zweige leicht identische Bedingungen haben können (alle drei Fenster offen). Meines Wissens entscheidet sich ein DOIF beim Eintreffen eines Triggers aber maximal für einen Zweig und führt diesen aus, nicht alle auf die die Bedingung zutrifft. Kann man leicht umschreiben auf IF-Abfragen in diesem Zweig. Und sunset ist keine Bedingung, sondern ein Trigger. Diese Zweige werden also nur genau einmal pro Tag ausgeführt, wenn zu diesem Zweig die zweite Bedingung stimmt. Man möge mich korrigieren, wenn ich irre.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

thgorjup

FHEM auf Ubuntu 18.04LTS, 2x nanoCUL, JeeLink, nanoPIR, MQTT, ESP-Easy, HUE.
Sensoren+Aktoren: HM, IT, Lacrosse, Multitrade-PIR, VU+, Somfy

bommel-bs

Guten Morgen,

danke für die Hilfe. Ich habe den Parameter mit aufgenommen. Mal sehen was heute Abend passiert.

Danke
Stefan

bommel-bs

Das war die Lösung. Der Rolladen schließt jetzt jeden Abend.

Danke
Stefan