Alexa Wecker direkt in FHEM übernehmen

Lichtwecker 2.0 - Alexa Wecker direkt in übernehmen

Vielleicht habt ihr bereits den Artikels mit meinem ersten Versuch zur Integration des Alexa Weckers in FHEM gelesen. Damals habe ich die übernahme der Weckzeit über den Dienst IFTTT ausprobiert. Das funktioniert meisten auch ganz gut, das  Problem ist aber dass erst dann ein Event generiert wird, wenn der Wecker losgeht. Außerdem muss FHEM für den Dienst IFTTT nach außen geöffnet werden. Ich habe diese Lösung verlassen da es jetzt endlich ein Modul zu direkten Steuerung der Amazon Echo Geräte durch FHEM gibt. Das Modul könnt ihr hier finden: Forum-Link. Die Installation ist ganz einfach und im Forum beschrieben. Das Modul soll bald regulär per Update verteilt werden sodass du das Modul demnächst vielleicht sogar schon hast. In folgendem Artikel erfährst du wie ich damit das Wecker-Modul (alarmclock) steuere.

Definition des alarmclock Wecker Devices in FHEM

In FHEM gibt es grundsätzlich mehrere Möglichkeiten eine Wecker-Device zu erzeugen. Es geht über das Residents Modul, aber es gibt auch ein eigenes Wecker-Modul das ich dir hier näher beschreibe. Manche gehen auch einen ganz eigenen Weg und machen alles mit DOIFs und notifys. Ich habe alles ausprobiert und bin letztendlich beim alarmclock Modul geblieben da es für mich alle Wünsche erfüllt.

Mit

legen wir das Weckergeräte an.Mit dem Attribut PreAlarmRoutine gebt ihr die Befehle an, die x Sekunden vor dem eigentlichen Alarm ausgeführt werden sollen. Das eignet sich wunderbar für einen Lichtwecker oder für Radiomusik die in der Lautstarke langsam ansteigt bis zum eigentlichen Weckton. Mit dem Attribut PreAlarmTimeInSec legt ihr den Wert X in Sekunden fest, wann vor dem eigentlichen Alarm mit dieser PreAlarm-Routine begonnnen werden soll. Bei mir 900 Sekunden, also 15 min vorher. Bei der PreAlarmRoutine gibst du die transitiontime des Lichtweckers der Hue-Geräte in Zehntel Sekunden an, also hier 9000. Dabei dimmt mein Hue-Licht langsam von schwachem rot bis zu kräftigen weiss hoch.

Natürlich möchten ich dass das Licht ausgeschalten wird wenn ich aufgestanden bin. Mit dem Attribut AlarmRoutineOff stellt man genau das ein

Hier wird ein at erzeugt, mit dem nach 10 Minuten die Lichter ausgeschalten werden. Die 10 Minuten beginnen erst wenn ich „Alexa Wecker Aus“ gesagt habe. Mehr dazu später.

Selbstverständlich soll unser Wecker auf Snooze können, oder wie man zu Alexa sagen muss: „Alexa, schlummern“. Dafür musst du dem Wecker-Modul noch sagen was im Falle von „Schlummern“ geschehen soll.

Das Licht geht aus und fängt dann von neuem an langsam hochzudimmen. Hier ist aber eine andere Zeit gewählt da die Snooze Zeit bei Alexa 9 Minuten beträgt.

Amazon Echo Gerät in FHEM

Wenn du das oben verlinkte modul 37_echodevice bereits installiert und eingerichtet hast müsstest du in FHEM bereits automatisch deine Alexa Geräte angezeigt bekommen. Stellst du mit deinem Amazon Gerät einen Wecker erscheint dir ein entsprechendes Reading für die Zeit (alarm_01_originalTime ) und den Status des Weckers (alarm_01_status). Da das Reading alarm_01_status nur angezeigt wird wenn der Wecker aktiv ist und schlummert, aber sofort veschwindet sobald der Wecker aus ist kann man nicht direkt darauf triggern. Die Lösung: ein userReading für den Status und für die Weckzeit, da die Weckzeit mit 09:00:00.000 ein paar Nullen zu viel für unser Wecker-Device hat.

Falls der Befehl nicht direkt funktioniert so kannst du das userReading auch manuell hinzufügen (siehe auf folgendem Bild)

erzeugt zwei neue Readings, nämlich Wecker_aktiv und Weckzeit. Zunächst sagen wir jetzt unserem Wecker-Device jetzt dass das Reading Wecker_aktiv den Status für Alarm-Aus und Snooze enthält

Jetzt erstellen wir uns ein DOIF um den Wecker-Status vom Echo Gerät in das Wecker Device zu übernehmen. Ist der Alexa-Wecker aus wird der FHEM-Wecker deaktiviert.

Ein notify hilft uns noch die Weckzeit vom Alexa-Wecker an den FHEM-Wecker zu übertragen.

Hierbei wird für jeden Wochentag (Montag – Sonntag) der Wecker auf die in Alexa hinterlegte Zeit gestellt. Das ist derzeit die einzige Möglichkeit die mir eingefallen ist, da das Alexa-Modul noch nicht den Wochentag ausspuckt an dem der Wecker triggert. Sollte sich das ändern werde ich natürlich nachreichen 🙂 Ich handhabe es bei mir ohnehin so dass ich mir jeden Tag vor dem Schlafengehen einen neuen Wecker für den nächsten Tag stelle.

Update: Wecker automatisch löschen

Mit einer neueren Version des Moduls werden alte Wecker bei Amazon nur noch deaktiviert, aber nicht mehr gelöscht. Das führt dazu, dass uns in FHEM mehrere Weckzeiten hinterlegt werden (alarm_01, alarm_02, alarm_03 etc…). Danke an Stoxx für den Tipp.

Es kann also passieren dass alarm_01 ein alter, deaktivierter Wecker ist, und dass unsere neue Weckzeit als alarm_02 abgelegt wird -> Unser FHEM Wecker funktioniert nicht mehr.

Abhilfe schafft folgender Code. Damit wird jeder Wecker bei Amazon vollständig gelöscht, sobald dieser abgelaufen ist. Am besten du schreibst die folgende Zeile mit in deine AlarmRoutineOff

Fazit

Mit dieser Wecker-Lösung bin ich absolut zufrieden. Jeden Tag vor dem Schlafengehen per Sprache einen Wecker zu stellen und dann am nächsten Morgen sanft mit Licht geweckt zu werden bevor der eigentliche Weckton losgeht ist schon eine sehr feine Sache. Und seitdem Alexa nun auch endlich als Radiowecker benutzt werden kann ist das für mich die ideale Lösung. Früher habe ich den Wecker im Handy benutzt – aber da es meiner Meinung nach unmöglich ist den iOS Wecker mit FHEM zu synchronisieren bin ich jetzt komplett auf Alexa umgestiegen. Wie ich gelesen habe funktioniert der Wecker auch ohne Internetverbindung und man ist auf der sicheren Seite. Sollte es in Zukunft endlich ordentliche smarte Kaffeemaschinen geben, so werde ich vielleicht bald schon von frischem Kaffeeduft geweckt wenn ich aufstehe 🙂 

Über den Author

Emanuel

teilt seine Begeisterung im Bereich Technik, DIY und Hausautomatisierung gerne auf seinem Blog coldcorner.de

Comments 9

  1. Pingback: Lichtwecker in FHEM und mit Alexa steuern | coldcorner.de

  2. Danke für die gute Lösung. Wer den Lichtwecker mit dem „Radio“ bzw Musikwecker verbinden möchte, der muss einfach nur folgendes Readin ändern:

    attr emanuel_echo_spot userReadings Weckzeit {(split(‚:00.000‘, ReadingsVal($name,“alarm_01_originalTime“,““), 2))[0]}, Wecker_aktiv { ReadingsVal($name,“alarm_01_status“, „off“) }

    in:

    attr emanuel_echo_spot userReadings Weckzeit {(split(‚:00.000‘, ReadingsVal($name,“musicalarm_01_originalTime“,““), 2))[0]}, Wecker_aktiv { ReadingsVal($name,“musicalarm_01_status“, „off“) }

  3. Hallo, vielen Dank für die Anleitung. Leider habe ich das Problem, dass der Wecker über Alexa hin und wieder nicht als alarm_01 gespeichert wird sondern je nach Anzahl alter Wecker als 02 oder so weiter in den Readings erscheint. alarm_01 bleibt somit off und beispielsweise alarm_03 geht auf on, wird aber natürlich nicht getriggert. Gib es dafür bereits eine Lösung oder ist das nur bei mir der Fall?

    Beste Grüße

    1. Post
      Author

      Hallo Tim,

      versuche mal mit RegExp zu arbeiten, poste gerne deine Lösung hier wenn du eine gefunden hast. Ansonsten kannst du natürlich neue DOIFs und Notifys für jeden Wecker anlegen (sagen wir z.B. für die ersten 3)

      lg, Emanuel

        1. Post
          Author

          Hey Bene,
          sorry habe erst jetzt das Problem verstanden da ich erst heute das Modul geupdated habe.

          So sollte es gehen:
          set emanuel_echo_spot notifications_delete Alarm_[emanuel_echo_spot: alarm_01_originalTime]@[emanuel_echo_spot:alarm_01_id]

          das ganze baust du, wie schon von „stoxx“ erwähnt, in deine AlarmRoutineOff mit ein

          Hoffe es ist so verständlich, werde es im Blogbeitrag anpassen.

          lg

    2. Hi Tim, das Problem hatte ich auch. Ich habe es folgendermaßen gelöst: Man kann die im Gerät abgespeicherten Weckzeiten über „set …. notifications_delete …“ löschen. Leider geht das nur einzeln, das kann dann je nach Anzahl der Weckzeiten etwas aufwändig sein. Sind alle notifications gelöscht, wird beim nächsten Definieren einer Weckzeit wieder der Alarm1 verwendet. Damit das immer so ist, habe ich beim der definierten Alarmclock in der AlarmRoutineOff den Befehl zur Löschung des Alarms1 (über notifications_delete) gesetzt. Damit wird nach dem Wecken immer die notification gelöscht und jedesmal auf den Alarm1 zugegriffen.
      @Emanuel: Danke für die Anleitung!
      vg stoxx

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.