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

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
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
#
###
#
# (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
  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
  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
  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
  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