Ich brauche eure Hilfe.
Ich habe eine Rule die div. Lichter bei Abwesenheit ein und aus schaltet. Im Grunde funktioniert sie, aber hin und wieder schaltet sich ein Licht bei nicht getriggerter Rule selbständig aus. In der Logdatei sehe ich nur das ein Item off geht. Aber nicht den Grund. Ich vermute das noch ein Timer aktiv ist, auch wenn die Rule nicht läuft.
Code: Alles auswählen
rule "Abwesenheit Licht"
when
Item AbwesendLicht received command or
Item AstroSchalter changed to ON // Nacht beginnt
then
if(Counter.state == NULL){ Counter.sendCommand(0) }
if(receivedCommand == ON){ Counter.sendCommand(0) }
if(receivedCommand == OFF){
hulKueche1.sendCommand(OFF)
hulEsszimmer.sendCommand(OFF)
holBad.sendCommand(OFF)
Counter.sendCommand(1)
logInfo("Abwesend Licht","Abwesenheit Licht AUS (Astro = " + AstroSchalter.state + ", Abwesend = " + AbwesendLicht.state + ", Counter = " + Counter.state + " )")
return;}
if(AbwesendLicht.state == OFF){
return;}
logInfo("Abwesend Licht","Abwesenheit Licht EIN (Astro = " + AstroSchalter.state + ", Abwesend = " + AbwesendLicht.state + ", Counter = " + Counter.state + " )")
if(AstroSchalter.state == ON && AbwesendLicht.state == ON && Counter.state == 0){
if(now.getMinuteOfDay < ((Endzeit_Stunden_Licht.state as Number * 60) + (Endzeit_Minuten_Licht.state as Number))){
Counter.sendCommand(1)
ltimer?.cancel
hulKueche1.sendCommand(ON) // Küche Licht ein
logInfo("Abwesend Licht","Küche Licht Ein")
ltimer = createTimer(now.plusMinutes(20)) [| // nach 20min. Esszimmer ein
if(AbwesendLicht.state == OFF){return;}
ltimer?.cancel
hulEsszimmer.sendCommand(ON)
logInfo("Abwesend Licht","Esszimmer Licht Ein für 5 min.")
ltimer = createTimer(now.plusMinutes(5)) [| // nach 5min. Esszimmer aus
hulEsszimmer.sendCommand(OFF)
logInfo("Abwesend Licht","Esszimmer Aus")
ltimer = null
if(AbwesendLicht.state == OFF){return;}
ltimer?.cancel
holBad.sendCommand(ON) // Bad Licht ein
logInfo("Abwesend Licht","OG Bad Licht Ein für 3 min.")
ltimer = createTimer(now.plusMinutes(3)) [| // nach 3min. OG Bad aus
holBad.sendCommand(OFF)
logInfo("Abwesend Licht","OG Bad Aus")
ltimer = null
if(AbwesendLicht.state == OFF){return;}
ltimer?.cancel
AbwesendLicht.sendCommand(ON)
logInfo("Abwesend Licht","Loop")
Counter.sendCommand(0)
]
]
]
}
else if(AstroSchalter.state == OFF || now.getMinuteOfDay > ((Endzeit_Stunden_Licht.state as Number * 60) + (Endzeit_Minuten_Licht.state as Number)) ){
AbwesendLicht.sendCommand(OFF)
Counter.sendCommand(1)
logInfo("Abwesend Licht","Abwesenheit Licht AUS (Astro = " + AstroSchalter.state + ", Abwesend = " + AbwesendLicht.state + ", Counter = " + Counter.state + " )")
}
}
end