Unser Aussenlicht ist irgendwie so eine Endlosbaustelle.
Seit neuestem hat es die Angewohnheit wenn ich nach Hause komme, wenn es schon an ist einfach auszugehen. (War um ca 19Uhr, und es war dunkel aussen)
Nachdem ich heimgekommen bin, hat das doif cmd5 ausgeführt, und damit das Licht ausgeschalten. Zuvor war es vermutlich im cmd1
Einige Minuten danach ist es wieder angegangen (cmd1)
Das dürfte passiert sein, da erst beim nächsten Event von Umwelt_Aussen wieder die Bedingung1 überprüft wurde.
Meine letzte Änderung in diesem Bereich war das attr wait das sicherstellen sollte, das wenn wir abends weg waren, und noch kurz mit dem Hund rausgehen nicht im dunkeln heimkommen. Diese ist aber auch schon länger her, ich kann auch nicht sicher sagen ob es da einen Zusammenhang gibt
Wie kann ich das verändern, so dass das Licht in diesem Fall garnicht erst kurz ausgeht?
Edit: So soll es eigentlich funktionieren:
Es soll angehen wenn es dunkel geworden ist, und um 22:15 wieder ausgehen.
Früh soll es ab 5:55Uhr angehen, und anbleiben, bis es hell geworden ist.
Wenn aber nach 22:15 noch jemand "nicht zuhause" ist, dann soll es anbleiben. Wenn diese Bedingung nicht mehr zutrifft, soll das Licht erst nach einigen Minuten ausgehen.
([Umwelt_Aussen:helligkeit-get:d] < 30 and [15:00-([22:15]+int(rand(300)))] )
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Umwelt_Aussen:helligkeit-get:d] < 10 and [([05:55]+int(rand(300)))-11:00|AT])
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Umwelt_Aussen:helligkeit-get:d] < 10 and [Bewohner:residentsAbsent]>0 and [22:15-08:00])
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Bewohner:residentsAbsent]==0 and [22:15-08:00])
(set Licht_Aussen_Haustuer off)
DOELSE
(set Licht_Aussen_Haustuer off)
Mit attr wait 0:0:0:900:0
List vom DOIF ist nicht zum Fehlerzeitpunkt enstanden. Zum Fehlerzeitpunkt war die Helligkeit bei <10Lux und es war ca 19Uhr.
Internals:
DEF ([Umwelt_Aussen:helligkeit-get:d] < 30 and [15:00-([22:15]+int(rand(300)))] )
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Umwelt_Aussen:helligkeit-get:d] < 10 and [([05:55]+int(rand(300)))-11:00|AT])
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Umwelt_Aussen:helligkeit-get:d] < 10 and [Bewohner:residentsAbsent]>0 and [22:15-08:00])
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Bewohner:residentsAbsent]==0 and [22:15-08:00])
(set Licht_Aussen_Haustuer off)
DOELSE
(set Licht_Aussen_Haustuer off)
FUUID 5ccd6a77-f33f-e34d-2699-3c9f1e334586e773
MODEL FHEM
NAME DOIF_Licht_Eingang
NR 40
NTFY_ORDER 50-DOIF_Licht_Eingang
STATE cmd_5
TYPE DOIF
VERSION 19786 2019-07-05 21:47:08
READINGS:
2019-11-02 14:04:32 Device Umwelt_Aussen
2019-11-02 00:20:56 cmd 5
2019-11-02 00:20:56 cmd_event Umwelt_Aussen
2019-11-02 00:20:56 cmd_nr 5
2019-11-02 13:27:47 e_Bewohner_residentsAbsent 1
2019-11-02 14:00:08 e_Umwelt_Aussen_helligkeit-get 999.68 lux
2019-08-09 06:45:43 mode enabled
2019-11-02 00:20:56 state cmd_5
2019-11-01 22:15:17 timer_01_c01 02.11.2019 15:00:00
2019-11-01 22:15:17 timer_02_c01 02.11.2019 22:19:59
2019-11-02 11:00:00 timer_03_c02 03.11.2019 05:59:46|AT
2019-11-02 11:00:00 timer_04_c02 03.11.2019 11:00:00|AT
2019-11-02 08:00:00 timer_05_c03 02.11.2019 22:15:00
2019-11-02 08:00:00 timer_06_c03 03.11.2019 08:00:00
2019-11-02 08:00:00 timer_07_c04 02.11.2019 22:15:00
2019-11-02 08:00:00 timer_08_c04 03.11.2019 08:00:00
2019-11-02 00:20:56 wait_timer no timer
Regex:
accu:
attr:
cmdState:
wait:
0:
0
1:
0
2:
0
3:
900
4:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Umwelt_Aussen','helligkeit-get','','d') < 30 and ::DOIF_time($hash,0,1,$wday,$hms)
1 ::ReadingValDoIf($hash,'Umwelt_Aussen','helligkeit-get','','d') < 10 and ::DOIF_time($hash,2,3,$wday,$hms,"AT")
2 ::ReadingValDoIf($hash,'Umwelt_Aussen','helligkeit-get','','d') < 10 and ::ReadingValDoIf($hash,'Bewohner','residentsAbsent')>0 and ::DOIF_time($hash,4,5,$wday,$hms)
3 ::ReadingValDoIf($hash,'Bewohner','residentsAbsent')==0 and ::DOIF_time($hash,6,7,$wday,$hms)
days:
2 AT
3 AT
devices:
0 Umwelt_Aussen
1 Umwelt_Aussen
2 Umwelt_Aussen Bewohner
3 Bewohner
all Umwelt_Aussen Bewohner
do:
0:
0 set Licht_Aussen_Haustuer on
1:
0 set Licht_Aussen_Haustuer on
2:
0 set Licht_Aussen_Haustuer on
3:
0 set Licht_Aussen_Haustuer off
4:
0 set Licht_Aussen_Haustuer off
helper:
event wind-get: 3.45 m/s,last-sender: 1/1/3,3.45 m/s
globalinit 1
last_timer 8
sleepdevice Bewohner
sleepsubtimer 0
sleeptimer -1
timerdev Umwelt_Aussen
timerevent helligkeit-get: 999.68 lux,last-sender: 1/1/3,999.68 lux
triggerDev Umwelt_Aussen
DOIF_eventas:
cmd_nr: 5
cmd: 5
cmd_event: Umwelt_Aussen
state: cmd_5
timerevents:
helligkeit-get: 999.68 lux
last-sender: 1/1/3
999.68 lux
timereventsState:
helligkeit-get: 999.68 lux
last-sender: 1/1/3
state: 999.68 lux
triggerEvents:
wind-get: 3.45 m/s
last-sender: 1/1/3
3.45 m/s
triggerEventsState:
wind-get: 3.45 m/s
last-sender: 1/1/3
state: 3.45 m/s
internals:
interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
6 -1
7 6
intervalfunc:
intervaltimer:
itimer:
localtime:
0 1572703200
1 1572729599
2 1572757186
3 1572775200
4 1572729300
5 1572764400
6 1572729300
7 1572764400
perlblock:
readings:
0 Umwelt_Aussen:helligkeit-get
1 Umwelt_Aussen:helligkeit-get
2 Umwelt_Aussen:helligkeit-get Bewohner:residentsAbsent
3 Bewohner:residentsAbsent
all Umwelt_Aussen:helligkeit-get Bewohner:residentsAbsent
realtime:
0 15:00:00
1 22:19:59
2 05:59:46
3 11:00:00
4 22:15:00
5 08:00:00
6 22:15:00
7 08:00:00
time:
0 15:00:00
1 ([22:15]+int(rand(300)))
2 ([05:55]+int(rand(300)))
3 11:00:00
4 22:15:00
5 08:00:00
6 22:15:00
7 08:00:00
timeCond:
0 0
1 0
2 1
3 1
4 2
5 2
6 3
7 3
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
timers:
0 0 1
1 2 3
2 4 5
3 6 7
trigger:
triggertime:
1572703200:
localtime 1572703200
hash:
1572729300:
localtime 1572729300
hash:
1572729599:
localtime 1572729599
hash:
1572757186:
localtime 1572757186
hash:
1572764400:
localtime 1572764400
hash:
1572775200:
localtime 1572775200
hash:
uiState:
uiTable:
Attributes:
DbLogExclude .*
room Aussen
wait 0:0:0:900:0
Deine Außenhelligkeit wird als 999 lux angezeigt, damit scheitern cmd1-cmd3, da die einen lux-Wert kleiner 30 erwarten.
cmd4 scheitert, weil Du da bist.
Bleibt cmd5.
Am einfachsten ist es, den Außenhelligkeitssensor in eine unbeleuchtete Lokation umzuziehen.
Ciao, -MN
Danke für deine Antwort. Sie zeigt mir, ich hab zur eigentlich benötigten Funktion nix beschrieben. Sorry, vor lauter Fehlersuche hab ich das wichtigste übersehen.
Helligkeitssensor ist auf dem Dach montiert.
Es soll angehen wenn es dunkel geworden ist, und um 22:15 wieder ausgehen.
Früh soll es ab 5:55Uhr angehen, und anbleiben, bis es hell geworden ist.
Wenn aber nach 22:15 noch jemand "nicht zuhause" ist, dann soll es anbleiben. Wenn diese Bedingung nicht mehr zutrifft, soll das Licht erst nach einigen Minuten ausgehen.
Was ich auch übersehen habe, ist dazuzuschreiben "das List vom DOIF ist nicht zum Fehlerzeitpunkt enstanden. Zum Fehlerzeitpunkt war die Helligkeit bei <10Lux".
Habe ich gerade alles in meinem Ursprungsbeitrag ergänzt.
Hat jemand eine Idee was ich machen kann? Jedesmal wenn ich heimkomm und es ist schon dunkel geht das Licht aus, und ein paar Minuten danach wieder an.
Denkanstoß:
Zitat von: commandrefZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten.
Wenn Bewohner triggert, werden NUR die Bedingungen 3 und 4 geprüft, und wenn alle falsch geht er in DOELSE.
Vermutung: er ist in cmd_1
Du kommst nach Hause: Bedingung 3 wird falsch, Bedingung 4 ist wegen der Zeit auch falsch => DOELSE => aus
Später triggert die Helligkeit: Bedingung 1 wird wahr => cmd1 => an
Hinweis: https://fhem.de/commandref_DE.html#DOIF_checkall
Danke für die Antwort, interessanter Einwand.
Machts dann so mehr Sinn?([Umwelt_Aussen:helligkeit-get:d] < 30 and [15:00-([22:15]+int(rand(300)))] )
(set Licht_Aussen_Haustuer on)
DOELSEIF ([?Umwelt_Aussen:helligkeit-get:d] < 30 and [15:00-([22:15]+int(rand(300)))] and [Bewohner:residentsAbsent]==0)
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Umwelt_Aussen:helligkeit-get:d] < 10 and [([05:55]+int(rand(300)))-11:00|AT])
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Umwelt_Aussen:helligkeit-get:d] < 10 and [Bewohner:residentsAbsent]>0 and [22:15-08:00])
(set Licht_Aussen_Haustuer on)
DOELSEIF ([Bewohner:residentsAbsent]==0 and [22:15-08:00])
(set Licht_Aussen_Haustuer off)
DOELSE
(set Licht_Aussen_Haustuer off)
Zumindest sollte der Fall, den Du beschrieben hast, nicht mehr passieren.
Allerdings stört mich noch was:
[15:00-([22:15]+int(rand(300)))] und [22:15-08:00] können sich überschreiten
[([05:55]+int(rand(300)))-11:00|AT]) und [22:15-08:00] auch.
Könnte zu ungewünschte Schalten führen
danke für die Ergänzung, ich werde mich melden ob mir beim heimkommen wieder ein Licht aufgeht
bisher geht es tadellos, vielen Dank für die Hilfe.