Morgens von langsam aufdimmenden Licht geweckt zu werden, unterstützt deinen Prozess in den Tag zu starten. Mit einer Smart-Blub wie Phillips Hue lässt sich das leicht bewerkstelligen. Ich steuere dieses Ereignis darüber hinaus mit meinem Google Kalender um sich verändernde Verhältnisse einfach abzubilden.
Kalender-Item
Den Kalender richte ich mittels des OpenHAB ical-Moduls ein. Die zugehörigen Items sehen so aus:
Group:Switch:COUNT(ON) igCalWaking "Weckprofil" (sgBedroom)["WebService"]
Switch KalenderWecken_CurrentEventPresence "Current Event Presence" (igCalWaking) { channel="icalendar:calendar:Wecken:current_presence" }
String KalenderWecken_CurrentEventTitle "Current Event Title" (igCalWaking) { channel="icalendar:calendar:Wecken:current_title" }
DateTime KalenderWecken_CurrentEventStart "Current Event Start" (igCalWaking) { channel="icalendar:calendar:Wecken:current_start" }
DateTime KalenderWecken_CurrentEventEnd "Current Event End" (igCalWaking) { channel="icalendar:calendar:Wecken:current_end" }
Smart-Bulb-Item
In meinem Fall verwende ich Phillips Hue zusammen mit zigbee2mqtt.
// Schlafzimmer
Group igSchlafzimmerLight "Schlafzimmer" (sgBedroom)["Lightbulb", "Group"]
Color SchlafzimmerRoom_Farbe "Farbe" <ColorLight> (igSchlafzimmerLight,sgBedroom,tgLSchange)["Control", "Light"] { autoupdate="false", channel="mqtt:topic:myMosquitto:HueBulbBedRoom:color", alexa="Color" }
Dimmer SchlafzimmerRoom_Farbtemperatur "Farbtemperatur" <ColorLight> (igSchlafzimmerLight,tgLSinterrupt,sgBedroom)["Control", "ColorTemperature"] { autoupdate="false", channel="mqtt:topic:myMosquitto:HueBulbBedRoom:color_temperature", alexa="ColorTemperature" }
Dimmer SchlafzimmerRoom_Helligkeit "Licht" <DimmableLight> (igSchlafzimmerLight,tgLSinterrupt,sgBedroom)["Control", "Brightness"] { autoupdate="false", channel="mqtt:topic:myMosquitto:HueBulbBedRoom:brightness", alexa="Brightness,PowerState" }
String SchlafzimmerRoom_Lightshow "Lightshow" (igSchlafzimmerLight,tgLightshow,sgBedroom)["Control", "DynamicScene"] { alexa="Mode" [capabilityNames="@Setting.Mode",supportedModes="Normal,Kerzenlicht,Polarlicht,Farbwechsel,Zufallsfarben,Gewitter,TV-Simulation"] }
Dimmer SchlafzimmerRoom_LightshowSpeed "Geschwindigkeit" (igSchlafzimmerLight,sgBedroom)["Control", "DynamicSpeed"] { alexa="RangeValue" [capabilityNames="Geschwindigkeit,Speed", supportedRange="0:100:10", presets="10=@Value.Low:@Value.Minimum,50=@Value.Medium:Normal,100=@Value.High:@Value.Maximum"] }
String SchlafzimmerRoom_Interface "Interface" (igSchlafzimmerLight)["Control", "Interface"] { channel="mqtt:topic:myMosquitto:HueBulbBedRoom:interface" }
Sonnenaufgang-Rule
Die Folgende Regel vollführt den Trick. Dabei greife ich auf eine mathematische Lösung zurück. Das Licht wird über einen bestimmten Zeitraum bis zu einem maximalen Wert aufgedimmt. Alle Schritte dazwischen werden berechnet. Wenn der aktuelle Status zu weit von dem durch dieses System berechneten Status abweicht, wird nicht weiter damit fortgefahren. Dadurch kann der Vorgang manuell durch Ein- oder Ausschalten abgebrochen werden.
/etc/openhab/rules/bedroom-wakeup-light.rules
val int stepTime = 2 //minutes
val int sunriseTime = 30 //minutes
val int maxValue = 60 //%
rule "Wochenprofile ein math"
when
Time cron "0 0/2 * * * ?"
then {
if(KalenderWecken_CurrentEventStart.state != UNDEF){
val eventStarted = (KalenderWecken_CurrentEventStart.state as DateTimeType).getZonedDateTime()
var double diffSec = (now.toInstant().toEpochMilli() - eventStarted.toInstant().toEpochMilli())/1000
var double diffMin = diffSec/60
var double stepPerMin = maxValue/sunriseTime
//Soll-Wert zu dem Zeitpunk
var double setpoint = diffMin * stepPerMin
if(setpoint > maxValue){
setpoint = maxValue
}
//Untergrenze des Sollwertes
var double setpointLow = (diffMin - stepTime) * stepPerMin
if(setpointLow < 0){
setpointLow = 0
}
var e = SchlafzimmerBg_Helligkeit
var actualValue = (e.state as DecimalType).intValue
if(
actualValue >= setpointLow &&
actualValue < setpoint
){
e.sendCommand(setpoint)
}
}
}
end
rule "Wochenprofile aus"
when
Item KalenderWecken_CurrentEventPresence changed to OFF
then {
SchlafzimmerRoom_Helligkeit.sendCommand(0)
}
end