Motivation

Die ein oder andere Aufgabe wird bei mir von Mikroprozessoren erledigt, z.B. einem ESP32. Dieser ist in das WLAN eingebunden und kann über TCP- oder HTTP-Requests aufgefordert werden, bestimmte Dinge zu erledigen. Die μCs über eine Handy-App1) oder eine PC-Applikation anzusteuern ist nicht besonders schwierig. Seit Alexa zur Hausgenossin geworden ist, hatte ich die Idee, die μCs über Sprachsteuerung zu kontrollieren.

Wenn man sich im Netz umschaut, gibt es eine Reihe von Anleitungen, wie dies geschehen könnte. Leider habe ich nichts gefunden, was wirklich funktioniert. Amazon hat mehrfach das Programmiermodell geändert, so das ältere Anleitung nicht nachvollzogen werden können. Bei anderen werden Bestandteile verwendet, die nicht mehr existieren. Oder die Anleitungen sind schlicht unvollständig. Häufig sind diese Beispiele für erfahrene Anwender konzipiert und es fehlen wesentliche Dinge. Ein Python-Laie ist z.B. darauf angewiesen, dass die entsprechenden import-Anweisungen mit dokumentiert werden.

Ich habe viele Versuche benötigt, um heraus zu finden, dass es eigentlich recht einfach geht. Die folgende Dokumentation zeigt, wie man einen ESP32 dazu veranlassen kann, per Alexa-Sprachsteuerung mittels Infrarot-Codes einen Fernseher ein- und ausschalten kann oder ein Programm anwählen kann.

Wie es mit eine handy-App gehen kann, habe ich bei meiner IR-Transmitter-Extension für den App Inventor gezeigt.

Es gibt bereits fertige Geräte zu kaufen, die eine ähnliche Funktion erfüllen, z.B. das NX-4519 von auvisio, eine lernfähige IR-Universal-Fernbedienung mit Bedienung per App und Alexa auf Basis eines ESP8266. In diesem Projekt geht es jedoch darum aufzuzeigen, wie man so etwas entwickelt. Oder, wenn einem solch ein fertiges Gerät nicht gefällt, wie man es umbauen kann.

1) Handy-Apps lassen sich z.B. mit dem MIT App Inventor entwickeln? Der MIT App Inventor ist eine browserbasierte Möglichkeit eigene Apps zu entwickeln. Hier werden grafische Blöcke zusammengefügt, um eine Anwendung zu programmieren. Die Erweiterung (Extension) UrsAI2TcpClient ermöglicht es TCP-Request abzusetzen.


In­halts­ver­zeich­nis

Prinzipielle Funktionsweise (Workflow)

Projektübersicht

1. Alexa Skill anlegen

2. Einfacher Web-Server auf dem ESP32

3. Verbindung zwischen Alexa und dem ESP32

4. Kommunikation zwischen Alexa und dem ESP32

5. IR-Kommandos senden

Fazit

Prinzipielle Funktionsweise (Workflow)

Um Alexa dazu zu veranlassen etwas zu tun, muss man Alexa dazu befähigen. Man benötigt dazu man einen Skill (Fertigkeit). Ein Skill definiert, welche Wortkombinationen zum Aufruf der Fertigkeit diesen sollen, und was diese Fertigkeit leisten soll. Die "Leistung" des Skills ist in Form von Programmcode hinterlegt.

Die folgende Grafik zeigt den Workflow für das Projekt.

alexa workflow

Der Anwender gibt Alexa einen Sprachbefehl, z.B. "Alexa Fernseher an".2) Der Echo-Dot analysiert die Sprache mit Hilfe eines entsprechenden Amazon-Servers. Dort werden die gesprochen Worte erkannt und mit den im Skill hinterlegen Phrasen (Utterances) verglichen. Gibt es einen Treffer, wird ein zur Phrase hinterlegter Programmcode aufgerufen (AWS Lambda Funktion). Dieser Code sendet einen HTTP-Request an eine hinterlegte IP-Adresse ab, die an einen ESP32 gebunden ist. Der ESP32 führt die zum HTTP-Request zugehörige Funktion aus. Z.B. sendet er einen passenden IR-Code über eine angeschlossene IR-LED aus, der den Fernseher einschaltet. Man kann auch einen Rückkanal programmieren, der angibt, ob die Funktion erfolgreich ausgeführt wurde.

2) So einfach geht es leider nicht. Doch dazu später mehr.

Projektübersicht

Wie bereist aus dem Workflow ersichtlich, müssen für das Projekt mehrere Komponenten entwickelt werden.

1. Alexa Skill anlegen

Die erste Version des Skills wird Alexa ertüchtigen, die gewünschten Kommandos zu verstehen. Die Verbindung zum ESP32 erfolgt später, wenn die Voraussetzungen für die Verbindungsaufnahme hergestellt wurden.

Alexa Skill anlegen

2. Einfacher Web-Server auf dem ESP32

Im zweiten Schritt wird ein einfacher Web-Server für den ESP32 entwickelt. Dieser besitzt einige besondere Features wie OTA. Dadurch dass sich dadurch der ESP32 im WLAN anmelden lässt, wird der nächste Schritt erleichtert, der die Kommunikation zwischen Alexa und dem ESP32 beinhaltet.

Einfacher Web-Server mit OTA

3. Verbindung zwischen Alexa und dem ESP32

Nachdem nun das Skill-Modell erstellt wurde und prinzipiell funktioniert, muss festgelegt werden, wie Alexa mit dem ESP32 kommunizieren soll. Dazu gibt es viele Möglichkeiten.

In diesem Beispiel wird auf dem ESP32 ein Web-Server laufen, der die verschiedenen Kommandos von Alexa entgegen nimmt, den Fernseher entsprechend bedient und eine Rückmeldung gibt, die von Alexa ausgesprochen wird.

Verbindung zwischen Alexa und dem ESP32

4. Kommunikation zwischen Alexa und dem ESP32

In diesem Schritt werden der Skill und der Web-Server so erweitert, dass ein Datenaustausch erfolgt.

Kommunikation zwischen Alexa und dem ESP32

5. IR-Kommandos senden

Es bleibt nun nur noch übrig, den ESP32 zum Versenden von IR-Kommandos zu befähigen.

IR-Kommandos senden

Fazit

Das oben beschriebene Projekt zeigt ausführlich, wie man Alexa dazu bewegen kann, eigene Kommandos auszuführen. Das Ganze kann natürlich nur Beispiel für die Herangehensweise sein. Im echten Leben sind noch eine Reihe weiterer Aspekte. d.h. Rektionsmöglichkeiten, zu implementieren, um einen wirklich ansprechenden Alexa-Skill zu erstellen. Aber das sollte nach dieser Anleitung nicht weiter schwierig sein.