Amazon Alexa auf dem Raspberry Pi

Vorwort

Wer in den letzten Tagen TV gesehen hat, ist möglicherweise über die Werbung zum Echo gestolpert; hier beschreibe ich, wie Amazon Alexa auf dem Raspberry Pi getestet werden kann.

Voraussetzungen

Benötigt wird

Amazon Alexa

Zudem muss unter developer.amazon.com ein Account erstellt werden. Dort wird dann ein Gerät (Device) eingerichtet, danach ein Security Profile. Ist dies erledigt, erhält man eine Security Profile ID, Client ID und einen Schlüssel für den Client.

Device Type ID und Display Name sind frei wählbar, zu beachten sie die erlaubten Zeichen.

Wurde das Security Profile erstellt ist unter „Web Settings“ zunächst die Schaltfläche Edit zu betätigen, dann kann bei allowed origins „https://localhost:3000“ und bei allowed return URLs „https://localhost:3000/authresponse“ hinterlegt.

Software

Wir besorgen uns zunächst die Sample App (s. Voraussetzungen) und passen dort die Datei automated_install.sh an.

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

In der automated_install.sh sind die zuvor erstellten Daten zu hinterlegen. Unter ProductID wird die bei der Registrierung erstellte Device Typ ID hinterlegt. Unter ClientID die von Amazon vergebene Client ID, sie sieht in etwa so aus:

amzn1.application-oa2-client.abcdefg12345678901234567

Schließlich wird noch der Schlüssel (Secret) hinterlegt. Danach kann das Skript ausgeführt werden:

. automated_install.sh

Die Fragen sind abzuarbeiten, wichtig ist, dass als Sprache de-DE ausgewählt wird und die korrekte Quelle für die Soundausgabe. Wird das Wake Word „Alexa“ aktiviert, bedeutet dies, dass fortan das Mikrofon immer mitlauscht. Wer die Medien verfolgt wird wissen, dass Strafverfolgungsbehörden im Falle einer Straftat dieses Material (ob Mitschnitte nun tatsächlich existieren oder nicht) bei Amazon anfragen könnten. 😉 Liebe Leser, bitte begehen Sie keine Straftaten, mit oder ohne Alexa!

Nun heißt es angesichts der Rechenleistung des Einplatinencomputers warten, warten, warten…

Starten

Nach erfolgter Installation wird in drei Terminal Sessions der Web Service für die Authentifizierung, die Sample App sowie die wake word engine gestartet.

Terminal 1

Web Service für Authentifizierung starten:

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

 Sobald der Dienst gestartet und auf Port 3000 läuft, kann der Client (Sample App) gestartet werden.

Terminal 2

Starten der Sample App:

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

Jetzt muss die Registrierung im Browser erfolgen, zur Vereinfachung kann ausgewählt werden, dass die URL im Standardbrowser geöffnet werden muss (grafische Oberfläche zwingend erforderlich!). Es folgt dann eine Weiterleitung zu Amazon. Zur Registrierung des Geräts muss hier die Anmeldung am Amazon-Konto erfolgen.

Terminal 3

Im letzten Schritt wird der wake word agent installiert, dieser sorgt dafür, dass Alexa beim Ausruf des Worts „Alexa“ automatisch reagiert.

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

Das wars…

Test

Nun kann getestet werden, hierzu einfach „Alexa“ sagen und loslegen, z. B. mit der Frage „warum ist der Himmel blau?“

Have fun!

OVA mit Proxmox nutzen

Vorwort

Manche Lösungen werden als fertige VMs in Form von OVA-Downloads angeboten, hier beschreibe ich kurz, wie man OVA mit Proxmox nutzen kann.

Dateien extrahieren

Zunächst die Dateien aus der OVA extrahieren:

tar -xvf vm.ova

Nun kann die Konfiguration der VM eingesehen werden.

Konfiguration

Die Konfiguration befindet sich in der .ovf, hier ein Beispiel (stark gekürzt) für den Inhalt:

<?xml version="1.0"?>
<Envelope ovf:version="1.0" xml:lang="en-US" xmlns="http://schemas.dmtf.org/ovf/envelope/1" xmlns:ovf="http://schemas.dmtf.org/ovf/envelope/1" xmlns:rasd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" xmlns:vssd="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:vbox="http://www.virtualbox.org/ovf/machine">
  <References>
    <File ovf:href="VM-disk1.vmdk" ovf:id="file1"/>
  </References>
  <DiskSection>
  </DiskSection>
  <NetworkSection>
  </NetworkSection>
  <VirtualSystem ovf:id="VM">
    <Info>A virtual machine</Info>
    <OperatingSystemSection ovf:id="96">
      <Info>The kind of installed guest operating system</Info>
      <Description>Debian_64</Description>
      <vbox:OSType ovf:required="false">Debian_64</vbox:OSType>
    </OperatingSystemSection>
    <VirtualHardwareSection>
    </VirtualHardwareSection>
  </VirtualSystem>
</Envelope>

Danach wird die .vmdk konvertiert.

VMDK konvertieren

Die .vmdk muss konvertiert werden:

qemu-img convert -f vmdk vm-disk1.vmdk -O qcow2 vm-disk1.qcow2

Dies .qcow2 wird später in der VM verwandt.

VM erstellen

In Proxmox wird nun eine neue VM erstellt. Die Hardware (Netzwerk, HDDs, etc.) an die Informationen aus der .ovf anpassen.

qcow2 verschieben

Vor dem Start, wird die eben extrahierte Disk zur neuen VM verschoben, 999 ist hier durch die entsprechende ID der VM zu ersetzten:

mv vm-disk1.qcow2 /var/lib/vz/images/999/vm-999-disk-1.qcow2

Das waren alle notwendigen Schritte, nun kann die VM genutzt werden.

VM starten

Jetzt kann die VM gestartet werden.

Have fun!

Docker unter Debian

Einleitung

„Docker unter Debian“ beschreibt, wie die Open Source Software mit Debian genutzt werden kann. Docker dient der Virtualisierung von Anwendungen in Linux Containern. Der Artikel wurde unter Debian Jessy realisiert.

Vorbereitung

Für die weiteren Schritte wird curl benötigt:

apt-get install curl

Anschließend wir das Docker Repository eingerichtet. Daraus kann Docker schließlich installiert und aktulisiert werden.

Docker Repository

Los gehts…

apt-get install apt-transport-https ca-certificates software-properties-common

GPG-Key:

curl -fsSL https://yum.dockerproject.org/gpg | apt-key add -

Stable Repository hinzufügen:

add-apt-repository "deb https://apt.dockerproject.org/repo/ debian-$(lsb_release -cs) main"

Docker installieren:

apt-get update && apt-get -y install docker-engine

Das wars…

Test

Ein erster Test:

docker run hello-world

 

Have fun!

OwnTracks recorder – Speichern und Verwalten von Positionsdaten

Einleitung

Mit OwnTracks recorder können die von OwnTracks übermittelten Positionsdaten gespeichert und verwaltet werden. 

Installation

Für Debian 7 und 8, CentOS 7 und Raspbian (wheezy) steht ein Repository zur Verfügung. Hier für Debian 8:

wget http://repo.owntracks.org/repo.owntracks.org.gpg.key
apt-key add repo.owntracks.org.gpg.key
echo "deb  http://repo.owntracks.org/debian jessie main" > /etc/apt/sources.list.d/owntracks.list
apt-get update
apt-get install ot-recorder

Weiter mit der Konfiguration.

Konfiguration

Wer nach dem hier veröffentlichten Beitrag Mosquitto installiert hat, kann zunächst für den OwnTracks recorder einen Benutzer erstellen:

mosquitto_passwd /etc/mosquitto/passwd <BENUTZERNAME>

Im Anschluss muss dieser Benutzer in der Konfigurationsdatei /etc/default/ot-recorder hinterlegt und der Port auf 8883 angepasst werden.

OTR_PORT=8883
OTR_USER="<BENUTZERNAME>"
OTR_PASS="<PASSWORT>"

Nun kann der OwnTracks recorder mittel ot-recorder ‚owntracks/#‘ gestaret werden, die Ausgabe wie folgt:

ot-recorder[30465]: version 0.6.9 starting with STORAGEDIR=/var/spool/owntracks/recorder/store
ot-recorder[30465]: connecting to MQTT on localhost:8883 as clientID ot-recorder-openhab-30465 without TLS
ot-recorder[30465]: HTTP listener started on 127.0.0.1:8083
ot-recorder[30465]: Using storage at /var/spool/owntracks/recorder/store with precision 7
ot-recorder[30465]: Subscribing to owntracks/# (qos=2)

Wird vom Handy eine Position übermittelt, sieht das auf der Shell dann so aus:

- 21:15:09 owntracks/test/stefan             t=  tid=tt loc=49.xxxxx,7.xxxxx [DE] Musterstraße 1, 12345 Musterstadt, Germany (u0v0b7s)

Läuft bis hierhin alles, sollte noch dafür gesorgt werden, dass OwnTracks recorder automatisch mit dem Betriebssystem startet.

Service

Der Service sollte sich wie folgt einrichten lassen:

systemctl enable ot-recorder
systemctl start ot-recorder

Allerdings lässt er sich in meiner Konfiguration nicht starten. Als Workaround starte ich OwnTracks recorder stattdessen in /etc/rc.local:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

ot-recorder 'owntracks/#'

exit 0

Nach einem Neustart der Maschine wird der OwnTracks recorder dann ebenfalls gestartet. Weiter mit der Darstellung der Positionsdaten.

Web / Apache

Es wird empfohlen, den Zugriff über einen Reverse-Proxy zu realisieren, hier am Beispiel Apache. Zunächst einige Module aktivieren:

a2enmod proxy_wstunnel
a2enmod proxy_http
a2enmod proxy_html

Nun erstellen wir eine Kofiguration /etc/apache2/conf-available/ot-recorder.conf mit folgendem Inhalt:

ProxyPass        /owntracks/ws        ws://127.0.0.1:8883/ws keepalive=on retry=60
ProxyPassReverse /owntracks/ws        ws://127.0.0.1:8883/ws keepalive=on

# Static files
ProxyPass /owntracks                  http://127.0.0.1:8883/
ProxyPassReverse /owntracks           http://127.0.0.1:8883/

… und aktivieren diese:

a2enconf ot-recorder
service apache2 reload

Abschluss mit einem Test.

Ergebnis

Browser starten und http://<rechnername/ip>/owntracks/ öffnen. 🙂

Have fun!

Stefan Kraus' WordPress-Blog