Okay now i changed the rules and i think it should work.
In the morning:
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
import org.joda.time.*
rule "Flurlicht morgens einschalten"
when
Item itmFIBmotion2 changed from 0 to 1
then
var Timer timerFlur = null
var Integer timerFlurTimeout = 30
var CurrentHour = now.getHourOfDay
// Prüfung ob die aktuelle Uhrzeit nicht zwischen 6 und 9 Uhr liegt, dann abbrechen
if(CurrentHour <6 || CurrentHour >9)
{
logInfo("RuleFlurMorning", "Die Regel wird abgebrochen, es ist nicht Morgen.")
return (false)
}
// Timer wird erneut gestartet wenn er noch nicht abgelaufen ist
if (timerFlur != null)
{
timerFlur.reschedule(now.plusMinutes(timerFlurTimeout))
logInfo("RuleFlurMorning","Timer wird erneut gestartet, fuer " + timerFlurTimeout + " Minuten.")
}
else
{
// Licht einschalten wenn eine Bewegung festgestellt wurde, für Dauer = timerFlurTimemout
sendCommand(hueFlur, "360,80,30")
logInfo("RuleFlurMorning","Timer wurde fuer " + timerFlurTimeout + " Minuten gestartet.")
timerFlur = createTimer(now.plusMinutes(timerFlurTimeout))
[|
// Prüfung ob nach Ablauf des Timers noch eine Bewegung festgestellt wurde, dann Timmer verlängern
if (itmFIBmotion2.state == 1)
{
timerFlur.reschedule(now.plusMinutes(timerFlurTimeout))
logInfo("RuleFlurMorning","Timer ist abgelaufen aber wird erneut fuer " + timerFlurTimeout + " Minuten gestartet.")
}
else
{
// Licht ausschalten wenn der Timer abgelaufen ist und keine Bewegung festgestellt wurde
sendCommand(hueFlur, "0")
timerFlur = null
logInfo("RuleFlurMorning", "Das Licht wird wieder ausgeschaltet.")
}
]
}
end
In the evening:
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
import org.joda.time.*
rule "Flurlicht abends einschalten"
when
Item itmFIBmotion2 changed from 0 to 1
then
var Timer timerFlur = null
var Integer timerFlurTimeout = 30
var CurrentHour = now.getHourOfDay
var CurrentMinute = now.getMinuteOfHour
// Prüfung ob aktuelle Uhrzeit nicht zwischen 23 und 17 Uhr liegt, dann abbrechen
if((CurrentHour == 23 && CurrentMinute >=1) || CurrentHour <17)
{
logInfo("RuleFlurEvening", "Das Licht wird nicht eingeschaltet, es ist nicht abends.")
return (false)
}
// Prüfung ob es zu hell ist, dann abbrechen
if(itmFIBlux2.state >1)
{
logInfo("RuleFlurEvening", "Das Licht wird nicht eingeschaltet, es ist hell genug.")
return (false)
}
// Timer wird erneut gestartet wenn er noch nicht abgelaufen ist
if (timerFlur != null)
{
timerFlur.reschedule(now.plusMinutes(timerFlurTimeout))
logInfo("RuleFlurEvening","Das Licht wird erneut fuer " + timerFlurTimeout + " Minuten eingeschaltet.")
}
else
{
// Licht einschalten wenn eine Bewegung festgestellt wurde, für Dauer = timerFlurTimemout
sendCommand(hueFlur, "360,80,50")
logInfo("RuleFlurEvening","Das Licht wird fuer " + timerFlurTimeout + " Minuten eingeschaltet.")
timerFlur = createTimer(now.plusMinutes(timerFlurTimeout))
[|
// Prüfung ob nach Ablauf des Timers noch eine Bewegung festgestellt wurde, dann Timmer verlängern
if (itmFIBmotion2.state == 1)
{
timerFlur.reschedule(now.plusMinutes(timerFlurTimeout))
logInfo("RuleFlurEvening","Das Licht wird fuer " + timerFlurTimeout + " Minuten eingeschaltet, es wurde erneut Bewegung festgestellt.")
}
else
{
// Licht ausschalten wenn der Timer abgelaufen ist und keine Bewegung festgestellt wurde
sendCommand(hueFlur, "0")
timerFlur = null
logInfo("RuleFlurEvening", "Das Licht wird wieder ausgeschaltet.")
}
]
}
end
In the night:
import org.openhab.core.library.types.*
import org.openhab.core.persistence.*
import org.openhab.model.script.actions.*
import org.joda.time.*
rule "Flurlicht nachts einschalten"
when
Item itmFIBmotion2 changed from 0 to 1
then
var Timer timerFlur = null
var Integer timerFlurTimeout = 5
var CurrentHour = now.getHourOfDay
var CurrentMinute = now.getMinuteOfHour
// Prüfung ob die aktuelle Uhrzeit nicht zwischen 23 und 5 Uhr liegt, dann abbrechen
if(CurrentHour <5 && (CurrentHour =23 && CurrentMinute >=1))
{
logInfo("RuleFlurNight", "Die Regel wird abgebrochen, es ist nicht Nacht.")
return (false)
}
// Timer wird erneut gestartet wenn er noch nicht abgelaufen ist
if (timerFlur != null)
{
timerFlur.reschedule(now.plusMinutes(timerFlurTimeout))
logInfo("RuleFlurNight","Timer wird erneut gestartet, fuer " + timerFlurTimeout + " Minuten.")
}
else
{
// Licht einschalten wenn eine Bewegung festgestellt wurde, für Dauer = timerFlurTimemout
sendCommand(hueFlur, "360,80,1")
logInfo("RuleFlurNight","Timer wurde fuer " + timerFlurTimeout + " Minuten gestartet.")
timerFlur = createTimer(now.plusMinutes(timerFlurTimeout))
[|
// Prüfung ob nach Ablauf des Timers noch eine Bewegung festgestellt wurde, dann Timmer verlängern
if (itmFIBmotion2.state == 1)
{
timerFlur.reschedule(now.plusMinutes(timerFlurTimeout))
logInfo("RuleFlurNight","Timer ist abgelaufen aber wird erneut fuer " + timerFlurTimeout + " Minuten gestartet.")
}
else
{
// Licht ausschalten wenn der Timer abgelaufen ist und keine Bewegung festgestellt wurde
sendCommand(hueFlur, "0")
timerFlur = null
logInfo("RuleFlurNight", "Das Licht wird wieder ausgeschaltet.")
}
]
}
end
Thanks for your help.
It´s not always that easy when you´re not working with programming all day …
Cheers
Michael