Hallo Leute,
ich habe offensichtlich einen Fehler in DOIF, komme aber leider nicht drauf. Evtl. kann mir jemand helfen:
Ich habe es schon auf 2 verschiedene Weisen versucht.
Test 1:
defmod DOIF_Rollo_Fenster_Kinderzimmer_OG DOIF (([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8]) ({if (ReadingsVal("Rollo_Fenster_Kinderzimmer_OG", "state", "---") ne "off") {fhem("set Rollo_Fenster_Kinderzimmer_OG off")}}) DOELSEIF (([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell")) ({if (ReadingsVal("Rollo_Fenster_Kinderzimmer_OG", "state", "---") ne "on") {fhem("set Rollo_Fenster_Kinderzimmer_OG on")}})
Test 2:
defmod DOIF_Rollo_Fenster_Kinderzimmer_OG DOIF (([Rollo_Fenster_Kinderzimmer_OG:state] eq "on") and (([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8])) (set Rollo_Fenster_Kinderzimmer_OG off) DOELSEIF (([Rollo_Fenster_Kinderzimmer_OG:state] eq "off") and (([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell"))) (set Rollo_Fenster_Kinderzimmer_OG on)
Hallo Eddy,
dieses Unter-Forum ist nur für fertigen Code gedacht
Siehe hier: https://forum.fhem.de/index.php/topic,47490.0.html
Unten Link den Thread bitte in das DOIF Forum verschieben, da können dir bezüglich DOIF auch die Profis deine Frage beantworten.
Zitat von: Fixel2012 am 22 Dezember 2017, 11:37:43
Hallo Eddy,
dieses Unter-Forum ist nur für fertigen Code gedacht
Siehe hier: https://forum.fhem.de/index.php/topic,47490.0.html
Unten Link den Thread bitte in das DOIF Forum verschieben, da können dir bezüglich DOIF auch die Profis deine Frage beantworten.
Sorry!
Alles gut :)
Zitat von: Eddy am 22 Dezember 2017, 11:29:29
Hallo Leute,
ich habe offensichtlich einen Fehler in DOIF, komme aber leider nicht drauf. Evtl. kann mir jemand helfen:
Ich habe es schon auf 2 verschiedene Weisen versucht.
Test 1:
defmod DOIF_Rollo_Fenster_Kinderzimmer_OG DOIF (([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8]) ({if (ReadingsVal("Rollo_Fenster_Kinderzimmer_OG", "state", "---") ne "off") {fhem("set Rollo_Fenster_Kinderzimmer_OG off")}}) DOELSEIF (([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell")) ({if (ReadingsVal("Rollo_Fenster_Kinderzimmer_OG", "state", "---") ne "on") {fhem("set Rollo_Fenster_Kinderzimmer_OG on")}})
Test 2:
defmod DOIF_Rollo_Fenster_Kinderzimmer_OG DOIF (([Rollo_Fenster_Kinderzimmer_OG:state] eq "on") and (([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8])) (set Rollo_Fenster_Kinderzimmer_OG off) DOELSEIF (([Rollo_Fenster_Kinderzimmer_OG:state] eq "off") and (([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell"))) (set Rollo_Fenster_Kinderzimmer_OG on)
Schau mal, was Du vorher alles machen könntest und danach bitte vollständige Informationen posten und das DOIF etwas strukturieren, das hilft Dir selbst und dem potentiellen Helfenden.
https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche
So, also nochmals:
defmod DOIF_Rollo_Fenster_Kinderzimmer_OG
DOIF
(([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8])
({if (ReadingsVal("Rollo_Fenster_Kinderzimmer_OG", "state", "---") ne "off") {fhem("set Rollo_Fenster_Kinderzimmer_OG off")}})
DOELSEIF
(([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell"))
({if (ReadingsVal("Rollo_Fenster_Kinderzimmer_OG", "state", "---") ne "on") {fhem("set Rollo_Fenster_Kinderzimmer_OG on")}})
defmod DOIF_Rollo_Fenster_Kinderzimmer_OG
DOIF
(([Rollo_Fenster_Kinderzimmer_OG:state] eq "on") and (([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8]))
(set Rollo_Fenster_Kinderzimmer_OG off)
DOELSEIF
(([Rollo_Fenster_Kinderzimmer_OG:state] eq "off") and (([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell")))
(set Rollo_Fenster_Kinderzimmer_OG on)
Internals:
NAME Rollo_auf
NR 198
STATE state 08:30
TYPE dummy
READINGS:
2017-12-22 00:18:52 state state 08:30
Attributes:
alias Zeit hoch:
devStateIcon .*:rc_BLANK
group Rollos_Settings
icon icoUhr
room Rolladensteuerung
setList state:time
sortby 10
webCmd state
Damit weiss aber noch keiner was das DOIF machen soll, wie sich der Fehler äußert.
Befreie das DOIF von unnötigen runden Klammern, Vergleiche müssen nicht geklammert werden.
Warum steht in state "state 08:30"?
sorry, hatte den Fehler ja nie beschrieben.
Internals:
DEF (([Rollo_Fenster_Kinderzimmer_OG:state] eq "on") and (([Rollo_Tageslicht:state] eq "dunkel") or [[Rollo_ab]|8])) (set Rollo_Fenster_Kinderzimmer_OG off) DOELSEIF (([Rollo_Fenster_Kinderzimmer_OG:state] eq "off") and (([[Rollo_auf]|8] or [[Rollo_auf_WE]|7]) or ([Rollo_Tageslicht:state] eq "hell"))) (set Rollo_Fenster_Kinderzimmer_OG on)
NAME DOIF_Rollo_Fenster_Kinderzimmer_OG
NR 205
NTFY_ORDER 50-DOIF_Rollo_Fenster_Kinderzimmer_OG
STATE initialized
TYPE DOIF
READINGS:
2017-12-22 07:54:53 Device Rollo_Tageslicht
2017-12-22 11:25:58 cmd 0
2017-12-22 07:54:53 e_Rollo_Tageslicht_state hell
2017-12-22 07:54:53 error condition c02: syntax error, ("
2017-12-22 11:25:58 state initialized
2017-12-22 11:25:58 timer_01_c01 22.12.2017 18:30:00|8
2017-12-22 11:25:58 timer_02_c02 error: Wrong timespec state 08:30: either HH:MM:SS or {perlcode}
2017-12-22 11:25:58 timer_03_c02 23.12.2017 10:30:00|7
condition:
0 (ReadingValDoIf($hash,'Rollo_Fenster_Kinderzimmer_OG','state') eq "on") and ((ReadingValDoIf($hash,'Rollo_Tageslicht','state') eq "dunkel") or DOIF_time_once($hash,0,$wday,"8"))
1 (ReadingValDoIf($hash,'Rollo_Fenster_Kinderzimmer_OG','state') eq "off") and ((DOIF_time_once($hash,1,$wday,"8") or DOIF_time_once($hash,2,$wday,"7")) or (ReadingValDoIf($hash,'Rollo_Tageslicht','state') eq "hell"))
days:
0 8
1 8
2 7
devices:
0 Rollo_Fenster_Kinderzimmer_OG Rollo_Tageslicht
1 Rollo_Fenster_Kinderzimmer_OG Rollo_Tageslicht
all Rollo_Fenster_Kinderzimmer_OG Rollo_Tageslicht
do:
0:
0 set Rollo_Fenster_Kinderzimmer_OG off
1:
0 set Rollo_Fenster_Kinderzimmer_OG on
2:
helper:
globalinit 1
last_timer 3
sleeptimer -1
itimer:
all Rollo_ab Rollo_auf Rollo_auf_WE
localtime:
0 1513963800
2 1514021400
readings:
0 Rollo_Fenster_Kinderzimmer_OG:state Rollo_Tageslicht:state
1 Rollo_Fenster_Kinderzimmer_OG:state Rollo_Tageslicht:state
all Rollo_Fenster_Kinderzimmer_OG:state Rollo_Tageslicht:state
realtime:
0 18:30:00
2 10:30:00
regexp:
all:
state:
STATE:
time:
0 [Rollo_ab]
1 [Rollo_auf]
2 [Rollo_auf_WE]
timeCond:
0 0
1 1
2 1
timer:
0 0
1 0
2 0
timers:
0 0
1 1 2
triggertime:
1513963800:
localtime 1513963800
hash:
1514021400:
localtime 1514021400
hash:
Attributes:
Der Fehler ist doch eindeutig:
error: Wrong timespec state 08:30:
Wollte ich auch gerade fragen?
Ja, die Fehlermeldung ist offensichtlich. Allerdings war es für mich nicht plausiebel, da ich ebenfalls dummys mit Zeit habe die korrekt funktionieren.
Also habe ich den dummy gelöscht und neu angelegt. Jetzt funktioniert es.
Vielen Dank!
Noch ein Tipp: statt des Perl-if-Konstruktes kannst du mit FILTER arbeiten. Macht das gleiche, ist aber besser lesbar und switcht nicht unnötig zwischen Perl und Fhem herum.