Alexa-Fhem
Alexa-Fhem ist eine in JavaScript und auf NodeJS basierende Software, welche es ermöglicht, der digitalen Amazon Assistentin Alexa zusätzliche Skills für die Heimautomatisierung via FHEM beizubringen. Eine erste funktionierende Version wurde von justme1968 im Forum veröffentlicht. Das ist eine erste Version der Dokumentation zur Installation und Einrichtung, eine Erweiterung wird sicherlich in nächster Zeit noch folgen.
Alexa-Fhem | |
---|---|
Zweck / Funktion | |
Anbindung von FHEM an Amazon Assistent Alexa | |
Allgemein | |
Typ | Inoffiziell |
Details | |
Dokumentation | siehe Forum |
Support (Forum) | Sonstige Systeme |
Modulname | |
Ersteller | justme1968 |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Installation
Grundvoraussetzung für alle folgenden Schritte ist, dass ein Amazon-Account vorhanden ist. Es wird davon ausgegangen, dass bereits für alle folgenden Amazon-Dienste vorab das Konto jeweils eingerichtet wurde, die Einrichtung dieser ist nicht Bestandteil dieser Anleitungen.
Voraussetzungen
Folgende grundlegende Voraussetzungen sollten erfüllt sein, bevor du mit der Einrichtung beginnst:
- Amazon Echo oder Amazon Dot
- node.js (vermutlich ab Version 0.12, getestet mit 4.2.6. Kann in Debian z.B. mit installiert werden)
apt-get install nodejs-legacy
- Weiterleitung von Port 3000 vom Router aus auf den Rechner, auf dem Alexa-Fhem läuft
Alexa-Fhem installieren
- Die tgz-Datei entpacken (Quelle: https://forum.fhem.de/index.php/topic,60244.0.html)
- Verzeichnis package in alexa-fhem umbenennen
- Durch in das Verzeichnis wechseln
cd alexa-fhem
- Mit alle Abhängigkeiten installieren
npm install
- SSL Zertifikat erzeugen durch Aufruf von . Hierbei beachten, dass ein Kennwort vergeben werden soll, das mindestens aus 4 Zeichen besteht.
./createKey.sh
- Die Datei config-sample.json nach ~/.alexa/config.json kopieren und die Werte auf die eigene Umgebung hin anpassen. Der Filter funktioniert hierbei wie bei homebridge-fhem,die folgenden Zeilen sind anzupassen oder zu löschen:
"nat-pmp": -> wenn nat-pmp verwendet werden soll: die ip des eigenen routers,
"nat-upnp": -> wenn nat-upnp verwendet werden soll: true,
"applicationId": -> noch nicht verwendet,
"oauthClientID": -> Client Id aus Punkt 1. Login with Amazon - Durch Aufruf von den Dienst starten
./bin/alexa
Alexa Smart Home Skill anlegen
Für folgende Schritte muss man unter der Adresse http://developer.amazon.com angemeldet sein
Apps & Services
- Klicke nach der Anmeldung auf APPS & SERVICES
- Klicke anschließend auf Security Profiles
- Wähle anschließend Create a New Security Profile aus
- Gebe dann ein Namen und eine Beschreibung für das Profil ein und bestätige die Eingaben durch anklicken von Save
Login with Amazon
- Nachdem du die vorherigen Schritte befolgt hast, siehst du im Browser das Profil dass du angelegt hast. Klicke jetzt oben rechts auf Login with Amazon
- Auf der neu geladenen Seite klickst du dann auf Sign up
- Wähle anschließend im Dropdown Menü das vorher angelegte Profil aus und bestätige das anschließend mit Confirm
- Im folgenden Fenster gibst du dann die Adresse https://www.amazon.com/gp/help/customer/display.html?nodeId=468496 ein und bestätigst die Eingabe mit Save
- Klicke dann bei dem neu angelegten Eintrag auf der rechten Seite auf das Zahnrad und wähle Web Settings aus
- Im neu geladenen Fenster klickst du dann auf Edit
- Füge zuletzt dann bei Allowed Return URLs die Adresse 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 hinzu. xxx muss hierbei durch den Wert ersetzt werden, der bei Punkt 6 Skill Kit einrichten unter Redirect Urls am Ende der URLs angezeigt wird.
Skill Kit einrichten
- Wähle im Menü den Punkt Alexa aus
- Klicke dann Get started beim Punkt Alexa Skills Kit an
- Wähle dann auf der neu geladenen Seite oben rechts Add a New Skill aus
- Auf der folgenden Seite wählst du Smart Home Skill API sowie German als Sprache aus und gibst ein Name für den Skill ein was du dann mit Next bestätigst.
- Die folgende Seite klickst du mit Next dann weiter
- Auf der Seite Configuration gibst du dann unter Authorization URL die Adresse https://www.amazon.com/ap/oa an, bei Scope profile:user_id und bei Access Token URI https://api.amazon.com/auth/o2/token sowie bei Privacy Policy URL die Adresse https://www.amazon.com/gp/help/customer/display.html?nodeId=468496
Folgende Felder müssen individuell ausgefüllt werden:
* Service Endpoint Type -> Europe auswählen und im Textfeld den Wert aus Punkt 12 AWS Lambda Funktion anlegen eintragen
* Client Id -> Client Id aus Punkt 1. Login with Amazon
* Client Secret -> Client Secret aus Punkt 1. Login with Amazon
Zur späteren Verwendung unter Punkt 7 AWS Lambda Funktion anlegen wird noch die Application Id benötigt. An diese kommt man wie folgt:
- Wähle im Menü den Punkt Alexa aus
- Klicke dann Get started beim Punkt Alexa Skills Kit an
- Beim vorher angelegten Eintrag auf Edit klicken
- Die Id, die nun oben angezeigt wird, ist die gesuchte
AWS Lambda Funktion anlegen
Für folgende Schritte muss man unter der Adresse http://aws.amazon.com angemeldet sein
- Anmeldung auswählen
- Anmeldedaten eingeben
- Den Punkt Lambda links auf der Startseite auswählen
- Anschließend den Punkt Get Started Now auswählen
- Den Blueprint Blank function auswählen
- Im neuen Fenster dann auf den gestrichelten Kasten klicken und Alexa Smart Home auswählen und mit Next bestätigen
Achtung! Es ist möglich, dass ihr hier Alexa Smart Home überhaupt nicht auswählen könnt. Dann solltet ihr ganz rechts oben in der Ecke mal schauen, welche Region bzw. welches Land ausgewählt ist. Ich empfehle hier Ireland auszuwählen. Dann erscheint bei den Funktionen auch Alexa Smart Home. - Bei Application Id den Wert eintragen, dessen Ermittlung unter Skill Kit einrichten in der zusätzlichen Beschreibung beschrieben wird, den Haken bei Enable trigger setzen und mit Next bestätigen
- Auf der Konfigurationsseite bei Name den Wert FHEM eingeben, bei Runtime Node.js 4.3. Bei Role den Wert Choose an existing role wählen und bei Existing role dann x wählen. Der Quellcode der Datei lambda.js aus dem Quellpaket wird dann an die Stelle des großen Textfeldes vollständig eingefügt. Dann noch den Hostname im Quellcode an den eigenen anpassen. Anschließend alles mit Next bestätigen.
- Auf der Übersichtsseite dann Create function anklicken
- Klicke dann auf der Übersichtsseite oben links auf Function
- Wähle dann die angelegte Funktion aus und klicke dann im Menü Action auf den Punkt Show ARN
- Es wird nun eine ARN Adresse angezeigt, die für den Punkt 6 bei Skill Kit einrichten benötigt wird
Alexa Skill einrichten
- Auf http://alexa.amazon.de anmelden
- Auf Skills klicken
- Oben rechts Meine Skills auswählen
- In der Liste der Skills sollte das angelegte FHEM Skill angezeigt werden. Dieses anklicken
- Oben Rechts in den Details des Skills auf Skill aktivieren klicken
- In dem neu geöffneten Fenster die Authorisierung bestätigen
- Anschließend sollte die Verbindung erfolgreich aufgebaut worden sein
Geräteeinrichtung
- Auf http://alexa.amazon.de anmelden
- Auf Smart Home klicken
- Anschließend den Punkt Geräte suchen anklicken
- Wurde soweit alles korrekt eingerichtet, werden nun die gefundenen Geräte angezeigt.
Tip: Es macht Sinn, unter Meine Gruppen Gruppen benannt nach den Räumen einzurichten. Hierdurch kann Alexa die Geräte besser auseinander halten, vor allem wenn die den gleichen Alias (z.B. "Licht") haben.
Nutzung
Sprachkommandos
Nach erfolgreicher Einrichtung sollte Alexa mit den folgenden Befehlen nutzbar sein:
“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”
Optimierung
Normalerweise wird von Alexa-Fhem der Wert im Feld NAME verwendet, mit dem ein Gerät angesprochen werden kann via Alexa. Ist ein anderer "Rufname" gewünscht, kann das Feld Alias gesetzt werden. Der hier gesetzte Wert wird dann als alternativer Name verwendet.
Troubleshooting
Allgemeiner Hinweis
Besonders wichtig ist, dass man sich sehr genau an diese Anleitung hält. Ein häufiger Fehler ist, dass die einfachen Anführungszeichen in der Anleitung unter AWS Lambda Funktion anlegen Punkt 8 einfach weggelassen werden. Diese sind zwingend notwendig. Es darf auch nur der reine Hostname eingetragen werden. Also kein http:// davor. Entweder eine feste IP Adresse oder den Hostnamen, um den Rechner zu erreichen, den ihr über den Port 3000 freigegeben habt. Das sollte dann so aussehen:
const PORT=3000; const HOST='mein.host.name';
Freigabe von Port 3000
Auf dem Router muss der Port 3000 Protokoll TCP freigegeben werden. D.h. von außen muss man wenn man den Port 3000 aufruft, auf dem intern laufenden node.js Alexa-Dienst zugreifen können.
Je nach Router gestaltet sich das Portforwarding bzw. die Portumleitung etwas schwieriger.
Bei einem Speedport Router der Telekom beispielsweise, muss der Router komplett neu gestartet werden, wenn die Portfreigabe eingerichtet wurde.
Bei der Fritz!Box ist das nicht nötig, bei dieser finden die Freigabe unter Internet -> Freigaben -> Portfreigaben statt. Dort wählt man dann den Rechner aus und richtet eine neue Freigabe ein. Wichtig hierbei ist, dass man Portfreigabe auswählt und nicht MyFRITZ!-Freigabe. Bei Port von bis trägt man 3000 ein, bei Port extern ebenfalls.
Um die Portweiterleitung zu testen, solltet ihr euch auch nicht im gleichen Netz befinden. Viele Router blockieren den Netzaufruf aus dem gleichen Netz. Am besten testet ihr es, wenn ihr an eurem Mobiltelefon W-LAN deaktiviert und im Browser folgende Seite aufruft: https://mein.hostname:3000. Wenn ihr im Browser dann einen Quellcode von Alexa seht, funktioniert die Portumleitung.
Wenn bis hier alles funktioniert und es läuft dennoch nicht rund, liegt das Problem woanders. Kommt z.B. bei der Gerätesuche kein Request rein (sichtbar auf dem Bildschirm, wenn bin/alexa gestartet wurden), kann evtl. der Lambda-Dienst falsch konfiguriert sein.
Probleme mit node.js - npm install
Falls eine Fehlermeldung auftritt, dass "npm" nicht gefunden werden kann, bitte NodeJS entsprechend der Anleitung im Homebridge-Artikel vorgehen: NodeJS installieren sowie Python, g++, MDNS installieren, siehe auch folgenden Abschnitt.
Es kommen diverse Fehlermeldungen beim Starten von alexa-fhem und es beendet sich
Wenn man auf der Konsole angemeldet ist, den Befehl
node -v
eingeben. Ist die Version niedriger als die geforderte 0.12, muss eine neuere installiert werden. Hier darf man dann im Wiki unter http://www.fhemwiki.de/wiki/Homebridge_einrichten#NodeJS_installieren nachschauen. NodeJS V4 sollte hierbei schon ausreichen. Solange die node.js Version nicht passt, gar nicht groß rum experimentieren! Bitte beachtet, dass alle Voraussetzungen unter http://www.fhemwiki.de/wiki/Alexa-Fhem#Voraussetzungen erfüllt sind! Keine Experimente mit Versionen die darunter liegen.
Fehlermeldung NAT-PMP failed: Error: timeout Fehler angezeigt beim Start von alexa-fhem
Wenn ihr dann alexa-fhem über die Konsole startet und bekommt folgenden Fehler: NAT-PMP failed: Error: timeout, lasst euch davon nicht irritieren. Das bedeutet lediglich, dass der Port nicht automatich freigegeben wurde über uPNP. Alternativ prüft, ob die Funktion der Portfreigabe via uPNP auf eurem Router aktiviert ist.
Was ist zu tun, wenn alexa-fhem keine Geräte findet?
Zunächst müssen die Geräte, die angesprochen werden wollen, unter FHEM ein neues Attribut zugewiesen bekommen. Dazu das Gerät in FHEM öffnen und das Attribut genericDeviceType switch hinzufügen, wenn es ein Schalter mit der Funktiona AN/AUS sein soll. Wenn man will, kann man dem Gerät jetzt noch über das Attribut alias eine besseren Namen geben, mit dem Alexa das Gerät dann auch finden kann. Anschließend muss alexa-fhem neu gestartet werden und die definierten Geräte sollten nun gefunden werden.
Was ist zu tun, wenn Alexa zwar Geräte findet, diese aber nicht angesprochen werden können?
Zunächst sollte man sich unter http://aws.amazon.com das Logfile seiner erstellten Funktion anschauen. Ist überhaupt ein Logfile vorhanden? Falls nicht, liegt es vermutlich am Trigger. Den solltet ihr überprüfen. Scheinbar kommt es hin und wieder vor, dass dieser nicht gesetzt ist. Dazu einfach auf Triggers klicken und mit Add trigger erneut einen anlegen. Hier muss, wie in der Anleitung unter AWS Lambda Funktion anlegen Punkt 7, die Application Id stehen und der Haken bei Enable trigger gesetzt sein. Dann alexa-fhem neu starten. Wenn ihr Änderugen gemacht habt und den alexa-fhem Dienst noch nicht neu gestartet habt, wäre jetzt der richtige Zeitpunkt.