FHEM Tutorial-Reihe - Part 23: Mit Amazon Echo / Alexa FHEM steuern
Ich habe schon öfter die Anfrage per Mail und auch per Kommentar bekommen, mich mal mit Amazon Echo bzw. Alexa in Kombination mit FHEM zu beschäftigen. Da meine Einladung für Amazon Echo etwas auf sich warten lies, konnte ich diesem Wunsch leider erst jetzt nachkommen. Aber: Besser spät als nie, oder? Hier findest Du nun also Teil 1, in welchem wir mit dem Alexa Smart Home Skill einige Geräte steuern.
Was wird benötigt?
- Amazon Echo oder Amazon Echo Dot
- Eine DynDNS Domain, welche auf Euren IP zeigt. Egal welche. Ich nutze einfach die bereits vorhandene aus Tutorial Part 21 und 22
- Eine IPv4-Adresse. DSLite oder IPv6 wird in diesem Tutorial nicht unterstützt.
- Zugriff auf den Router, um Port-Forwarding für weitere Geräte zu konfigurieren.
- Ein Amazon-Konto
- nodejs muss installiert sein. Dies wird bereits in Tutorial 16 (Homebridge) erklärt. Bitte erst diesen Teil durchführen, falls nodejs noch nicht vorhanden ist
- Eine Kreditkarte (wird nicht belastet, aber benötigt)
- Keine Angst, dass die Befehle in der Amazon-Cloud ausgeführt werden
Dieses Tutorial basiert auf alexa-fhem in Version 0.1.9 von dem FHEM-Forums-Nutzer justme1986. Es könnte sein, dass eine neuere Version existiert wenn Du das Tutorial nachmachst. Ich würde immer empfehlen, die neuste Version einzusetzen, welche im FHEM-Forum zu finden ist.
Falls Du Probleme mit dem einrichten von alexa-fhem hast, schaue doch bitte im entsprechenden Wiki ob Du alles richtig gemacht hast. Leider entwickelt sich alles relativ schnell weiter und stand heute sahen die Oberflächen teilweise schon anders aus, als im Wiki gezeigt.
Bitte schreibe mir keine Emails bei Problemen, sondern kommentiere unter diesem Video. So wird auch anderen Lesern mit dem gleichen Problem geholfen. Mails mit Fragen kann ich aus zeitlichen Gründen leider nicht beantworten. Dafür ist dieses Thema einfach zu komplex. Bei Problemen bitte alles noch einmal genau anschauen und auch mit dem Wiki vergleichen - erst dann fragen, wenn Du Dir sicher bist, alles 1:1 umgesetzt zu haben!
Video
Tut mir leid, dass das Video teilweise so schnell ist - das nächste wird wieder in normalem Tempo aufgenommen, sodass man alles besser nachvollziehen kann. Ich weiß, dass es streckenweise schwer ist zu folgen. Aber das Video wäre wahrscheinlich über eine Stunde lang, wenn ich alles genau erklären würde. Feedback gerne in die Kommentare.
Nachdem alles umgesetzt wurde, sind folgende Sprach-Befehle möglich:
“alexa, schalte <gerät/raum> ein”
“alexa, schalte <gerät/raum> aus”
“alexa, stelle <gerät/raum> auf <wert> prozent”
“alexa, stelle <gerät/raum> auf <anzahl> grad”
“alexa, erhöhe <gerät/raum> um <anzahl> prozent”
“alexa, reduziere <gerät/raum> um <anzahl> prozent”
“alexa, erhöhe <gerät/raum> um <anzahl> grad”
“alexa, reduziere <gerät/raum> um <anzahl> grad”
Befehle + Scripts
cd
wget http://files.haus-automatisierung.com/alexa-fhem-0.3.4.tgz
tar -xzf alexa-fhem-0.3.4.tgz
mv package alexa-fhem
cd alexa-fhem
npm install
./createKey.sh
Dann das Passwort mit mindestens 4 Zeichen vergeben (z.B. alexa - am besten aber ein sichereres). Dann alle anderen Infos möglichst wahrheitsgemäß ausfüllen - ist aber nicht unbedingt wichtig. Nach dem Prozess müssten in dem Verzeichnis ein cert.pem und ein key.pem liegen. Dies kann mit folgendem Befehl getestet werden.
ls -la | grep pem
Weiter geht es auf den Seiten von Amazon (https://developer.amazon.com/) wie im Video beschrieben. Bitte genau darauf achten, welcher noch so kleine Haken wo gesetzt wird und alles 1:1 nachmachen. Ich versuche, so genau wie möglich auf die einzelnen Punkte einzugehen, aber bin selbst auch nur nach dem Wiki-Beitrag vorgegangen.
Folgende URLs braucht ihr während der Konfiguration:
- Policy-URLs: https://www.amazon.com/gp/help/customer/display.html?nodeId=468496
- Authorization-Url: https://www.amazon.com/ap/oa
- Scope: profile:user_id
- Access Token Uri: https://api.amazon.com/auth/o2/token
Weiter geht es auf http://aws.amazon.com
Hier noch die 3 Allowed-Return-URLs für das Security Profile:
- https://layla.amazon.co.uk/api/skill/link/xxx
- https://pitangui.amazon.com/api/skill/link/xxx
- https://layla.amazon.com/api/skill/link/xxx
xxx wird dabei jeweils ersetzt wie im Video erklärt.
mkdir ~/.alexa
cd alexa-fhem/
cp config-sample.json ~/.alexa/config.json
vi ~/.alexa/config.json
cd ~/alexa-fhem/
./bin/alexa
Dann alles weitere auf dem Amazon Echo konfigurieren.
Wenn alles läuft, solltet ihr die einzelnen Geräte in Amazon über Gruppen schalten. Auch, wenn nur ein Gerät geschaltet werden soll, können so bessere Namen vergeben werden. Generell ist es empfehlenswert, nur Namen zu vergeben die auch im Duden vorkommen. Also ohne irgendwelche Unterstriche, Punkte oder andere Sonderzeichen. Ansonsten fällt es der guten Alexa etwas schwer, diese Geräte richtig zu identifizieren.
Daemon einrichten
Jetzt haben wir noch das “Problem”, dass wir immer Alexa-FHEM manuell starten müssten damit alles geht. Um dies zu umgehen, richten wir einen Daemon ein (wie schon bei der Homebridge). Dieser Teil wird nicht im Video gezeigt.
Strg + C
sudo mv alexa-fhem /opt/
sudo vi /etc/init.d/alexa
Das folgende Script stammt ursprünglich ebenfalls aus dem Forum. Ich habe lediglich die Teile entfernt, welche das Starten und Stoppen von alexa-fhem aus der FHEM-Oberfläche heraus ermöglichten, da ich dies für überflüssig halte und dem fhem-Benutzer dafür viel zu viele Rechte geben müsste.
Natürlich wäre es auch denkbar, den fhem-Benutzer diesen Prozess ausführen zu lassen. Da die Kommunikation aber eh nur über http läuft, fand ich es als pi-Benutzer völlig okay, wenn auch nicht ganz sauber getrennt. Aber das ist Geschmackssache. Achtet nur darauf, die alexa-Konfiguration in Home korrekt zu verschieben wenn ihr plant, alles mit dem fhem-Benutzer durchzuführen.
#!/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="/opt/alexa-fhem"
export LOGPATH="/opt/alexa-fhem/log"
case "$1" in
start)
if ps -p $PID > /dev/null 2>&1; then
echo "Alexa is already running"
else
su - "pi" -c "cd $ALEXAPATH;./bin/alexa > $LOGPATH/alexa-`date +%Y-%m`.log 2>&1 &"
echo "Alexa starting"
sleep 2
$0 status
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
echo "script done"
exit 0
sudo chmod 755 /etc/init.d/alexa
sudo update-rc.d alexa defaults
mkdir /opt/alexa-fhem/log
sudo /etc/init.d/alexa start
Update auf Version 0.4.4 / Payload-Version v3
Die neue Version gibt es hier zum Download
Einfach herunterladen und überschreiben. Am besten direkt im ersten Schritt damit installieren. Danach den alexa-fhem Service einmal neustarten und fertig ist alles.