Dienstag, 10. Oktober 2017

Amazon Alexa per Shell fernsteuern (Echo remote control)

Nachdem Amazon mit dem Multiroom Feature der Echos meine alten Multiroom Audio Bemühungen quasi nebenbei erledigt hat, fehlte mir zu meinem Glück noch die Fernsteuerung meiner Echos.

Wenn ich nach Hause komme, soll die Home Automation bitte auch gleich das Radio auf den Amazon Echos einschalten.
Für den umgekehrten Weg nutze ich HA-Bridge, welches meine Intertechno Billigsteckdosen per Alexa Sprachkommando schaltet. Daher kenne ich auch die Möglichkeit, über einen Browser auf das Alexa Interface zuzugreifen.

Was ein Browser kann, das sollte sich doch auch per Shell bewältigen lassen...

Ich habe die Entwicklertools im Firefox benutzt (Shift + Strg + i) und auf dem Reiter "Netzwerkanalyse" den Datenverkehr verfolgt. Zusätzlich habe ich Javascript abgeschaltet, da ich nicht mit irgendwelchen riesigen Frameworks hantieren wollte - und meine Shell kann kein Javascript.

Zunächst hatte mein cURL keine Cookies speichern wollen. Das änderte sich erst, nachdem ich den "User-Agent" Header hinzugefügt habe. 

Komischerweise schlägt auf diese Weise selbst im Browser die erste Anmeldung fehl. Bei genauerer Betrachtung ändert sich allerdings die Referer URL, in die nun die Session kodiert ist. So klappt dann auch das Login.

Außerdem ist zwingend ein "Accept-Language:" Header erforderlich - daraus leitet Amazon wahrscheinlich die Region für das Login ab.
Update 2018-01-28: Nachdem ich einfach nur "Mozilla/5.0" als Browser String verwendet hatte, funktionierte es auch eine Weile. Inzwischen muss ich einen real existierenden (aktuellen) Browser String verwenden!

Im Alexa Webfrontend angekommen, sind hauptsächlich die POST Anfragen interessant, immer dann habe ich eine Aktion im Frontend ausgelöst.

Da bei vielen Anfragen nur JSON Antworten zurückkommen, brauchte ich noch einen JSON Parser für die Kommandozeile und bin auf jq gestoßen. Die Einarbeitung ist etwas kryptisch, aber die Ergebnisse sehr lohnenswert.
Und wenn man schon einen JSON Parser hat, kann man eigentlich auch gleich die TuneIn Sender per Sendernamen suchen lassen und aus dem ersten Antworteintrag die StationID extrahieren...

Es gibt auch eine Version ohne JSON Parser mit weniger Funktionen (kein -i, -p, -P, -S, keine Radio Stationsnamen).

Funktionsbeschreibung

Am Anfang ist es evtl hilfreich eine Liste der Alexa kompatiblen Geräte zu holen
alexa_remote_control.sh -a
Wird später kein Gerät ausgewählt, nutzt das Script immer das erste Echo(dot)-Gerät in der Liste.
Ein Gerät darf selbstverständlich auch eine Multiroom-Gruppe sein.

Jetzt kann man bei TuneIn einen Sender suchen lassen und diesen auf einem Gerät (z.B. Wohnzimmer) in der Liste abspielen...
alexa_remote_control.sh -d Wohnzimmer -r "radioeins vom rbb"
...oder man kennt die TuneIn StationID.
alexa_remote_control.sh -d Wohnzimmer -r s25111
Möchte man sämtliche Wiedergaben stoppen, gibt es ein spezielles Gerät ALL.
alexa_remote_control.sh -d ALL -e pause

Es gibt weiterhin ein paar Funktionen, um die Amazon Bibliotheken abzufragen:
alexa_remote_control.sh -i
Legt eine Liste der zu Amazon hochgeladenen Tracks an "/tmp/.alexa.IMPORTED.list". Die enthaltene trackId wird für die für Option -s verwendet.
alexa_remote_control.sh -p
Legt eine Liste der bei Amazon gekauften Tracks an "/tmp/.alexa.PURCHASES.list". Die enthaltene trackId wird für die für Option -s verwendet.
alexa_remote_control.sh -P
Legt eine Liste aller Amazon Playlists an "/tmp/.alexa.prime-playlist-browse-nodes.list". Die enthaltene asin wird für die für Option -t verwendet
alexa_remote_control.sh -S
Legt eine Liste aller Amazon Stationen an "/tmp/.alexa.prime-sections.list". Die enthaltene seedId wird für die für Option -u verwendet

Um einen Bibliothekstrack abzuspielen, benötigt man die trackId
alexa_remote_control.sh -d Esszimmer -s 162ab3024d22a-401a-93f4-123456-7890ab
Alternativ kann man auch ein Bibliotheksalbum abspielen und benötigt dazu den Artist und den Albumtitel
alexa_remote_control.sh -d Esszimmer -s 'Beethoven' 'Sinfonie No.9'
Um eine Prime Playlist abzuspielen, benötigt man die asin
alexa_remote_control.sh -d Esszimmer -t B01DWABCDE
Um einen Prime Radiostation abzuspielen, benötigt man die seedId
alexa_remote_control.sh -d Esszimmer -u A30GBP8ABCDEF
Als Prime Benutzer kann man per Sprachkommando auch bestimmte Interpreten spielen lassen. In der Oberfläche fehlt eine entsprechende Steuermöglichkeit. Fragt man den aktuellen Play-Status in diesem Fall aber mit de -q Option ab, so erhält man eine queueId (Device spezifisch), die man später mit folgendem Kommando erneut abspielen kann:
alexa_remote_control.sh -d Esszimmer -v 1f4919d7-45db-45cf-a47f-123456-7890ab

Es können nun auch Multiroom Gruppen angelegt und gelöscht werden
alexa_remote_control.sh -m <Gruppe>
löscht die Multiroomgruppe
alexa_remote_control.sh -m <Gruppe> <Gerät1> ... <GerätX>
löscht die Multiroomgruppe und legt sie mit den Geräten 1..X neu an

Bluetooth Verbindungen werden mit der Option -b hergestellt/getrennt/gelistet:
alexa_remote_control.sh -d Esszimmer -b list
Listet alle bekannten Bluetooth Geräte für Esszimmer. Als Adresse kann je nach Bluetooth-Gerät evtl. auch ein mehrstelliger Code angezeigt werden - es muss nicht zwangsläufug eine Bluetooth HW-Adresse sein.
alexa_remote_control.sh -d Esszimmer -b "AA:BB:CC:DD:EE:FF"
Verbindet Gerät "AA:BB:CC:DD:EE:FF"
alexa_remote_control.sh -d Esszimmer -b
Trennt Bluetooth im Esszimmer
Evtl. muss das erste Pairing zuvor einmalig mit der Alexa App erfolgt sein.

Für die aktuellen Abspielinformationen (Option -q) kommen prinzipiell drei URLs zum Einsatz (ab Zeile 687):
https://layla.amazon.de/api/np/player?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}&lemurId=${PARENTID}&lemurDeviceType=${PARENTDEVICE}
https://layla.amazon.de/api/media/state?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}
https://layla.amazon.de/api/np/queue?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}
Die Ausgaben werden momentan von "jq" ungefiltert ausgegeben.

Update 2018-02-27:
Wer bei HA-Bridge bereits versucht hat den IP-Filter zu nutzen, um Geräte im jeweiligen Raum mit dem gleichen Kommando einzuschalten, wird damit wahrscheinlich gescheitert sein, da Amazon die HUE-Verarbeitung bei mehreren Echos im Round-Robin Prinzip verteilt. D.h. das Bridge-Kommando kommt nicht unbedingt von dem Echo, der das Sprachkommando empfangen hat.
Dazu hat Markus Wennesheimer in seinem Blog eine Lösung gefunden, indem er den Activity-Feed hinsichtlich der letzten Aktion befragt.
Das Gerät, welches zuletzt einen Voice Befehl empfangen hat fragt dazu folgendes Kommando ab:
alexa_remote_control.sh -lastalexa
(Die Plain-Version kann nur die DeviceSerialNumber wiedergeben.)

Noch ein Wort zum Cookie; das Script (also eigentlich cURL) legt eine Datei /tmp/.alexa.cookie an, in die aktuell gültigen Cookie Infrmationen abgelegt sind. Analog dazu existiert eine Session auf den Amazon Servern. Bei jedem Script-Start wird überprüft, ob die Session noch gültig ist. Falls nicht, beginnt der Login Prozess erneut und die "frischen" Session Informationen werden ins Cookie geschrieben.

Zum Einen erzeugt man auf diese Weise nicht unnötig viele Login/Logout Vorgänge, die Amazon evtl. zur Sperrung veranlassen könnte. Allerdings bedeutet das auch, dass die aktuelle Session auch bei Amazon aktiv ist. D.h. wenn man das Script auf hunderten verschiedener Geräte ausführt, sollte man vielleicht lieber mit dem "-l" Parameter die Session beenden (damit wird die Cookie-Datei ebenfalls gelöscht).

Auf einem Multi-User System ist das Cookie außerdem für jeden lesbar (kann so aber auch von mehreren Prozessen verwendet werden). Schreiben darf allerdings nur der Benutzer, dem das Cookie gehört - wenn man als "root" getestet hat, kann eine "normaler Benutzer" das Cookie nie erneuern!!

Update 2018-06-12:
Das meistnachgefragte Feature TextToSpeech (TTS) ist nun endlich verfügbar. Dazu habe ich mich mit Hilfe von Ralf Otto bei den Sourcen des openHAB2 Amazon Echo Control Bindings von Michael Geramb bedient.
Text2Speech:
alexa_remote_control.sh -d Esszimmer -e speak:'Guten_Appetit!'

Routinen sollten sich nun ebenfalls starten lassen
alexa_remote_control.sh -d Esszimmer -e automation:'Welcome home'

Neben den "speak" und "automation" Funktionen gibt es noch weitere Kommandos
alexa_remote_control.sh -e [weather,traffic,flashbriefing,goodmorning,singasong,tellstory]

Update 2019-01-22:
Die Konfigurationsvariablen können nun auch per Environment an das Script übergeben werden (z.B. von Webserver mit PHP):
EMAIL     - your login email
PASSWORD  - your login password
BROWSER   - the User-Agent your browser sends in the request header
LANGUAGE  - the Accept-Language your browser sends in the request header
AMAZON    - your Amazon domain
ALEXA     - the URL you would use for the Alexa Web App
CURL      - location of your cURL binary
OPTS      - any cURL options you require
TMP       - location of the temp dir
OATHTOOL  - command line for oathtool MFA
MFA_SECRET- the MFA secret
SPEAKVOL  - the volume for speak messages
NORMALVOL - if no current playing volume can be determined, fall back to normal volume
VOLMAXAGE - max. age in minutes before volume is re-read from API
DEVICEVOLNAME   - a list of device names with specific volume settings (space separated)
DEVICEVOLSPEAK  - a list of speak volume levels - matching the devices above
DEVICEVOLNORMAL - a list of normal volume levels- matching the devices above

Update 2019-07-08:
Es ist ziemlich wahrscheinlich, dass Multi-Faktor (MFA) aktivierte Anmeldungen keine Captcha Screens bekommen. Außerdem sollte man alle Accounts, die die Möglichkeit bieten heutzutage per MFA sichern.
Dank dem User rich-gepp habe ich auf GitHub eine Code-Ergänzung erhalten, die die Einmalpasswortgenerierung per oathtool erledigt. Dazu sind folgende Schritte erforderlich:
  1. MFA per App sollte im Amazon Account bereits eingerichtet sein und funktionieren
  2. Neue App registrieren
  3. Wenn der QR-Code angezeigt wird auf "kann nicht gescannt werden" klicken
  4. Der MFA String wird angezeigt, z.B. "1234 5678 9ABC DEFG HIJK LMNO PQRS TUVW XYZ0 1234 5678 9ABC DEFG"
  5. Die Antwort wird mit dem oathtool erzeugt: oathtool -b --totp "<MFA shared secret von oben>" und muss in die Eingabemaske eingetragen werden (Achtung, der Code ist nur ein paar Sekunden lang gültig!
  6. Wenn das geklappt hat ist der MFA String das MFA_SECRET für das alexa_remote_control Script
Update 2020-01-03:
Ich habe in der "großen" Variante nun auch eine -z Option eingebaut, um die Lautstärke zu ermitteln.
Diese Funktionalität wird für das Zurücksetzen der Lautstärke nach Ansagen benötigt.
Am zuverlässigsten scheint das zu funktionieren, wenn Multiroom-Gruppen definiert sind, dort wird nämlich die Lautstärke für alle "Teilnehmer" mitgeführt.

Ich versuche zunächst die Lautstärke über /api/media/state zu holen und wenn das nicht funktioniert, suche ich das Multiroom-Parent-Device und hole mir dort den Status. Aus diesem Grund funktioniert es leider auch noch nicht in der "plain" Version - zu viel JQ parsing...

Aus Performancegründen cache ich die letzten Volume Einstellungen für "$VOLMAXAGE" Minuten.
Fertiges Script
(download link / Version ohne "jq")
#
# Amazon Alexa Remote Control
#  alex(at)loetzimmer.de
#
# 2017-10-10: v0.1 initial release
# 2017-10-11: v0.2 TuneIn Station Search
# 2017-10-11: v0.2a commands on special device "ALL" are executed on all ECHO+WHA
# 2017-10-16: v0.3 added playback of library tracks
# 2017-10-24: v0.4 added playback information
# 2017-11-21: v0.5 added Prime station and playlist
# 2017-11-22: v0.6 added Prime historical queue and replaced getopts
# 2017-11-25: v0.6a cURL is now configurable
# 2017-11-25: v0.7 added multiroom create/delete, playback of library playlist
# 2017-11-30: v0.7a added US config, fixed device names containing spaces
# 2017-12-07: v0.7b added Bluetooth connect/disconnect
# 2017-12-18: v0.7c fixed US version
# 2017-12-19: v0.7d fixed AWK csrf extraction on some systems
# 2017-12-20: v0.7e moved get_devlist after check_status
# 2018-01-08: v0.7f added echo-show to ALL group, TuneIn station can now be up to 6 digits
# 2018-01-08: v0.8 added bluetooth list function
# 2018-01-10: v0.8a abort when login was unsuccessful
# 2018-01-25: v0.8b added echo-spot to ALL group
# 2018-01-28: v0.8c added configurable browser string
# 2018-02-17: v0.8d no need to write the cookie file on every "check_status"
# 2018-02-27: v0.8e added "lastalexa" option for HA-Bridge to send its command to a specific device
#               (Markus Wennesheimer: https://wennez.wordpress.com/light-on-with-alexa-for-each-room/)
# 2018-02-27: v0.9 unsuccessful logins will now give a short info how to debug the login
# 2018-03-09: v0.9a workaround for login problem, force curl to use http1.1
# 2018-05-17: v0.9b update browser string and accept language
# 2018-05-23: v0.9c update accept language (again)
# 2018-06-12: v0.10 introducing TTS and more
#               (thanks to Michael Geramb and his openHAB2 Amazon Echo Control binding)
#               https://github.com/openhab/openhab2-addons/tree/master/addons/binding/org.openhab.binding.amazonechocontrol
#               (thanks to Ralf Otto for implementing this feature in this script)
# 2018-06-13: v0.10a added album play of imported library
# 2018-06-18: v0.10b added Alexa routine execution
# 2019-01-22: v0.11 added repeat command, added environment variable parsing
# 2019-02-03: v0.11a fixed string escape for automation and speak commands
# 2019-02-10: v0.12 added "-d ALL" to the plain version, lastalexa now checks for SUCCESS activityStatus
# 2019-02-14: v0.12a reduced the number of replaced characters for TTS and automation
# 2019-06-18: v0.12b fixed CSRF
# 2019-06-28: v0.12c properly fixed CSRF
# 2019-07-08: v0.13 added support for Multi-Factor Authentication
#               (thanks to rich-gepp https://github.com/rich-gepp)
# 2019-08-05: v0.14 added Volume setting via routine, and $SPEAKVOL
# 2019-11-18: v0.14a download 200 routines instead of only the first 20
# 2019-12-23: v0.14b Trigger routines by either utterance or routine name
# 2019-12-30: v0.15 re-worked the volume setting for TTS commands
# 2020-01-03: v0.15a introduce some proper "get_volume"
# 2020-01-08: v0.15b cleaned merge errors#
###
#
# (no BASHisms were used, should run with any shell)
# - requires cURL for web communication
# - (GNU) sed and awk for extraction
# - jq as command line JSON parser (optional for the fancy bits)
# - oathtool as OATH one-time password tool (optional for two-factor authentication)
#
##########################################

(see download links above)

Kommentare:

  1. Hi, geh ich recht in der Annahme, dass das mit eingeschalteter 2-Faktor-Autorisierung nicht funktioniert?

    AntwortenLöschen
    Antworten
    1. Der 2.Faktor muss mit dem Passwort zusammen übergeben werden, dann sollte es funktionieren.
      Beispiel: Passwort="test", 2fa="1234" => export PASSWORD="test1234"

      Löschen
    2. Die neueste Version berechnet die 2FA Challenge mit Hilfe eines Zusatztools.

      Löschen
  2. Kann man damit auch Befehle ausführen? Also z.B dem Script sagen es soll ein Skill starten?

    AntwortenLöschen
    Antworten
    1. Die normale (nicht-plain) Version kann das per
      -e automation:'Name der Routine'
      wobei 'Name der Routine' der Teil hinter "Alexa, ...." ist, mit dem du sonst per Sprache die Routine triggern würdest.

      Löschen
    2. Danke für deine Antwort. Würde gerne irgendwie Script-technisch eine .wav Datei auf allen Alexas abspielen. Selbst wenn es ein Skill dafür geben würde, ist nun die Hürde, das es ja nicht Multi-Room fähig wäre.

      Hättest Du eine Idee außer auf Google umzusteigen?

      PS: Wäre als Trigger für eine Alarmanlage

      Löschen
    3. Wenn ich dich richtig Verstanden habe, sollte ja auch

      (..).sh -d "Wohnzimmer Echo" -e automation:'Wie viel Uhr ist es?'

      Den Befehl ausführen, oder? Das geht allerdings nicht.

      ERROR: no such utterance 'Wie viel Uhr ist es?' in Alexa routines

      Löschen
    4. Somit lässt sich auch kein eigener Skill starten.

      Löschen
    5. Das Script lädt zunächst alle Routinen herunter und sucht darin nach der Routine, die du abspielen möchtest. Meine Routine Routine heißt z.B. "Alexa, Guten Morgen" - also suche ich nach "Guten Morgen".

      Da er bei dir die Routine nicht findet, musst du leider selbst nachschauen:
      1.) in Zeile 521 eine "#" vor das rm -f "${TMP}/.alexa.automation"
      2.) nochmal dien Routine aufrufen
      3.) ${TMP}/.alexa.automation nach 'Wie viel Uhr ist es?' durchsuchen
      ( z.b. "jq . /tmp/.alexa.automation | less" )
      Es sollte eine Zeile "utterance": "Wie viel Uhr ist es?", vorhanden sein.

      Löschen
    6. Das Problem war wahrscheinlich das "?" Fragezeichen, welches ausgefiltert wurde. In der neuesten Version sollte es funktionieren!

      Löschen
    7. Hallo Alex,
      an dieser Stelle nochmals danke für dein super Arbeit und das Script.

      Gibt es eine Möglichkeit Routinen auch über das plain Skript zu starten?
      weather und speak gehen ja bereits wunderbar.

      Löschen
    8. Die Plain Variante kann leider das JSON nicht parsen, welches aus der Routinenlistenanfrage zurückkommt. Es müsste daraus die Routine extrahieren, die du starten möchtest und sie entsprechend zurücksenden.
      Wenn du dich richtig gut mit Regular Expressions auskennst, dann könntest du einen Versuch wagen... mir ist es leider bisher nicht gelungen.

      Löschen
  3. Hallo!
    Habe versucht meine Webcam über die Routine auf der Echo Show zu starten. Funktioniert leider nicht?!
    Direkt an der Show problemlos. Gibt es da eine Möglichkeit?

    AntwortenLöschen
    Antworten
    1. Ich habe leider keinen Show...
      Bitte schau mal auf den Post über deinem, da erkläre ich, wie man die Routinen durchsucht. Dort sollte als Trigger die "Utterance" auftauchen, mit der du die Kamera einschalten möchtest.
      Interessant wäre, wie die darauffolgende "sequence" aussieht - kannst du gerne Posten aber bitte "customerID" unkenntlich machen.

      Löschen
  4. Guten Tag, ich bin gerade auf den Beitrag gestoßen. Ich versuche Befehle direkt an die Echos zu schicken (z.b. dass auf allen Devices, ein Text gesprochen wird). Ich versuche gerade den sourcecode zu verstehen, gehe ich richtig der Annahme, dass das alles funktioniert, indem man sich als Browser ausgibt und dann die Befehle über die Alexa Test Console triggert? Danke

    AntwortenLöschen
    Antworten
    1. PS: Oder gibt es eine offizielle API, welche man ansteuern kann? Ich finde dazu nichts bei Dr. Google...

      Löschen
    2. Wenn es eine dokumentierte API gäbe, bräuchte es dieses Script nicht ;)
      Alle Aufrufe stammen aus der Alexa WebApp.

      Löschen
  5. Super Skript, ich nutze das zu Hause intensiv, z.B. um automatisch Radio in 2 Badezimmern zu spielen wenn das Licht angemacht wird oder meinen Sohn daran zu erinnern wenn er man wieder zu lange vor der Daddelkiste sitzt.

    Leider sind die alten Kommentare hier nicht mehr zu sehen.
    Für die Anmeldung nutze ich den "Firefox anmelden und das Cookie speichern" Weg. Das muss ich etwa alle 2 Wochen machen. Gibt es inzwischen wieder einen Weg das sich das Skript wieder funktionierend selbst anmeldet?

    AntwortenLöschen
    Antworten
    1. Das hängt leider stark vom genutzen Account ab.
      Mit der aktuellen Version habe ich seit Monaten keine Login Probleme.
      Eigentlich ist die Stärke des Scripts, dass 90% der Nutzer ohne Browser Cookie auskommen.

      Löschen
  6. Hallo, wollte gestern die Features mit jq nutzen und habe daher mein System upgedatet. Nun funktioniert zwar das Skript auf der Kommandozeile wunderbar, aber es geht nicht mehr dieses wie bislang über CUxD in Homematic aufzurufen.

    Der Aufruf erfolgt über:
    dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/cuxd/user/alexa_remote_control.sh -d Echo_Dot -e speak:'Testnachricht'");

    Wenn ich den Befehl nach Doku modifiziere/herumprobiere erhalte ich folgende Meldung:
    ERROR: unkown device dev:GeraldsEchoDot

    Dabei habe ich sämtliche Anführungsstriche durchprobiert.

    Das Modifizierte Kommando mit der Fehlermeldung ist:
    dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("/usr/local/addons/cuxd/user/alexa_remote_control.sh -d EchoDot -e speak:'Testnachricht'");
    dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
    var v = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
    WriteLine(v);

    Hat jemand einen Hinweis wo der Haken ist? Ich weiss nicht mehr wo ich weitersuchen soll. Die Meldung aus dem Script hilft mir auch nicht weiter.

    AntwortenLöschen
    Antworten
    1. Ich nutze das plain script auf der CCU2 und kann dort auch mit der neuesten Version 12.a über z.B.
      dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("sh /usr/local/addons/user/alexa_remote_control.sh -d Arbeitszimmer -e speak:'hallo'");
      alle Sprachansagen generieren.

      Soweit ich weiß, geht die jq Version nicht auf der Homematic oder ist das inzwischen möglich?

      Löschen
  7. Sorry die Meldung lautet natürlich "ERROR: unkown device dev:EchoDot"

    AntwortenLöschen
  8. Kann man irgendwie die alten Kommentare noch sehen? Ich sehe nur noch 6. Feb. bis 3. März.

    AntwortenLöschen
    Antworten
    1. Die alten Kommentare waren von Google+
      Das wurde leider eingestellt.

      Löschen
  9. Grüßt euch....
    Ich bekomme seit heute immer wieder diese Fehlermeldung beim Anmeldeversuch.....

    "the following devices exist in your account:
    parse error: Invalid numeric literal at line 8, column 10"

    Hatte ich bis jetzt noch nie, könnte mir evtl. jemand weiter helfen? Bzw an was liegt diese Fehlermeldung

    AntwortenLöschen
    Antworten
    1. wie heißen denn deine Geräte?

      Löschen
    2. Alex hat sich erledigt... War Mal wieder eine Captcha Abfrage notwendig

      Löschen
  10. Hallo, ist es auch möglich dem Echo die Lautstärke mit der eine Ansage gemacht werden soll vorzugeben?

    AntwortenLöschen
    Antworten
    1. Das könnte über eine Routine gelöst werden...

      Löschen
    2. Leider erlaubt die Routine nur die Änderung in 10er-Schritten, womit ich leider wieder vor dem gleichen Problem stehe, das ich gehofft hatte mit diesem Script zu lösen. Trotzdem, tolle Arbeit. :)

      Löschen
    3. Die Version 0.14 kann das nun auch

      Löschen
  11. Hi Alex,
    i'am trying to use your script with Echo Dot 3° generation but seems is not working. Cammands by shell are taken but i cannot hear nothing (i am talking about TTS).
    Any idea if there is some issues with last generation?
    Regards

    AntwortenLöschen
  12. Hallo Alex,

    soweit geht nun nach dem Umstieg auf JQ mit der CCU3 alles bestens.
    Leider bekomme ich meine Gruppe "Überall" nicht zum Laufen.
    "Ãœberall" und auch "%C3%9Cberall" gehen nicht.

    Hast du Rat?

    AntwortenLöschen
  13. Hallo Alex,
    es scheint Kommentare/Antworten zu geben, die beschreiben, was man tut , wenn Chaptcha verlangt wird. Leider kann man diese anscheinend nicht mehr sehen.
    Könntest du die Lösung für derartige Login-Probleme bitte in den Artikel packen?
    Und noch eine zweite Frage:
    Ich nutzte bei meinem Amazon Account bisher eine 2-Faktor-Authentifizierung mit Google Authenticator. Da wechselt der 2. Faktor ja minütlich. Den 2. Faktor an das Passwort hängen ist daher keine wirkliche Lösung.
    Gibt es dafür einen Weg, der mir wieder erlaubt, den 2. Faktor wieder zu aktivieren?
    Danke
    und tolles Skript! Hilft mir sehr
    Viele Grüße

    Sepp

    AntwortenLöschen
  14. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  15. Hi!
    Bin gerade auf das Skript gestoßen, klingt sehr interessant...
    Habe ich das richtig verstanden, dass ich mit

    -e automation:'...'

    Jeden beliebigen Befehl absetzen kann, der auch per Sprache funktioniert, ohne dass ich vorher Routinen in der App anlegen muss? Das wäre ja genial...

    AntwortenLöschen
  16. Sorry, der "Unknown" vorhin war ich...
    Hab das mit der 2FA nicht verstanden...
    Wenn ich mit Passwort aaaa und 2FA-Code 123456 folgendes aufrufe:

    PASSWORT=aaaa123456 bash alexa_remote_control.sh -a

    bekomme ich:

    cookie does not exist. logging in ...
    ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
    Try logging in to https://alexa.amazon.de with your browser. In your browser
    make sure to have all Amazon related cookies deleted and Javascript disabled!

    (For more information have a look at /tmp/.alexa.login)

    AntwortenLöschen
  17. Hallo zusammen
    Ich hänge auch bei der captcha Geschichte? Hat jemand diesen "grossen Filter" überwunden und kann hier kurz erklären, wie man das in Linux in der Shell löst?
    Vielen Dank.

    AntwortenLöschen
  18. Hallo zusammen,

    seit dem 18.06. kann ich leider keine Sprachausgabe der Werte aus meiner Hausautomation erzeugen.

    Ich habe bereits die neue Version des Plainscripts vom 18.06. im Einsatz. Devices werden alle aufgelistet, das Absetzen eines Befehls zur Sprachausgabe über die Shell hat folgende Ausgabe:

    sending cmd:speak:Guten_Appetit! to dev:Echo_Dot_Wohnzimmer type:YYYYYYYYYY serial:SSSSSSSSSSSS customerid:XXXXXXXX
    HTTP/1.1 0 x-amzn-RequestId: b6201f2e-6cdb-4e7e-88a0-7446dd815b75
    Access-Control-Allow-Origin: https://alexa.amazon.de
    Content-Encoding: deflate
    Vary: Origin
    Access-Control-Expose-Headers: x-amzn-dat-gui-client-upgrade,X-Amzn-Error,loginUrl,X-Amzn-RequestId,x-amzn-alt-domain,Date,Location
    Access-Control-Allow-Credentials: true
    Date: Wed, 19 Jun 2019 15:41:47 GMT
    Connection: close

    Hat hier noch jemand dieses Problem?

    Gruß in die Runde.

    AntwortenLöschen
    Antworten
    1. Bitte benutze die letzte Version (vom 18.06.)
      Diese behebt das von dir beschriebene Anmeldeproblem.

      Löschen
    2. Hallo Alexander,

      danke für Deine Antwort. Leider habe ich diese bereits im Einsatz. Devices ruft das Script auch problemlos ab. Ich kann lediglich keine Sprachausgabe triggern.

      Löschen
    3. Schließe mich an....Habe die selben Probleme. Auch schon die Version vom 18.06 in Verwendung. Es werden keine Routinen, oder Radiostation etc. ausgeführt. Geräte werden zwar vom Script erkannt und auch die Befehle gesendet. Aber wahrscheinlich nimmt Amazon sie nicht entgegen (Anmeldung?)

      root@loxberry:/opt/loxberry/data/plugins/alexaremote# ./alexa_remote_control.sh -d Küche -e automation:'Fenster'
      sending cmd:automation:Fenster to dev:Küche type:AB72C64C86AW2 serial:G090LV0372 020345 customerid:A18FYOESTPUCW4
      HTTP/1.1 0 x-amzn-RequestId: d07d0dcd-00a4-4701-acf9-b01601c9fb8e
      Access-Control-Allow-Origin: https://alexa.amazon.de
      Content-Encoding: deflate
      Vary: Origin
      Access-Control-Expose-Headers: x-amzn-dat-gui-client-upgrade,X-Amzn-Error,loginU rl,X-Amzn-RequestId,x-amzn-alt-domain,Date,Location
      Access-Control-Allow-Credentials: true
      Date: Thu, 20 Jun 2019 08:20:34 GMT
      Connection: close

      Löschen
  19. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  20. Schließe mich an....Habe die selben Probleme. Auch schon die Version vom 18.06 in Verwendung. Es werden keine Routinen, oder Radiostation etc. ausgeführt. Geräte werden zwar vom Script erkannt und auch die Befehle gesendet. Aber wahrscheinlich nimmt Amazon sie nicht entgegen (Anmeldung?)

    root@loxberry:/opt/loxberry/data/plugins/alexaremote# ./alexa_remote_control.sh -d Küche -e automation:'Fenster'
    sending cmd:automation:Fenster to dev:Küche type:AB72C64C86AW2 serial:G090LV0372 020345 customerid:A18FYOESTPUCW4
    HTTP/1.1 0 x-amzn-RequestId: d07d0dcd-00a4-4701-acf9-b01601c9fb8e
    Access-Control-Allow-Origin: https://alexa.amazon.de
    Content-Encoding: deflate
    Vary: Origin
    Access-Control-Expose-Headers: x-amzn-dat-gui-client-upgrade,X-Amzn-Error,loginU rl,X-Amzn-RequestId,x-amzn-alt-domain,Date,Location
    Access-Control-Allow-Credentials: true
    Date: Thu, 20 Jun 2019 08:20:34 GMT
    Connection: close

    AntwortenLöschen
    Antworten
    1. Nach einem halben Tag ohne Benutzung des Scripts... Geht es seit einer Stunde wieder von alleine mit der Version vom 18.06 🤷🏻‍♂️

      Löschen
  21. Hi, habe das gleiche Problem und bin auf der neuesten Version.
    Den Cookie habe ich mehrfach neu erzeugt.
    Leider ist nichts zu machen immer die gleiche Meldung, wie bei Danny.
    Hat noch wer Tipps?

    AntwortenLöschen
    Antworten
    1. Bitte nochmal die neueste Version von heute probieren.

      Löschen
  22. Jetzt bin ich beruhigt dass andere auch das Problem haben, dachte erst das lag daran dass ich die Alexa in ein seperates Netz ausgesperrt habe.
    Sehe das gleiche wie Danny sobald ich einen -e speak Befehl absetze.
    -e play und pause sowie auflisten der Geräte usw. funktioniert aber.
    wurde was in der API seitens amazon geändert?

    AntwortenLöschen
    Antworten
    1. Bitte nochmal die neueste Version von heute probieren.

      Löschen
    2. Leider nein :(

      ./alexa_remote_control.sh -d Wohnzimmer -e speak:"test"
      sending cmd:speak:test to dev:Wohnzimmer type:xxxxx serial:xxxxx customerid:xxxxxx
      HTTP/1.1 0 x-amzn-RequestId: 1e346878-b2ea-484a-a177-380e63c61fe5
      Access-Control-Allow-Origin: https://alexa.amazon.de
      Content-Encoding: deflate
      Vary: Origin
      Access-Control-Expose-Headers: x-amzn-dat-gui-client-upgrade,X-Amzn-Error,loginUrl,X-Amzn-RequestId,x-amzn-alt-domain,Date,Location
      Access-Control-Allow-Credentials: true
      Date: Tue, 09 Jul 2019 16:54:32 GMT
      Connection: close

      Löschen
    3. Korrektur, einmal mit -l ausgeloggt, wieder eingeloggt und läuft ;)

      *kuss

      Löschen
  23. Hi zusammen,
    ich habe das Script per Zufall heute entdeckt. Bin begeistert! Eigentlich das, was ich noch gesucht habe. Script und Abhängigkeiten auf dem gleichen Raspi installiert, auf dem auch Node-RED läuft. Bei mir läuft alles, auch -e speak Kommandos. Dies sowohl auf Echo Dot Gen. 2 als auch Gen. 3
    In der Zwischenzeit habe ich mir jedoch eine Version selber zusammengebaut. Diese besteht aus der Original-Version von hier und der von rich-gepp auf github. Warum dies: rich-gepp hat die 2-Faktor-Authentifizierung implementiert (5 Sterne an der Stelle, sie funktioniert), jedoch das letzte Update 0.12c noch nicht drin.
    Wer meine "Zusammenführung" nutzen möchte: https://github.com/all-solutions/alexa-remote-control
    ABER ACHTUNG: sobald Alex oder rich-gepp seine Version auf diesen Stand updatet, werde ich das Repo bei mir wieder LÖSCHEN. Sämtliche Credits gehören den beiden.

    AntwortenLöschen
    Antworten
    1. Fyi, die neueste Version unterstützt nun auch 2FA. Die Änderungen von rich-gepp habe ich eingepflegt. Musste nur erstmal selbst MFA mit Amazon testen :)

      Löschen
    2. OK, dann lösche ich wie angekündigt das Repo bei mir wieder ;-)

      Löschen
    3. Das wollte ich damit nicht sagen - du kannst den Fork aber jetzt vom neuen Master ableiten ;)

      Löschen
  24. Hallo zusammen, habe das selbe Problem. ERROR: Amazon Login was unsuccessfull....
    Java im Firefox ist deaktiviert, Cookies gelöscht, Kein captscha wenn ich mich im Browser anmelde (da klappt der Login).
    Hat einer einen Tipp?

    AntwortenLöschen
    Antworten
    1. Hast du die Variablen (Benutzer/Passwort) im Script eingetragen oder per Umgebungsvariable übergeben?

      Manchmal hatman im Passwort Zeichen, die für die Shell Escaped werden müssen - am besten einfache Hochkommas benutzen:
      export PASSWORD='geheim'

      Löschen
  25. Firefox ist der 60.7.2esr (32bit)

    AntwortenLöschen
  26. Noch als Zusatzinfo.. benutze die kleine _plain-Version da ich nur Texte ansagen lassen möchte.

    AntwortenLöschen
  27. Habe das Script editiert und die Original Hochkommas im Script belassen.
    Hat ja auch schon funktioniert, aber an diesem Tage nicht zu machen. Alles versucht wie oben bereits beschrieben - kein Captscha etc...
    Heute geht es wieder, selbes Phänomen wie bei meinem Vorgänger...

    AntwortenLöschen
  28. Hallo zusammen,

    also bei mir läuft das Skript super und ich muss nur aus einer laufenden Alexa-Session die cookies.txt über Firefox exportieren. Womit ich aber Probleme habe, ist das ich die 2-Factor Aktivierung aktiv habe und deswegen ein Captcha abgefragt wird. Das verhindert jedes Mal das nach Ablauf der Session (2-4 Wochen) eine Re-Login durch das Skript möglich ist. Hat dafür irgendjemand ein Workaround? Kann ich irgendwie automatisch einmal pro Woche eine neue Cookies.txt per Console erzeugen oder so?. Oder kann ich den Browser bei Amazon als sicher hinterlegen oder Captcha?

    Vielen Dank.

    Gruß Stefan

    AntwortenLöschen
    Antworten
    1. Hi Stefan,
      probier doch mal meine "zusammengewürfelte" Version vom Post weiter oben. Diese kann auch mit 2-Faktor-Authentifizierung umgehen. Hierzu muss Du lediglich noch oathtool zusätzlich installieren und das MFA-Secret Deines Amazon-Kontos im Script eintragen.

      Löschen
  29. Hallo aus Großbritannien, ich sehe den obigen kommentar, der besagt, dass sie funktionieren, aber meiner ist es immer noch nicht. Ich habe das Captcha-problem nicht, es läuft in ordnung, bleibt aber stumm. Bin das nur ich oder arbeiten meistens nicht alle? Wenn jemand dies behoben hat, wie haben sie es getan? Vielen Dank für ein tolles skript, es hat meine heimautomation revolutioniert !! :-)

    AntwortenLöschen
    Antworten
    1. Hi Steve, do you have any debuging output? I assume you used the latest version? Please post part of your /tmp/.alexa.cookie (without the last column).

      Löschen
  30. How extraordinary! It has suddenly started working... and I've been trying every day. Maybe it was a corrupt cookie as it did do the "cookie expired, logging in again …" thing? Very odd, but fantastic to have it back!!

    AntwortenLöschen
  31. P.S. vielen Dank für dieses tolle Script, dass es so frei zu Verfügung gestellt wird!

    AntwortenLöschen
  32. Hallo!
    gibt es die Möglichkeit per Befehl die Funktion "Ankündigung" zu nutzen?

    AntwortenLöschen
  33. Hallo! Danke für dieses tolle Script.
    Eine Sache beschäftigt mich nun seit Tagen. Wie bekomme ich die Alexa dazu die deutschen Umlaute wie "ä", "ö" und "ü" ordentlich auszusprechen? Ok, bei dem "ü" funktioniert das "y" ganz gut, aber was mache ich mit dem Rest? Hat da jemand eine Idee?
    Grüße!

    AntwortenLöschen
    Antworten
    1. Hi!
      Also bei mir sagt sie die Umlaute ganz normal. Habe ihr gerade den Satz "Übermorgen ändern sich die Öffnungszeiten" gesendet. Plappert sie ohne jegliche Beanstandung nach...

      Löschen
    2. Evtl. liegt das auch an der "LOCALE" Einstellung der Shell.

      Löschen
    3. Was steht denn bei dir als $TTS_LOCALE?

      Löschen
  34. Hallo Alex,

    nochmals danke für deine tolle Arbeit. Es funktioniert auch mit der MFA alles prima.
    Nur eine Sache habe ich früher hinbekommen, was nun scheinbar nicht mehr geht.

    Vor einer Sprachmeldung über Alexa habe ich normalerweise den Echo des gewünschten Raumes über das Skript lauter gestellt, die Meldung geschickt und dann wieder leiser gestellt. Leider werden keine Lautstärkebefehle umgesetzt, wenn auf dem Echo keine Musik währendessen läuft.
    Kann das sein oder gibt es dafür einen Workaround?

    AntwortenLöschen
    Antworten
    1. Lautestärkeeinstellung ohne dass etwas abgespielt wird geht bisher nur als Routine. Man baut sich eine Routine, die die Lautstärke auf normal stellt und eine die die Lautstärke auf "Ansagelautstärke" stellt und ruft diese jeweils vor bzw. nach der Ansage auf.

      Liegt natürlich auf der Hand, dass man das auch direkt einprogrammieren könnte... ;) Habe es aus Zeitgründen noch nicht geschafft - daher erstmal nur der Workaround, den du dir selbst bauen kannst.

      Löschen
    2. So, die neueste Version kann jetzt auch die Lautstärke der Sprachbefehle einstellen $SPEAKVOL.
      Sollte etwas davor abgespielt worden sein, wird die Lautstärke auf die vorherige Lautstärke gestellt. Ansonsten wird $NORMALVOL benutzt.

      Generell verwendet die Lautstärkeeinstellung jetzt auch Routinen und funktioniert somit auch auf non-playing Devices

      Löschen
    3. Wo muss der Befehl für die Lautstärke rein?

      script:///home/pi/domoticz/scripts/alexa_remote_control.sh -d Wohnzimmer -e speak:' Küchenfenster ist auf!!'

      Löschen
  35. Gibt es auch die Möglichkeit, bei Echos mit Display den Befehl „Schalt den Bildschirm aus“ auszuführen?

    AntwortenLöschen
    Antworten
    1. Wenn eine Routine das ausführen kann, kannst du dir eine solche anlegen, und sie mit '-e automation:"Routinenname"' ausführen.

      Löschen
  36. Hallo zusammen,

    ist es mit diesem Script auch möglich den Status eines Gerätes abzufragen?
    Also z.B. zu wieviel Prozent das Licht gerade in der Küche an ist o.ä.?

    Gruß
    Gregor

    AntwortenLöschen
  37. Sorry, im Webfrontend von Alexa gibt es dazu keine Entsprechung.

    AntwortenLöschen
  38. Alles klar. Danke für die Info.

    AntwortenLöschen
  39. Hallo,
    besteht die Möglichkeit über dieses Skript Ankündigungen bzw. Announcements an mehrere Echo Geräte gleichzeitig zu senden. Zusätzlich wäre hierfür eine Funktion zur Aktivierung bzw. Deaktivierung des DND-Modes großartig.

    Viele Grüße
    Mathias

    AntwortenLöschen
  40. Hallo, vielen Dank für das tolle Skript! :)
    Gibt es eine Möglichkeit auch Spotify Tracks abzuspielen bzw. Playlisten fortzusetzen (die QueueID hat ja ein spotify spezifisches Format).

    AntwortenLöschen
  41. Hallo !
    Danke mal für die tolle Arbeit, aber es klappt bei mir nicht, ich bekomme zwar die Geräteliste, aber wenn ich über ssh nen TestText zum quatschen raussenden möchte, kommt retour "Permission denied". Was fehlt bei mir ? lG Thomas

    AntwortenLöschen
    Antworten
    1. - Info- nutze die _plain Version

      Löschen
    2. evtl. hast du das Script bereits als "root" ausgeführt. Die Temp Dateien werden standardmäßig alle nach /tmp geschrieben...

      Löschen
  42. Apologies for switching to english. My german is good enough to read but writing is a disaster.

    Im trying to achieve a similar thing as mr unknown. I developed a skill. Say i activate this by saying Alexa, talk to chocolate. As far as I understand, I cannot create a routine that starts a skill. Is there any way I can start the skill using your script?

    My goal is to start the skill, which asks a question, by which i'm in a conversation

    AntwortenLöschen
    Antworten
    1. Currently that doesn't work yet. Amazon is in the process of extending the capabilities - starting skills should become possible soon.

      Löschen
  43. Hallo, wie mache ich in der neuen Version es das ich eine Textausgabe auf mehrere Devices gleichzeitig ausgebe? In der Vergangenheit war es einfach "Echo Keller, Echo Kueche" u.s.w. wie geht das jetzt ?

    AntwortenLöschen
    Antworten
    1. das geht nur mit dem Schlüsseldevice "ALL" - allerdings auch nur nacheinander.

      Löschen
  44. Ich hätte eine Anregung für die zukünftige Weiterentwicklung des Alexa Paketes. Es wäre schön und sicher für Viele interessant, zukünftig auch noch gleich eine regelmäßige automatische Löschung des Alexa Sprachverlaufes mit zu implementieren.
    So etwas hat Stefan Franke " https://forum.iobroker.net/topic/9243/script-deletealexaactivities-l%C3%B6scht-jeden-tag-alle-aufgenommenen-sprachbefehle " mal vorgestellt.
    Leider kann ich nicht einschätzen, ob so etwas machbar ist. Es wäre aber sicher heutzutage eine für viele Nutzer wünschenswerte Option. Ich konnte im Homematic Forum auch keine sonstige automatische Lösung dafür finden.

    AntwortenLöschen
  45. Hallo,
    ich habe eine neue MultiroomGruppe angelegt, und mit 3 Geräten gefüllt.
    Spreche ich die Gruppe an mit: /usr/local/addons/alexa/alexa.sh -d 'wichtig' -e speak:'Hallo'
    Kommt folgendes Kommando zurück: sending cmd:speak:Hallo to dev:wichtig type:A3C9PE6TNYLTCH serial:bb24a7c38600488cb17d124fa5a1ad32 customerid:A27OXTZQ0RTTDZ

    Aber man hört keinen Ton, auf keinem der Geräte.
    Was mache ich falsch?

    AntwortenLöschen
    Antworten
    1. Ein Speak auf eine MultiroomGruppe funktioniert leider nicht.

      Löschen
  46. Danköschön :D. Danach habe ich echt lange gesucht.

    AntwortenLöschen
  47. Hallo, Wo muss der Befehl für die Lautstärke rein?

    script:///home/pi/domoticz/scripts/alexa_remote_control.sh -d Wohnzimmer -e speak:' Küchenfenster ist auf!!'

    AntwortenLöschen
    Antworten
    1. Das geht nur als Konfiguration im Script (SPEAKVOL/NORMALVOL) oder per Umgebungsvariable.

      Löschen
  48. Antworten
    1. Super wäre es, wenn man auch Komponenten der Hausautomation ansprechen könnte.

      Löschen
    2. Sorry, dafür gibt es momentan keine Schnittstelle. Wenn die Zigbee Bridge im Echo nicht dein einziges Gerät ist, gibt es zudem bessere Möglichkeiten (ioBroker, FHEM, etc.)

      Löschen
    3. Hallo,
      Ich habe eine ‚ Amazon Smart Plug (WLAN-Steckdose), funktioniert mit Alexa‘.
      Wie kann ich dir den Steuern?

      Löschen
  49. Wie findet man denn die Tracknummer für einen Titel bei Amazon heraus?
    Bspw: https://music.amazon.de/albums/B008839OBC?trackAsin=B00883A2KY&ref=dm_sh_f0fb-5d51-dmcp-be70-05fa4&musicTerritory=DE&marketplaceId=A1PA6795UKMFR9

    Bitte um Hilfe.
    Danke

    AntwortenLöschen
    Antworten
    1. Hat hier keiner einen Tipp?

      Löschen
    2. Ich musste bisher die Titel in der Amazon App heruntergeladen haben. Anschließend sollten sie mit "-p" in deiner Library sichtbar sein.

      Löschen
    3. Hallo,
      leider nicht.
      Hier werden nur die gekauften Titel angezeigt.
      Der Titel ist aber nicht gekauft, sondern im "Paket" dabei.
      Gibt es hier eine weitere Möglichkeit?
      Ciao

      Löschen
    4. Sorry, musste mir das selbst nochmal anschauen...

      Du musst die Titel einmalig mit der Amazon Music App heruntergeladen haben, damit sie für Alexa sichtbar sind (egal mit welchem Telefon)!!!

      Anschließend kannst du mit "-s 'Artist Name' 'Album Name/Titel'" das Album bzw. den Titel abspielen. Die Schreibweise muss exakt so lauten wie in der Amazon Music App.

      Kontrollieren kannst du die verfügbaren Titel in der Web App alexa.amazon.de

      Löschen
  50. Hallo.
    Ich habe ein Problem mit dem Script beim ausführen von Routinen. Wenn ich mehr als 20 Routinen in der Alexa-App (ganz einfach und nur mit einem einfachen Wort gekennzeichnet) anlege werden die Routinen als nicht vorhanden ausgegeben.
    ERROR: no such utterance 'Fenster' in Alexa routines
    Alles was über den älteren vorhanden Routinen angelegt wird, wird nicht ausgeführt, bzw. wird zwar ausgeführt, aber dafür eine ältere nicht mehr. Ist das Script irgendwie auf ein Limit gesetzt, oder wie bekomme ich es hin das dass Script nach neuen Routinen sucht und diese auch ausführt, mit dazu nimmt?

    AntwortenLöschen
    Antworten
    1. Standardmäßig gibt die Routinen-API nur die ersten zwanzig Einträge zurück (Pagination). Ich muss alle Einträge abrufen, um den mit der gewünschten "Utterance" herauszufischen.
      Werde ich anpassen, sobald ich Zeit finde.

      Löschen
    2. OK. Vielen Dank erst einmal. Hatte Gestern schon viele Stunden mit dem Script zugebracht und nach einer Lösung geforscht.

      Löschen
    3. Die aktuelle Version holt jetzt bis zu 200 Routinen

      Löschen
    4. Ich habe leider mehr als 200.
      Wäre es möglich hier zu erhöhen (500) oder das ganze sogar dynamisch zu machen?

      Löschen
    5. Ich kann es gern beim nächsten Release auf 2000 erhöhen. Bis dahin musst du die Zeile mit "?limit=200" einfach anpassen

      Löschen
  51. Servus Alexander,

    danke für die Info. Habe auch schon einige Stunden versucht einen Fehler in meinem System zu finden.
    Wann wäre denn ungefähr eine Anpassung deinerseits geplant?

    AntwortenLöschen
  52. What is the syntax for -m option? An example please. I get an error trying to create the multiroom group. Numbers changed for security

    alexa_remote_control.sh -m "AlarmGroup" B0F007144355023F
    Creating multi room dev:AlarmGroup member_dev(s): B0F007144355023F
    ERROR: unkown device dev:B0F007144355023F

    AntwortenLöschen
    Antworten
    1. instead of using the internal device id, you should use the Echo's name, e.g.
      alexa_remote_control.sh -m "AlarmGroup" MyEcho1 MyEcho2

      Löschen
    2. Thanks, i was afraid of that. My devices have spaces in the name for example “Echo Show Kitchen”. I tried using single and double quotes, but it errors. I renamed on device to a name without spaces and it worked. Is there a way to escape or use devices with spaces in the device name?

      Löschen
    3. regardless, thank you for this fine work! Love it!

      Löschen
    4. replace spaces with underscores - that should work!

      Löschen
  53. Hallo Alexander,

    ich habe MFA im Amazonkonto aktiviert, komme dann aber nicht weiter. in deiner Anleittung steht "Neue APP registrieren". Was ist genau damit gemeint?

    AntwortenLöschen
    Antworten
    1. Amazon nennt das 2SV (Zwei-Schritt-Verifizierung), dort kann man "Einstellungen für die Zwei-Schritt-Verifizierung" eine neue AuthentifizierungsApp hinzufügen.
      Anstelle den Barcode zu scannen muss man den Link klicken "Barcode kann nicht gescannt werden". Was dortangezeigt wird ist das zukünftige MFA_SECRET im alexa-script.
      Zuvor muss es jedoch erst per oathtool bestätigt werden (siehe Kommando oben im Blog).

      Löschen
  54. Funktioniert das Skript auch auf Windows, wenn ja wie genau, irgendwie funktioniert das oathtool nicht

    AntwortenLöschen
    Antworten
    1. Ich bekomme bei der normalen Anmeldung immer ein captcha obwohl ich die 2FA eingestellt habe und es funktioniert auch, da ich das OTP per SMS auf mein Handy bekomme.

      Was könnte der Grund dafür sein?
      Ich verwende den Firefox Browser und habe Javascript und Cookies abgedreht.

      cookie does not exist. logging in ...
      ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
      Try logging in to https://alexa.amazon.de with your browser. In your browser
      make sure to have all Amazon related cookies deleted and Javascript disabled!

      (For more information have a look at /tmp/.alexa.login)

      To avoid issues with captcha, try using Multi-Factor Authentication.
      To do so, first set up Two-Step Verification on your Amazon account, then
      configure this script (or the environment) with your MFA secret.
      Support for Multi-Factor Authentication requires 'oathtool' to be installed.

      Löschen
    2. Du musst eine zusätzliche AuthentifizierungsApp im Amazon Konto unter "Einstellungen für die Zwei-Schritt-Authentifizierung" registrieren.
      (Schritte siehe oben)
      Den zweiten Faktor steuert dann zukünftig oathtool bei.

      Löschen
    3. Vielen Dank, hat mal funktioniert

      Gibt es ein oathtool für Windows?

      Löschen
    4. Selbst kompilieren oder den eidesstattlichen Versicherungen z.B. hier glauben: https://rubli.info/t-blog/2011/09/03/generating-oath-otps-on-windows-with-oathtool/

      Löschen
  55. Hi ich habe mal wieder Probleme mich einzuloggen mit dem Script :-( Ich habe nur die Shell auf dem Pi kein Desktop. Egal was ich mache ich bekomme immer diese Meldung:

    ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
    Try logging in to https://alexa.amazon.de with your browser.

    Was mache ich falsch ?

    AntwortenLöschen
  56. Ich habe nun per 2 Fact hinbekommen, aber jetzt loggt er sich jedes mal erst ein, wenn ich Alexa sprechen lasse. Das ist blöd, weil es durch das Einloggen eine starke Verzögerung entsteht, kann man das ändern ?

    AntwortenLöschen
    Antworten
    1. Bin mir nicht sicher, was du mit "Einloggen bei sprechen lassen" meinst. Wenn ich dich richtig verstehe, hast du eine starke Verzögerung, wenn du ein "speak" Kommando absetzt, weil Alexa sich dann erst anmeldet...?
      Das sollte eigentlich nicht passieren, solange das Cookie existiert und gültig ist. Das Cookie wird ins $TMP Verzeichnis als .alexa.cookie gespeichert.

      Löschen
  57. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  58. Hallo,
    für eine Anwendung in Hotels würde ich gerne die Sprache des jeweiligen Echo-Geräts auf die Sprache des eingecheckten Gastes remote anpassen. Was müsste im Skript dazu ergänzt werden?

    AntwortenLöschen
    Antworten
    1. Sprache auf Deutsch:
      https://alexa.amazon.de/api/device-locale/${DEVICESERIALNUMBER}/${DEVICETYPE}
      Anfragemethode:PUT
      Inhalt: {"locale":"de-DE"}

      Sprache auf US Englisch:
      https://alexa.amazon.de/api/device-locale/${DEVICESERIALNUMBER}/${DEVICETYPE}
      Anfragemethode:PUT
      Inhalt: {"locale":"en-US"}

      Eine liste aller verfügbaren Locales liefert ein GET auf https://alexa.amazon.de/api/get-languages

      Löschen
  59. Hi, is it possible to enable Alexa Guard skill functionality?
    Thanks
    Lukas

    AntwortenLöschen
    Antworten
    1. As of now there is no way to access skills directly.
      You might want to try routines - Amazon is currently reworking those quite a bit.
      Routines can be triggered with the "-e automation"

      Löschen
  60. Hallo Alex, gibt es die Option -z Echoname nicht mehr? Ich habe noch eine ältere Version im Einsatz. Hier wird die -z Option noch aufgelistet. Bei der aktuellen Version gibt es die -z Option nicht mehr. Warum das?

    AntwortenLöschen
    Antworten
    1. Hilf mir mal auf die Sprünge... was soll die -z Option tun?

      Löschen
    2. Das hat bisher immer den Status der Alexa zurück gegeben, also z. B. Status, Shuffle, Repeat, Volume, Station ID, Media ID. Mir gehts eigentlich nur um die Volume, also die momentan eingestellte Volume der Alexa. Kann aber auch sein, das in dem Plugin Alexa2Lox die Option -z noch extra dazu programmiert wurde und nun nicht mehr funktioniert. Kennst du die Option -z nicht?

      Löschen
    3. Hat sich erledigt, Alex. Da habe ich irgendwann mal ein paar Codezeilen gelöscht, die den UDP Versand machen. Hab die Zeilen aus einer älteren Version wieder importiert. Läuft wieder. Danke.

      Löschen
    4. Michael die Z- Option "gibt es nur" auf Plugin für den Loxberry. Das taucht hier im Ursprungsscript nicht auf.

      Löschen
    5. Ja, stimmt, hab mir das Plugin näher angeschaut vom Loxberry. Die Option -z wurde dazu programmiert.

      @Alex, was aber wirklich sehr geil ist, ist die neue SPEAKVOL. Ich nutze Alexa als Türklingel. Wenn man leise Musik hört, überhörte man gerne mal die "Türklingel". Das kann jetzt nicht mehr passieren. Spitze Arbeit!

      Löschen
    6. ich habe in der "großen" Variante nun auch eine "-z" Option eingebaut, um die Lautstärke zu ermitteln.
      Diese Funktionalität wird für das Zurücksetzen der Lautstärke nach Ansagen benötigt. Am zuverlässigsten scheint das zu funktionieren, wenn Multiroom-Gruppen definiert sind, dort wird nämlich die Lautstärke für alle "Teilnehmer" mitgeführt.

      Ich versuche zunächst die Lautstärke über /api/media/state zu holen und wenn das nicht funktioniert, suche ich das Multiroom-Parent-Device und hole mir dort den Status. Aus diesem Grund funktioniert es leider auch noch nicht in der "plain" Version - zu viel JQ parsing...

      Aus Performancegründen cache ich die letzten Volume Einstellungen für "$VOLMAXAGE" Minuten.

      Löschen
  61. Nur mal ein dickes Lob an dich!
    Dein Skript ist meine Basis für diverse Funktionen im Zusammenspiel mit HABridge und Zabbix. Ob nun mein Sohn einen Sprachhinweis bekommt wenn er mal wieder zu lange an der Playstation hockt, in den Badezimmern automatisch das Radio an und aus geht oder es eine nachricht gibt wenn die Gefrierschranktür nicht zu ist.

    Und heute konnte ich mit Begeisterung feststellen das die Anmeldeprobleme nun mit oathtool nun auch gelöst sind (nicht mehr alle 2 Wochen das Cookie manuell speichern).

    Also, meinen herzlichsten Dank!
    Bernhard

    AntwortenLöschen
    Antworten
    1. Hört sich ziemlich cool an, was du alles treibst - Kompliment!

      Löschen
  62. Hallo, bei mir stimmen die Namen der Alexa - Liste die ich mit "-a" bekomme nicht. D.h. in der ..control_plain.sh gibt er mir Z.b. den Namen "Echo_Kueche" Nehme ich diesen dann um einen Text zu sprechen geht eine ganz andere Aleaxa an. Die Seriennummern passen nicht zum Gerätenamen.

    In der ohne _Plain - Version wird die Liste der Namne ohne "_" angezeigt also "Echo Kueche", dann gibt es eine Fehlermeldung wenn ich da einen Text hinsende (wg. dem Leerzeichen zwischen "Echo" und "Kueche".
    Hat jemand einen Tipp?
    Auch finde ich die Datei die im root/tmp liegen soll auch nicht..
    Hoffe es kann mir jemans helfen?
    Danke

    AntwortenLöschen
    Antworten
    1. Die Plain Version ist leider nicht ganz auf der Höhe der normalen Version... :(
      Normalerweise solltest du den Gerätenamen in Anführungszeichen setzen und dann müsste das Script diesen auch korrekt verarbeiten. In der Plain Version erstze ich alle Leerzeichen bei der Anzeige durch "_". Das ist nicht ganz sauber...

      Löschen
  63. Hallo Alex,
    was muss man denn tun damit die Alexa - Listre aktuialisiert wird.
    Habe gestern schon in der App eine Alexa umbenannt aber mit der -a Option ist immer noch der alte Name da.
    Danke

    AntwortenLöschen
    Antworten
    1. Lösch einfach die Datei

      .alexa.devicelist.json

      im Unterordner alexa_remote_temp
      Dann holt er sich beim nächsten Aufruf eine neue Liste

      Löschen
    2. Nachtrag: Bei dir wird es der /tmp/ Ordner sein, ich hatte das mir auf einen anderen Pfad gesetzt. Also nicht Unterordner sondern vom Stammpfad / aus den Ordner /tmp/
      Oder dein Linux einmal neustarten (sollte den Ordner /tmp/ leeren)

      Löschen
    3. Ja, um die Anfragen möglichst gering zu halten, cache ich die Devicelist. @BLinz hat die Lösung bereits geschildert. Einfach die .alexa.devicelist* aus deinem Temp-Ordner löschen.

      Löschen
  64. Lassen sich auch Alexa Szenen und oder Routinen triggern?

    AntwortenLöschen
  65. Hallo,
    ich muss wohl die MF-Authentifizierung verwenden, weiss aber nicht wie ich das mache.
    Die Beschreibung im Update 2019-07-08 habe ich gelesen, allerdings verstehe ich nicht, was mit "Neue App registrieren" gemeint ist. Wo muss ich was für eine App registrieren? Und wenn mir dann der Code angezeigt wird, muss ich den im Script alexa.sh oben eintragen und den Rest macht das Script - richtig? Wieviel Zeit habe ich dafür zur Verfügung, da ich die *.sh ja erst wieder zur CCU hochladen muss?
    Danke für die Hilfe

    AntwortenLöschen
  66. Ok,
    ich bin selbst ein Stück weiter gekommen und weiß jetzt, wie ich den Code generieren kann.
    Wenn ich diesen dann aber mit dem o.g. Befehl "oathtool -b --totp "hier steht die codezeile"" in "/usr/local/addons/alexa" starte, dann kriege ich als Antwort "-sh: oathtool: not found".
    Welchen Denkfehler mache ich?

    AntwortenLöschen
    Antworten
    1. das OATHTOOL wird auch auf der CCU benötigt. den Pfad kannst du über die Umgebungsvariable $OATHTOOL setzen.

      Löschen
  67. Hallo Alexander. Danke für die tolle Arbeit. Mit einer Sache habe ich noch Probleme. Der Echo Dot 3 spielt leide (20%) Musik ab. Wenn ich dann einen TTS schicke (TTS Volume auf 100%), dann regelt der Echo Dot sofort auf 100%, also während noch die letzten Töne der Musik kommen. Erst nach ca 1 Sekunde kommt die TTS Nachricht. Man erschreckt sich immer, wenn die Musik plötzlich auf volle Pulle springt. Denkst du es ist möglich ein automatisches Pause->TTS->Resume einzubauen? Gruß Tim

    AntwortenLöschen
    Antworten
    1. Ja, das passiert bei mir leider auch - der Unterschied 20%-100% ist aber auch mächtig viel. Du kannst die SPEAKVOL im Script oder per ENV var einstellen.

      Eine Verzögerung einzubauen wäre cool, aber ich wüsste nicht wie (müsste als Teil einer Routine erfolgen).
      Wenn ich einfach drei REST-Calls nacheinander machen würde, dann käme vermutlich schon bald ein "Too many requests" Error.

      Löschen
  68. Hallo Alexander,
    erst mal vielen Dank für das Skript. Mega Job und "Hut ab" dafür. Ich werde meine Echos wohl nun für meine haussteuerungsrelevanten Ansagen nutzen. Bis lang lief das über Sonos. Klappt gut, aber macht bei gestreamter Musik Probleme, da die Musik nach einer Aktion stoppt.
    Ich habe es nicht gefunden, ggf. ist die Funktion aber irgendwo versteckt. Kann ich die Echos gezielt oder als Gruppe mit einem direkten Befehl auf z.B. Lautstärke 3 setzen? Ich könnte das über die Routine aufrufen, aber ein Befehl auf eine Gruppe die alle Echos beinhaltet ist eleganter. Geht das?

    Eine weitere Frage bezieht sich auf hochgeladene Musik. Eigene Musik hochzuladen ist wohl nicht mehr möglich. Ich würde jedoch gern als Haustürklingel einen kurzen mp3 clip abspielen. Kann man das irgendwie bewerkstelligen?

    Gruß
    Daniel

    AntwortenLöschen
    Antworten
    1. Bzgl. der Lautstärke gibt es '-e vol:0-100' (was inzwischen als Routine ausgeführt wird). Wenn du sämtliche Echos ansprechen möchtest, dann kannst du das spezielle Gerät "ALL" verwenden (-d ALL).

      Wegen des MP3 Clips, gibt es meines Wissens keine einfache Möglichkeit. Bei FHEM hat das Michael Winkler über einen DNS umgeleiteten TuneIn Sender gemacht (https://mwinkler.jimdo.com/smarthome/sonstiges/amazon-echo-tts-mp3s/)
      Der Aufwand ist allerdings unverhältnismäßig, wenn du eigentlich nur ein Klingeln brauchst.

      Löschen
    2. Vielen Dank, dass hilft mir erst mal weiter. Bzgl. "ALL" wäre es Klasse vordefinierte Gruppen nutzen zu können. Aktuell lasse ich drei verschiedene Echos, je nach Bedarf auch mal nacheinander sprechen. Das geht solange man es nicht zu schnell und zu oft nacheinander macht, sonst kommt "Rate exceeded: Too many requests."

      Löschen
    3. Eine Frage/Bitte hätte ich noch. Ggf. wäre das auch interessant für andere, daher Frage ich es hier an. Ansonsten löse ich das über eine Anpassung des Skripts per sed bevor es ausgeführt wird. Nicht sonderlich elegant, aber dafür musste ich meinen Hack nicht in jede neue Version einbauen.
      Es wäre genial, wenn man die Ansagelautstärke als variable mit übergeben könnte. Hintergrund ist folgenden. Mit der Sonos Api (https://github.com/jishi/node-sonos-http-api) ist es möglich TTS in einer bestimmten Lautstärke auszugeben. Der jeweilige LS fällt danach zurück auf die Ausgangslautstärke. Das war gut nutzbar, um z.B. morgens bzw. abends die Ansagen leiser auszugeben.
      Alexa_remote_control.sh -d "Wohnzimmer Echo" -e speak:"$text" -speakVol:20
      Wird die Lautstärke nicht explizit übergeben. Wird die „SET_SPEAKVOL“ wie konfiguriert verwendet.

      Löschen
    4. Du kannst die meisten Variablen als Umgebungsvariablen (Shell Variable) benutzen:
      SPEAKVOL=20 alexa_remote_control.sh -e speak:hallo

      Die "SET_*" Variablen im Script sollte man nur ändern, wenn sie für jede Ausführung zutreffen.

      Löschen
    5. Das "ALL" device macht nichts anderes als, alle Echo Geräte durchzugehen. Ich schicke allerdings immer ein "sleep 1" zwischen den Aufrufen, um das "Rate exceeded" zu umgehen - das müsstest du für deine eigenen Gruppen also auch machen.

      Löschen
    6. Vielen Dank für den Hinweis. Hätte ich selber drauf kommen müssen!

      Löschen
  69. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  70. Hallo Alexander.... könntest du evtl das Script so modifizieren das die TTs (also Speak-Funktion) Leerzeichen mit " " statt durch einen Unterstrich "_" erkennt bzw. übergebenwerden kann?
    Siehe hier https://www.loxforum.com/forum/german/software-konfiguration-programm-und-visualisierung/230880-wie-leerzeichen-durch-unterstrich-_-ersetzen#post231176

    Da es bei Loxone im Status / Alarmbaustein Texte mit Leerzeichen so " " ausgegeben statt mit "_" wie es das Script möchte.

    AntwortenLöschen
    Antworten
    1. Ich denke, das ist ein Problem bei der Umsetzung in Loxone. Da du den Text per HTTP an Loxone sendest, musst du Leerzeichen irgendwie escapen (normalerweise als %20 URL-Encode).

      Irgendein Teil deienr Kette decodet das %20 nicht korrekt, deshalb wird wohl die "Abkürzung" mit dem Unterstrich verwendet.

      Das alexa_remote_control.sh kann ganz regulär mit Leerzeichen umgehen.

      Löschen
  71. Hallo Alex!

    Nach kurzer Suche bin ich auf deine Seite gestoßen! Also dein Skript ist genau das was ich suchte, und dafür gebührt dir größter Respekt.

    Ich habe es auch auf eine Synology NAS zum laufen gebracht. Über die Konsole kann ich auch alles bedienen.

    Soweit sogut, (jetzt kommt leider das)aber:

    Auf der selben Synology habe ich auch den xHome Server von xSolution am laufen (Hausautomatisierung), dieser kann HTTP Befehle senden. Ist es möglich dein Skript über einen HTTP Befehl auszulösen? JA - Wie?

    Ich habe mich versucht in die Thematik einzulesen, aber es ist schwierig für mich das zu verstehen.

    Vielleicht kannst du mir Helfen - Vielen Dank im Vorfeld

    LG Herbert

    AntwortenLöschen
    Antworten
    1. Da gibt es wahrscheinlich verschiedene Möglichkeiten. Rein per CGI ginge das z.B. so (setzt einen CGI fähigen Webserver voraus):

      #!/bin/bash
      # webroot/cgi/alexa.cgi
      #

      echo "Conent-type: text/plain
      "

      saveIFS=$IFS
      IFS='=&'
      p=($QUERY_STRING)
      IFS=$saveIFS

      ARG=""
      for ((i=0; i<${#p[@]}; i+=2)) ; do
      ARG="${ARG} -${p[$i]} ${p[$i+1]}"
      done
      /alexa_remote_control.sh $ARG

      Bei deienr Homeautomation Lösung kommst du aber evtl. mit dem "exec" eher ans Ziel: https://xsolution.de/doku_evo/exec.html

      Alex

      Löschen
  72. Hallo Alex! Danke fürs rasche Feedback. Daumen hoch! Das mit der exec habe ich umsetzen können und kann somit von xHome heraus Befehle absetzen die die "Echos" auch umsetzen. Das blöde an diesem Weg ist das mir jeder Befehl einen Datenpunkt "frisst". Bei xHome zahlt man quasi die Datenpunkte.

    Das versenden von HTTP URL`s kostet keinen Datenpunkt.

    Deinen 2ten Ansatz über CGI verstehe ich leider nicht, bzw. habe keine Idee wie ich diesen umsetzen kann/muss.

    Wäre exrem froh wenn ich da Hilfe dazu bekommen würde.

    Schöne Grüße Herbert

    AntwortenLöschen
    Antworten
    1. Du benötigst einen Webserver. Der kleinste gemeinsame Nenner war lange CGI um Server-seitig Code auszuführen. Wenn du einen Webserver laufen hast, kann er wahrscheinlich CGI.

      Mit dem Beispiel Script oben kannst du z.B. folgende URL aufrufen:
      http://dein.web.server/cgi-bin/alexa.cgi?d=Esszimmer&r=s25111

      Allerdings müsstest du sämtliche Texte URL-encoden und im Script wieder de-coden. Das BASH Script ist eigentlich nur ein Proof-of-Concept.

      Evtl. kommst du mit PHP weiter als mit dem BASH Script.

      Alex

      Löschen
  73. Hallo Alex,

    habe einen Webserver am Synology laut dieser Anleitung eingerichtet.

    https://www.youtube.com/watch?v=laB3raWJnaA


    Gruß Herbert

    AntwortenLöschen
  74. Hallo Nochmal!

    Bevor ich zu deinem tollen Skript gekommen bin, hatte ich folgendes umgesetzt:
    https://www.intelligentes-haus.de/tutorials/smart-home-tutorials/amazon-alexa-text-to-speech-tts-ubers-smart-home-nutzen/

    Da das nur Text zu Sprache konnte habe ich weitergesucht.... und bin hier gelandet ;-)

    Also damals habe ich den Webserver eingerichtet und konnte die Befehle auch per HTTP senden.

    Vielleicht kann ich davon was benutzen!?

    Gruß Herbert

    AntwortenLöschen