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
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.
attr di_KinderZimmer_Rolladen do always
Guten Morgen,
danke für die Hilfe. Ich habe den Parameter mit aufgenommen. Mal sehen was heute Abend passiert.
Danke
Stefan
Das war die Lösung. Der Rolladen schließt jetzt jeden Abend.
Danke
Stefan