Unter openhab.org findest du eine „Alarm-Clock“-Regel, mit der du dich wecken lassen kannst. Was dich genau weckt, kannst du selbst festlegen. Das könnte ein Radio-Wecker durch Abspielen eines Sound-Files über das Sonos-Binding oder als heller werdendes Farbspiel mit den Philips Hue Lampen sein.
Uns wecken nun zwei Hue-Lampen, die langsam heller werden (wie das Hue-Binding funktioniert, habe ich hier beschrieben). Dazu musste ich das Original von openHAB etwas modifizieren:
- Ich steuere über ein Script das Dimmen der Hues (gibt es eigentlich ein Wort, was das Gegenteil von dimmen ausdrückt??), damit die Hues langsam aufhellen (um nicht direkt aus dem Bett zu fallen!).
1callScript ("dimmlight.script") - Anschließend informiert die Regel über Pushover, dass der Wecker geläutet hat und aktualisiert den Status der Items.
123pushover ("Wecker hat geläutet!")postUpdate (hue1,ON)postUpdate (hue2,ON) - Es startet ein Timer, der die beiden Hues nach 15 Minuten automatisch ausschaltet.
12345createTimer(now.plusMinutes(15)) [|hue1.sendCommand(OFF)hue2.sendCommand(OFF)pushover ("Wecker: Licht aus!")]
Und hier die vollständigen Code-Zeilen:
Items:
1 2 3 4 5 6 7 8 9 10 11 12 |
Switch weckerMontag "Montag" (gWeckerWochentage) Switch weckerDienstag "Dienstag" (gWeckerWochentage) Switch weckerMittwoch "Mittwoch" (gWeckerWochentage) Switch weckerDonnerstag "Donnerstag" (gWeckerWochentage) Switch weckerFreitag "Freitag" (gWeckerWochentage) Switch weckerSamstag "Samstag" (gWeckerWochentage) Switch weckerSonntag "Sonntag" (gWeckerWochentage) String weckerZeitMessage "%s" Number weckerZeitStunde "Stunde [%d]" (gWeckerZeit) Number weckerZeitMinute "Minute [%d]" (gWeckerZeit) |
Regel – gwecker.rules
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
import org.openhab.core.library.types.* import org.openhab.model.script.actions.* import java.util.concurrent.locks.ReentrantLock var Timer zeit1 = null var java.util.concurrent.locks.ReentrantLock lock1 = new java.util.concurrent.locks.ReentrantLock() rule "Initialization" when System started then postUpdate(weckerZeitStunde, 6) postUpdate(weckerZeitMinute, 40) postUpdate(weckerMontag, ON) postUpdate(weckerDienstag, ON) postUpdate(weckerMittwoch, ON) postUpdate(weckerDonnerstag, ON) postUpdate(weckerFreitag, ON) postUpdate(weckerSamstag, OFF) postUpdate(weckerSonntag, OFF) end rule "Weckzeit" when Item weckerZeitStunde changed or Item weckerZeitMinute changed then lock1.lock() try { var String msg = "" var stunde = weckerZeitStunde.state as DecimalType var minute = weckerZeitMinute.state as DecimalType if (stunde < 10) { msg = "0" } msg = msg + weckerZeitStunde.state.format("%d") + ":" if (minute < 10) { msg = msg + "0" } msg = msg + weckerZeitMinute.state.format("%d") postUpdate(weckerZeitMessage,msg) var int weckzeit1 weckzeit1 = (weckerZeitStunde.state as DecimalType).intValue * 60 + (weckerZeitMinute.state as DecimalType).intValue weckzeit1 = weckzeit1.intValue var int jetzt1 jetzt1 = now.getMinuteOfDay jetzt1 = jetzt1.intValue var int delta1 if (zeit1 != null) { zeit1.cancel zeit1 = null } delta1 = (weckzeit1 - jetzt1) delta1 = delta1.intValue if (jetzt1 > weckzeit1) { delta1 = delta1 + 1440 } zeit1 = createTimer(now.plusMinutes(delta1)) [| var Number day = now.getDayOfWeek if (((day == 1) && (weckerMontag.state == ON)) || ((day == 2) && (weckerDienstag.state == ON)) || ((day == 3) && (weckerMittwoch.state == ON)) || ((day == 4) && (weckerDonnerstag.state == ON)) || ((day == 5) && (weckerFreitag.state == ON)) || ((day == 6) && (weckerSamstag.state == ON)) || ((day == 7) && (weckerSonntag.state == ON)) ) { callScript ("dimmlight.script") pushover ("Wecker hat geläutet!") postUpdate (hue1,ON) postUpdate (hue2,ON) createTimer(now.plusMinutes(15)) [| hue1.sendCommand(OFF) hue2.sendCommand(OFF) pushover ("Wecker: Licht aus!") ] } zeit1.reschedule(now.plusHours(24)) ] } } finally { lock1.unlock() } end |
Script – dimmlight.script
1 2 3 4 5 6 7 8 9 10 11 12 |
var Number Dimmer Dimmer=0 while(Dimmer<100) { Dimmer=Dimmer+5 sendCommand(hue2, Dimmer) sendCommand(hue1, Dimmer) logInfo("Dimer Wecker", "Dimmer: sendCommand - " +Dimmer) Thread::sleep(3000) } |
Einbindung in der Sitemap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Text label="Wecker [%s]" item=weckerZeitMessage icon="clock" { Frame label="Zeit" { Setpoint item=weckerZeitStunde minValue=0 maxValue=23 step=1 Setpoint item=weckerZeitMinute minValue=0 maxValue=55 step=5 } Frame label="Wochentage" { Switch item=weckerMontag Switch item=weckerDienstag Switch item=weckerMittwoch Switch item=weckerDonnerstag Switch item=weckerFreitag Switch item=weckerSamstag Switch item=weckerSonntag } } |
So, nun viel Spaß beim coden! Hinterlass doch einen Kommentar, wie du dich nun wecken lässt!