Ich verzweifle an einem IF in einem DOELSE-Zweig, ich bekomme die Fehlermeldung:
IF (auto eq "auto") (set ST5 off; sleep 5 quiet;set S3 off) : IF: no right bracket: (set ST5 off
Obwohl die Klammern doch - eigentlich - korrekt sind. Ich wäre für einen Anstupser dankbar, da ich keinen offensichtlichen Fehler mehr sehe...
Vielen Dank!
Gruß,
Friedhelm
Hier das komplette Device:
Internals:
DEF ([$SELF:Modus,"manu"] eq "auto"
and [Tageslicht_aussen] eq "dunkel"
and [08:00-[Rolladen_hinten_Zeit_runter_fruehestens]]
and [ANLAGE_STATUS] ne "extern_scharf"
and [RolladenWohnzimmerLinks:state] ne "off")
(set S3:FILTER=state!=on on;
sleep 15;set ST5 on;
)
DOELSE
(
(
IF ([$SELF:Modus] eq "auto") ## Muss "IF" sein, kein DOELSEIF!
(set ST5 off; sleep 5 quiet;set S3 off)
)
)
FUUID 5c444ff2-f33f-26cd-cdcc-749f1b564e0ea7e7
MODEL FHEM
NAME di_Licht_Teich
NOTIFYDEV global,di_Licht_Teich,Tageslicht_aussen,Rolladen_hinten_Zeit_runter_fruehestens,ANLAGE_STATUS,RolladenWohnzimmerLinks
NR 1150
NTFY_ORDER 50-di_Licht_Teich
STATE initialized
TYPE DOIF
VERSION 20157 2019-09-13 21:08:50
READINGS:
2019-08-03 11:03:22 Modus auto
2019-09-18 17:31:17 cmd 0
2019-09-18 17:31:17 mode enabled
2019-09-18 17:31:17 state initialized
2019-09-18 17:31:17 timer_01_c01 19.09.2019 08:00:00
2019-09-18 17:31:17 timer_02_c01 18.09.2019 21:15:00
Regex:
accu:
cond:
ANLAGE_STATUS:
0:
&STATE ^ANLAGE_STATUS$
RolladenWohnzimmerLinks:
0:
state ^RolladenWohnzimmerLinks$:^state:
Tageslicht_aussen:
0:
&STATE ^Tageslicht_aussen$
di_Licht_Teich:
0:
Modus ^di_Licht_Teich$:^Modus:
itimer:
Rolladen_hinten_Zeit_runter_fruehestens:
itimer:
&STATE ^Rolladen_hinten_Zeit_runter_fruehestens$
attr:
cmdState:
0:
ein
1:
aus
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'di_Licht_Teich','Modus','"manu"') eq "auto" and ::InternalDoIf($hash,'Tageslicht_aussen','STATE') eq "dunkel" and ::DOIF_time($hash,0,1,$wday,$hms) and ::InternalDoIf($hash,'ANLAGE_STATUS','STATE') ne "extern_scharf" and ::ReadingValDoIf($hash,'RolladenWohnzimmerLinks','state') ne "off"
days:
do:
0:
0 set S3:FILTER=state!=on on; sleep 15;set ST5 on;
1:
0 ( IF ([di_Licht_Teich:Modus] eq "auto") (set ST5 off; sleep 5 quiet;set S3 off) )
helper:
globalinit 1
last_timer 2
sleeptimer -1
internals:
all Tageslicht_aussen:STATE ANLAGE_STATUS:STATE
interval:
0 -1
1 0
intervalfunc:
localtime:
0 1568872800
1 1568834100
readings:
all di_Licht_Teich:Modus RolladenWohnzimmerLinks:state
realtime:
0 08:00:00
1 21:15:00
time:
0 08:00:00
1 [Rolladen_hinten_Zeit_runter_fruehestens]
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
triggertime:
1568834100:
localtime 1568834100
hash:
1568872800:
localtime 1568872800
hash:
uiState:
uiTable:
Attributes:
cmdState ein | aus
do always
readingList Modus
room DOIF
setList Modus:auto,manu
webCmd Modus
Benutze beim IF Komma statt Semikolon, das funktioniert dort sogar in Verbindung mit sleep - steht alles in der Commandref
Danke, Damian, so funktioniert es:
DOELSE
(
IF ([$SELF:Modus] eq "auto")
(set ST5 off, sleep 5 quiet, set S3 off)
)
Hatte nur Bedenken gehabt, dass das sleep FHEM blockiert, wenn der darauffolgende Befehl nicht direkt - also ohne Leerzeichen - dahinter steht.