Die folgende Anleitung ist für das aktuelle Paket Alexa.sh v5.11 gültig.
Wie bekomme ich das Paket?
Es gibt einen Verteiler für das kostenlos erhältliche Paket. Wie der Verteiler funktioniert und wie man auch zukünftig automatisch Updates erhält, ist am Ende dieses Beitrages in dem Abschnitt "Verteiler" beschrieben. Bitte die Hinweise entsprechend beachten.
alexa.sh, jq, base64 und iconv
Das Paket ist ein übliches .tar.gz-Archiv. Dieses muss auf die CCU3 kopiert werden (nach /usr/local/addons/) und dort entpackt werden. Eine Anleitung hierfür folgt im Abschnitt Installation. In dem Verzeichnis /usr/local/addons/alexa/ ist im Ergebnis dann das Startskript alexa.sh, die Konfigurationsdatei alexa_remote_contol.conf, cacert.pem sowie die Utilities jq, base64 (vollwertiges Binary der GNU/Coreutils) und iconv zu finden. Die mitgelieferten Binaries wurden für die ARMv7-Prozessorarchitektur kompiliert. Pakete für andere Prozessorarchitekturen (x86 und x86_64) sind ebenfalls verfügbar und können explizit angefragt werden.
Das "Lötzimmer-Skript" (alexa_remote_control.sh) wird beim ersten Aufruf von alexa.sh automatisch in das Installationsverzeichnis heruntergeladen, sofern dieses nicht im Installationsverzeichnis vorhanden sein sollte. Die persönliche Überprüfung der Downloadquelle und des Skriptes kann über folgenden Link durchgeführt werden: nodev11/alexa-remote-control (GitHub)
Installation
Das Paket wird, wie nachfolgend beschrieben, zunächst auf die CCU3 kopiert und erst dort entpackt.
- Das Paket nicht unter Windows entpacken, hierbei würden die (Linux-)Dateirechte verloren gehen.
- Die Verwendung des Pfades /usr/local/addons/alexa/ ist im Rahmen dieser Anleitung obligatorisch.
- Das Paket nach /usr/local/addons/ kopieren.
Code: Alles auswählen
cd /usr/local/addons/
Code: Alles auswählen
tar xvfz alexa-5.11.tar.gz
Sinnvoll ist weiterhin insbesondere auch die korrekte Einrichtung des Cronjobs (siehe Abschnitt "Cookie überprüfen").
Update von Alexa.sh v4.xx auf Alexa.sh v5.11
Für den nachfolgenden Punkt 2 kann z.B. WinSCP, für den Punkt 5 z.B. der interne Editor von WinSCP und für die Punkte 1, 3, 4 und 6 kann z.B. PuTTY verwendet werden.
- Umbennen des bisherigen Installationsverzeichnisses:
Code: Alles auswählen
mv /usr/local/addons/alexa /usr/local/addons/alexa_old
- Das neue Paket nach /usr/local/addons/ kopieren.
Code: Alles auswählen
cd /usr/local/addons/
- Die im Paket beinhalteten Dateien werden auf diesem Weg automatisch nach /usr/local/addons/alexa/ entpackt.
Code: Alles auswählen
tar xvfz alexa-5.11.tar.gz
- Übertragen der bisherigen Einstellungen aus/in alexa_remote_control.conf und alexa.conf (Refresh-Token, individuelle Einstellungen).
- Erneuern aller temporären Alexa-Dateien:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --renew-tmpfiles
Konfiguration
Die nachfolgenden Punkte bitte unbedingt beachten, damit beim Update des "Lötzimmer-Skriptes" keine Einstellungen verloren gehen.
- Notwendige Einstellungen in der Konfigurationsdatei alexa_remote_contol.conf vornehmen. Bitte keinerlei Einstellungen im "Lötzimmer-Skript" selbst (alexa_remote_control.sh) vornehmen.
- CCU und Alexa.sh betreffende Einstellungen, wie z.B. individuelle Systemvariablen, können in der Konfigurationsdatei alexa.conf vorgenommen werden.
Refresh-Token (Auth-Methode)
Zur Ermittlung des Refresh-Tokens, siehe: Neuer Beitrag von Alex Noack im Lötzimmer-Blog.
In alexa_remote_contol.conf ist der Refresh-Token an die entsprechende Stelle einzutragen:
Code: Alles auswählen
REFRESH_TOKEN='Atnr|...'
Sprachausgabe (TTS)
Ein einfaches Beispiel in HM-Script, ausgehend von einer Systemvariablen "TTS Echo" (diese muss in der CCU3 angelegt werden, Typ Zeichenkette) in welcher der auszugebende Text abgelegt wird und einem Amazon Echo namens "Küche" auf welchem die Sprachausgabe erfolgen soll:
Code: Alles auswählen
! Sprachausgabe auf Echo Küche
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Küche";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'" #message.ToUTF8() #"' &");
Code: Alles auswählen
! Sprachausgabe auf Lautsprecher-Gruppe Erdgeschoss
! -----------------------------------------------------------------------------------------------------------------------
string echogroup = "Erdgeschoss";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echogroup.ToUTF8() #"' -e speak:'" #message.ToUTF8() #"' &");
Flüstern (TTS) via SSML
Ein einfaches Beispiel in HM-Script, ausgehend von einer Systemvariablen "TTS Echo Whisper" (diese muss in der CCU3 angelegt werden, Typ Zeichenkette) in welcher der auszugebende Text abgelegt wird und einem Amazon Echo namens "Bibliothek" auf welchem die Sprachausgabe im Flüstermodus erfolgen soll:
Code: Alles auswählen
! Sprachausgabe (Flüstern) auf Echo Bibliothek
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Bibliothek";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo Whisper").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'<speak><amazon:effect name=\"whispered\">" #message.ToUTF8() #"</amazon:effect></speak>' &");
Hans, Marlene & Vicky (TTS) via SSML
Nachfolgend einfache Beispiele in HM-Script, ausgehend von den Systemvariablen "TTS Echo Hans", "TTS Echo Marlene" und "TTS Echo Vicki" (diese müssen in der CCU3, angelegt werden, Typ Zeichenkette) in welchen der auszugebende Text abgelegt wird und einem Amazon Echo namens "Wintergarten" auf welchem die Sprachausgabe mit der Stimme von "Hans", "Marlene" oder eben "Vicki" erfolgt:
Code: Alles auswählen
! Sprachausgabe (Hans) auf Echo Wintergarten
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Wintergarten";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo Hans").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'<speak><voice name=\"Hans\">" #message.ToUTF8() #"</voice></speak>' &");
Code: Alles auswählen
! Sprachausgabe (Marlene) auf Echo Wintergarten
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Wintergarten";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo Marlene").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'<speak><voice name=\"Marlene\">" #message.ToUTF8() #"</voice></speak>' &");
Code: Alles auswählen
! Sprachausgabe (Vicki) auf Echo Wintergarten
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Wintergarten";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo Vicki").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'<speak><voice name=\"Vicki\">" #message.ToUTF8() #"</voice></speak>' &");
Individuelle Laustärken bei Sprachausgaben (pro Raum/pro Echo/pro Ansage)
Neben der konfigurierbaren Option "Device specific volumes" (individuelle Lautstärken pro Echo) in alexa_remote_control.conf gibt es noch nachfolgend beschriebene Möglichkeit indivuelle Lautstärken zu realisieren.
Mittels eines kleinen Tweaks lassen sich individuelle Laustärken bei Sprachausgaben (pro Raum/pro Echo/pro Ansage) realisieren. Hierfür kann in der Datei /usr/local/addons/alexa/alexa_remote_contol.conf nachfolgende Einstellung wie folgt auskommentiert werden.
Code: Alles auswählen
# SPEAKVOL='50'
Code: Alles auswählen
! Sprachausgabe auf Echo Hallenbad (Lautstärke 70)
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Hallenbad";
string message = dom.GetObject(ID_SYSTEM_VARIABLES).Get("TTS Echo").Value();
system.Exec("export SPEAKVOL='70';/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'" #message.ToUTF8() #"' &");
Alternativ kann man das Beispiel natürlich auch einfach so wie es ist nutzen und mehrere WebUI-Programme anlegen, die dann Sprachausgaben auf unterschiedlichen Echos mit individueller Lautstärken ausgeben.
Geräusche aus der Sound-Library
Ein einfaches Beispiel in HM-Script, für die Ausgabe eines Türklingel-Sounds auf einem Amazon Echo namens "Garage":
Code: Alles auswählen
! Soundausgabe auf Echo Garage
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Garage";
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e sound:'amzn_sfx_doorbell_01' &");
Nachfolgend eine Liste mit Namen weiterer Sounds, die mit der Befehloption "sound" abspielbar sind.
Code: Alles auswählen
air_horn_03
bell_02
camera_01
christmas_05
clock_01
boing_01
boing_03
buzzers_pistols_01
futuristic_10
horror_10
squeaky_12
zap_01
amzn_sfx_cat_meow_1x_01
amzn_sfx_church_bell_1x_02
amzn_sfx_crowd_applause_01
amzn_sfx_dog_med_bark_1x_02
amzn_sfx_doorbell_01
amzn_sfx_doorbell_chime_01
amzn_sfx_doorbell_chime_02
amzn_sfx_trumpet_bugle_04
amzn_sfx_large_crowd_cheer_01
amzn_sfx_lion_roar_02
amzn_sfx_rooster_crow_01
amzn_sfx_scifi_alarm_01
amzn_sfx_scifi_alarm_04
amzn_sfx_scifi_engines_on_02
amzn_sfx_scifi_sheilds_up_01
amzn_sfx_wolf_howl_02
Alle anderen Geräusche aus der Sound-Library von Amazon können mit der der Befehloption "speak" via SSML abgespielt werden. Nachfolgend ein entsprechendes Beispiel in HM-Script, für die Ausgabe eines Sounds auf einem Amazon Echo namens "Wintergarten":
Code: Alles auswählen
! Soundausgabe via SSML auf Echo Flur
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Flur";
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e speak:'<audio src=\"soundbank://soundlibrary/musical/amzn_sfx_trumpet_bugle_03\"/>' &");
Alexa-Routinen starten
Ein einfaches Beispiel in HM-Script, für den Start einer Alexa-Routine, ausgehend von einer Systemvariablen "Routine" (diese muss in der CCU3 angelegt werden, Typ Zeichenkette) in welcher der Name der auszuführenden Alexa-Routine abgelegt wird:
Code: Alles auswählen
! Alexa-Routine starten
! -----------------------------------------------------------------------------------------------------------------------
string routine = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Routine").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -e automation:'" #" " #routine #"' &");
Sprachbefehl (in Textform)
Nachfolgend ein einfaches Beispiel in HM-Script, ausgehend von einer Systemvariablen "Sprachbefehl" (diese muss in der CCU3 angelegt werden, Typ Zeichenkette), in welcher der Sprachbefehl (in Textform) abgelegt wird und einem Amazon Echo namens "Wohnzimmer" an welchem der Sprachbefehl übegeben wird.
Code: Alles auswählen
! Sprachbefehl in Textform an Echo Schlafzimmer übermitteln
! -----------------------------------------------------------------------------------------------------------------------
string echodevice = "Schlafzimmer";
string textcmd = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Sprachbefehl").Value();
system.Exec("/usr/local/addons/alexa/alexa.sh -d '" #echodevice.ToUTF8() #"' -e textcommand:'" #textcmd.ToUTF8() #"' &");
Nachfolgend ein paar einfache Beispiele:
- Lautstärke 5
- Spiele Einslive
- Spiele Hardrock
- Lautstärke 10
- Spiele Topsongs von Metallica
- Spiele Whiskey in the jar
- Lautstärke 3
- Spiele Jingle Bells
- Pause
- Erzähle einen Witz
- Wie wird das Wetter
- Wie spät ist es
- Wie ist die Temperatur
- Sprich mir nach: Es hat geklingelt
- Sprich mir nach: Die Waschmaschine ist fertig
- Sprich mir nach: Die Hütte brennt
- Licht einschalten
- Fernseher einschalten
- Starte Netflix
- Starte Fire TV
Cookie überprüfen
Die Option --check-cookie überprüft regelmäßig z.B. via crontab das Cookie und die Devicelist und erneuert diese im Bedarfsfall automtisch und zuverlässig. Im Falle eines abgelaufenen Cookies werden sowohl das Cookie als auch die Devicelist erneuert. Datum und Uhrzeit werden in diesem Fall in einer (anzulegenden) Systemvariablen "TTS Cookie" (Typ Zeichenkette) dokumentiert.
Beispiel für einen einfachen crontab-Eintrag in /usr/local/crontabs/root (Prüfung einmal pro Stunde):
Code: Alles auswählen
33 * * * * /usr/local/addons/alexa/alexa.sh --check-cookie.sh > /dev/null
Code: Alles auswählen
/etc/init.d/S98crond restart
Code: Alles auswählen
crontab -l
Cookie erneuern
Die Option --renew-cookie erneuert ohne weitere Überprüfung das Cookie und die Devicelist. Diese option ist für den manuellen Aufruf bei Bedarf gedacht. Datum und Uhrzeit werden ebenfalls in der Systemvariablen "TTS Cookie" dokumentiert (vgl. Abschnitt Cookie überprüfen).
Der Aufruf in der Shell erfolgt mittels:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --renew-cookie
Code: Alles auswählen
! Renew Alexa cookie
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --renew-cookie &");
Devicelist erneuern
Wurde ein Echo-Device im Amazon-Konto umbenannt, hinzugefügt oder gelöscht, muss eine neue Devicelist erstellt werden. Das gilt auch für Änderungen von Multiroom-Gruppen. Die Erstellung einer neuen Devicelist kann einfach durch Aufruf der Option --renew-devicelist erfolgen. Diese Option veranlasst das Skript ausschließlich die Devicelist zu erneuern und ist für den manuellen Aufruf bei Bedarf gedacht.
Der Aufruf in der Shell erfolgt mittels:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --renew-devicelist
Code: Alles auswählen
! Renew Alexa device list
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --renew-devicelist &");
Temporäre Alexa-Dateien erneuern
Die Option --renew-tmpfiles löscht ohne weitere Überprüfung alle temporären Alexa.sh-Files (/tmp/.alexa.*) und erneuert im gleichen Zuge sowohl Cookie als auch die Devicelist. Das Skript ist für den manuellen Aufruf bei Bedarf gedacht. Datum und Uhrzeit werden ebenfalls in der Systemvariablen "TTS Cookie" dokumentiert (vgl. Abschnitt Cookie überprüfen).
Der Aufruf in der Shell erfolgt mittels:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --renew-tmpfiles
Code: Alles auswählen
! Renew temporary Alexa files
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --renew-tmpfiles &");
Get last Alexa (Gerätename plus String)
Die Option --get-lastalexa füllt eine (anzulegende) Sysvar "TTS Lastalexa" (Typ Zeichenkette) mit dem Namen des Echo-Gerätes (plus korrespondierenden String), welches zuletzt einen Sprachbefehl entgegen genommen hat. Das Skript kann wie folgt per WebUI-Programm (HM-Skript) aufgerufen werden:
Code: Alles auswählen
! Get last Echo device (device name and string)
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --get-lastalexa &");
Get last Alexa (Gerätename ohne String)
Die Option --get-lastdevname füllt eine (anzulegende) Sysvar "TTS Lastalexa" (Typ Zeichenkette) mit dem Namen des Echo-Gerätes, welches zuletzt einen Sprachbefehl entgegen genommen hat. Das Skript kann wie folgt per WebUI-Programm (HM-Skript) aufgerufen werden:
Code: Alles auswählen
! Get last Echo device (device name only)
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --get-lastdevname &");
Get last command
Die Option --get-lastcommand füllt eine (anzulegende) Sysvar "TTS Lastcmd" (Typ Zeichenkette) mit dem zuletzt erkannten Sprachbefehl. Das Skript kann wie folgt per WebUI-Programm (HM-Skript) aufgerufen werden:
Code: Alles auswählen
! Get last Alexa command
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --get-lastcommand &");
Get last Alexa + last command
Die Option --get-lastalexacmd ist als Alternative zu --get-lastalexa angedacht und füllt eine (anzulegende) Sysvar "TTS Lastalexa" (Typ Zeichenkette) mit dem Namen des Echo-Gerätes, welches zuletzt einen Sprachbefhel entgegen genommen hat und dem entsprechenden Sprachbefehl. Das Skript kann wie folgt per WebUI-Programm (HM-Skript) aufgerufen werden:
Code: Alles auswählen
! Get last Echo device + Alexa command
! -----------------------------------------------------------------------------------------------------------------------
system.Exec("/usr/local/addons/alexa/alexa.sh --get-lastalexacmd &");
Überprüfen des "Lötzimmer-Skripts" auf Aktualität
Eine Überprüfung der Aktualität des Skripts alexa_remote_control.sh kann mittels der Option --check-arc, wie folgt in der Shell erfolgen:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --check-arc
Update des "Lötzimmer-Skripts"
Vor dem Update können und sollten alle Neuerungen/Änderungen auf GitHub nachgelesen und kontrolliert werden. Im Zweifelsfall einfach hier im Thread oder per PN nachfragen. Das Update des Skripts alexa_remote_control.sh kann anschließend, mittels der Option --update-arc, wie folgt in der Shell erfolgen:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --update-arc
Überprüfen des des CA-Cert-Bundles auf Aktualität
Eine Überprüfung der Aktualität des CA-Cert-Bundles kann mittels der Option --check-arc, wie folgt in der Shell erfolgen:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --check-cacert
Update des CA-Cert-Bundles
Das Update des CA-Cert-Bundles kann mittels der Option --update-cacert, wie folgt in der Shell erfolgen:
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --update-cacert
Fehleranalyse
Klappt etwas nicht, bitte neben einer aussagekräftigen Fehlerbeschreibung, immer auch die Ausgaben nachfolgender Shell-Befehle mitteilen:
Code: Alles auswählen
ls -la /tmp/.alexa*
Code: Alles auswählen
ls -la /usr/local/addons/
Code: Alles auswählen
ls -la /usr/local/addons/alexa/
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --version
Code: Alles auswählen
/usr/local/addons/alexa/alexa.sh --check-cookie
Backup
Alle zugehörigen Dateien unter /usr/local/addons/alexa/ sowie die angepasste Crontab sind ohne weiteres Zutun Bestandteil des System-Backups der CCU3.
Verteiler
Falls das kostenlos erhältliche Paket für jemanden von Interesse sein sollte, einfach hier im Thread nachfragen oder eine PN an mich richten:
- Bitte in jedem Fall angeben welche Zentrale (Hardware) verwendet wird und welche Firmware/-Version (Software) installiert ist.
- Die Antwort-PN bitte innerhalb von 24 Stunden abholen.