Dienstag, 10. Oktober 2017

Amazon Alexa per Shell fernsteuern (Echo remote control)

Hier gibt es einen aktuelleren Post zu diesem Thema. Please look here for an updated post!
UPDATE 2021-09-20

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
USE_ANNOUNCEMENT_FOR_SPEAK - Announcements can be made to multiple devices, while regular SPEAK cannot
                             but the announcement feature has to be turned on for those devices

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.

Update 2020-02-09:
Nun gibt es (zunächst in der "großen" Variante") auch die Möglichkeit, sowohl SSML für TTS zu nutzen, als auch TTS auf Multiroom-Gruppen zu machen. (Ich ermittle dafür die Mitglieder einer Multiroom-Gruppe im Script.)
Realisiert wird das per Announcement/Ankündigung. Dafür muss dieses Feature in jedem Echo Gerät unter "Kommunikation" aktiviert sein!!!
alexa_remote_control.sh -d Überall \
 -e speak:'<speak><amazon:effect name="whispered">hallo du</amazon:effect></speak>'

Außerdem gibt es ein neues Kommando:
alexa_remote_control.sh -e sound:amzn_sfx_trumpet_bugle_04

Die möglichen Sound-Library-Einträge muss man leider ausprobieren. Von den vier möglichen Trompetenklängen funktioniert z.B. nur der oben gezeigte. Welche Klänge es gibt, sieht man wenn man einer Routine "Töne" hinzufügt.

Update 2021-05-27:
Die sogenannten Sequence-Kommandos (speak, weather, traffic, etc.) haben ein großes Update bekommen. Das Announcement/Ankündigung Feature führte leider zu merkwürdigem Verhalten und wird nicht mehr benutzt. Sämtliche SSML Funktionen lassen sich nun mit regulärem Alexa.Speak nutzen.

alexa_remote_control.sh -d Überall \
 -e speak:"<speak><voice name='Hans'>Hallo ich bin Hans</voice><audio src='soundbank://soundlibrary/musical/amzn_sfx_trumpet_bugle_03'/> und ich bin Alexa</speak>"

Die Lautstärkeregelung wurde in diesem Zusammenhang überarbeitet. Die Ermittlung der aktuellen Lautstärke per API Aufruf funktioniert inzwischen sehr zuverlässig, so dass nach einem Sequence Kommando die alte Lautstärke wiederhergestellt werden kann.
Besitzt man unterschiedliche Geräte, dann lässt sich die Sprachlautstärke pro Gerät einstellen:

DEVICEVOLNAME='EchoZimmer1 EchoZimmer2 EchoZimmer3' \
DEVICEVOLSPEAK='100 20 25' \
  alexa_remote_control.sh -d Überall \
  -e speak:Hallo

Außerdem habe ich mich entschieden, die "Plain" Variante nicht weiter zu pflegen. Es ist extrem mühselig JSON ohne Hilfe von JQ in der Shell zu parsen. Eine sinnvolle Weiterentwicklung ist so nicht möglich. Zudem sollte JQ inzwischen auf den meisten Plattformen verfügbar sein.

Update 2021-09-02:
TuneIn Stationen können wieder abgespielt werden. Amazon hat einen Teil der API geändert. Es kann gut sein, dass Prime Stations und Playlists nicht mehr funktionieren.

Allerdings ist es nun möglich auf die verschiendenen Musik Kanäle zuzugreifen:

alexa_remote_control.sh -d Esszimmer -e playmusic:AMAZON_MUSIC:'Beethoven Sinfonie No.9'
Alle möglichen Kanäle listet:
alexa_remote_control.sh -c

Abspielen auf Multi-Room Geräten wird bisher nicht unterstützt. Stattdessen versucht das Script auf allen Mitgliedern des Multi-Room Geräts parallel abzuspielen, was zu merkwürdigen Resultaten führen kann. Im besten fall spielt der Stream nicht ganz synchron....

Update 2021-09-20:

There is an updated post!

Fertiges Script

(download link / Version ohne "jq" - nicht mehr gepflegt!)

#
# 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
# 2020-02-03: v0.15c SPEAKVOL of 0 leaves the volume setting untouched
# 2020-02-09: v0.16 TTS to Multiroom groups via USE_ANNOUNCEMENT_FOR_SPEAK + SSML for TTS
#               (!!! requires Announcement feature to be enabled in each device !!!)
# 2020-02-09: v0.16a added sound library - only very few sounds are actually supported
#               ( https://developer.amazon.com/en-US/docs/alexa/custom-skills/ask-soundlibrary.html )
# 2020-06-15: v0.16b added "lastcommand" option
#               (thanks to Trinitus01 https://github.com/trinitus01)
# 2020-07-07: v0.16c fixed NORMALVOL if USE_ANNOUNCEMENT_FOR_SPEAK is set
# 2020-12-12: v0.17 added textcommand which lets you send anything via CLI you would otherwise say to Alexa
#               ( https://github.com/thorsten-gehrig/alexa-remote-control/issues/108 )
# 2020-12-12: v0.17a sounds now benefit from SPEAKVOL
#                    fixed TuneIn IDs to also play podcasts
# 2021-01-28: v0.17b fixed new API endpoint for automations
#               (thanks to Michael Winkler)
# 2021-01-28: v0.17c simplified volume detection using new DeviceVolumes endpoint
#               (thanks to Ingo Fischer)
# 2021-05-27: v0.18 complete rework of sequence commands especially for TTS
#                    Announcement feature is no longer required due to inconsistent SSML handling
# 2021-09-02: v0.19 Playing TuneIn works again using new entertainment API endpoint
#               Added playmusic (Alexa.Music.PlaySearchPhrase) as command, for available channels use "-c"
#               Note: playmusic is not multi-room capable, doing so might lead to unexpected results
# 2021-09-13: v0.20 implemented device registration refresh_token cookie exchange flow as an alternative
#               to logging in
# 2021-09-15: v0.20a optimized speak commands to use less JQ. This is useful in low-resource environments
# 2021-10-07: v0.20b fixed different cookie naming for amazon.com
# 2021-11-16: v0.20c fixed AlexaApp device selection: since they're all called "This Device" use corresponding
#               line in /tmp/.alexa.devicelist.txt, e.g.: -d "This Device=A2TF17PFR55MTB=ce0123456789abcdef01=VOX"
#               -lastalexa now returns this string. Make sure to put the device in double quotes!
#
###
#
# (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)
# - base64 for B64 encoding (make sure "-w 0" option is available on your platform)
# - oathtool as OATH one-time password tool (optional for two-factor authentication)
#
##########################################

(see download links above)

118 Kommentare:

  1. 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
  2. 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
  3. 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
    5. For me it is the opposite.
      With version 2021-11-16: v0.20c, the -m create multiroom option does not work with devices name with spaces, including replacing them with - and _.
      The command works fine using the deviceID obtained from /tmp/.alexa.devicelist.txt

      Löschen
    6. Thanks for the hint. /tmp/.alexa.devicelist.txt is the definitive way to go nowadays!

      Löschen
  4. 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
  5. 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
  6. 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
  7. 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
    7. Du kannst nun auch "-e sound:amzn_sfx_doorbell_01" verwenden.

      Löschen
  8. 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
  9. Hallo,
    wie kann man denn dieses OATHTOOL auf FreeBSD installieren?

    AntwortenLöschen
    Antworten
    1. Bin nicht so der FreeBSD-Freak, aber schau mal hier: https://www.freshports.org/security/oath-toolkit/

      Löschen
  10. Hallo,
    weiß jemand, welche Sounds derzeit funktionieren?
    Wäre super, wenn es hier eine Liste gäbe!
    Vielen Dank

    AntwortenLöschen
    Antworten
    1. https://forum.fhem.de/index.php/topic,82631.msg1022377.html#msg1022377

      Löschen
  11. Hi,

    ich habe das Script um die Funktionen "lastcommand" und "lastcommand for specific device" erweitert.
    Wo kann ich diese Änderungen einreichen?
    Hier per Email oder Git?

    Gruß,

    Trinitus01 - Tom

    AntwortenLöschen
  12. Would be great to have podcast support in Spotify. These streams from TuneIn start with a 'p' instead of 's'

    this is not working: script:///home/pi/domoticz/scripts/alexa_remote_control.sh -d kitchen -r p1006220

    AntwortenLöschen
  13. Hi,
    das Skript ist ziemlich cool und ich überlege wie ich es einbinden kann.
    Problemstellung: Ich habe Smarte LEDs im Schlafzimmer, die ich aber nicht über einen Echo Dot im gleichen Zimmer ansteuern möchte.
    Wie könnte man das lösen? Hat schon mal jemand eine Fernbedienung mit dem Skript gemacht?
    Danke!

    AntwortenLöschen
    Antworten
    1. Mit dem neuen "-e textcommand:'Schalte Lampe Schlafzimmer'" sollte das funktionieren.

      Löschen
  14. Moin.
    Ich habe brav alles durchgelesen und auch jeden Kommentar, aber irgendwie hat mich das auch nicht weiter geholfen.

    Habe alles hinbekommen. Anmeldung mit MFA, Abfrage der Devicelist, auch die Routine die ich ansteuern will habe ich in der .alexa.automation gefunden. Ach und ich nutze das "grosse script".

    "utterance": "schalte den Fernseher ein",
    "locale": "de-DE",

    Allerdings liefert das Script immer wieder folgendes zurück:

    tmp $ alexa_remote_control.sh -d 'Cube' -e automation:'schalte den fernseher ein'
    sending cmd:automation:schalte den fernseher ein to dev:Cube type:XXXXXXXXXXX serial:XXXXXXXXXXXXX customerid:XXXXXXXXXXXXX
    ERROR: no such utterance 'schalte den fernseher ein' in Alexa routines

    (die IDs habe ich mal im Post hier durch XXXXX ersetzt. Sonst sind die natürlich gefüllt.)

    Alles andere wie -e speak:'blabla' funktioniert wunderbar. Nur eben das aufrufen der Routine nicht.

    Ziel der Übung ist es im Homeassistant per Button ein Script aufzurufen, dass eben Dein Shellcommand startet um den Fernseher ein bzw. dann auch wieder auszuschalten. Der TV ist schon etwas älter und nicht selber so intelligent. Der TV und mein Receiver wird also über den Amazon Cube normalerweise durch "Alexa, schalte den Fernseher ein" eingeschaltet. Das funktioniert auch alles wunderbar. Allerdings musste ich erst eine eigene Routine erstellen, damit diese auch in der .alexa.automation erscheint. Normalerweise ist die im default schon nach der Einrichtung des Cubes vorhanden, sollte aber ja keine Rolle spielen.

    Irgendeine Idee wo der Fehler liegen könnte?

    Danke und Gruß
    Benjamin

    AntwortenLöschen
    Antworten
    1. Fehler selber gefunden. Man beachte den Unterschied "Fernseher" mit großem F und fernseher mit kleinem f. Manchmal ist die Lösung so nahe. :)

      Löschen
  15. Hello Alexander,

    your script is great and very helpful. All works perfectly as it should.

    I have a question on a feature: can I ask which radio station is actually played on a device? So if I set a station with -r option but later change it via voice command, how can I get back the station name set by the voice command and actually is running on the device? I checked the output of the existing options but could not find a correlation between output data and station actually played.

    This would be a great extension of your script.
    Or is there something I missed how to do it?

    Regards,
    Horst

    AntwortenLöschen
    Antworten
    1. The only way is to query the echo using '-q'.
      That prints out three JSON data parts. If you only need one, comment the others around line 911.

      Alex

      Löschen
  16. Hallo Alex, danke für das Script, bin nun über das Homematic Forum draufgestossen. Leider hat es mit dem 2fa am Anfang bei mir nicht funktioniert, da der CURL ohne -k (für ignore invalid cert) aufgerufen wird. Somit gehts hinter einer Firewall mit SSL-Decrypt nicht :-) Vielleicht kannst du das ja mal in deinen zukünftigen Versionen einbauen, dann muss das nicht immer nachgezogen werden,

    Danke und Gruß aus Ösiland

    Kilowatt

    AntwortenLöschen
    Antworten
    1. Hallo Wolfgang, ich weiß nicht genau, was du meinst. Standardmäßig kann/möchte ich natürlich nicht auf die Zertifikatsüberprüfung verzichten.
      Wenn du das '-k' benötigst, ohne das Script anpassen zu wollen, kannst du die Umgebungsvariable 'OPTS' setzen, die an CURL weitergereicht wird, z.B.:
      OPTS='-k --compressed --http1.1'
      Alex

      Löschen
  17. Super cooles Script. Kann man hier eigentlich mal für'n Bier spenden oder sowas? :-)

    AntwortenLöschen
  18. Hi! your work is awesome and very cool!!

    I can play your example.

    alexa_remote_control_plain.sh -e "sound:amzn_sfx_trumpet_bugle_04"

    But this is not work

    alexa_remote_control_plain.sh -e "sound:amzn_sfx_trumpet_bugle_01"
    alexa_remote_control_plain.sh -e "sound:amzn_sfx_trumpet_bugle_02"
    alexa_remote_control_plain.sh -e "sound:amzn_sfx_trumpet_bugle_03"

    How can I play other sound?? or play soundbank??

    Thank you!!

    AntwortenLöschen
    Antworten
    1. The "sound" command only lets you use a limited number of sounds, just like when you're creating a routine in the Alexa app.
      You might have more success using the SSML of the "speak" command:

      -e speak:'>audio src="soundbank://soundlibrary/musical/amzn_sfx_trumpet_bugle_03"/<'

      Löschen
    2. I can't edit my comment :) Of course it should be proper XML tags opening and closing.

      Löschen
  19. Hi, for those who are looking for (like me) ... here's how to adjust the volume with the same shell command> export SPEAKVOL=50;alexa_remote_control.sh -d salon -e speak:'salut'

    AntwortenLöschen
  20. seit heute geht -r stationsID nichtmehr... kommt nix ausm echo...:) andere befehle funzen einwandfrei.

    irgndwelche ideen? scheitn ja eine änderung auf amazonseite zu sein...

    AntwortenLöschen
  21. Hello,

    Thank you for all your effort Alexander, I use your config for quiet a while now and it works great!

    I noticed 1 issue since an update from Amazon I think. The adio stations don't work anymore with "./alexa_remote_control.sh -d "Everywhere" -r s0000". I checked the stationID, they where chanced, but even the new stationID's don't work.

    A speak commands like ./alexa_remote_control.sh -d "Everywher e" -e speak:"test" still works.

    Do you know if we have to update your skill?

    AntwortenLöschen
  22. TuneIn is not working anymore. Workaround to use a textcommand also fails: "-e textcommand:'play radio 2000'" Direct voice command "play radio 2000" however still works, when i speak to Alexa. I have tried several commands, like -e textcommand:'play tunein The Rock 902 s25248 new zealand', no juice

    AntwortenLöschen
    Antworten
    1. Amazon deactivated this part of the API. There will be a replacement version soon (end of this week). textcommand is your only hope until then :(

      Löschen
  23. Hallo zusammen. Bin jetzt allen Anleitungen gefolgt, habe aber immer noch das Problem mit dem Captcha. "ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen." Bis vor ein paar Wochen lief das System, jetzt aber nicht mehr. Java, Cookies, MFA, oathtool wie hier beschrieben versucht, funktioniert aber nicht. Sonst irgendjemand eine Idee ?

    AntwortenLöschen
    Antworten
    1. Probier mal https://blog.loetzimmer.de/2021/09/alexa-remote-control-shell-script.html
      Damit gibt es keine Captha-Sorgen mehr... :)

      Löschen
    2. Hey, wie kann ich denn dieses Package ausführen? Was muss ich in die Kommando Zeile eingeben?

      Löschen
  24. somehow my username, password and mfa are all correct but my /tmp/.alexa.login is giving me

    There was a problem
    Your password is incorrect

    Any ideas?

    AntwortenLöschen
    Antworten
    1. well, it works on my docker machine host, but does not work on the docker container for some reason

      Löschen
    2. Some components missing from the container... BASH/SED/AWK/JQ
      Or maybe the password contains some special characters?
      I would assume you're passing the password as an ENV var into the container - maybe something gets substituted there

      Löschen
    3. you can also try https://blog.loetzimmer.de/2021/09/alexa-remote-control-shell-script.html
      If you set REFRESH_TOKEN as environment to your container you should be all set.

      Löschen
  25. @alexander

    I want to thank you very much for this script, and all the time you put into it. This is really the icing on the cake for my HC3 setup. It works perfectly!

    AntwortenLöschen
  26. Hallo Alexander,

    alexa_remote_control ist großartig! Ich nutze es in Verbindung mit der HA-Bridge und Alexa-Routinen. Wenn ich z. B. sage "Alexa, wie ist die Temperatur im Bad", dann wird eine Alexa-Routine getriggert, die ein HA-Bridge Gerät schaltet (es wird im Hintergrund ein BASH-Script ausgeführt). Welches dann den Temperatur-Wert in meinem Homeautomation-System (FHEM) eines Aqara-Zigbee-Sensors abfrägt. Der Temperatur-Wert wird dann über "-e speak:..." an das "lastalexa"-Gerät ausgegeben. Es hatte auch die ganze Zeit mit meinem Handy und der Alexa-App funktioniert. Die Sprachausgabe war auch auf meinem Handy möglich. Jetzt funktioniert es leider nicht mehr.
    "lastalexa" ist dann leer, wenn ich eine Anfrage über die Alexa-App auf meinem Handy mache. Auszug aus meiner Geräteliste:
    Michael's Echo Auto
    This Device
    Michael's Alexa Apps

    Habe seit gestern auch ein Echo Auto und es wäre genial, wenn die Sprachausgaben auch darüber kämen (oder eben über das Handy). Hatte auch schon vergebens "-e textcommand:"Sprich mir nach:..." ausprobiert.

    Kannst Du mir da weiterhelfen?

    Viele Grüße Michael

    AntwortenLöschen
    Antworten
    1. Die Device Struktur für Apps sieht anders aus... deshalb gibt es mehrere "This Device" Einträge.
      Ich prüfe mal, wie man den output weiterverwenden kann.

      Löschen
    2. Hallo Alexander,

      das ist ja ein Traum!! Ich habe es gerade auf meinem Handy ausprobiert. Es funktioniert! Probiere es morgen im Auto (Echo Auto) aus. Vielen, vielen Dank schon mal' für die schnelle Unterstützung! Melde mich morgen. LG Michael

      Löschen
    3. Hallo Alexander,

      habe es heute morgen mit Echo Auto noch getestet funktioniert tadenlos:
      "Alexa, schließe meine Tore"
      Alexa über Echo Auto über Auto-Lautsprecher ;-) :
      "Okay, schliesse Hoftor und Garagentor"
      Du bist mein Held!
      Vielen lieben Dank.

      Gruß

      Michael

      Löschen
  27. Hallo,
    ist es möglich, in einem Befehl mehrere Kommandos abzusetzen?
    Also erst ein speak und im Anschluss einen textcommand?

    Leider führt Alexa dann nur den speak durch, der Textcommand wird nicht berücksichtigt.
    Muss ich da was bestimmtes in die Kommandozeile schreiben?

    AntwortenLöschen
    Antworten
    1. Nein, hier geht leider immer nur ein Kommando pro Aufruf.

      Löschen
    2. Danke für die Info. Ich mache es jetzt auch wie Michael.

      Muss ich als Device -d lastalexa angeben?
      Wenn Alexa mir Rückmeldung geben soll, zu der ich spreche? Oder wird automatisch die angesprochene Alexa angesteuert, wenn ich -d weglasse?

      Löschen
    3. Aktuell habe ich das Problem, dass beim Befehl -lastalexa -e speak immer wieder die Alexa „Bad“ genommen wird, obwohl die Alexa „Wohnen“ als letztes aktiv war. Wenn ich über -lastalexa abfrage, erscheint das auch korrekt. Allerdings wird beim Befehl -lastalexa -e speak dann immer wieder die gleiche Alexa (Bad) als Standard definiert und angesprochen. Woran kann das liegen ?

      Löschen
    4. Wie schon geschrieben, du kannst immer nur ein Kommando pro Aufruf verwenden. Der Output von "-lastalexa" ist dann der "-d" Parameter für das nächste Kommando.

      Löschen
    5. Heißt das, dass ich in einem Kommando gar nicht wählen kann, dass die Alexa den Befehl wiedergibt, zu der ich spreche?

      Löschen
    6. Hallo Maddin,

      solltest Du das Script in Kombination mit Node-RED nutzen, gib kurz Bescheid, dann zeig ich Dir einen Flow, wie das da -relativ einfach- zu lösen ist.

      Löschen
  28. Hallo Maddin,

    ich habe dazu ein Bash-Script angelegt - um z. B. die Temperatur und die Luftfeuchtigkeit von meiner HomeAutomation (FHEM) abzufragen und über die angefragte Alexa wiederzugeben.
    Habe dazu auf meinem Raspberry auf welchem neben FHEM auch die HABridge läuft das ein Script erstellt.
    Über eine mit der Alexa-App erstellte Routine wird dann ein HABridge-Gerät eingeschaltet, wenn ich sage:
    "Alexa, wie ist die Temperatur im Bad?"

    Beim Einschalten des HABridge-Geräts wird das Bash-Script ausgeführt (/home/pi/getBadTemperatur.sh):

    echoDevice=$(sudo -s /home/pi/alexa_remote_control.sh -lastalexa)

    alexaCmd="sudo -s /home/pi/alexa_remote_control.sh -d \""
    alexaCmd+=$echoDevice
    alexaCmd+="\" -e speak:"
    alexaCmd+="'"
    alexaCmd+="Die Temperatur im Badezimmer betraegt "
    alexaCmd+=$temperature
    alexaCmd+=" Grad Celsius."
    alexaCmd+=" Die Luftfeuchtigkeit betraegt "
    alexaCmd+=$humidity
    alexaCmd+=" Prozent."
    alexaCmd+="'"
    echo $alexaCmd

    eval $alexaCmd

    Ich baue mir den alexa_remote_control.sh - Befehl zusammen (setze das "lastalexa"-Device ein) und führe es mit eval aus.

    So läuft es bei mir, ist nicht besonders schön und wahrscheinlich auch nicht so sicher.

    AntwortenLöschen
    Antworten
    1. Danke für die ausführliche Antwort. wird getestet :-)

      Löschen
  29. Hallo,

    wo kann das Paket bekommen?

    AntwortenLöschen
  30. Servus,
    saugute Arbeit! Eine Frage, da ich es entweder überlesen habe, oder es nicht beantwortet wurde. Egal hier meine Frage:

    Wenn ein Playback läuft und ich lasse Alexa etwas sagen, warum stoppt das Playback danach? Bzw. wie lasse ich es weiterlaufen?

    Vielen lieben Dank und viele Grüße aus dem Sauerland.
    Mike

    AntwortenLöschen
    Antworten
    1. Hmm, das sollte eigentlichnicht passieren.

      alexa.sh -r radioeins
      ... Musik spielt
      alexa.sh -e speak:"Hallo"
      ... Es wird "Hallo" gesagt
      ... Musik spielt weiter

      Kannst du Alexa z.B. fragen, wie spät es ist, während etwas abgespielt wird?

      Löschen
  31. Hallo Alex!
    Seit einiger Zeit funktioniert der vol Befehl nicht richtig. Ich erhöhe in meiner Werkstatt, wenn ich eine Maschine verwende die Lautstärke der Wiedergabe und wenn die Maschine ausschaltet, wird die Lautstärke wieder reduziert. Bei Verwendung des vol - Befehles, ändert sich kurz die Lautstärke, also kommt der Befehl an, danach wird sofort wieder auf die ursprüngliche Lautstärke gestellt.
    Woran kann das liegen ?
    LG
    Günter

    AntwortenLöschen
    Antworten
    1. Hmm, das klingt nach einer Störung in deiner Automatisierung... kommt evtl. ein Sprachkommando oder irgendwas hinterher?

      Es gibt eine Einstellung "VOLMAXAGE", die steht auf 1(Minute), was bedeutet, dass sofern in der letzten Minute die Lautstärke abgefragt wurde, sie nicht erneut über die API abgefragt werden soll. Stattdessen wird ein lokales Cache-File verwendet.

      In der Version von heute habe ich einen kleinen Fehler behoben, dass beim expliziten Volume-Setzen der Wert auch in das Cache File geschrieben wird. Vielleicht hilft das schon, ansonsten solltest du "VOLMAXAGE" mal auf "0" setzen.

      Löschen
  32. Danke für deine Antwort. Zusätzliche Kommandos kommen dabei nicht vor. Ich werde mal deine neue Version Testen.
    Vielen Dank!

    LG
    Günter

    AntwortenLöschen
  33. Hallo Alex!

    Ich hab das gleich ausprobiert, funktioniert perfekt. Die Lautstärke wird angepasst und bleibt bis zum nächsten Befehl gleich.

    Vielen lieben Dank
    LG
    Günter

    AntwortenLöschen
  34. Is there a problem with the creation of ${DEVLIST}.txt? My ${DEVLIST}.txt was empty, so I receive a "ERROR: unkown device dev:The Kitchen" when I try to run a speak command. Looking at the code, the IF block that is called when $COMMAND is passed does not include get_devlist which creates the ${DEVLIST}.txt file. So my file was never created, or was empty. Once I moved get_devlist further up, so its always called, the file was created OK. I could then delete the get_devlist I added, and it always works now. So it seems get_devlist is not being called and ${DEVLIST}.txt is empty. My command is: sh alexa_remote_control.sh -d "The Kitchen" -e speak:'hello'

    AntwortenLöschen
    Antworten
    1. I just updated the code. It will now check for the presence of the devicelist.txt as well.
      Thanks for the pointer!

      Löschen
  35. Kann es sein das was geändert wurde aktuell gibt die Alexa keine Speak Ausgabe mehr aus es gibt auch kein Fehler

    AntwortenLöschen
    Antworten
    1. Nicht, dass ich wüsste. Bei mir funktioniert alles noch. Gehen denn andere Kommandos?

      Löschen
    2. Die anderen Kommandos funktionieren, nur TTS funktioniert nicht.

      Löschen
    3. Hmm, evtl. sind irgendwelche ENV Variablen wie SPEAKVOL gesetzt?
      Es kann sich dann eigentlich nur um einen syntaktischen Fehler handeln:
      alexa_remote_control.sh -e speak:hallo
      sollte auf dem Standard-Gerät "hallo" sagen.

      Evtl. hilft es die /tmp/.alexa.devicelist* und /tmp/.alexa.volume* zu löschen.

      Löschen
  36. Ich nutze das Amazon Echo Control Binding in OpenHAB. Dort funktioniert "textToSpeech" leider auch nicht mehr.

    AntwortenLöschen
    Antworten
    1. Ist das gemeldet? Ich habe von den openHAB Kollegen nichts gehört, dass etwas nicht funktionieren würde.

      Löschen
    2. Es wurde noch nichts gemeldet. Nur ein älteres Problem mit OpenHAB 2.5.
      Ich habe mitterweile auch die Version 3.2.12 des Bindings amzonechocontrol getestet und hatte keinen Erfolg mit TTS...

      Außerdem wollte ich das ganze natürlich auch nochmal mit dem alexa_remote_control Script testen, bevor ich mich wieder melde.
      Dort habe ich übrigens das gleiche Problem:
      Option -e speak funktioniert nicht (mehr) ohne Fehlermeldung
      Option -e automation funktioniert

      Löschen
  37. Dann machst allerdings etwas falsch. Die Option "-e speak" funktioniert einwandfrei.

    AntwortenLöschen
  38. Glaube ich nicht. Es lief schon über Monate perfekt. Dann auf einmal nicht mehr. Aber nur die TTS Funktion.

    AntwortenLöschen
    Antworten
    1. Ohne jegliche Fehlermeldung ist es schwer bis unmöglich zu helfen. Vermutlich nutzt du keine aktuelle bzw. stabile Auth-Methode (MFA oder besser noch Refresh Token). Das würde auch erklären, warum es "über Monate perfekt" funktioniert hat und irgendwann aus heiterem Himmel nicht mehr.

      Löschen
  39. MFA musste für Openhab verwendet werden. Ist seit Monaten im Einsatz.


    Bei absetzen des Befehls über das Script gibt es übrigens auch ein positives Feedback…ID das Echos wir auf der Konsole ausgegeben. Nur so am Rande

    AntwortenLöschen
  40. Auch um Routinen über das Script auszuführen, muss mindestens MFA verwendet werden. Diese werden auch immer noch ausgeführt. Nur TTS als benutzerdefinierte Sprachausgaben funktionieren nicht mehr. Die Echos bleiben stumm.

    AntwortenLöschen
  41. Erinnerungen / Alarm funktionieren übrigens auch immer noch. Nur kein TTS

    AntwortenLöschen
  42. kann mich nur anschließen, tts funktioniert nicht mehr. auch nichts geändert und auth methode schon immer mfa

    AntwortenLöschen
    Antworten
    1. Bitte benutzt nur noch die RefreshToken Authentifizierungmethode https://blog.loetzimmer.de/2021/09/alexa-remote-control-shell-script.html
      Bei der Gelegenheit solltet ihr sämtliche temporären .alexa* Dateien löschen.
      TTS ist eines meiner Hauptanwendungen und funktioniert klaglos.

      Alex

      Löschen
    2. ebenfalls kein TTS mehr. Authentifizierungsmethode ist RefreshToken.

      Löschen
  43. Warum eigentlich /tmp und nicht das Environment fragen, ob TMP existiert und dann das nehmen?

    AntwortenLöschen
  44. Nice post thank you Maritza

    AntwortenLöschen
  45. Guten Tag, es wurde berichtet, dass der Code/das Skript nicht mehr funktioniert. Vor ein paar Wochen hat es funktioniert und jetzt schlägt die Anmeldung fehl.

    AntwortenLöschen
    Antworten
    1. Es wurde vielfach berichtet, dass man auf Refresh-Token umstellen sollte. Das funktioniert bereits seit vielen Monden.

      Löschen
    2. Hi. Und wie genau ? Ich sitz jetzt seit 2 tagen hier und versuche mir mit dem cookie2, dem cookie-cli was zu basteln nur raff ich nicht wie. Sitze bei der QR Code Scan Aneitung fest. Gibts jemanden der vielleicht eine StepByStep hat ? Danke & Gruß Tom

      Löschen
    3. Die Anleitung findet man hier: https://blog.loetzimmer.de/2021/09/alexa-remote-control-shell-script.html

      Löschen
  46. Für diejenigen die auf das gleiche stoßen:
    Seit heute funktioniert der login mit MFA bei mir nicht mehr. die Umstellung auf Refrehs_Token funktioniert hingegen einwandfrei

    AntwortenLöschen
    Antworten
    1. how long is your refresh token? And when using it, so are you also including the "Atrn|" bit at the beginning... I've had no luck at all when using the refresh token here in the UK (amazon.co.uk)

      Löschen
  47. root@rpi5:/home/pi# ./4alexa_remote_control.sh -lastalexa
    parse error: Invalid numeric literal at line 1, column 10

    AntwortenLöschen
  48. Hallo Alex, ganz großes Kino und alles funktioniert wunderbar. Vielen Dank für die tolle Arbeit.

    Ich habe eine Frage: Statt einem Aufruf wie z.B. ""peters Test" -e playmusic:SPOTIFY:Awolnation", wäre es doch schöner, wenn man das ganze Album abspielen möchte, die Spotify-ID, oder die Apple-Album-ID, anzugeben um eindeutig das gewünschte Album abzuspielen.
    Ist das irgendwo implementiert, oder wie würdest Du damit umgehen?

    Viele Grüße
    Peter

    AntwortenLöschen
  49. Hallo Alex,
    das Windows tool funktioniert nicht (mehr), vermute weil Amazon de alexa website abgeschaltet hat ? Gibt es eine Alternative ?
    Danke!

    AntwortenLöschen