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

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

Damit wir die Vorgehensweise besser verstehen, führen wir jetzt einige Tests mit Alexa und ioBroker durch.

Der erste Live-Test mit Alexa

Wir wollen das Licht anschalten. Darum sagen wir zu Alexa: „Alexa, Licht an!“ Was passiert? Probiere es aus und schau‘ dir dann im Protokoll das ausgegebene Objekt an!

Also bei mir meckert Alexa gleich los: Mal mit „Da bin ich mir nicht sicher“, mal mit „Das Gerät Licht unterstützt das nicht“. Sie kennt den Befehl einfach nicht. Falls Alexa bei dir den Befehl bereits kennt und irgendetwas einschaltet, nimm zum Testen etwas anderes, zum Beispiel „Alexa, Lampe an“ oder meinetwegen „Alexa, Tür auf“.

Bei mir finde ich jetzt im Protokoll:

javascript.0 script.js.common.Lösungen.jsCallFromEchoDevice: {"name":"Drei", "serialNumber":"A012B345678901DE", "summary":"alexa licht an", "creationTime":1555328342509, "status":"FAULT", "domainApplicationId":"domainApplicationName":"", "cardContent":"", "card":""}

Die mich interessierenden Eigenschaften des Objekts sind:

status
Gibt vor allem wieder, ob der Aufruf erfolgreich war, d.h. von Alexa erkannt und verarbeitet wurde.
Hier steht FAULT, weil Alexa nichts mit dem Befehl anzufangen weiß.

name
Das ist Alexas Name.
Hier ist der Name „Drei“. Vielleicht etwas fantasielos, dafür flexibel: Die Alexas in meiner Umgebung heißen „Eins“, „Zwei“ und „Drei“ . Anmerkung: Wenn Alexa zum Beispiel „Wohnzimmer“ heißt, ist der Name nicht so passend, wenn sie dann mal im Arbeitszimmer stehen sollte.

summary
Das ist die „Zusammenfassung“ dessen, was Alexa als Befehl erkannt hat. Das ist dann auszuwerten, um über ioBroker die gewünschten Tätigkeiten anzustoßen.

Das Problem, was sich zunächst stellt ist, dass Alexa den neuen Befehl nicht kennt und diesen Fehler nicht nur ins Protokoll schreibt sondern auch noch laut in den Raum spricht. Nicht sehr hübsch – auch wenn das Licht dann angeht!

Die Lösung ist einfach: Wir definieren eine Routine für „Alexa, Licht an“

Einrichten der Routinen „Licht an“
und „Licht aus“.

Routinen werden auf einem Tablet oder Smartphone mit der Alexa-App erstellt. Nach dem Start der App Menüpunkt „Routinen“ auswählen und „+“ anklicken.

Unter „wenn Folgendes passiert“ den Sprachdienst auswählen und den Befehlssatz „Licht an“ bzw. „Licht aus“ eingeben.

Wer will, kann in der Routine noch eine Sprachausgabe, z.B. „ok“ einrichten. Dann gibt Alexa beim Aufruf des neuen Befehls eine Rückmeldung. Zurzeit geht es aber auch ohne. Das heißt, dass Alexa auch Routinen ausführt, die keine Aktionen beinhalten.

Das war’s schon! Wenn wir nun „Alexa, Licht an“ befehlen, erhalten wir den Status „SUCCESS“ und hören keine Fehlermeldung von Alexa.

javascript.0 script.js.common.Lösungen.jsCallFromEchoDevice: {"name":"Drei", "serialNumber":"A123A123456789AB", "summary":"alexa licht an", "creationTime":1555328451339, "status":"SUCCESS", "domainApplicationId":"","domainApplicationName":"", "cardContent":"", "card":""}

Alles prima! Jetzt werden wir im nächsten Teil definieren, was Alexa nun genau tun soll, wenn sie „Licht an“ oder „Licht aus“ hört.

Bevor du weiterklickst, empfehle ich dir noch einen Test: Ruf‘ Alexa auf und warte dann einen Moment, bis Alexa sich verbunden hat. Erst dann gib den Befehl „Licht an“.

Schau‘ dir jetzt das Protokoll an. Es sollten zwei Ausgaben erzeugt worden sein. Eine für „Alexa“ und eine für „Licht an“.

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.