Hallo Leute,
Iregendwie habe ich mir mein DOIF zerschossen. Meinte ich hätte es wieder richtig zurückgebaut. Es hat vorher immer funktioniert. Wenn ich die Anlage abgeschaltet habe ging das Licht aus. Nur leider geht es jetzt nicht mehr aus. Es schaltet jetzt um um 22:10 obwohl Eltern präsent steht und Babysitter auf weg. Wo habe ich den Schreibfehler?
Ich wollte ein Zufallsgenerator mi5 einbauen da wo Eltern absent sind. Habe ich aber nicht hinbekommen. Vielleicht hättet ihr mal ein Tipp.
Das ganze DOIF hat auch wenn ich Check Abfrage gemacht habe vor 22:30 Uhr geschaltet das hat es vorher nicht gemacht.
Wo ist mein Fehler? :(
Danke für die Hilfe
Internals:
DEF ((([22:15|Mo Di Mi Do So] or [23:30|Fr Sa]) and [?Eltern] eq "absent") and [?Babysitter] eq "weg") (set Erdgeschoss_Licht off)
DOELSEIF
((([22:30-23:59]) and [?avr:power] eq "off") and [?Stefan] eq "present" or [?Christin] eq "present") (set Erdgeschoss_Licht off)
FUUID 5c8d4c8d-f33f-faf7-95cc-51e1a3d2f338e1e6
MODEL FHEM
NAME Licht_ausstellen
NOTIFYDEV global
NR 60
NTFY_ORDER 50-Licht_ausstellen
STATE cmd_2
TYPE DOIF
VERSION 20811 2019-12-22 17:45:08
READINGS:
2020-05-18 22:33:16 cmd 2
2020-05-18 22:33:16 cmd_event set_cmd_2
2020-05-18 22:33:16 cmd_nr 2
2020-05-18 22:31:58 mode enabled
2020-05-18 22:33:16 state cmd_2
2020-05-18 22:31:58 timer_01_c01 19.05.2020 22:15:00|MoDiMiDoSo
2020-05-18 22:31:58 timer_02_c01 18.05.2020 23:30:00|FrSa
2020-05-18 22:31:58 timer_03_c02 19.05.2020 22:30:00
2020-05-18 22:31:58 timer_04_c02 18.05.2020 23:59:00
Regex:
accu:
attr:
cmdState:
wait:
waitdel:
condition:
0 ((::DOIF_time_once($hash,0,$wday,"MoDiMiDoSo") or ::DOIF_time_once($hash,1,$wday,"FrSa")) and ::InternalDoIf($hash,'Eltern','STATE') eq "absent") and ::InternalDoIf($hash,'Babysitter','STATE') eq "weg"
1 ((::DOIF_time($hash,2,3,$wday,$hms)) and ::ReadingValDoIf($hash,'avr','power') eq "off") and ::InternalDoIf($hash,'Stefan','STATE') eq "present" or ::InternalDoIf($hash,'Christin','STATE') eq "present"
days:
0 MoDiMiDoSo
1 FrSa
do:
0:
0 set Erdgeschoss_Licht off
1:
0 set Erdgeschoss_Licht off
2:
helper:
DEVFILTER ^global$
NOTIFYDEV global
globalinit 1
last_timer 4
sleeptimer -1
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: set_cmd_2
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: set_cmd_2
state: cmd_2
internals:
all Eltern:STATE Babysitter:STATE Stefan:STATE Christin:STATE
interval:
2 -1
3 2
intervalfunc:
localtime:
0 1589919300
1 1589837400
2 1589920200
3 1589839140
realtime:
0 22:15:00
1 23:30:00
2 22:30:00
3 23:59:00
time:
0 22:15:00
1 23:30:00
2 22:30:00
3 23:59:00
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
triggertime:
1589837400:
localtime 1589837400
hash:
1589839140:
localtime 1589839140
hash:
1589919300:
localtime 1589919300
hash:
1589920200:
localtime 1589920200
hash:
uiState:
uiTable:
Attributes:
do always
ZitatMeinte ich hätte es wieder richtig zurückgebaut. Es hat vorher immer funktioniert.
Dann hole es doch aus dem Backup zurück und fange neu an.
Wie wäre es mit einer Kopie anzufangen (Original auf disable)?
Moin,
wenn da 22:10 etwas schaltet kommt es nicht von diesem DOIF!
Die rote Klammer ist unnötig:
Zitat((([22:15|Mo Di Mi Do So] or [23:30|Fr Sa]) and [?Eltern] eq "absent") and [?Babysitter] eq "weg")
Die könntest Du hier recyceln:
Zitat((([22:30-23:59]) and [?avr:power] eq "off") and ([?Stefan] eq "present" or [?Christin] eq "present"))
Das würde es aus meiner Sicht logischer machen, aber vielleicht willst Du etwas anderes.
Wobei auch hier Klammern unnötig ist:
([22:30-23:59] and [?avr:power] eq "off" and ([?Stefan] eq "present" or [?Christin] eq "present"))
Ohne Klammern werden erst die and und dann die or aufgelöst:
https://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
Durch die ? triggert aber nur die Zeit! Änderung der Status im Zeitraum 22:30-23:59 spielen keine Rolle. Insofern erscheint mir auch ein do always nicht logisch.
Gruß Otto
Okay danke werde es damit mal ausprobieren.
War nur irgendwie nach dem Rückbau sau komisch das es auf einmal so komisch schaltet.
Es wollte einfach nicht klappen. Habe es nun gelöscht und einfach neu geschrieben. Jetzt geht es. Danke für eure Hilfe