Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren

Nachdem Amazon Alexa nun auch auf Deutsch verfügbar ist, können wir es endlich in vollem Umfang auf dem Raspberry Pi nutzen. Im Vergleich zu den Amazon Echo bzw. Amazon Echo Dot Geräten bietet die Installation auf einem Raspberry Pi nicht nur preislich große Vorteile, sondern kann auch noch weiter angepasst und individualisiert werden. Außerdem gestattet Amazon es eigene Programme / Apps für die Platform zu schreiben, womit man eigene Projekte, die eine Sprachsteuerung bekommen sollen, voranbringen kann.

In diesem Tutorial gibt es eine vollständige Anleitung zur Installation und Einrichtung von Amazons Sprachassistentin „Alexa“. Da die Einrichtung etwas umfangreicher ist, gehen wir detailiert durch alle Schritte.

Wer bereits einen Vorgeschmack auf den Alexa Voice Service haben möchte, kann sich bereits dieses Demovideo einer Präsentation ansehen.

 

Amazon Alexa Zubehör für den Raspberry Pi

Die vollvertige Amazon Echo Variante ist zwar um einiges schicker als ein einfacher Raspberry Pi, aber kostet eben auch dementsprechend. Selbst das kleinere Echo Dot kostet fast so viel wie zwei Raspberry Pi’s. Und ehrlich gesagt macht es doch auch mehr Spaß selber etwas zu schaffen, als nur zu konsumieren 🙂 Und selbst wenn man die Kosten des Zubehörs und sogar eines Raspberry Pi’s zusammenrechnet ist man in der selben Preisregion – nur eben, dass der Pi noch viel mehr kann.

Eine zwingende Vorraussetzung ist eine bestehende Internetverbindung. Außerdem muss mindestens ein Raspberry Pi 2 Model B verwendet werden. Der Vorteil eines Raspberry Pi 3 ist, dass bereits ein Wlan und Bluetooth Adapter eingebaut ist, wodurch man keinen externen kaufen muss.

Das folgende Zubehör wird jedoch in jedem Fall dem dem Raspberry Pi benötigt:

Optimal sind dazu außerdem:

Bis auf die Micro SD Karte kann bereits alles angeschlossen werden. Warte jedoch noch, bis du den Strom verbindest, denn vorher müssen wir das Betriebssystem aufspielen.

Zusätzlich gibt es schon einige mit Alexa kompatible Smart Home Geräte, welche sich steuern lassen. Diese reichen von Funksteckdosen über Philips Hue Light bis hin zu Thermostaten. In Zukunft werden sich hier sicherlich noch viele weitere Geräte mit einreihen.

 

Vorbereitung – Raspbian übertragen

Bevor wir mit dem eigentlichen Download von Amazon Alexa starten können, müssen wir unsere SD Karte mit einem entsprechenden Betriebssystem ausstatten. Hierzu bietet es sich an, die neuste Version des Raspbian OS (Jessie) zu laden. Diese bekommst du hier. Die enthaltene Datei ist im „.img“ Format und muss mit einem Programm wie WinRar, 7Zip o.ä. entpackt werden. Anschließend können wir das Abbild auf die MicroSD Karte übertragen. Ein Tutorial, wie dies am einfachsten über Windows geht, findest du hier:

Raspberry Pi Raspbian OS auf eine SD-Karte übertragen (Windows)

Bevor du die SD Karte in den Raspberry Pi steckst, empfehle ich noch SSH zu aktivieren, da dies inzwischen standardmäßig deaktiviert ist. Dazu erstellst du im Hauptverzeichnis der SD Karte (nachdem das Betriebssystem installiert wurde) eine Datei mit dem Namen ssh bzw. ssh.txt, wodurch du direkt per SSH auf den Pi zugreifen kannst, sofern er mit dem Netzwerk verbunden ist.

Im weiteren Verlauf wird es nötig, auf den Raspberry Pi Desktop zuzugreifen. Du kannst dies entweder, indem du Bildschirm, Tastatur und Maus direkt anschließt (in diesem Fall brauchst du SSH nicht zu aktivieren) oder aber z.B. per Remotedesktop arbeiten. Dies hat den Vorteil, dass du auf die graphische Oberfläche des Pi’s von deinem eigentlichen PC zugreifen kannst. Eine einfache Anleitung dazu findest du hier:

Raspberry Pi Remotedesktop Verbindung einrichten

In der Regel schließe ich zunächst ein LAN Kabel an und richte dann das Wlan entweder per Konsole oder per Desktopoberfläche ein.



 

Vorbereitung – Entwickleraccount

Legen wir nun den benötigten Amazon Developer Account an. Dazu rufen wir developer.amazon.com auf und erstellen einen neuen Account, sofern nicht bereits ein bestehender Account auf amazon.com besteht. Die AGBs müssen aktiviert werden.

Um gleich alles auf dem Raspberry Pi einrichten zu können, müssen wir ein sog. Security Profile erstellen. Dazu klicken wir nach dem Login in der oberen Menüleiste auf „Alexa“ und anschließend auf Alexa Voice Service auf „Get Started“.

Raspberry Pi Amazon Alexa Einrichtung

Anschließend drücken wir auf den Button „Register a Product Type“ und darunter „Device„.

Nun werden einige Fragen zum Typ des Geräts (Device Type Info) gemacht. Ich habe hierbei folgendes gewählt:

  • Device Type ID: RaspberryPiAlexa
  • Display Name: Raspberry Pi Alexa

Hinweis: Einige Nutzer berichteten von Problemen, bei Namen mit Groß- & Kleinschreibung. Auch wenn es bei mir ohne Probleme funktioniert hat, würde ich empfehlen nur die Kleinschreibung bei Device Type ID und Display Name zu verwenden.

Solltest du auf mehreren Raspberry Pi’s Amazon Alexa installieren, so müssen die ID’s natürlich unterschiedlich sein.

Weiter geht es mit dem nächsten Menüpunkt auf der linken Seite (Security Profile). Auf der Seite wählst du unter „Security Profile“ -> „Create a new Profile“ und füllst die folgenden beiden Eingabefelder darunter z.B. folgend aus:

  • Security Profile Name: Alexa Voice Service Sample App Security Profile
  • Security Profile Description: Alexa Voice Service Sample App Security Profile Description

Drücke folgend auf Next.

 

Anschließend werden dir Client ID und Client Secret angezeigt. Notiere diese, da wir sie gleich brauchen werden.

Klicke nun oben auf Edit und anschließend auf Web Settings. Durch das Klicken von Add Another erscheinen Textfelder, in welche zusätzliche Daten kommen:

  • Allowed Origin: https://localhost:3000
  • Allowed Return URLs: https://localhost:3000/authresponse

Drücke anschließend wieder auf Next, womit die Daten gespeichert werden.

Nun werden einige Details zur Nutzung gefragt. Diese habe ich folgend ausgefüllt:

  1. Image: leer (optional kannst du hier ein Icon der Größe 142×130 px hochladen. Muss aber nicht.)
  2. Category: other
  3. Description: Mein Raspberry Pi Alexa
  4. Do you have plans to make your product available to the general public? No
  5. Is your device a children’s product or is it otherwise directed to children under the age of 13? No

Anschließend auf Next.

Nun wirst du noch gefragt, ob du Amazon Music aktivieren willst. Falls du ein Abonnement hast kannst du Yes wählen und die weiteren Angaben eintragen. Allerdings ist es nicht zwingend erforderlich und kann daher auch mit No übersprungen werden.

Als letztes drückst du nun Submit und die Einrichtung ist vollendet. Du wirst zur ursprünglichen Übersichtsseite zurückgeleitet, wo das angelegte Gerät nun aufgelistet ist.

 

Installation der Beispiel Amazon Alexa App

Zunächst laden wir das Projekt von Github in unser Homeverzeichnis. Dazu starten wir den Pi, öffnen ein Terminal-Fenster und geben folgendes ein:

git clone https://github.com/alexa/alexa-avs-sample-app.git

Anschließend müssen wir die vorher aufgeschrieben Daten (Product ID, Client ID und Client Secret) im automated_install.sh Skript innerhalb des Verzeichnisses angeben. Die Bearbeitung kann entweder über einen Editor mit GUI oder dem Editor auf der Kommandozeile stattfinden. Wir wechseln also in den Ordner und bearbeiten die Datei:

cd ~/alexa-avs-sample-app
sudo nano automated_install.sh

Hierin befinden sich 3 Zeilen, in welche wir die notierten Werte ersetzen. Achte darauf, dass nach dem Gleichheitszeichen sowie am Ende der Zeile sich kein Leerzeichen eingeschlichen hat.

 

Drücke STRG+O, um die Datei zu speichern und anschließend STRG+X um den Terminal-Editor zu beenden.

 

Nun können wir das Skript starten. Sofern du noch in dem Ordner bist, kannst du es direkt ausführen, ansonsten wechseln wir vorher wieder in diesen Ordner:

cd ~/alexa-avs-sample-app
. automated_install.sh

Es werden nun einige Fragen gestellt. Überprüfe die Antworten und bestätige entsprechend mit y.

  • Als viertes wird nach der Spracheinstellung gefragt. Wähle (3) de-DE, um Alexa auf Deutsch nutzen zu können!
  • Wähle 3.5mm Audio Jack als Audioausgabe
  • Wähle, ob das „Wake Word“ aktiviert werden soll (ich kann verstehen, wenn man nicht möchte, dass dauerhaft zugehört wird, allerdings habe ich es testweise aktiviert)

Danach läuft die Installation durch und dauert ca. eine halbe Stunde. Zwischendrin kommt eine Infomeldung, welche man lesen muss und mit q bestätigen (Achte also hin und wieder darauf).

 

Starten von Amazon Alexa auf dem Raspberry Pi

Um die Beispielanwendung zu starten, werden mehrere Terminal Fenster benötigt:

  1. Zum Starten des Authentifikation Webservices.
  2. Zur Kommunikation der Anwendung mit AVS.
  3. Damit das Wort „Alexa“ automatisch erkannt wird und die Spracheingabe beginnt.

Starten wir also mit Terminal 1. Öffne eine neue Instanz und gib folgende Kommandos ein:

cd ~/alexa-avs-sample-app/samples/companionService && npm start

 

Wir öffnen nun eine weitere Instanz und führen folgendes in Terminal 2 aus:

cd ~/alexa-avs-sample-app/samples/javaclient && mvn exec:exec

Folgende Fenster erscheinen:

Drücke im unteren Popup Yes und warte einen Augenblick. Der Browser sollte sich öffnen (falls nach 30 Sekunden sich nichts geöffnet hat, starte einen Browser manuell und kopiere die bei dir angezeigte URL). Der Browser wird eine Warnung anzeigen („Your connection is not private“).

Drücke unten auf Advanced und anschließend auf Proceed to localhost (unsafe). Du wirst nun zur amazon.com Seite weitergeleitet, unter der du dich mit deinen Amazon.com Developer Account Daten anmeldest. Es folgt eine Abfrage, ob du dieser App auch wirklich Zugriff gewähren willst. Drücke Okay.Du wirst anschließend zurückgeleitet und die Nachricht „device tokens ready“ wird angezeigt. Minimiere den Browser und kehre zurück in das Popup, welches sich vorhin geöffnet hat. Drücke OK, wodurch der Authentifizierungtoken kopiert wird. Ist im anderen Fenster nun der „Bearer Token“ vorhanden, kannst du den Browser wieder schließen.

Soweit so gut: Im Grunde genommen können wir Alexa nun bereits testen, indem wir den Listen Button drücken und nach dem Gong etwas sagen, wie z.B.

  • „Wie wird das Wetter morgen in Berlin?“
  • „Wie viel ist eine Meile in Kilometern?“
  • „Was ist die Wurzel aus 16?“
  • „Wie weit ist es von Hamburg nach Frankfurt?“
  • usw.

Dabei kann die Aufnahme durch erneutes Drücken des Buttons gestoppt werden bzw. nach kurzer Zeit ohne Stimmenklang wird automatisch gestoppt und eine Antwort gesucht. Übrigens: Die Play/Pause und Vor/Zurück Buttons sind für Musik (falls welche abgespielt wird), damit man die Wiedergabe auch manuell verändern kann.

 

Der letzte Schritt ist nur für jene, die eine automatische Befehlserkennung möchten, indem man „Alexa“, gefolgt von der Frage/Befehl, aufsagt. Möchtest du dies nicht, kannst du es überspringen.

Wir öffnen also ein weiteres Terminal 3 Fenster. Für die Erkennung gibt es zwei Möglichkeiten: Zum einen Sensory sowie KITT.AI. Beides sind Sprachengines und können sog. Wake Words erkennen. Führe dazu folgenden Befehl aus (für Sensory ersetze -e kitt_ai mit -e sensory):

cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e kitt_ai

Nun wird die Spracheingabe automatisch nach dem Wort „Alexa“ aktiviert (nach dem Beep sprechen).

 

Man muss allerdings erwähnen, dass (noch) nicht alle Aktionen, die auf dem normalen Amazon Echo (Dot) verfügbar sind, auch auf der Raspberry Pi Variante aufrufbar sind. Um künftige News nicht zu verpassen, lohnt ein Blick in den Developer Blog von Amazon. Wer außerdem darüber nachdenkt eigene Anwendungen zu schreiben, sollte einen Blick in die API Dokumentation werfen. Für weitere Fragen (zu Features und/oder dem Projekt) ist das Support-Forum der Anwendung der richtige Ort zum nachsehen.

 

Automatischer Start ohne drei Terminal Fenster

Raspberry Pi Nutzer zoranserbe hat in den Kommentaren eine kleine Anleitung gepostet, wie man das ganze ohne manuelles Starten der Terminal Fenster automatisch starten lassen kann. Dafür ist eine einmalige Einrichtung vorher aber erforderlich. Danach folgende Schritte:

  1. Erstellt eine leere .sh Datei und bennent sie wie ihr wollt.
    Meine heisst alexa-start.sh
  2. Fügt das folgende Skript in die Datei hinein:
    #!/bin/bash
    # erstes Terminal
    lxterminal -l -e "cd ~/alexa-avs-sample-app/samples/companionService && npm start;" &
    
    # Warten
    sleep 10s
    
    # zweites Terminal
    lxterminal -l -e "cd ~/alexa-avs-sample-app/samples/javaclient && mvn exec:exec;" &
    
    # Warten
    sleep 30s
    
    # drittes Terminal
    lxterminal -l -e "cd ~/alexa-avs-sample-app/samples/wakeWordAgent/src && ./wakeWordAgent -e kitt_ai;" &
  3. Speichert das Skript wo immer ihr wollt oder in den Ordner /home/pi/wie ich es gemacht habe.
  4. Dem File die benötigten Berechtigungen erteilen : chmod +x Dateiname.sh (in meinem Fall: chmod +x alexa-start.sh)
  5. Öffnet den Ordner /home/pi/.config/autostart. Wenn der Ordner autostart nicht vorhanden sein sollte dann erstellen (sudo mkdir /home/pi/.config/autostart).
  6. In dem Order /home/pi/.config/autostart eine neue Datei erstellen mit der Endung .desktop. In meinem Fall: alexa-start.desktop
  7. In die Datei mit der .desktop Endung folgendes kopiere und dann bearbeiten:
    [Desktop Entry]
    Comment=Comment
    Exec=/Pfad/für/dein/Skript/NameDesSkriptFiles.sh
    Name=NameDesSkriptFiles.sh
    Path=/Pfad/für/dein/Skript
    Type=Shell
  8. Neustarten und testen. Danach sollte die Alexa wie bei mir automatisch starten.

 

347 Kommentare

      • Kann ich den Aktivierungsnamen auch custom made machen? Wenn ich z.b. „Kitt“ anstatt ind er Konsole Alexa eingebe?

      • Kann es sein das ein Rechtschreibfehler bei „Security Profile Name“ die Funktion verhindert und wenn ja, weiß jemand wie man diesen Korrigieren kann ohne alles neu zu schreiben.
        Lg

    • Auf meinem Raspberry Pi Model 1 B läuft es hervoragend, allerdings ist er auch auf 1 GhZ übertaktet.

      LG Richard

      Antworten
    • leider komme ich an diesem Punkt nicht weiter.
      pi@raspberrypi:~ $ cd alexa-avs-sample-app/samples/javaclient && mvn exec:exec
      [INFO] Scanning for projects…
      [INFO]
      [INFO] ————————————————————————
      [INFO] Building Alexa Voice Service Sample Java Client 20160207.5
      [INFO] ————————————————————————
      [INFO]
      [INFO] — exec-maven-plugin:1.2.1:exec (default-cli) @ sample-java-client —
      Exception in thread „main“ java.lang.RuntimeException: Failed to load the native library.

      The error was „Unable to load library ‚vlc‘: Native library (linux-arm/libvlc.so) not found in resource path ([file:/home/pi/alexa-avs-sample-app/samples/javaclient/target/classes/, file:/home/pi/.m2/repository/commons-codec/commons-codec/1.9/commons-codec-1.9.jar, file:/home/pi/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar, file:/home/pi/.m2/repository/org/apache/commons/commons-lang3/3.4/commons-lang3-3.4.jar, file:/home/pi/.m2/repository/commons-fileupload/commons-fileupload/1.3.1/commons-fileupload-1.3.1.jar, file:/home/pi/.m2/repository/uk/co/caprica/vlcj/2.4.1/vlcj-2.4.1.jar, file:/home/pi/.m2/repository/net/java/dev/jna/platform/3.5.2/platform-3.5.2.jar, file:/home/pi/.m2/repository/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar, file:/home/pi/.m2/repository/javazoom/jlayer/1.0.1/jlayer-1.0.1.jar, file:/home/pi/.m2/repository/org/mortbay/jetty/alpn/alpn-boot/8.1.11.v20170118/alpn-boot-8.1.11.v20170118.jar, file:/home/pi/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar, file:/home/pi/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar, file:/home/pi/.m2/repository/org/slf4j/slf4j-api/1.7.10/slf4j-api-1.7.10.jar, file:/home/pi/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.3/log4j-slf4j-impl-2.3.jar, file:/home/pi/.m2/repository/org/apache/logging/log4j/log4j-api/2.3/log4j-api-2.3.jar, file:/home/pi/.m2/repository/org/apache/logging/log4j/log4j-core/2.3/log4j-core-2.3.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-alpn-client/9.3.7.v20160115/jetty-alpn-client-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-http/9.3.7.v20160115/jetty-http-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/http2/http2-client/9.3.7.v20160115/http2-client-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/http2/http2-http-client-transport/9.3.7.v20160115/http2-http-client-transport-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/http2/http2-hpack/9.3.7.v20160115/http2-hpack-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/http2/http2-common/9.3.7.v20160115/http2-common-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-server/9.3.7.v20160115/jetty-server-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-security/9.3.7.v20160115/jetty-security-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-servlet/9.3.7.v20160115/jetty-servlet-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-util/9.3.7.v20160115/jetty-util-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-io/9.3.7.v20160115/jetty-io-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/org/eclipse/jetty/jetty-client/9.3.7.v20160115/jetty-client-9.3.7.v20160115.jar, file:/home/pi/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar, file:/home/pi/.m2/repository/net/java/dev/jna/jna/4.1.0/jna-4.1.0.jar])“.

      The required native libraries are named „libvlc.so“ and „libvlccore.so“.

      In the text below represents the name of the directory containing „libvlc.so“ and „libvlccore.so“…

      There are a number of different ways to specify where to find the native libraries:
      1. Include NativeLibrary.addSearchPath(„vlc“, „“); at the start of your application code.
      2. Include System.setProperty(„jna.library.path“, „“); at the start of your application code.
      3. Specify -Djna.library.path= on the command-line when starting your application.
      4. Add to the system search path (and reboot).

      If this still does not work, then it may be necessary to explicitly add the native library directory to the operating
      system configuration – e.g. on Linux this might mean setting the LD_LIBRARY_PATH environment variable, or adding
      configuration to the „/etc/ld.so.conf“ file or the „/etc/ld.so.conf.d“ directory. Of these options, setting
      LD_LIBRARY_PATH is the only one that would not require root privileges.

      Finally, it is not possible to mix CPU architectures – it is not possible for a 64-bit Java Virtual Machine to load
      32-bit native libraries.

      More information may be available in the log, specify -Dvlcj.log=DEBUG on the command-line when starting your application.

      at uk.co.caprica.vlcj.binding.LibVlcFactory.create(LibVlcFactory.java:191)
      at uk.co.caprica.vlcj.player.MediaPlayerFactory.(MediaPlayerFactory.java:213)
      at uk.co.caprica.vlcj.component.AudioMediaPlayerComponent.onGetMediaPlayerFactory(AudioMediaPlayerComponent.java:168)
      at uk.co.caprica.vlcj.component.AudioMediaPlayerComponent.(AudioMediaPlayerComponent.java:102)
      at com.amazon.alexa.avs.AVSAudioPlayer.setupAudioPlayer(AVSAudioPlayer.java:252)
      at com.amazon.alexa.avs.AVSAudioPlayer.(AVSAudioPlayer.java:143)
      at com.amazon.alexa.avs.AVSAudioPlayerFactory.getAudioPlayer(AVSAudioPlayerFactory.java:18)
      at com.amazon.alexa.avs.AVSController.(AVSController.java:183)
      at com.amazon.alexa.avs.App.(App.java:47)
      at com.amazon.alexa.avs.App.(App.java:36)
      at com.amazon.alexa.avs.App.main(App.java:31)

      Antworten
    • Hallo Felix,
      kannst hier einmal schicken wie du das gemacht hast also das:
      [Desktop Entry]
      Comment=Comment
      Exec=/Pfad/für/dein/Skript/NameDesSkriptFiles.sh
      Name=NameDesSkriptFiles.sh
      Path=/Pfad/für/dein/Skript
      Type=Shell

      Genau mit deinen Daten bitte, ich weiß nicht was ich da einfügen soll.
      Vielen Dank

      Antworten
  1. Servus,

    Was mich interessieren würde. Beim Original Echo hört das Teil ja nur im 3 Sekunden Rhythmus zu ob das Signal Wort kommt. Erst beim Signal Wort wird ins Internet übertragen.

    Wie ist das mit der Software? Überträgt die ständig?

    Grüße

    Antworten