Mit einem Tageslichtwecker werden Hormone ausgeschüttet, welche das Aufwachen erleichtern und im Idealfall den Körper zum Weckzeitpunkt bereits in den Wachzustand versetzt haben. Eine einfache Version, ohne Simulation des Sonnenaufgangs mittels Farbverlauf, habe ich mit einem Dimmer oder einer dimmbaren ZigBee-Leuchte in NodeRED erstellt.
Inhalt
Voraussetzungen
Hardware
- Ich verwende in diesem Artikel einen Homematic IP-Dimmer-Zwischenstecker vom Typ HmIP-PDT*. Der Homematic IP-Dimmer für Markenschalter funktioniert analog.
- Alternativ kannst du auch eine ZigBee-Leuchte nutzen. Das geht bspw. mit einem Ikea-Tradfri-Panel oder auch mit einer Philips Hue.
Software
- Die Umsetzung erfolgt in der RedMatic. Wie du sie installierst, kannst du im Artikel „RedMatic installieren“ nachlesen.
- Für die Berechnung habe ich die zusätzlichen Nodes
node-red-contrib-moment
undnode-red-contrib-german-holidays
installiert, welche du wie gewohnt über „Palette verwalten“ des Hamburger-Menüs installieren kannst.
Tippen oder Wischen – die Konfiguration in der WebUI
Zum Einstellen der Weckzeit eignet sich der Standard-Text Input-Node und zum Deaktivieren des Weckers ein Switch-Node.
Der Text Input-Node zeigt im „time picker“-Modus, je nach Endgerät, eine Zifferneingabe oder die Einstellungsmöglichkeit per Wischen an.
Die Weckzeit kommt in Millisekunden aus dem Text Input-Node. Diese speichere ich im Flow-Kontext und formatiere sie zusätzlich in die Darstellungsform HH:mm
(Stunden:Minuten) um, was ebenfalls im Flow-Kontext gespeichert wird. Die formatierten Angaben dienen später einem Inject-Node als Eingabe. Damit der Lichtwecker zur Weckzeit fertig ist, setze ich in einem zweiten Formatter-Node eine Lichtweckzeit 30 Minuten vor der eigentlichen Weckzeit über das „Adjustment“.
Der oben angesprochene Switch-Node dient dazu, den Wecker ausschalten zu können, ohne die eingestellte Weckzeit zu verlieren. Auch diesen Wert speichere ich im Flow-Kontext.
Damit die Konfiguration auch nach einem Neustart zur Verfügung steht, lade ich sie einmal per Inject-Node nach dem NodeRED-Start.
Es ist Zeit aufzustehen
Damit der Wecker mich nur werktags weckt, setze ich täglich das globale Kontextobjekt day
. Die Variable day.today.isWeekendOrHoliday
enthält, ob gerade Wochenende oder Feiertag ist. Man kann das auch über einen Kalender lösen, in welchen persönliche Termine wie Ferien, Urlaub etc. hinterlegt sind.
Jetzt hast du alle Daten zusammen, um geweckt zu werden. Damit die Aktion zur gewünschten Zeit durchgeführt wird, liest jeweils ein Inject-Node die Uhrzeit aller 6 Stunden aus dem Flow-Kontext. Die 6 Stunden sind so gewählt, damit ich beim Zubettgehen noch eine (geringfügig) andere Weckzeit einstellen kann und diese garantiert vor dem Wecken vom Inject-Node gelesen wird.
Wenn der Wecker aktiviert und es ein Werktag ist, wird 30 Minuten vor der eigentlichen Weckzeit der Dimmer gestartet. Dazu bekommt er die Dimmzeit als RAMP_TIME
sowie den Zielzustand als LEVEL
(100% = 1) übergeben und dimmt dann selbsttätig hoch.
Zum Weckzeitpunkt kann man verschiedene Aktionen durchführen. Ich fahre bspw. die Rollos hoch oder starte ein Radio. Sollte es draußen bereits ausreichend hell sein, wird das Wecklicht wieder ausgeschaltet. Anderenfalls lasse ich es noch ein wenig als Orientierungslicht zum Aufstehen an.
Alternative: dimmbare ZigBee-Leuchten
Möchtest du statt dem Homematic IP-Dimmer lieber eine ZigBee-Leuchte verwenden, so musst du nur die Ansteuerung ein klein wenig abändern und ein ZigBee-Command-Node einsetzen.
Die Leuchtmittel von Ikea und Philips bieten eine Funktion zum „faden“, sprich dem automatischen Hochdimmen. Dazu übergibst du dem ZigBee-Command-Node den Wert, auf welchen gedimmt werden soll und in welcher Zeitspanne das erfolgen soll. Es sind insgesamt 4 Werte, die neben dem ZigBee-Gerät gesetzt werden müssen: endpoint
, cluster
, command
und der payload
selbst. Je nach ZigBee-Gerät sehen diese unterschiedlich aus.
Ein Tradfri-Panel bewegst du mit moveToLevelWithOnOff
des Clusters genLevelCtrl
am Endpunkt 1
und dem Payload {"level":220,"transtime":2000}
zum Hochdimmen in 20 Minuten.
Bei einem Hue-Leuchtmittel muss ggf. nur ein anderer Endpunkt angesprochen werden.
Updates
- 28.07.2022: Typos beseitigt