Alexa.sh v5.11 (stable) - Sprachausgabe und Fernsteuerung für Amazon Echo

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Alexa.sh v5.11 (stable) - Sprachausgabe und Fernsteuerung für Amazon Echo

Beitrag von blackhole » 24.01.2019, 12:25

Für die CCU3 gibt es nun ein Paket für das "Lötzimmer-Skript" (Alexa remote control) mit jq-Unterstützung, so dass auch Alexa Routinen (automation), Sprachkommandos und viele weitere Dinge einfach aufrufbar und automatisierbar sind. Neben jq, oathtool, base64 und iconv wird auch ein valides CA-Cert-Bundle mitgeliefert.


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.
Für den nachfolgenden Punkt 1 kann z.B. WinSCP, für die Punkte 2 und 3 kann z.B. PuTTY verwendet werden.
  1. Das Paket nach /usr/local/addons/ kopieren.
  2. Code: Alles auswählen

    cd /usr/local/addons/
  3. Code: Alles auswählen

    tar xvfz alexa-5.11.tar.gz
Die im Paket beinhalteten Dateien werden auf diesem Weg automatisch nach /usr/local/addons/alexa/ entpackt.
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.
  1. Umbennen des bisherigen Installationsverzeichnisses:

    Code: Alles auswählen

    mv /usr/local/addons/alexa /usr/local/addons/alexa_old
  2. Das neue Paket nach /usr/local/addons/ kopieren.
  3. Code: Alles auswählen

    cd /usr/local/addons/
  4. Code: Alles auswählen

    tar xvfz alexa-5.11.tar.gz
    Die im Paket beinhalteten Dateien werden auf diesem Weg automatisch nach /usr/local/addons/alexa/ entpackt.
     
  5. Übertragen der bisherigen Einstellungen aus/in alexa_remote_control.conf und alexa.conf (Refresh-Token, individuelle Einstellungen).
     
  6. Erneuern aller temporären Alexa-Dateien:

    Code: Alles auswählen

    /usr/local/addons/alexa/alexa.sh --renew-tmpfiles
Abschließend sollte noch das "Lötzimmer-Skript" auf Aktualität überprüft und gegebenfalls aktualisiert werden. Siehe hierfür die Abschnitte Überprüfen des "Lötzimmer-Skripts" auf Aktualität und Update des "Lötzimmer-Skripts". Vor der Aktualisierung des "Lötzimmer-Skriptes" unbedingt die Punkte im Abschnitt "Konfiguration" beachten und umsetzen, falls noch nicht geschehen.


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() #"' &");
Analog hierzu 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 einer Lautsprecher-Gruppe namens "Erdgeschoss" auf welchem die Sprachausgabe erfolgen soll:

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() #"' &");
Grundsätzlich können Lautsprecher-Grupen also genauso angesprochen werden wie einzelne Echo-Geräte. Wenn man Lautsprecher-Gruppen und/oder Echo-Geräte angelegt oder geändert hat, ist es wichtig, anschließen die Devicelist zu erneuern (siehe hierzu den Abschnitt "Devicelist erneuern")


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'
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 "Hallenbad" auf welchem die Sprachausgabe mit individueller Lautstärkeangabe erfolgen soll:

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() #"' &");
Das dient wirklich nur als Beispiel. Man kann das natürlich weiter verfeinern und dynamisieren, in dem man den (oben fest angegeben) Namen des Echos/der Lausprechergruppe und die (oben fest angebene) Lautstärke auch noch in Systemvariablen der CCU auslagert und somit die komplette Sprachausgabe mit einem einzigen Mini-HM-Script realisieren kann.

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() #"' &");
Der Sprachfehl (in Textform) wird von dem Echo-Device genau so verarbeitet, als hätte man diesen per Sprache übermittelt, wobei man das Aktivierungswort einfach weg lässt, da der anzusprechende Echo ja bereits mit dem Parameter "-d" übergeben wird. Die zugehörge Sytemvariable ("Sprachbefehl") füttert man demzufolge mit allem, was man ansonsten einem Echo, dem Aktivierungswort nachfolgend, sagen würde.

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
Crond durchstarten:

Code: Alles auswählen

/etc/init.d/S98crond restart
Abschließende Kontrolle mittels:

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
Alternativ, der gleiche Aufruf per HM-Script:

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
Alternativ, der gleiche Aufruf per HM-Script:

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
Alternativ, der gleiche Aufruf per HM-Script:

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 Lastcommand" (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.
Neue Pakete werden automatisch an Benutzer, die an den letzten Updates auch Interesse gezeigt haben (d.h. meine PNs zeitnah abgeholt haben), ohne weitere Nachfrage verteilt. Interessierte Benutzer, die das Paket nicht automatisch erhalten, können das Paket jederzeit, neu anfordern.
Zuletzt geändert von blackhole am 06.11.2023, 14:08, insgesamt 406-mal geändert.

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Alexa.sh v4.84 (stable) - Sprachausgabe und Fernsteuerung für Amazon Echo

Beitrag von blackhole » 25.01.2019, 08:25

Addendum für Alexa.sh v5.11


Alexa in the Shell

Die Optionen des "Lötzimmer-Skriptes" werden transparent von alexa.sh an alexa_remote_control.sh übergeben:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh -h
/usr/local/addons/alexa/alexa.sh [-d <device>|ALL] -e <pause|play|next|prev|fwd|rwd|shuffle|repeat|vol:<0-100>> |
          -b [list|<"AA:BB:CC:DD:EE:FF">] | -q | -n | -r <"station name"|stationId> |
          -s <trackID|'Artist' 'Album'> | -t <ASIN> | -u <seedID> | -v <queueID> | -w <playlistId> |
          -i | -p | -P | -S | -a | -m <multiroom_device> [device_1 .. device_X] | -lastalexa | -lastcommand | -z | -l | -h

   -e : run command, additional SEQUENCECMDs:
        weather,traffic,flashbriefing,goodmorning,singasong,tellstory,
        speak:'<text/ssml>',automation:'<routine name>',sound:<soundeffect_name>,
        textcommand:'<anything you would otherwise say to Alexa>',
        playmusic:<channel e.g. TUNEIN, AMAZON_MUSIC>:'<music name>'
   -b : connect/disconnect/list bluetooth device
   -c : list 'playmusic' channels
   -q : query queue
   -n : query notifications
   -r : play tunein radio
   -s : play library track/library album
   -t : play Prime playlist
   -u : play Prime station
   -v : play Prime historical queue
   -w : play library playlist
   -i : list imported library tracks
   -p : list purchased library tracks
   -P : list Prime playlists
   -S : list Prime stations
   -a : list available devices
   -m : delete multiroom and/or create new multiroom containing devices
   -lastalexa : print device that received the last voice command
   -lastcommand : print last voice command or last voice command of specific device
   -z : print current volume level
   -login : Logs in, without further command
   -l : logoff
   -h : help

Die Optionen --alexa-help, --alexa-version, --check-cookie, --check-erc etc. werden herausgefiltert und als Funktionen von alexa.sh ausgeführt:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --alexa-help
Alexa.sh v5.11 - Created by blackhole
Usage: /usr/local/addons/alexa/alexa.sh [options...]
   --alexa-help       : Show this help screen
   --alexa-version    : Show Alexa version info
   --check-cookie     : Check Alexa cookie and device list
   --renew-cookie     : Renew Alexa cookie
   --renew-devicelist : Renew Alexa device list
   --renew-tmpfiles   : Renew all temporary Alexa files
   --get-lastalexa    : Get last Alexa (device name and string)
   --get-lastdevname  : Get last Alexa (device name only)
   --get-lastcommand  : Get last Alexa command
   --get-lastalexacmd : Get last Alexa device name and last command
   --check-arc        : Check if new Alexa remote control script is available
   --update-arc       : Update Alexa remote control script
   --check-cacert     : Check if new CA cert file is available
   --update-cacert    : Update CA Cert file
Ausgabe der Paket- und Skript-Version

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --alexa-version
Alexa.sh script and package v5.11
Alexa remote control script v0.23
Cookie überprüfen und erneuern:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --check-cookie
the following devices exist in your account:
(...)

Cookie is good - nothing to do.
Same date and time found in CCU system variable - nothing to do.

Cookie file: 21.06.2023 11:03 Uhr
Device list: 21.06.2023 11:03 Uhr

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --renew-cookie
cookie does not exist. logging in ...
device list does not exist. downloading ...
(...)

Cookie is good - nothing to do.
Push date and time or error message to CCU system variable.

Cookie file: 21.06.2023 11:08 Uhr
Device list: 21.06.2023 11:08 Uhr

Device-List erneuern:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --renew-devicelist
device list does not exist. downloading ...
(...)

Cookie is good - nothing to do.
Same date and time found in CCU system variable - nothing to do.

Cookie file: 21.06.2023 11:08 Uhr
Device list: 21.06.2023 11:11 Uhr

Zuletzt angesprochener Echo und verwendeter Sprachbefehl:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --get-lastalexacmd

Bibliothek: alexa pause

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --get-lastcommand

alexa pause

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --get-lastalexa

Bibliothek=A2BC12DEF34GHI=CE0123456789ABCDEF01=ECHO

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --get-lastdevname

Bibliothek

"Lötzimmer-Skript" (Echo Remote Control) auf Aktualität überprüfen und erneuern:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --check-arc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 47437  100 47437    0     0   277k      0 --:--:-- --:--:-- --:--:--  277k

Alexa remote control script is up to date.

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --update-arc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 47437  100 47437    0     0   216k      0 --:--:-- --:--:-- --:--:--  217k

Alexa remote control update finished.

CA-Cert-Bundle auf Aktualität überprüfen und erneuern:

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --check-cacert
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  198k  100  198k    0     0   917k      0 --:--:-- --:--:-- --:--:--  917k

CA cert file is up to date.

Code: Alles auswählen

# /usr/local/addons/alexa/alexa.sh --update-cacert
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  198k  100  198k    0     0  1145k      0 --:--:-- --:--:-- --:--:-- 1152k

Latest CA cert file is installed.
Zuletzt geändert von blackhole am 21.06.2023, 14:14, insgesamt 49-mal geändert.

Benutzeravatar
arrisun
Beiträge: 181
Registriert: 19.01.2016, 18:43
Wohnort: Köln
Hat sich bedankt: 9 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von arrisun » 26.01.2019, 23:11

Sehr interessant, werde ich mal ausprobieren
Liebe Grüße
Andy

Das Verhältnis zwischen meiner Frau und mir lässt sich ungefähr so beschreiben: Ordnungsamt trifft auf Wanderzirkus


!!! Arbeiten am 230V Netz, bzw.an 230V Geräten nur von Fachleuten durchführen lassen !!!


193 Kanäle in 66 Geräten und 45 CUxD-Kanäle in 3 CUxD-Geräten

Timichino
Beiträge: 48
Registriert: 07.01.2017, 19:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 2 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von Timichino » 22.02.2019, 23:30

Moin,
Ich nutze den Thread einfach mal.
Hab bis gestern die Skripte von Xel benutzt.
Nun habe ich heute die aktuelle Rasperrymatic aufgespielt und mir das neueste Skript von Ende Januar von Lötzimmer geholt (ein paar neue Features sind dazu gekommen).

Nun habe ich das Problem, wenn ich über Shell (Ich nutze die integrierte Eingabeaufforderung von Winscp) die Liste aller Geräte anzeigen will, bekomme ich nun nur "file not found" zurück.

Falls wer das aktuelle Lötzimmer Skript mit jq und Config auf dem Raspberry bereitstellen könnte, wäre ich euch sehr dankbar :)

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von Xel66 » 23.02.2019, 06:41

Timichino hat geschrieben:
22.02.2019, 23:30
"file not found"
Die Beschreibung ist ein wenig mager. Hast Du das Script auf der CCU installiert? Sind die Cookies aktuell oder zurückkopiert? Die Meldung besagt eigentlich, dass eine Datei nicht gefunden wurde. Hast Du das Shellscript umbenannt oder beim Aufruf einen Tippfehler drin? Ein Screenshot wäre aussagekräftiger.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Timichino
Beiträge: 48
Registriert: 07.01.2017, 19:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 2 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von Timichino » 23.02.2019, 22:52

Hi,
ich habe den Inhalt der Datei mit dem neuesten Code ausgetauscht und dann die Datei neu hochgeladen:
2019-02-23 22_49_05-Clipboard.png
Als cookie habe ich mir mit Firefox einen Cookie erstellt und benutze den, da ich bei abgeschalteten Javascript auf alexa.amazon.com auf einer weißen Seite lande und nicht weitergeleitet werde.

Grüße

Timichino
Beiträge: 48
Registriert: 07.01.2017, 19:19
Hat sich bedankt: 16 Mal
Danksagung erhalten: 2 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von Timichino » 23.02.2019, 23:11

Hi,
habs nochmal probiert:
Hier nochmal eine Schrittweise Durchführung:

Seite von Lötzimmer aufmachen und mit "Speichern unter" auf dem Rechner speichern.
Anschließend Logininformationen hinterlegen und auf den Raspi hochladen \usr\local\addons\echo\ (ich benutze WinSCP)

Dort dann dem Eigentümer, der Gruppe und Andere das Recht "X" geben.

Dann unter \temp\ die Datei (falls vorhanden) .alexa.cookie löschen.

Über die eingebaute Eingabeaufforderung in WinSCP den Befehl: " ./alexa_remote_control_plain.sh -a" ausführen.

Falls der Login nicht funktioniert,
Chrome öffnen, Javascript deaktivieren und dann die Cookies der gesamten Zeit löschen.

Anschließend an alexa.amazon.com und/oder alexa.amazon.de anmelden, dass Captcha lösen. Ohne Javascript landet ihr auf einer Blank-Page.
Danach wieder den Shell-Befehl über die WinSCP Eingabeaufforderung eingeben.

Danach hat es funktioniert.

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von blackhole » 02.03.2019, 22:27

Ich habe ein neues Paket mit angepasstem Skript in der aktuellen Version 0.12a von Lötzimmer inkl. jq für die CCU3 gepackt.

Mehr Infos sind hier zu finden.

nex
Beiträge: 10
Registriert: 01.03.2019, 17:53
Hat sich bedankt: 3 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von nex » 05.03.2019, 14:36

Wird dafür wirklich schon die neue Firmware 3.43.15 benötigt? Bin aktuell noch bei 3.41.11

Benutzeravatar
blackhole
Beiträge: 3718
Registriert: 21.07.2015, 14:03
System: CCU
Hat sich bedankt: 184 Mal
Danksagung erhalten: 586 Mal

Re: Cool: Alexa meldet aktiv wichtige Statusmeldungen

Beitrag von blackhole » 06.03.2019, 10:30

Das Problem "schlecht gewordener Cookie" und "inkonsistente Device-List" ist nun ebenfalls abgefrühstückt.

Genauere Infos sind hier zu finden.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“