„Alexa, Licht an“ – aber nur in diesem Zimmer!

Eine Lösung für Single-Room-Commands mit Alexa und ioBroker

Sag‘ zu Alexa einfach „Alexa, Licht an“ –  und das Licht geht an. Klar, kein Problem. Aber welches Licht in welchem Raum angeht, das ist nicht immer klar. Man kann sich behelfen mit „Alexa, schalte das Licht im Wohnzimmer an.“, „Alexa, schalte das Licht in der Küche an.“ usw. Aber richtig gut fühlt sich das nicht an.

Wenn man nur ein Amazon-Echo-Gerät hat, geht’s nicht anders. Wenn man aber mehrere Echo-Geräte einsetzt – in unserem Beispiel in Wohnzimmer, Küche, und Arbeitszimmer – brauchen wir Context Awareness für Alexa. Für Context Awareness gibt’s mit ioBroker eine flexible Lösung.

Kern der hier vorgestellten Lösung für Alexa Single Room Comands ist der ioBroker-Adapter Alexa2. Eigentlich hatte ich den Adapter für die Sprachausgabe von Hinweisen und Meldungen über Alexa installiert. Er bringt aber noch einige weitere interessante Eigenschaften mit. So kann ich über den Adapter feststellen, über welches Echo-Device ein Befehl  eingegangen ist. Und genau das brauche ich, um Befehle variabel für jedes Zimmer zu verarbeiten.

Wichtig zu wissen: Der Adapter Alexa2 benutzt die Amazon-Cloud im Wesentlichen so, wie es alle Echo-Geräte tun. Wir brauchen für diese Lösung also keine weitere Cloud! Man kann sich eine Registrierung für die ioBroker-Cloud oder eine andere Cloud sparen. 

Mehr über ioBroker

Mehr über den ioBroker-Adapter Alexa2

In einer Alexa2-Instanz steht das Objekt History.json zur Verfügung mit allen notwendigen Angaben zum letzten Aufruf des Echo-Geräts. Mit etwas Javascript können die Angaben ausgelesen und für die Ausführung gewünschter Tätigkeiten verwendet werden. Natürlich sind die Tätigkeiten dabei keineswegs auf „Licht an“ und „Licht aus“ beschränkt – es können fast alle Möglichkeiten von ioBroker benutzt werden: Rolllade hoch / Rolllade runter, Musik ein / aus usw.

Im Folgenden gehe ich davon aus, dass dir ioBroker in Verbindung mit Javascript in Grundzügen bekannt ist: Installieren von Adaptern, Anlegen von Instanzen, Auslesen und Schreiben von Objekten, Anlegen von Subskriptionen, grundlegende Javascript-Funktionalität usw.

Voraussetzungen für Single Room Commands mit Alexa und ioBroker

  1. Prüfen, ob auf allen Geräten eine aktuelle Software eingesetzt wird, und gegebenenfalls aktualisieren. Auf ioBroker sollten Instanzen für die Adapter Alexa2 und die Script Engine (für Javascript) angelegt sein.
  2. Die Einrichtung des Adapters Alexa2 ist in manchen Fällen wohl etwas tricky, aber bei mir hat es mit der YouTube-Anleitung von SchimmerMediaHD geklappt.
  3. Die gewünschten Lampen (oder andere zu steuernde Geräte) über ioBroker verfügbar machen.
    Das geht z.B. wie in den folgenden Beispielen über eine Homematic-Zentrale, ein Zigbee-Gateway und direkt über einen Commandline-Aufruf. Ich setze mal voraus, dass die hierfür benötigten Adapter installiert sind und die Instanzen einwandfrei starten.

Die Basis

Jetzt geht an’s Eingemachte: Unter dem Tab „Skripte“ in ioBroker wird eine neue Javascript-Datei im Ordner common (oder einem Unterordner) angelegt

Screenshot zum Erstellen einer neuen Datei
Zunächst ein Verzeichnis auswählen, ggf. Verzeichnis common. Dann auf „+“ klicken.
Screenshot zur Auswahl des Dateityps
Es soll eine Javascript-Datei werden!
Screenshot zum Eingeben des Namens der neuen Datei
Eingeben eines geeigneten Namens

Die Javascript-Datei wird nun erstellt und zur Bearbeitung geöffnet. Der folgende Code legt eine Subskription auf alexa2.0.History.json an. Die Subskription sorgt dafür, dass bei jeder Änderung von alexa2.0.History.json die angegeben Funktion ausgeführt wird. Als Parameter wird der Funktion das aktuelle Objekt alexa2.0.History.json übergeben.

Zum Testen lassen wir uns mit log() einfach mal nur den Inhalt des übergebenen Objekts ins Protokoll schreiben.

on('alexa2.0.History.json'/*json*/, function (obj) {
log(obj.state.val);
});

Damit das Skript ausgeführt werden kann, muss es aktiviert werden.

Screenshot zum Aktivieren und Speichern des Skripts
Nachdem der Schalter „Skript ausführen“ aktiviert worden ist, wird das Skript bei jedem Speichern ausgeführt.
Screenshot nach Ausführen des Skripts
Nach dem Ausführen des Skripts steht im Protokoll, dass 1 Subskription angelegt wurde.

Jetzt ist unser kleines Skript bereit für die ersten Live-Tests mit Alexa.

Autor: Rai

jahrelanger Homematic-Benutzer, öffnet sich mit Hilfe von Raspberry Pi und ioBroker für Neues im Internet of Things

4 Gedanken zu „„Alexa, Licht an“ – aber nur in diesem Zimmer!“

  1. ne coole Sache. Leider habe ich das Problem, dass ich in meinem ioBroker den State vom Schalter irgendwie nicht per checkbox switchen kann. D.h. ich muss den State im Dialogfenster per Text auf TRUE setzen, so dass die Lampe angeht. Warum auch immer.

    Wenn ich dann sage Alexa: Licht AN, wird die Routinenausführung bestätigt aber das Licht geht nicht an 🙁

    Hier mal das Log:
    avascript.0 (962) script.js.LXSkript.jsCallFromEchoDevice: {„name“:“Bad Echo Dot“,“serialNumber“:“xxxxxxsdf“,“summary“:““,“creationTime“:1585122686348,“status“:“SUCCESS“,“domainApplicationId“:““,“domainApplicationName“:““,“cardContent“:““,“card“:““,“answerText“:““}
    08:51:26.954 info javascript.0 (962) script.js.LXSkript.jsCallFromEchoDevice: Echo-Device bad echo dot:
    08:51:26.978 info javascript.0 (962) script.js.LXSkript.jsCallFromEchoDevice: {„name“:“Bad Echo Dot“,“serialNumber“:“xxxxxxx“,“summary“:“licht an“,“creationTime“:1585122686526,“status“:“SUCCESS“,“domainApplicationId“:““,“domainApplicationName“:““,“cardContent“:““,“card“:““,“answerText“:““}
    08:51:26.979 info javascript.0 (962) script.js.LXSkript.jsCallFromEchoDevice: Echo-Device bad echo dot: licht,an
    08:51:27.879 info javascript.0 (962) script.js.LXSkript.jsCallFromEchoDevice: {„name“:“Bad Echo Dot“,“serialNumber“:“xxxxx“,“summary“:“sprich mir nach ok befehl“,“creationTime“:1585122686975,“status“:“SUCCESS“,“domainApplicationId“:““,“domainApplicationName“:““,“cardContent“:““,“card“:““,“answerText“:““}
    08:51:27.881 info javascript.0 (962) script.js.LXSkript.jsCallFromEchoDevice: Echo-Device bad echo dot: sprich,mir,nach,ok

    1. Hallo Alex, am Log-File bemerke ich nichts Außergewöhnliches. Vielleicht kannst du mal dein JavaScript zum Licht-An/Ausschalten posten. Gruß Rai!

    1. Hallo Pavel, danke für deine Rückmeldung. Ja, wenn es möglich ist, ziehe ich Lösungen vor, die ohne Daten in der Cloud auskommen. Denk dran, dass, wenn Alexa im Spiel ist, auf jeden Fall die Amazon Cloud im Hintergrund steht. Ganz ohne Cloud geht es also nicht immer. Gruß Rai!

Schreibe einen Kommentar

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