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
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
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
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.
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.
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.