Alexa und FHEM mittels IFTTT ganz einfach verbinden

In einer Mail von Amazon wurden wieder ein paar Neuerungen für Alexa angekündigt. Die wichtigste Änderung war für mich die Verfügbarkeit von ifttt für Alexa. Bisher konnte nur die englische Version von Alexa mit ifttt genutzt werden. Auf diesem Weg ist es nun relativ einfach möglich, Alexa mit FHEM zu nutzen – auch ohne den recht komplizierten Weg über die Integration von Alexa Skills.

Wer sich also bisher noch nicht getraut hat, die Alexa Skill-Funktionalität in FHEM zu installieren oder an dem doch recht komplizierten Prozedere gescheitert ist, hat nun eine wirklich simple Möglichkeit, seine Haussteuerung per Sprachbefehl über Alexa Echo oder Echo Dot zu steuern.

Alexa Channel bei ifttt

Vorbereitungen zur Integration von Alexa, IFTTT und FHEM

[aartikel]B01DFKBG54:right[/aartikel]Wie schon in meinem Beitrag zur Kommunikation meines BMWs über ifttt mit meinem FHEM geschildert habe, nutzen wir auch für die Alexa Anbindung wieder den Maker Kanal bei Ifttt. Damit FHEM über einen Webaufruf gesteuert werden kann, müssen wir unseren Router entsprechend vorbereiten. Da ich in meinem Fall eine Fritzbox nutze, ist dies recht einfach umgesetzt. Grundsätzlich sollte das auch mit anderen Routern funktionieren, die eine DynDNS Option unterstützen. Hierzu kann man dann u.a. meine Beschreibung des BMW-Artikels nutzen. Dort hatte ich noch geschrieben, dass ifttt Probleme mit https-Aufrufen hat und erläutert, wie man mit einer eigenen Domain den Zugriff realisieren kann. Dies hat sich nun zum Glück erledigt und somit können wir in dem Maker-Channel auch unsere myfritz-Adresse nutzen.

Die Einrichtung von myfritz überspringe ich mal, da sie bei AVM eigentlich ganz gut beschrieben ist und viele diesen Zugriff wahrscheinlich auch schon installiert haben. Wenn der Zugriff über myfritz also funktioniert, müssen wir nur noch dafür sorgen, dass ein Aufruf über die entsprechende URL auch bei FHEM landet. Dazu müssen wir in der Fritzbox noch eine Portweiterleitung einrichten. An diese Weiterleitung kommt man in der neuen FRITZ OS Version über das Menü „Internet“ und dann „Freigaben“. Hier erscheint nun eine Liste mit Geräten für die man eine Weiterleitung erstellen kann. Fehlt das gewünschte Gerät, kann es noch hinzu gefügt werden.

Ich wähle bei mir also meinen Raspberry aus, auf dem FHEM läuft und leite dann den Port 8088 entsprechend weiter (siehe Bild).

Weiterleitung eines Ports an FHEM vorbereiten

Nun müssen wir innerhalb FHEM dafür sorgen, dass diese Portweiterleitung richtig verarbeitet wird. Hierzu legen wir ein Device vom Typ FHEMWEB an.

define WEBhook FHEMWEB 8088 global
attr WEBhook https 1
attr WEBhook webname webhook

Definition des Webzugriffs über den neu angelegten Port 8088

Mann könnte jetzt noch das Attribut „hiddenroom“ setzen und hier alle Räume einfügen. Damit werden diese beim Webzugriff über Port 8088 nicht sichtbar. Auf jeden Fall sollte man den Zugriff über „allowed“ noch sicher stellen:

define allowed_WEBhook allowed
attr allowed_WEBhook allowed set,get
attr allowed_WEBhook basicAuth { "$user:$password" eq "USER:PASSWD" }

 

FHEM Webzugriff mittels „allowed“ absichern

Jetzt müssen wir bei ifttt nur noch den Alexa-Channel aktivieren und soweit noch nicht geschehen, den Maker-Channel. Damit sind die Vorbereitungen für die Verbindung zwischen Alexa und FHEM erledigt und wir können uns an die ersten Sprachbefehle begeben.

Sprachbefehle in ifttt anlegen

Innerhalb ifttt wird nun ein Sprachbefehl im Alexa-Channel angelegt, der dann mit dem Maker-Channel an FHEM gesendet wird. Als Beispiel nehmen wir zunächst die simple Schaltung einer Lampe. Der Alexa Channel bietet einige vorgefertigte Trigger, auf die reagiert werden kann. So kann man z.B. beim Ablauf eines Timers eine Aktion starten oder wenn die ToDo-Liste geändert wird. Für unseren Zweck nutzen wir den Trigger „say a specific phrase“. Damit können wir mit selbst definierbaren Begriffen eine Aktion triggern. Also zum Beispiel „Lampe an“.

Mit dem Applet Maker von ifttt wählen wir also zunächst den Alexa-Channel und dann den entsprechenden Trigger aus.

Definition des Triggers „say a specific phrase“ innerhalb des Alexa Channels von ifttt

In das Feld für die „phrase“ tragen wir nun „lampe an“ ein und erstellen den Trigger. Im nächsten Schritt wählen wir dann den Channel „Maker“ aus und nutzen die einzig verfügbare Aktion „make a web request“.

Aktion im Maker Channel von ifttt definieren

Im Feld URL wird der nachfolgende Wert eingetragen und bei Content Type wir „text/plain“ eingestellt und dann die Aktion erstellt.

https://<USER>:<PASSWD>@<MYFRITZ-CODE>.net:8088/webhook?cmd=set%20Lampe%20an

Für USER, PASSWD und MYFRITZ-CODE müsst ihr natürlich eure Einstellungen übernehmen. Außerdem solltet ihr bei den URLs immer daran denken, dass die Leerzeichen im Befehl durch %20 ersetzt werden. In der URL ist also der Befehl „set Lampe an“ zu finden. Statt „Lampe“ solltet ihr den Namen eines eurer Geräte nehmen und wenn es kein matching für „an“ gibt, sollte „on“ verwendet werden.

Jetzt können wir unsere Aktion in ifttt abschließen und direkt testen. Befehle an ifttt werden mit „Alexa trigger“ gestartet. Also müssen wir nun sagen „Alexa trigger Lampe an“. Wenn alles richtig gemacht wurde, sollte nun das entsprechende Licht angehen.

Jeden Befehl, den man mit Alexa steuern möchte, muss man nun entsprechen mit neuen Applets anlegen. Das ist sicherlich ein klein wenig aufwendig, dafür muss man sich aber nicht mit der Skill-Programmierung herum schlagen ;-).

Fertiges Applet zur Sprachsteuerung von FHEM mittels Alexa

Weitere Hinweise, die mir bei ersten Tests aufgefallen sind

Ganz schlau geworden bin ich noch nicht, wie Alexa bzw. ifttt mit den definierten Phrasen umgeht. So konnte ich bei einigen Tests feststellen, dass nicht immer die komplette Phrase passen muss. Ich hatte zum Beispiel die Phrase „rollade im schlafzimmer runter“ getestet. Diese reagierte manchmal auch auf „schlafzimmer runter“ oder „rollade runter“.

Weiterhin ist mir aufgefallen, dass man möglichst nicht zu viele Wörter verwenden sollte und keine zusammen gesetzten Wörter. Vorteilhaft scheinen zwei Begriffe zu sein. Also zum Beispiel „schlafzimmer runter“ und „schlafzimmer hoch“.

Grundsätzlich könnte man auch den Harmony-Channel nutzen, um über Alexa Harmony-Aktivitäten der Fernbedienung zu steuern. Leider hat das mit meinem Harmony-Hub und der Touch-Fernbedienung nicht funktioniert. Ich kann zwar den Harmony-Channel aktivieren, aber es werden keine Aktionen angezeigt. Ich habe mal den Support angemailt aber so, wie es aussieht, sind meine Geräte zu alt und nicht mit ifttt kompatibel. Es müssen wohl die Smart-Home Geräte von Harmony genutzt werden. Mal sehen, was mir der Support antwortet und ob ich mir einen neuen Hub und/oder Fernbedienung zulegen muss.

Dann hoffe ich mal, dass ihr bereits ein Amazon Echo oder einen Dot im Einsatz habt. Falls noch Bedarf ist, einfach mal Bescheid geben. Ich kann im Moment noch ein oder zwei Geräte ordern – neben meinem eigenen Bedarf ;-).

[UPDATE 05.03.17]

Seit der FHEM Version 5.8 funktionieren die WEB-Aufrufe nicht mehr, da hier ein Sicherheitskonzept mit sogenannten crsfToken umgesetzt wurde. Beim Aufruf eines Webkommandos müsste der richtige Token immer mit übergeben werden. Da ich mich mit dem Thema auch noch nicht im Detail beschäftigt habe und weil es bei der Nutzung von ifttt evtl. auch nicht möglich ist, den richtigen Token zu ermitteln, muß man im WEB-Device das nachfogende Attribut setzen:

attr WEBhook crsfToken none

Danke an jeschkec für den Hinweis.

21 comments

  1. Super Artikel, vielen Dank. Habe nach einigen Stunden aufgegeben, Alexa direkt in FHEM zu integrieren, irgendwie lief es nie. Einziger Nachteil bei dieser Methode ist, dass man immer „Trigger“ sagen muss und die Sätze nicht variieren dürfen; es muss also immer exakt das gesagt werden was hinterlegt ist.

    Ansonsten … Sehr geiler Tipp! Danke.

  2. Echt praktisch, danke! Das schaue ich mir noch einmal genauer an.
    Als ich mich damit befassen wollte, gab es Alexa IFTTT leider noch nicht in Deutschland 🙂

  3. habe leider das Problem, dass der Trigger nicht gefunden wird. Tipps?

  4. Bitte beachte, dass das nun nicht mehr funktionieren wird, da kein CSRF-Token mitgeschickt wird:
    https://forum.fhem.de/index.php/topic,67419.0.html

  5. Was sagt Alexa denn genau? Wenn ich einen Trigger aufrufe, den Alexa nicht kennt, dann sagt sie „ich kann diesen ifttt Trigger nicht sehen“. In diesem Fall liegt das Problem bei der Erkennung des Triggerbefehls. Dann würde ich mal eine andere Phrase in ifttt versuchen. Ansonsten kann ich nicht wirklich sagen, wo das Problem liegt. Wenn Alexa in ifttt richtig verbunden ist sollte der „Trigger“ Befehl eigentlich acuh funktionieren.

  6. Danke für den Hinweis. In der Tat funktionieren seit FHEM Version 5.8 sämtliche URL-Befehle nicht mehr wenn man das Attribut csrfToken im genutzten WEB-Device nicht auf „none“ einstellt. Ich muß mit die Thematik mit csrfToken auch nochmal genauer anschauen, fürchte jedoch, dass man den Token über die ifttt-Möglichkeiten nicht zur Laufzeit ermitteln kann.

  7. Hallo Jürgen, wie immer sehr gute Arbeit! 🙂 Bei mir sagt Alexa das der Befehl gesendet wird und direkt hängt sich der RPI auf. Version 5.7 wegen der CSRF Problematik. Das Forwarding von der Alexa- reverb App (Handy) funktioniert anscheinend. Ich habe das wie folgt eingegeben:
    https://Benutzer(RPI):Password(RPI)@sldkfjgksldfkfj.myfritz.net:8088/webhook?cmd=set%20Steckdose%on
    Hast du evt ne Idee woran das liegen könnte?
    Kann ich den request nicht auch an die WEBtablet senden?

    Grüße Gerrit

  8. Der Aufruf sieht soweit in Ordnung aus. Allerdings ist vor dem „on“ nur ein %-Zeichen und nicht %20. Evtl. ist der Fehler aber nur im Kommentar?

    Hast du mal versucht den Link direkt im Browser einzugeben? Eigentlich sollte bei der 5.7er Version noch kein csrfToken Problem auftreten. Ich meine, dass diese Umsetzung erst mit Version 5.8 scharf geschaltet wurde. Entsprechend meiner Ergänzung im Text kann man dies ja auch ausschalten.

    Grundsätzlich kann natürlich auch WEBtablet genutzt werden. Der Zugriff muss dann entsprechend meiner Beschreibung extern verfügbar gemacht werden.

  9. Hallo Jürgen,
    habe es folgendermaßen zu laufen bekommen:

    https://Benutzer(RPI):Password(RPI)@xxxxxxxxxxxxxxx.myfritz.net:13456/fhem?cmd.Steckdose=set%20Steckdose%20on

    Ist ohne webhook, hat aber den gleichen Effekt.

    Geile Sache. 🙂
    Danke dir vielmals.
    Grüße aus Münster
    Gerrit

  10. hallo, ich bekomm es einfach nicht zum laufen weder mit

    https://Benutzer(RPI):Passwort(RPI)@raspberrypi.xxxxxxxxxxxxxxxxxxxxx.myfritz.net:8088/webhook?cmd=set%20mySchalter2%20on

    noch mit

    https://Benutzer(RPI):Passwort(RPI)@raspberrypi.xxxxxxxxxxxxxxxxxxxxx.myfritz.net:8088/fhem?cmd.mySchalter2=set%20mySchalter2%20on

    mir stürzt dauernd der Fhem Server ab

    schreibe ich im Heimnetz:

    http://192.168.xxx.xx:8083/fhem?cmd.mySchalter2=set%20mySchalter2%20on&XHR=1

    funktionert das Schalten einwandfrei

  11. vielleicht hilft das noch, folgende meldung bekomme ich:

    SecurityCheck:

    WEB,WEBhook,WEBphone,WEBtablet has no associated allowed device with basicAuth.
    telnetPort has no associated allowed device with password/globalpassword.

    Restart FHEM for a new check if the problem is fixed,
    or set the global attribute motd to none to supress this message.

  12. Die Anzeige bedeutet zunächst einmal nur, dass du deine WEB-Devices nicht mit einem Passwort abgesichert hast. Eigentlich ist dies nur eine „Warnung“.

  13. Hi @ll,

    leider klappte s bei mir auch nicht. Ich habe sowohl WEB als auch WEBhook auf CSRF = none gesetzt. Leider schmiert bei mir FHEM ab, sobald ich das Kommando über nen Browser absetze. Egal ob:

    https://:@domain:8088/fhem?cmd=set%20BA.dimmer_Sw%20on

    oder

    https://:@domain:8088/webhook?cmd=set%20BA.dimmer_Sw%20on

    hat jemand ne Idee?

    Mike

  14. Hast du es mal im eigenen Netz nur mit http versucht?

  15. Ein sehr hochwertiger Post, der alles einwandfrei zusammen fasst. Ich habe mich damals auch durch alle Newcomer-Guides gelesen bevor ich dann nutzliche Bescheid gefunden habe. Bei mir ist es immer so, dass ich die meisten Fingerzeigen für mehr Reichweite zwar kenne, aber dann doch nicht umsetzte. So einen Beitrag zu lesen motiviert dann wieder – habe ich gedacht und bin weiter gesurft. Sowas ist äußerst helfend! Aber es gibt noch ein Aufgabenstellung dazu – Virtuelle Datenräume . Es ist vor allem schön zu wissen, dass alle mal klein angefangen habe. Das ist zwar eigentlich klar, aber wird gern vergessen.

  16. Hallo an alle, bei denen FHEM bei dem HTTPS Aufruf abstürzt!

    Ich habe den Fehler gefunden. Wenn bei euch, wie bei mir, dass HTTPS Zertifikat noch nicht eingerichtet ist, dann ist das der Grund, warum FHEM immer abstürzt.

    Ich habe es nach der Anleitung installiert:
    https://wiki.fhem.de/wiki/Raspberry_Pi_%26_HTTPS

    Und es läuft bei mir ohne Probleme.

    Grüße, Benjamin

  17. hab leider auch das problem das fhem sofort abschmiert, sobald ich den befehl im browser eingebe. hat evtl jemand rausgefunden woran es liegt?

  18. Hallo, eigentlich sehr interessant.

    Wollte es nachbaun, aber
    „Im nächsten Schritt wählen wir dann den Channel „Maker“ aus und nutzen die einzig verfügbare Aktion „make a web request“.“

    Gibt es nicht mehr. Schade.

  19. In der Tat wurde der Channel Maker durch den „Web Request“ ersetzt. Hier hat wohl mal eine Umbenennung statt gefunden, sollte damit aber genauso funktionieren.

  20. Vielen Dank für Ihren Beitrag. Ich wünschte, ich hätte Ihren Blog früher entdeckt. Es hat wirklich gute Informationen.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

x

Check Also

Ecoflow Powerstream Lade- und Einspeisesteuerung mit FHEM

Seit einiger Zeit habe ich eine Ecoflow Delta2 in Verbindung mit einem Ecoflow Powerstream im ...