Amazon Echo mit nahezu jedem Wifi Gerät koppeln – Pi, HABridge & fhem

Mit einem Amazon Echo oder Echo Dot wird es eigentlich erst interessant, wenn man Lichter, Steckdosen & Rolladen steuern kann. Von Haus aus unterstützt der Echo einige WLAN-fähige Produkte direkt. So kann man Echo kompatible WiFi Steckdosen kaufen oder auch mit einer Hue Bridge das Philips Hue System einbinden. Die Komponenten sind allerdings meistens etwas teurer und teilweise man noch eine spezielle Bridge kaufen.
Mit einem Rasperry Pi kann man mit ein wenig Konfigurationsarbeit so ziemlich jedes WLAN-fähige Gerät mit dem Echo zusammenbringen. Alternativ kann man auch Alexa Skills programmieren. Das ist aber nicht ganz trivial und so habe ich mich entschieden erst einmal eine Basiskompatibilität mit Hilfe von HABridge herzustellen.

Im Folgenden gehe ich davon aus, dass ein Pi erfolgreich am Netz läuft. Auf dem Pi kann man einen Service namens HABridge installieren. HABridge ist ein Emulator für diverse Smarthome Protokolle, wie z.B. Philips Hue. Somit kann HABridge eine Philips Hue Brigde emulieren („nachmachen“). In HABridge eingetragene Geräte werden vom Echo erkannt („Alexa, erkenne Geräte“). So gut das klingt, muss ein Wort der Warnung hier hin: HABridge hat aktuell eine massive Sicherheitslücke und exponiert root Rechte auf dem Webinterface an jeden Nutzer im Netz.

Java prüfen & installieren:
HABridge erfodert java. Das ist auf den meisten Pi Installationen nicht drauf. Ein Test ist einfach:

pi@raspberrypi ~ $ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

Wenn statt dessen eine Fehlermeldung kommt, muss zunächst java installiert werden:

pi@raspberrypi ~ $ sudo apt-get update && sudo apt-get install oracle-java8-jdk

Das dauert eine Weile.

HABridge installieren:
Wenn java installiert ist, kann man die HABridge installieren. Es gibt mehrere Varianten auf github. Ich habe diese hier genommen: https://github.com/bwssytems/ha-bridge/

pi@raspberrypi:~ $ cd
pi@raspberrypi:~ $ mkdir habridge
pi@raspberrypi:~ $ cd habridge
pi@raspberrypi:~/habridge $ wget https://github.com/bwssytems/ha-bridge/releases/download/v3.5.1/ha-bridge-3.5.1.jar

HABridge automatisch starten:
Wie auf der github Seite von HABridge beschrieben wird, geht ein automatischer Start per rc.local schief, weil zum Startzeitpunkt das Netzwerk des Pi noch nicht funktioniert. Dort ist auch beschrieben, wie man einen automatischen Start per systemctl einrichtet. Diese Methode klappt aber mit vielen Distributionen nicht. Die Alternative ist die Einrichtung als Daemon über init.d. Hier ist ein passendes Starterscript: habridge
Dazu die beiliegende Datei nach /etc/init.d kopieren, den Besitzer auf root ändern und die Nutzerrechte anpassen. Zu schnell? – Ok:
Die Date habridge auf Eurem Windows Rechner in einem Texteditor öffnen und alles kopieren. Dann per putty auf dem pi einloggen und:

pi@raspberrypi ~ $ sudo nano /etc/init.d/habridge

Es ist nun ein Editor aufgegangen. Dort kann man per rechter Maustaste die kopierten Inhalte einfügen. Danach mit Strg+X und bejahen der Frage (je nach Sprache Y und J) abspeichern. Nun noch die Rechte anpassen:

pi@raspberrypi ~ $ sudo chmod 755 /etc/init.d/habridge

HABridge wird jetzt bei einem Neustart automatisch hochgefahren. Es geht auch manuell:

pi@raspberrypi ~ $ /etc/init.d/habridge start

HAbridge ist jetzt auf Port 81 konfiguriert. Damit bleibt Port 80 für Webserver Anwendungen frei.

HABridge konfigurieren & Gerätenamen wählen:
Mit einem Browser auf dem PC sollte jetzt ein Zugriff auf habridge klappen. Falls Euer Pi den Netzwerknamen raspberrypi trägt, geht das so: http://raspberrypi:81

Es erscheint die HABridge Hauptseite; hier ein Screenshot. Bei der ersten Einrichtung sind natürlich noch keine Geräte eingetragen.

Nun muss ein Bridge Gerät hinzugefügt und eingerichtet werden. Folgende Einträge steuern eine Lampe an, die per fhem gesteuert wird. fhem ist dabei auf dem selben pi installiert.

Wenn das Gerät erfolgreich hinzugefügt wurde, erscheint es auf der HABridge Hauptseite und kann mit Test ON und Test OFF gesteuert werden.
Alles was sich mit eine URL steuern lässt, kann man so in HABridge eintragen. Die entsprechende URL im HABridge Konfigurationsdialog als On URL bzw Off URL eintragen. Bei FHEM kann man sich die Kommandos von der eigenen FHEM Webseite per „Link kopieren“ besorgen. Programme, die auf dem Pi selbst laufen, bekommen die IP 127.0.0.1 (=localhost) zugewiesen. Mit den weitern Feldern im Konfigurationsdialog kann man auch komplexere Paramterübergaben realisieren. Für die meisten WLAN Steckdosen kann entsprechende URLs im Netz finden. Damit man die Geräte zielsicher erreichen kann, muss man dafür sorgen, dass sie eine konstante IP Adresse vom Router zugewiesen bekommen. Wie das geht, hängt vom Routermodell ab; also bitte im Menü des Routers nachsehen.

HABridge und Scripte auf dem Pi:
Man kann mit HABridge alternativ auch ein Script auf dem Pi starten. Dazu stellt man den Device Type auf Execute Script/Program stellen. Das folgende Beispiel zeigt die Konfiguration, um das script tf.sh im home Verzeichnis des Nutzers pi auszuführen.

Warnung – HABridge hat ein massives Sicherheitsloch
An dieser Stelle muss ich eine deutliche Warnung anbringen. Die Scripte werden von HABridge mit root Rechten ausgeführt. Somit stellt HABridge ein frei zugängliches Webinterface zur Verfügung, welches Scripte auf dem Pi mit root Rechten ausführbar macht. Keinesfalls sollte ein Pi mit HABridge vom Internet her zugreifbar sein. Im Heimnetz ist HABridge nur akzeptabel, wenn alle Nutzer 100% vertrauenswürdig sind. Auf Dauer sollte hier unbedingt ein Passwortschutz her, allerdings reagieren die Macher von HABridge bisher nicht.

Alexa anlernen:
Einfach: „Alexa, Geräte erkennen“
Nach ein paar Sekunden meldet Alexa die erkannten Geräte. Erster Test: „Alexa, Licht anschalten“.
Alexa kommt nicht mit jedem Gerätenamen klar. Aktuell sind Umlaute problematisch. Ebenso mag Alexa keine Gerätenamen, die man nicht im Wörterbuch findet.
Ein paar Beispiel, die bei mir gut funktionieren: Licht, Stehlampe, Jalousie, Weihnachtsbaum. Nicht gut gehen: Rolladen, Deckenfluter, Schrank
Vermutlich wird sich die Amazon Spracherkennung noch verbessern. Aktuell muss man ein wenig probieren. Wenn man die Namen in HABridge per edit ändert, einfach danach Alexa nochmal nach den Geräten suchen lassen.
Tipp: Von HABridge aus „My Echo“ gehen. Dann auf Einstellungen –> Verlauf. Dort kann man sehen, was Alexa verstanden hat.

42 Gedanken zu „Amazon Echo mit nahezu jedem Wifi Gerät koppeln – Pi, HABridge & fhem

  1. Hansdampf

    Hallo, Du schreibst … ‚Programme, die auf dem Pi selbst laufen, bekommen die IP 127.0.0.1 (=localhost) zugewiesen‘.
    Zählen dazu auch .sh Skripte, die man auf dem Pi erstellt hat? Wie wäre bspw. der Aufruf von einem Shell-Skript korrekt zu hinterlegen?
    http://127.0.0.1/home/pi/lampe.sh

    Antworten
    1. ST Artikelautor

      Ganz so einfach klappt es leider nicht. Du greifst ja per http zu, also muss auf dem pi ein Webserver laufen. Dann muss es eine URL geben, die eine Aktion auslöst. Ein Webserver läßt das Aufrufen von Scripten nicht einfach zu (wäre auch nicht gut).
      Du hast mehrere Möglichkeiten. Eine wäre fhem mit Genshellswitch zu benutzen. fhem gibt Dir ein Webinterface und viele Funktionen zur Heimautomatisierung. Mit der Genshellswitch Erweiterung kannst Du Scripte auf dem Pi auslösen. Das gezeigte Beispiel funktioniert so.
      Eine andere Möglichkeit ist die Installation eines Webservers (z.B. lighthttpd oder Apache). Auf dem Webserver legst Du dann im /var/www Verzeichnis ein php Script ab, welches Dein Script ruft.

      Gruss Stefan

      Antworten
      1. Hansdampf

        Hallo Stefan,

        danke für Deine Rückmeldung. Ich habe mich heute gleich an Deine Anleitung oben gemacht, einen lighttp Server aufgesetzt und fleißig ein paar Skripte mit php-Dateien gebastelt.
        Klappt wunderbar. Einzig die Tatsache, dass man dem user ‚www-data‘ mehr Rechte zum Ausführen der Shell-Skripte einräumen muss, gefällt mir an meiner Lösung nicht.
        Nutze aktuell pilight und kann damit über einen Shellbefehl recht einfach die Funksteckdosen separat steuern. Evtl. wechsle ich irgendwann dann auch mal auf FHEM.

        Was mir bei der HA-Bridge noch aufgefallen war, so konnte mein Amazon Echo nach einigen postiven Versuchen plötzlich keine Verbindung mehr zur Bridge herstellen. Die Bridge neu zu initialisieren hat aber bisher immer geholfen. Denke, das war nur wg. den wilden Konfigurationsversuchen und läuft dann im Dauerbetrieb hoffentlich stabil genug.

        Insgesamt eine sehr gelungene Anleitung, Danke nochmal dafür.

        Gruß
        Dennis

        Antworten
        1. ST Artikelautor

          Hallo Dennis,

          ich habe das über fhem laufen. Da ist habridge komplett stabil. Eine Erklärung habe ich auch nicht.

          Gruss Stefan

          Antworten
        2. Domiboss

          Hallo, hast du dafür ein Tutorial gefunden oder wusstest du selber wie man Scripte per url starten lässt? Ich kann mir selber nur ein Shell Script erstellen. Ich wüsste nämlich auch gerne wie ich z.B den Befehl über Http: ausführen kann z.B. „sudo pilight-send -p intertechno_old -i 0 -u 4 -t“

          Ist es denn nicht irgendwie möglich das HA-Bdrige auch Pilight direkt über URL steuern kann?

          Antworten
          1. Domiboss

            Über Chrome am Windows PC kann ich mit diesen Befehl

            192.168.1.x:xxxx/send?{„action“:“control“,“code“:{„device“:“Switch1″,“state“:“on“}}

            (x=entsprechende ip und port)
            Schalten, gebe ich dies in der Homebridge an kommt folgender Fehler:

            Request Error, Pleae look in your habridge log: error („type“:6,“adress“.“lights/1″,“description“;“Error on calling url to change device….

          2. Domiboss

            Was ich noch vergessen hab, gebe ich die 127.0.0.1:xxxx vorne an bekomme ich ein SyntaxErrir genekdet Unexoected tijeb <in json at position 0

          3. ST Artikelautor

            Hi Domiboss,

            die URL enthält unerlaubte Zeichen. Gib die Url mal in Edge (vermutlich geht auch ein anderer Browser) ein. Die Zeile wird dann expandiert und in Zeichen umgesetzt, die in einer URL erlaubt sind. Mit dieser URL sollte es dann gehen.
            Chrome nimmt die URL ebenso wie Edge, zeigt aber die Umsetzung nicht an.

            Gruss Stefan

          4. ST Artikelautor

            Hi Domiboss,

            weiss ich selbst 🙂 ; gibt aber auch viele Tuts im Netz: Installiere apache, lege eine kleine Webseite an und nutze ein php Script, um das Kommando auszuführen.
            Alternative: Installiere fhem und nimm Genshellswitch.

            Gruss Stefan

          5. Domiboss

            Erstmal vielen Dank für deine schnelle Antwort.

            Ich habe leider kein EDGE Windows 7 Nutzer. Habe die URL einfach mal in Internet Explorer / Mozilla eingefügt, die Zeigen die Übersetzung leider auch nicht an.
            Wenn ich diese aus Chrome raus kopiere und in einer Textdatei einfüge steht dort:
            http://192.168.178.xx:xxxx/send?{%22action%22:%22control%22,%22code%22:{%22device%22:%22Switch1%22,%22state%22:%22on%22}}

            Füge ich diese wiederum in der HA-Bridge ein kommt wieder ein dieser Fehler.

            Ich habe mir lighttp installiert, leider kann ich gar kein php, habe da schon etwas rum gebastelt, bisher erfolglos, ich habe ein shell script was die Schaltung kann aber keinen schimmer wie ich darauf zu greifen könnte 🙂

            Ich verzweifel langsam.

          6. ST Artikelautor

            Hi Domiboss,

            ich habe die URL probiert. Selber Fehler wie bei Dir. Dann mit https://url-encoder.de/ die URL umgewandelt. Selber Fehler. Vermutlich liegt das an HABridge. Mach bei habridge auf github einen Issue auf.

            Gruss Stefan

          7. Domiboss

            Vielen Dank Stefan,

            dann weis ich das der Fehler hier schon mal nicht vor dem Bildschirm sitzt. Werde ich dann machen. Werde mich dann mal in php einlesen und versuchen, es so lange mit scripten zu lösen.

    2. Domiboss

      Hi, ich habe es jetzt bei mir gelöst bekommen ohne Webserver.

      bei device Typ: Execute Script/program wählen

      als on URL: home/pi/lampe.sh

      Ich muss wohl sagen das bei mir ein einfacher Schaltbefehl dadrin ist.
      Wie dieser:

      #!/bin/bash
      sudo pilight-send -p intertechno_old -i 0 -u 4 -f

      Weil ich nicht mehr weiter wusste habe ich in den Einstellungen rum gespielt.

      Man bin ich froh das es jetzt läuft.

      Antworten
        1. ST Artikelautor

          Ich habe Script Methode oben ergänzt. Hatte ich ursprünglich gar nicht gesehen. Prima.
          Allerdings ist diese Möglichkeit auch ein Sicherheitsloch in den pi. Jeder kann über diesen Weg mit root Rechten Scripte & Programme auf dem Pi ausführen.

          Gruss Stefan

          Antworten
  2. Henry

    Hallo, die Anleitung scheint ganz einfach zu sein, aber ich bekomme es nicht zum laufen:

    pi@raspberrypi:/etc/init.d $ /etc/init.d/habridge start
    /etc/init.d/habridge: 12: /etc/init.d/habridge: Syntax error: „(“ unexpected

    woran kann es liegen?
    Gruß Henry

    Antworten
    1. ST Artikelautor

      Hi Henry,

      schau mal mit
      sudo nano /etc/init.d/habridge
      in die Datei. In Zeile 12 sollte überhaupt keine Klammer sein.

      Gruss Stefan

      Antworten
  3. Matthias

    Hallo zusammen,
    echo erkennt meine ha bridge plötzlich nichtmehr, meint dass die geräte offline sind. Aber sie lassen sich noch ansprechen, nur neue Geräte werden nicht erkannt. Alles schon neu gestartet brachte aber auch nichts. Ich habe mein Problem auch schon im FHEM Forum beschrieben bisher aber noch keine Antwort. Hatte das schon jemand?

    Gruß
    Matthias

    Antworten
    1. ST Artikelautor

      Schuss ins Blaue: Netzwerkprobleme am pi? – Pi per WLAN eingebunden? – Viele WLAN Dongles sind am Pi instabil. Probiert mal Kabel, um das Problem einzukreisen.

      Gruss Stefan

      Antworten
      1. Matthias

        Hallo Stefan, danke für den Tip aber mein Pi ist per LAN angebunden, das Problem kann ich ausschlißen.
        Gruß
        Matthias

        Antworten
  4. Martin

    Hi,

    auch von mir Dank für die Anleitung.
    Leider bekomme ich beim Start des Scripts folgenden Fehler:

    Starting habridge
    /etc/init.d/habridge: 36: /etc/init.d/habridge: cannot create /var/run/habridge.pid: Permission denied
    Unable to start, see /var/log/habridge.log and /var/log/habridge.err
    /etc/init.d/habridge: 34: /etc/init.d/habridge: cannot create /var/log/habridge.log: Permission denied

    Wo liegt der Fehler?

    Antworten
    1. Martin

      Als Sudo kann ich das Script starten. Dann startet es aber nicht automatisch wenn ich das System neu starte.

      Momentan führe ich nach jedem Start folgenden Befehl aus:
      sudo /etc/init.d/habridge start &

      Gruss Martin

      Antworten
      1. ST Artikelautor

        Hallo Martin,

        alles was über den init.d Mechanismus gestartet wird, läuft als User root. Schau mal nach einem Systemstart nach, unter welchem User gestartet wurde (–> „ps aux“ in der Bash eingeben und nach der Zeile mit habridge suchen).

        Gruss Stefan

        Antworten
        1. Martin

          Hi Stefan,
          danke für die Antwort. Nach einem Systemstart habe ich keinen Eintrag unter „ps aux“ der mit habridge.

          Nach Start des Scripts „sudo /etc/init.d/habridge start &“ diese beiden:

          root 2051 0.0 0.3 5700 3192 pts/0 S 08:59 0:00 sudo -u root DEBUG=* /usr/bin/java -jar -Dserver.port=81 -Dconfig.file=/home/pi/habridge/data/habridge.config /home/pi/habridge/ha-bridge-3.5.1.jar

          root 2058 1.3 3.9 317664 37028 pts/0 Sl 08:59 0:03 /usr/bin/java -jar -Dserver.port=81 -Dconfig.file=/home/pi/habridge/data/habridge.config /home/pi/habridge/ha-bridge-3.5.1.jar

          Antworten
          1. Martin

            Hallo Martin hier ist Martin! 😀

            Ich hatte da gleiche Problem wie Du.
            Ich habe jetzt in de Datei /etc/rc.local
            vor dem exit 0
            sudo /etc/init.d/habridge start
            geschrieben.

            Das läuft bei mir.

  5. Matthias

    Hallo zusammen,

    können meine Alexa Probleme daher kommen, dass ich nicht die aktuelle HA Bridge Version habe sondern noch 3.5.1? Wie aktualisiere ich die HA Bridge?
    Gruß
    Matthias

    Antworten
    1. ST Artikelautor

      Hallo Matthias,

      lade einfach die neue Version herunter und ersetze die jar Datei. habridge ist in ein java Archiv gepackt (.jar). Neues jar Datei -> neue Version. Du musst dann noch den Dateinamen der gestarteten Version im Starterscript ändern.

      Gruss Stefan

      Antworten
  6. Matthias

    Hallo zusammen,
    So geschafft neue HA Bridge Version installiert.
    Aber Alexa findet die HA Bridge trotzdem nicht.
    Hat noch jemand eine Idee?
    Gruß
    Matthias

    Antworten
    1. ST Artikelautor

      Hi Matthias,

      das Problem kenne ich nicht. Die Sache würde aber schief gehen, wenn pi und Alexa in unterschiedlichen Subnetzen sitzen. Man kann bei manchen Routern auch den Netzwerkverkehr zwischen den angeschlossenen Geräten blocken. Und letzter Schuss ins Blaue: an einer Easybox 802 hatte ich schon mal Ärger, weil das Ding ab einer gewissen FW Version alle Broadcasts blockiert.

      Gruss Stefan

      Antworten
  7. Matthias

    Hallo zusammen,
    mit sudo funktioniert es.
    nohup sudo java -jar /home/pi/habridge/ha-bridge-4.0.2.jar
    Leider funktioniert das nohup nicht also wenn ich das putty fester schliesse ist auch der server wieder weg 🙁

    Antworten
    1. Matthias

      Problem gelöst wenn ich das sudo vor das nohub setze bleibt der Server laufen, ich weis nur nicht warum es bei mir nicht ohne sudo wie in dem Beispiel funktioniert.

      Antworten
    1. ST Artikelautor

      Hallo Marc,

      Du hast exakt mein Beispiel abgetippt. Das funktioniert bei mir zu Hause, weil ich einen Raspberry Pi mit dem Netzwerknamen pi habe, der fhem auf Port 8083 betreibt und im Wohnzimmer ein Gerät namens Stehlampe hat. Das hast Du vermutlich bei Dir nicht und deshaln meckert habridge (zu Recht). Du musst eine URL eintragen, die bei Dir etwas schaltet.

      Gruss Stefan

      Antworten
    1. ST Artikelautor

      Hallo Martin,

      eine Hue Lampe hängt erst einmal nicht im Wlan. Da kannst Du dann natürlich keine Netzwerkverbindung aufbauen. Bei Hue brauchst Du einen Bridge, welche die Lampen ins Wlan einbindet. Das funktioniert dann auch direkt und ohne Umweg mit dem Echo.

      Gruss Stefan

      Antworten
  8. Robin

    Hallo,

    erst einmal muss ich ein Lob für diese wunderbare Anleitung aussprechen! Allerdings funktioniert es bei mir leider nicht komplett. Ich habe zwei Raspberry Pi 3. Auf dem einen habe ich Alexa installiert (Alexa AVS Sample App). Auf dem zweiten Pi läuft die neueste HA-Bridge (Version 4.2.0). Nur leider findet Alexa keine Geräte.
    Beide Pi’s sind mit per LAN angeschlossen.
    Kann es vielleicht sein, dass die Raspberry Pi – Variante von Alexa (sprich die Alexa Sample App) gar keine Smart-Home-Geräte unterstützt? Weiß da vielleicht jemand mehr?

    Gruß Robin

    Antworten
    1. ST Artikelautor

      Hallo Robin, ich habe das selbst nicht probiert. Ich habe aber schon mal gelesen, dass dir Alexa Smarthome Funktionen nicht mit AVS klappen. Offenbar kann so kein lokales Netzwerk zugegriffen werden. Man muss aktuell wohl eine original Alexa HW haben.

      Gruss Stefan

      Antworten
  9. Pingback: Amazon Echo Smart Home - Pi, HABridge & Pilight | joshco

  10. Tobias

    Hallo,

    ich habe das Problem, dass meine Skripte nicht asugeführt werden. Wenn ich Alexa sage „schalte den Raspberry pi aus“ antwortet sie mit „OK“ es tut sich allerdings nichts. Starte ich das Skript auf dem Raspberry Pi manuell funktioniert das Skript. Ich verwende die Version 4.5.0, hier sieht die Oberfläche von ha-bridge etwas anders aus, aber ich denke da ich ja keine Fehlermeldungen bekomme habe ich alles richtig eingesgtellt. Ich kann mir leider nicht erklären warum das Skript nicht startet. Hat jemand eine Ahnung?

    Gruß Tobias

    Antworten
  11. Polel

    Vielen Dank für die tolle Anleitung. Hab das ganze modifizeirt für die aktuelle Version 4.3.1
    Hier muss der Eintrag, der die .jar Datei aufruft entsprechend angepasst werden im Starterscript: habridge

    Ich musste allerdings auch noch das var verzeichnis Rechtemäßig noch anpassen.
    weil er beim Starten gemeckert hat, dass die /var/run/habridge.pid nicht erstellen konnte.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.