Endlich ist es / sie da!

Mein Amazon Echo Dot mit der Sprachsteuerung Alexa ist gestern per Post bekommen. Ich habe ca. 6 Monate auf diese Einladung gewartet… eine halbe Ewigkeit. Aber was lange währt, wird endlich gut.

In diesem Tutorial zweige ich Dir, wie Du mit Deinem Amazon Echo oder Amazon Echo Dot Dein FHEM steuern kannst.
Hierfür solltest Du Dir etwas Zeit mitbringen, es dauert – je nach auftauchenden Problemen – ca. 2 Stunden.

Letzte Aktualisierung am 28.07.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

Generell lässt sich der Prozess in zwei Schritte unterteilen:

  1. Installation von Node JS und Alexa-fhem
  2. Alexa Skill mit AWS Lambda einrichten

Insbesondere der letzte Teil ist sehr zeitaufwändig, bedarf eine Kreditkarte (auch wenn keine Kosten anfallen) und ist etwas komplex (nicht kompliziert), da es teilweise mehrere parallele Schritte (Browser-Tabs) benötigt. Aber es lohnt sich!

Installation von Node JS und Alexa-fhem

Node JS 7 installieren

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

Version überprüfen mit:

node -v

Weitere Infos zum Start-Script und zur Konfiguration findest Du in meinem Beitrag Fhem hört auf Siri.

Alexa für FHEM installieren (alexa-fhem-0.1.9.tgz):
https://forum.fhem.de/index.php/topic,60244.msg540117.html#msg540117

tar -xzf alexa-fhem-0.1.9.tgz
mv package alexa-fhem
cd alexa-fhem
npm install
chmod +x createKey.sh
./createKey.sh

Die erstellten Keys bruahcts Du im alexa-fhem Verzeichnis (siehe config.json ganz unten).

Start-Up Script

Mit diesem Script kannst Du komfortabel den Alexa-FHEM Dienst starten. Bitte beachte, dass der log-Ordner angelegt ist. Ggf. musst Du die Pfade noch anpassen.

#!/bin/sh
### BEGIN INIT INFO
# Provides: alexa
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time for alexa
# Description: Enable service provided by daemon.
### END INIT INFO
export PATH=$PATH:/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules
PID=`pidof alexa`
export ALEXAPATH="/root/alexa-fhem"
export LOGPATH="/root/alexa-fhem/log"
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
	echo "Alexa is already running"
else
	$ALEXAPATH/bin/alexa > $LOGPATH/alexa-`date +%Y-%m`.log 2>&1 &
	echo "Alexa starting"
fi
;;
stop)
if ! ps -p $PID > /dev/null 2>&1; then
        echo "Alexa is not running"
else
        kill $PID
        echo "Alexa closed"
fi
;;
restart)
if ! ps -p $PID > /dev/null 2>&1; then
        $0 start
else
        $0 stop
        $0 start
fi
;;
status)
if ps -p $PID > /dev/null 2>&1; then
        echo "Alexa is running PID $PID"
else
        echo "Alexa is not running"
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0

Zugriffsrechte setzen

chmod 755 /etc/init.d/alexa
update-rc.d alexa defaults

Alexa Skill mit AWS Lambda einrichten

Jetzt kommt der komplizierte, lange Teil – die Anmeldung bei Amazon.
Weitere Infos zum Thema findest Du im FHEM Wiki unter Alexa-fhem.

Zuerst musst Du Dich unter der Adresse http://developer.amazon.com anmelden. Wenn Du noch kein Konto hast, dann musst Du Dir ein neues Konto anlegen.

Wenn Du dort erfolgreich eingeloggt bist, musst Du die folgenden Schritte durchlaufen. Du findest diese auch im FHEM Wiki (siehe oben), ich habe hier teilweise noch Änderungen oder Hinweise hinzugefügt.

  1. Jetzt auf Apps & Services klicken, dann den Untermenüpunkt „Security Profiles“ wählen und auf die Schaltfläche „Create new profile“ drücken.
  2. Als nächstes „Security Profile Name“ und „Security Profile Description“ eingeben, z. B. „alexa FHEM“.
  3. Die folgenden Daten „zwischenspeichern“: Security Profile ID, Client ID, Client Secret
  4. Oben rechts unter „More Information“ auf den Link „Login with Amazon“ klicken.
  5. Nun auf die Schaltfläche „Sign up“ drücken und das zuvor angelegte Profil in dem Drop-Down-Menü auswählen.
  6. In dem anschließend öffnenden Popup folgenden Link kopieren: https://www.amazon.com/gp/help/customer/display.html?nodeId=468496
  7. Jetzt auf das „Zahnrad“ klicken und „Web Settings“ auswählen
  8. Füge nun bei „Allowed Return URL“ folgendes hinzu (ACHTUNG: Diese URLs kannst Du erst später korrekt eingeben, die xxx müssen entsprechend ersetzt werden): https://layla.amazon.co.uk/api/skill/link/xxx, https://pitangui.amazon.com/api/skill/link/xxx, und https://layla.amazon.com/api/skill/link/xxx
  9. Wähle nun den Menüpunkt „Alexa“, am besten in einem neuen Tab öffnen, dann kannst Du die „Allowed Return URL“ gut ändern
  10. Wähle „Alexa Skills Kit“ aus (erste Kachel)
  11. Klicke auf „Add a new Skill“
  12. Wähle „Smart Home Skill“, „Deutsch“ und vergib einen Namen, z. B. „alexa FHEM“
  13. Jetzt auf der nächsten Seite folgendes auswählen: Europe, Endpoint wird später angegeben (temporär kannst Du hier folgendes eingeben: arn:aws:lambda:eu-west-1:000000000000:function:myFunction:myFunctionVersion)
  14. Authorization URL: https://www.amazon.com/ap/oa
  15. Client Id: Hier den Wert aus Schritt 3 einfügen
  16. Add Scope: profile:user_id
  17. Nun die bei Redirect URLs angegebene ID (letzter Teil der URL) in den anderen Tab eingeben (siehe Schritt 8)
  18. Access Token URI: https://api.amazon.com/auth/o2/token
  19. Client Secret: Hier den Wert aus Schritt 3 einfügen
  20. Nun folgende URL im neuen Tab öffnen. Ggf. musst Du noch ein Konto erstellen, ist aber alles kostenlos, trotz Angabe der Kreditkarte: https://aws.amazon.com/de/lambda
  21. Nun im Menü „Services“ unter Compute „Lambda“ auswählen
  22. Auf „Get started now“ klicken und anschließend „Blank Function“ (erste Kachel) wählen.
  23. Nun oben rechts in dem schwarzen Balken zwischen Deinen Namen und Support den Server wechseln auf „EU Ireland“ (zweites Dropdown von rechts)
  24. Jetzt auf das gestrichelte Quadrat drücken und „Alexa Smart Home“ wählen
  25. Jetzt die ApplicationID (findet ihr in eurem anderen Tab unter Skill information).
  26. Name: FHEM, bei Runtime: Node.js 4.3, bei Role „Choose an existing role wählen“ (wenn es noch keine existing role gibt: zuerst „Create a custom role“ wählen, in dem Popup dann „lambda_basic_execution“ und auf Allow klicken)
  27. Nun den Code aus der Datei „lambda.js“ in das Code-Feld kopieren
  28. Anschließend auf Next und Create drücken
  29. Nun auf „Functions“ in der Breadcrumb / in dem Klickpfad drücken
  30. In der folgenden Liste, die soeben erstelle Funktion auswählen, dann auf „Action“ klicken und „Show ARN“.
  31. Diesen Wert notieren/kopieren und in dem anderen Tab den Service-Endpoint (Schritt 13) eintragen
  32. Nun weiter und den Skill „abspeichern“. Der Vorgang endet nicht wie man erwarten würde mit dem Publizieren. Dies auf keinen Fall machen
  33. Bitte alle Fenster noch geöffnet lassen!

Jetzt können wir die Konfiguration der config.json vornehmen.

  1. Den Skill wieder auswählen und die ID kopieren und in die config.json einfügen
  2. Nun noch die Client ID aus Schritt 8 entsprechend in die config.json einfügen
  3. Jetzt können noch die IP vom Server angepasst werden

Meine config.json sieht so aus:

{
    "alexa": {
        "name": "alexa",
        "keyFile": "/root/alexa-fhem/key.pem",
        "certFile": "/root/alexa-fhem/cert.pem",
        "nat-pmp": "",
        "nat-upnp": false,
        "applicationId": "amzn1.ask.skill.XXXXXX",
        "oauthClientID": "amzn1.application-oa2-client.XXXXXX"
    },
    
    "connections": [
        {
            "name": "FHEM",
            "server": "192.168.X.X",
            "port": "8083",
            "filter": "room=Alexa"
        }
    ]
}

Viel Spaß mit Amazon’s Alexa!