DOIF triggert nur bei "check all"

Begonnen von brown78, 14 Mai 2019, 12:30:29

Vorheriges Thema - Nächstes Thema

brown78

Hallo zusammen,

ich habe (vermutlich erst seit heute), ein Problem mit 3 DOIFS und finde den Fehler nicht. Zum Aufbau: Ein DOIF schaltet in Abhängigkeit der aktuellen Außentemperatur, sowie vorgegebener Grenzwerte von "Auto" nach "Sonnenschutz" - das funktioniert einwandfrei. Dann habe ich für jeden meiner 3 Rolläden ein DOIF, dass je nach dem Status "Auto oder Sonnenschutz" und in definierten Zeiträumen (damit der Rollo nicht in der Nacht auf fährt oder Nachts wenn gelüftet wird zu), das entsprechende ROLLO Device ansteuert.
Diese 3 DOIFS schalten nicht mehr von selbst, erst wenn ich auf "check all" klicke, werden die Bedingungen korrekt ausgewertet und die entsprechenden Aktionen ausgeführt. Gewollt ist, dass bei Temperaturänderung, der Zeitraum geprüft wird und dann der Rollo auf oder zu geht. Die Zeitspannen und Temperaturen werden ja richtig ausgewertet, warum ist "check all" aufeinmal nötig?

hier mal eines der betreffenden DOIFS:
Internals:
   DEF        ([dmy_rollos_modus:state] eq "Sonnenschutz" && [([dmy_rolloGL_multi:up.early]+{"00:15"})-([dmy_rolloGL_multi:down.early]-{"00:25"})]) (set rll_galerie pct 40) DOELSEIF ([dmy_rollos_modus:state] eq "Auto" && [([dmy_rolloGL_multi:up.early]+{"00:15"})-([dmy_rolloGL_multi:down.early]-{"00:25"})]) (set rll_galerie open)
   FUUID      5cc024a0-f33f-47f9-6d47-d74c2dffc8653580
   MODEL      FHEM
   NAME       ctl_SonnenschutzGL
   NR         221
   NTFY_ORDER 50-ctl_SonnenschutzGL
   STATE      cmd_2
   TYPE       DOIF
   VERSION    19303 2019-05-01 08:47:16
   READINGS:
     2019-05-14 12:13:18   Device          dmy_rollos_modus
     2019-05-14 12:13:39   cmd             2
     2019-05-14 12:13:39   cmd_event       ctl_SonnenschutzGL
     2019-05-14 12:13:39   cmd_nr          2
     2019-05-14 11:14:01   e_dmy_rollos_modus_state Sonnenschutz
     2019-05-14 10:35:42   mode            enabled
     2019-05-14 12:13:39   state           cmd_2
     2019-05-14 10:35:42   timer_01_c01    15.05.2019 08:15:00
     2019-05-14 10:35:42   timer_02_c01    14.05.2019 17:35:00
     2019-05-14 10:35:42   timer_03_c02    15.05.2019 08:15:00
     2019-05-14 10:35:42   timer_04_c02    14.05.2019 17:35:00
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'dmy_rollos_modus','state') eq "Sonnenschutz" && ::DOIF_time($hash,0,1,$wday,$hms)
     1          ::ReadingValDoIf($hash,'dmy_rollos_modus','state') eq "Auto" && ::DOIF_time($hash,2,3,$wday,$hms)
   days:
   devices:
     0           dmy_rollos_modus
     1           dmy_rollos_modus
     all         dmy_rollos_modus
   do:
     0:
       0          set rll_galerie pct 40
     1:
       0          set rll_galerie open
     2:
   helper:
     event      temperature: 20.5
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   
     timerevent temperature: 20.5
     triggerDev
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: ctl_SonnenschutzGL
       state: cmd_2
     timerevents:
       temperature: 20.5
       Auto
     timereventsState:
       temperature: 20.5
       Auto
     triggerEvents:
       temperature: 20.5
       Auto
     triggerEventsState:
       temperature: 20.5
       Auto
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
     all         dmy_rolloGL_multi
   localtime:
     0          1557900900
     1          1557848100
     2          1557900900
     3          1557848100
   readings:
     0           dmy_rollos_modus:state
     1           dmy_rollos_modus:state
     all         dmy_rollos_modus:state
   realtime:
     0          08:15:00
     1          17:35:00
     2          08:15:00
     3          17:35:00
   time:
     0          ([dmy_rolloGL_multi:up.early]+{"00:15"})
     1          ([dmy_rolloGL_multi:down.early]-{"00:25"})
     2          ([dmy_rolloGL_multi:up.early]+{"00:15"})
     3          ([dmy_rolloGL_multi:down.early]-{"00:25"})
   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:
     1557848100:
       localtime  1557848100
       hash:
     1557900900:
       localtime  1557900900
       hash:
   uiState:
   uiTable:
Attributes:
   group      Rolläden
   room       Steuerung->Rolläden
   sortby     07

Damian

Hier wurde aber durch einen Event-Trigger geschaltet:

     2019-05-14 12:13:39   cmd             2
     2019-05-14 12:13:39   cmd_event       ctl_SonnenschutzGL
     2019-05-14 12:13:39   cmd_nr          2
     
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

brown78

ctl_SonnenschutzGL ist das DOIF selbst. Gerade waren die Rolläden zu und sind von selbst aufgefahren. Würde als bedeuten, wenn ich von Hand die Grenzwerte ändere, erkennt ein DOIF das, setzt den Dummy auf Sonnenschutz und die 3 anderen interessiert das nicht? Merkwürdig, das muss ich weiter beobachten

Damian

Zitat von: brown78 am 14 Mai 2019, 13:44:08
ctl_SonnenschutzGL ist das DOIF selbst. Gerade waren die Rolläden zu und sind von selbst aufgefahren. Würde als bedeuten, wenn ich von Hand die Grenzwerte ändere, erkennt ein DOIF das, setzt den Dummy auf Sonnenschutz und die 3 anderen interessiert das nicht? Merkwürdig, das muss ich weiter beobachten

Da du kein do always angegeben hast, muss der Zustand (Status des Moduls) wechseln. Da du keine zyklisch sendenden Sensoren hast, kannst du do always angeben um sicherzustellen, dass der gleiche Zweig mehrfach hintereinander ausgeführt wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

brown78

Es sollte aber tatsächlich einen Wechseln geben, cmd2 war aktiv und cmd1 soll ausgeführt werden. Würde kein Wechsel erfolgen würde auch "check all" nichts bewirken oder?
Ich probiere es troztdem mal.

Damian

Zitat von: brown78 am 14 Mai 2019, 19:52:10
Es sollte aber tatsächlich einen Wechseln geben, cmd2 war aktiv und cmd1 soll ausgeführt werden. Würde kein Wechsel erfolgen würde auch "check all" nichts bewirken oder?
Ich probiere es troztdem mal.

Dann kommen ggf. keine Trigger durch, ob es passende Events gibt, siehst du im Eventmonitor.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF