Amazon Alexa: Ich spreche mit meinen hundhome!

13.01.2017

Ab wann ist der Umgang mit einem smarten Zuhause eigentlich etwas Normales für einen Menschen? Sicherlich dann, wenn die Interaktion mit der Technik einfach ist und möglichst natürlich erfolgt. Die Kommunikation mit Sprache ist in vielen Situationen der Bedienung einer App oder eines Wandschalters überlegen. Das gilt vielleicht nicht für das Einrichten komplexer Regeln, aber zumindest erleichtert es maßgeblich die Erledigung der kleinen Dinge wie das Licht auszuschalten, wenn man gerade gemütlich vor dem Fernseher sitzt.
Nachdem Amazon sein neues Gerät "Echo" mit der Sprachassistentin Alexa in Deutschland anbietet, nutze ich die Gelegenheit und integriere den Dienst über die Amazon Alexa Skill API mit meinen smarten Geräten im hundhome.

Zunächst muss man unterscheiden zwischen dem Sprachdienst Alexa und dem Gerät Amazon Echo. Alexa ist als Dienst auf dem Echo-Gerät installiert und soll aber in Zukunft auch auf anderen Geräten nutzbar sein wie Fernseher, Kühlschränke und vernetzte Lautsprecher.

Der Lautsprecher Amazon Echo

Das Echo Gerät von Amazon ist ein hochwertig verarbeiteter Lautsprecher mit integrierten Mikrofonen. Die Sound-Qualität ist für die Ausgabe von Sprache aber auch für Musik geeignet. Natürlich kann man es nicht mit einem High-End Hifi-System vergleichen aber der Klang ist besser als bei einem kleinen Küchenradio, also eher auf dem Level eines guten Bluetooth-Lautsprechers. Zur Aufnahme der Sprachkommandos hat Echo sieben eingebaute Mikrofone. Damit ist das Gerät in der Lage, Sprache aus allen Richtungen gleich gut zu erkennen. Mein persönliches Gimmick: Der zylinderförmige Amazon Echo hat am oberen Gehäuserand einen Lichtring. Wird das Gerät angesprochen, beginnt der Ring zu leuchten. Die Richtung der Sprachquelle wird durch die Mikrofone erkannt und ein helleres Segment am Lichtring zeigt in die entsprechende Richtung. Es entsteht der Eindruck, als würde sich das Gerät dem Sprecher zuwenden und die Schallquelle verfolgen. Dadurch wird die Interaktion für mich noch etwas persönlicher.

Zur Regelung der Lautstärke gibt es einen Stellring am oberen Rand und ansonsten nur noch zwei Knöpfe zum Deaktivieren der Spracherkennung bzw. zum Verbinden des Geräts mit dem Heimnetzwerk. Die Ersteinrichtung erfolgt bequem mit einer Smartphone App. ##Die Sprachassistentin Alexa Alexa ist der Name der virtuellen Assistentin und deshalb auch das Schlüsselwort zur Aktivierung des Geräts. Ruft man ihren Namen, erkannt das Gerät den Weckruf und signalisiert seine Aufmerksamkeit durch den Lichtring. Nun kann man mit natürlicher Sprache diverse Kommandos und Fragen formulieren. Alexa übermittelt die Fragen an den Cloud Dienst von Amazon und versucht dort mithilfe von künstlicher Intelligenz zu erahnen, was der Sprecher wohl gemeint haben könnte. Fragen nach Uhrzeit, Wetter, Witzen, Liedern usw. werden unter Zuhilfenahme von diversen Online-Diensten wie zum Beispiel Spotify bestmöglich beantwortet. Dabei wirkt die Sprachausgabe durch den Lautsprecher durchaus angenehm und die Künstlichkeit bemerkt man wenig. Das Ökosystem um Alexa bietet nun ähnlich dem App-Konzept bei Smartphones eine Erweiterungsmöglichkeit für Partner und Entwickler an. Dadurch kann man die Möglichkeiten von Alexa individuell erweitern und spezialisieren. Die Alexa-Apps heißen entsprechend Skills, weil man dem System damit sozusagen eine "Fähigkeit" hinzufügt. Mit den Skills kann man spezielle Informationen von weiteren Online-Diensten abrufen oder aber zum Beispiel smarte Geräte im Haus steuern. Nach erfolgter Beantwortung durch die Sprachassistentin Alexa deaktiviert sich der Rekorder wieder, der Lichtring geht aus und das Gerät wartet geduldig auf den nächsten Weckruf nach "Alexa". ##Die Architektur des Alexa Ökosystems Bei der Verteilung der Logik in der Software-Architektur wurde ein Cloud-basierter Ansatz gewählt. Das bedeutet, auf dem Gerät Amazon Echo ist primär die Software zur Steuerung von Lautsprecher und Mikrofon. Damit das Gerät durch das Schlüsselwort "Alexa" geweckt werden kann, muss es natürlich kontinuierlich "zuhören". Diese Daten bleiben allerdings - soweit bekannt - in der Software im Gerät und werden erst nach Absetzen eines Kommandos als Phrase an den Alexa Cloud Dienst übermittelt. Dort wird die Sprache über den Alexa Voice Service in einen Text umgewandelt. Dieser Text ist anschließend die Grundlage für die "intelligente" Interpretation was wohl gemeint sein könnte. Der Alexa Dienst spaltet nun je nach Bedeutung den Prozess in vier Richtungen: - Alexa Smart Home Skill: Dieser spezielle Skill ermöglich das direkte Ansteuern von smarten und vernetzten Geräten im Haus. Diese werden über einen entsprechenden Adapter über Clous-APIs angesprochen. Der Anwender kann damit mit standardisierten Sprachkommandos übliche Verbraucher wie Licht oder Rollläden steuern ohne Hersteller-spezifische Keywords benutzen zu müssen. - Alexa Custom Skills: Custom Skills erlauben wie eine Smartphone-App das freie Programmieren von Anwendungen. Der Zweck ist vom Entwickler frei wählbar. Damit ein Kommando an einen Custom Skill weiter geleitet wird, muss der Bezeichner des Skills im Weckruf von Alexa ausdrücklich genannt werden: "Alexa, frag _Anwendung xy_ nach ...". - Alexa Flash Briefing Skill: Diese Skills bieten eine vereinfachte API, die ausschließlich dem Akquirieren von Informationen dient, die dann anschließend dem Nutzer vorgelesen werden. Das können Lottozahlen oder zum Beispiel Nachrichten sein. - Alle anderen Anfragen werden über Standard-Online-Dienste und Suchmaschinen beantwortet, die von Amazon selbst ausgesucht bzw. angebunden wurden. Dazu gehören Informationen über Wetter oder auch das Hören von Musik über Amazon Music oder Spotify sowie eine Web-Suche über Bing von Microsoft.

Zur Entwicklung eines Skills werden folgende Schritte benötigt: Zunächst definiert man den Sprachdialog mithilfe einer Online-Maske im Entwickler-Portal von Amazon. Dazu wird jedes Kommando - der Intent - mit seinen enthaltenen Variablen - den Slots - beschrieben. Das Kommando "Schalte das Licht auf Rot" zerfällt dabei in einen statischen Teil "Schalte das Licht" und die Variable mit der Farbe; in dem Beispiel der Wert "Rot".
Im zweiten Schritt verbindet man den Skill mit einem Cloud-Dienst der durch den Entwickler frei programmierbar ist und die eigentliche Logik beinhaltet. Amazon schlägt vor, dass man eine sogenannte Lambda Funktion der Amazon Web Services nutzen kann. Das ist immerhin weitestgehend kostenlos, erlaubt die Verwendung von node.js, Python oder JAVA als Programmiersprache und Laufzeitumgebung und funktioniert super. Alternativ dürfen aber Custom Skills auch an einen frei wählbaren Online Dienst gebunden werden der dazu eine sichere REST-API für den Amazon Skill anbieten muss. So oder so befindet sich dort die Ausführung des Kommandos und das Ergebnis kann ggf. über die Schnittstelle zum Skill zurück geliefert werden, um dann als Sprachantwort von Alexa vorgelesen zu werden.

Die Integration in den item Manager im hundhome

Hier beschreibe ich das Vorgehen nur grob. Die Dokumentation von Amazon popup: yes zu dem Thema ist vorbildlich und ist zum Nachbauen besser geeignet.

Für hundhome habe ich mich für einen Custom Skill entschieden (Bild Position 2). Dadurch kann ich die Dialoge frei wählen und bin nicht an die vorgegebenen Kommandos der Smart Home Skill API gebunden. Dieser Custom Skill heißt bei mir natürlich "hundhome". Das bedeutet man gibt die Kommandos ab im Sinne von "Alexa, sag hundhome mach das Licht an ...". Im Skill Editor sieht der dazu gehörige Intent dann so aus: ``` { "intents": [ { "intent": "LightIntent", "slots": [ { "name": "Power", "type": "Power" } ] }, }
Der Intent in diesem Beispiel hat den Identifier "LightIntent" und als Slot - also die Variable "Power". Die möglichen Werte der Variablen werden anschließend definiert:

Power: an|aus

Desweiteren kann man jetzt noch alle Phrasen  (sog. Utterances) definieren, die als gesprochener Text diesen Intent auslösen können:

LightIntent mach das Licht {Power}
LightIntent schalte das Licht {Power}
LightIntent stelle das Licht {Power}


In den geschweiften Klammern erkennt man die Position der Variablen. Damit ist der Intent definiert. Im Tool gibt man weitere Meta-Daten an, wie den Link zum Online-Dienst mit der Logik (Bild Position 3). In meinem Fall habe ich einen Lambda-Service im Amazon Web Service registriert und für die Verwendung von node.js als Laufzeitumgebung vorbereitet (Bild Position 4). Der Javascript-Code nimmt nun die Intents und Slots entgegen und übersetzt diese in http requests, die eine Schnittstelle in meinem hundhome aufrufen (Bild Position 5).
In meiner Software item Manager habe ich nun ein neues Modul für die Alexa Service Anbindung entwickelt (Bild Position 6) welches die o.a. Schnittstelle zur Verfügung stellt und die Intent- und Slot-Informationen annimmt. Das folgende Bild zeigt die Verkettung der Systeme.
<figure><img alt="" src="http://old.hundhome.de/media/pages/home/alexa/3692631912-1559314250/alexa04.jpg"></figure>
Durch diese Architektur und die Integration in den item Manager entstehen auf der Software-Ebene also neue Sensor-Items. Das kann man sich so vorstellen, dass dieser virtuelle Sensor für jeden Intent einen Event generiert, sobald ein Anwender das entsprechende Kommando zur Sprachassistentin Alexa spricht. Dabei sind die variablen Daten der Slots enthalten und können als Information ausgewertet werden. Das Alexa item Manger Module bietet bei der Spezifikation für den Intent die Möglichkeit der Definition einer Funktion, die einen passenden Antworttext erzeugt und über die Kette der Systeme an Alexa zurück liefert. Diese Antwort wird dann dort vorgelesen: "hundhome hat das Licht geschaltet".
<figure><img alt="" src="http://old.hundhome.de/media/pages/home/alexa/3782819544-1559314250/alexa05.jpg"></figure>
Da sich die Kommandos wie ein virtuelles Gerät im item Manager verhalten, können die entsprechenden Events auch verwenden werden, um gewöhnliche Regeln auszuführen aber auch um komplexere Logik abzubilden. deshalb kann man nun per Sprachsteuerung alle Funktionen kontrollieren, die im hundhome verfügbar sind. Es müssen lediglich im Alexa Skill die gewünschten Intents und Phrasen definiert werden und im item Manager die dazugehörigen Items angelegt werden. Das node.js Skript auf dem Amazon Lambda Service wurde dabei als generischer Durchreicher gestaltet. Dort müssen keine spezifischen Anpassungen vorgenommen werden.
##Fazit
Nach wenigen Stunden Implementierung konnte die Anbindung von Amazon Echo und Alexa gut hergestellt werden. Die APIs und Tools sind sehr ordentlich dokumentiert und schnell nutzbar. In den ersten Tagen wurden bereits einige Intents zur Steuerung von Lichtern, Rollläden, Gartenhütte, Haustüre usw. konfiguriert und es ist klar, dass das noch lange nicht das Ende ist. Deshalb kann es durchaus sein, dass dieser Blogbeitrag sich noch erweitert. Man darf gespannt sein.
Es bleibt zu sagen, dass die Nutzung von Sprachassistenten nur ein erster Schritt in Richtung künstlich intelligenter Systeme ist weil "nur" die Sprachauswertung intelligent ist. Die Bearbeitung der Kommandos erfolgt noch klassisch regelbasiert. Aber die Veränderung in der Nutzung ist bereis beachtlich und man darf gespannt sein, was Amazon, Google, Microsoft, Samsung, Apple usw. sich in der nahen Zukunft noch alles einfallen lassen, um die Nutzung smarter Produkte noch einfacher zu machen.

Zurück