Vielleicht geht es Euch wie es mir ging, nachdem ich den Amazon Echo ein paar Wochen im Betrieb hatte. Wir haben uns gleich zu Anfang einen großen Amazon Echo und einen kleinen Amazon Echo Dot zugelegt (Nachtrag am 09.08.2018: Dank Amazon Prime Day jetzt stolzer Besitzer von 3 Amazon Echo Dot und 2 Amazon Echo, sowie 2 Fire TV Sticks 🙂 ).
Nach den ersten Spielereien mit der netten Dame aus dem Böxle haben wir festgestellt, das wir Sie primär zum Musik hören nutzen. Jetzt ist es so, das wir als Amazon Prime Kunden zwar “nur” die kleine Variante von Amazon Musik nutzen können, welche zwar um die 2000000 Songs beinhaltet, aber man nicht von beiden Amazon Echo auf Amazon Musik gleichzeitig zugreifen kann. D.h. bisher hat einer Amazon Musik gehört, der andere dann TuneIn Radio.
So richtig zufriedstellend fand ich das alles nicht, zumal ich doch eine recht große eigene MP3 Musiksammlung im Laufe der Jahre angesammelt habe. Folgende Gedanken gingen mir dabei durch den Kopf:
Nach längerer Suche bin ich über das inoffizielle deutsche Alexa und Echo Forum gestoßen, in welchem der Benutzer Waringer folgenden Thread eröffnet hat: Alexa-Radio
Hier mal eine kurze Zusammenfassung. Der Benutzer Waringer hatte das gleiche Problem, nichts im Internet gefunden und daraufhin selbst was programmiert. Der Skill ist kein fertiges Produkt, d.h. Ihr müsst Euch ein wenig mit Internet, Webserver und vielleicht Linux auskennen, aber ich hatte stehts super Unterstützung durch Waringer erfahren dürfen. Diese Unterstützung möchte ich jetzt auf diesem Weg weitergeben und erstelle hierzu eine möglichst detailierte Anleitung.
Zu aller Anfang etwas Theorie. Im Prinzip läuft das ganze so ab. Bei Amazon Developer wird eine private Skill Information erstellt. Eine Anleitung hierzu kommt später. In dieser Skill Information wird eine URL hinterlegt, wo Amazon den “eigentlichen Skill” findet. Bei mir habe ich das folgendermaßen gelöst:
Ich werde hier jetzt nicht darauf eingehen wie man ein Windows oder Linux installiert, genauso wenig, wie man einen Apache2 Webserver installiert, aber auf meine Konfigurationen werde ich eingehen.
Auf dem externen Server habe ich eine Config, welche alles was auf Port 80 ankommt, auf Port 443 weiterleitet.
Sobald man dann auf dem Port 443 anklopft (was Amazon auf jeden Fall macht) kommt diese Config zum Einsatz:
<IfModule mod_ssl.c> <VirtualHost extern.myprivatefqdn.tld:443> ServerAdmin webmaster@myprivatefqdn.tld ServerName extern.myprivatefqdn.tld # URL Zeile vom Browser wird auf http://192.168.1.236:1280 umgeschrieben, somit intern Zugriff, extern kein Zugriff #<Directory "/soundfiles/"> RedirectMatch ^/soundfiles/(.*)$ http://192.168.1.236:1280/$1 #</Directory> # Weiterleitung an Skill Radio, welcher auf Port 3081 im Webserver läuft Proxypass "/echo/radio" "http://192.168.1.236:3081/echo/radio" ProxyPassReverse "/echo/radio" "http://192.168.1.236:3081/echo/radio" LogLevel debug ErrorLog ${APACHE_LOG_DIR}/alexa-radio_error.log CustomLog ${APACHE_LOG_DIR}/alexa-radio_access.log combined SSLCertificateFile /etc/letsencrypt/live/extern.myprivatefqdn.tld/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/extern.myprivatefqdn.tld/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
Wenn Du im Browser die URL http://extern.myprivatefqdn.tld (also HTTP Port 80) eintippst, wirst Du auf https://extern.myprivatefqdn.tld (also HTTPs Port 443) weitergeleitet und siehst ….. nichts, also nur eine leere Seite. Für Scriptskids völlig uninteressant.
Solltest Du jedoch die URL https://extern.myprivatefqdn.tld/soundfiles/ aufrufen, erfolgt ein RedirectMatch auf die URL http://192.168.1.236 auf Port 1280. Die Webseite welche mir angezeigt wird, ist mein MP3 Verzeichis von 0 bis 9 und A bis Z. Das kommt aus dem Grund zustande, da ich ja im Vorfeld auf dem internen Webserver
1. einen Mount von meinem QNAP NAS auf einen internen Mountpoint gemacht habe (nur lesend!) und
2. dann im HTML Verzeichnis vom internen Apache Webserver (welches auf Port 1280 hört) mit symbolischen Links diese interne Verzeichnis dort optisch zur Verfügung stelle.
Somit kann ich mich “intern” durch die MP3 Verzeichnisse mit dem Browser durchklicken bis ich auf der eigentlichen MP3 Datei bin und diese theoretisch im Browser anhören. Ruft man die URL https://extern.myprivatefqdn.tld/soundfiles/ jedoch von “außerhalb” meines private Netzwerks auf, ist die IP 192.168.1.236 ja gar nicht bekannt, da diese privaten IPs nicht ins Internet geroutet werden.
Damit sind wir auf dem externen Webserver erst mal fertig.
Auf der GitHub Seite von Waringer solltet Ihr mal alles durchlesen. Dort wird das Zusammenspiel auch nochmals graphisch dargestellt. Wir wissen in unserem Beispiel aber auch, das es im externen Webserver in der Config die Zeilen
# Weiterleitung an Skill Radio, welcher auf Port 3081 im Webserver läuft
Proxypass "/echo/radio" "http://192.168.1.236:3081/echo/radio" ProxyPassReverse "/echo/radio" "http://192.168.1.236:3081/echo/radio"
gab. Wozu werden die jetzt benötigt. Ich habe ganz oben erwähnt, das man im Amazon Developer eine URL hinterlegen muss. Das ist die URL, auf dem der eigentliche "programmierte" Skill läuft. D.h folgendes wird der Reihe nach passieren.
Der Skill wurde mit der Programmiersprache Go durch Waringer programmiert. Du musst diese also zuerst auf dem internen Webserver installieren. Die Anleitung auf deren Homepage ist aber recht gut. Danach müssen die beiden Dateien radio.go und scanner.go kompiliert werden. Die auf der GitHub beschriebene Datei radio.conf wird nicht während die Kompilierungsphase gebraucht, sondern erst dann, wenn die kompilierte Datei radio gestartet wird.
Nachtrag am 09.08.2018:
Nachdem ich jetzt ca. 3 Wochen im Urlaub war, musste ich selbst feststellen, das gewisse Befehle auf der Linux Konsole in Verbindung mit dem Alexa-Radio Skill mir geistig abhanden gekommen sind (was eigentlich für einen erholsamen Urlaub spricht). Von daher schreibe ich hier einfach mal ein paar Befehlszeilen auf, damit man diese parat hat.
Mit
./build.sh
werden die ganzen *.go Dateien kompiliert.
Nach dem erfolgreichen Kompilieren müssen die beiden Dateien
bin/radio
und
bin/scanner
in das Verzeichnis
/usr/local/bin/
kopiert werden.
Im Verzeichnis
/etc
liegt die Datei radio.conf, welche auf eure individuellen Systemvorausetzungen angepasst sein muss. Diese Datei wird nur beim starten des Skills ausgelesen und benötigt (jedoch nicht beim Kompilieren).
Im Serververzeichnis
/etc/systemd/system
befindet sich die Datei alexa-radio.service mit dem Inhalt
[Unit] Description=Alexa-Radio After=network.target mysqld.service [Service] ExecStart=/usr/local/bin/radio -c /etc/radio.conf Type=simple WatchdogSec=30s Restart=on-failure [Install] WantedBy=multi-user.target
Eingeschaltet bzw. aktiviert wird es mit dem Befehl
systemctl enable alexa-radio.service
Danach kann man den Skill mit
systemctl start alexa-radio.service
starten und mit
systemctl stop alexa-radio.service
stoppen.
Falls Ihr mal die Datenbank zwischendurch updaten müsst, geht das so
mysql -u Benutzername -p Passwort < sql/dateiname.sql
Damit wird die SQL Datei mit den Credentials gleich in die Datenbank “geschossen”
Ebenso könnt Ihr via Shell die Datenbank abfragen. Meldet euch dazu zuerst an der MariaDB mit
mysql -u Benutzername -p Passwort
an. Danach werdet Ihr (vermutlich) nochmals nach einem Passwort gefragt.
Jetzt könnte Ihr folgendes SQL Statement kopieren und in die Shell einfügen. Bitte ersetzt dabei den Platzhalter %abba% durch z.B. %new york%, halt den String, den Ihr in der Datenbank finden wollt. Bitte die beiden “%” Zeichen vor und nach dem String dran lassen!
SET @search='%abba%';SELECT TracK.* FROM TracK LEFT JOIN ArtisT ON TK_AT_id = AT_id LEFT JOIN AlbuM ON TK_AM_id = AM_id WHERE TK_Name LIKE @search OR TK_Comment LIKE @search OR AT_Name LIKE @search OR AM_Name LIKE @search;
Mit der Tastenkombination
Ctrl + C
kommt Ihr wieder auf die normale Shell zurück
An dieser Stelle werde ich jetzt erst mal nicht mehr weiter schreiben, da es mehr Sinn macht, auf Fragen von Dir / Euch zu antworten und diese dann weiter in die Anleitung einfließen zu lassen.
Schreibt bitte auch gerne in die Kommentare, was euch gut gefällt oder auch was euch gar nicht gefällt, bzw. was Ihr noch vermisst, damit wir diese Anleitung immer besser machen.
Die oben stehende Anleitung hat bei mir gut funktioniert, jedoch bin ich von meiner QNAP NAS abgekommen. Meine Daten liegen zu auf der pCloud, sodass ich das Konzept der obigen Anleitung nicht mehr verfolge und betreibe. Von daher bitte ich um Abstand mit Fragen zu halten, da ich einfach nicht mehr im Thema bin.