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:

Miki21 hat gesagt…

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.

ederhj hat gesagt…

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

Unknown hat gesagt…

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

Alexander Noack hat gesagt…

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

Unknown hat gesagt…

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?

Unknown hat gesagt…

regardless, thank you for this fine work! Love it!

ederhj hat gesagt…

Hat hier keiner einen Tipp?

Alexander Noack hat gesagt…

replace spaces with underscores - that should work!

Alexander Noack hat gesagt…

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

ederhj hat gesagt…

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

KiKi hat gesagt…

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?

Alexander Noack hat gesagt…

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

Alexander Noack hat gesagt…

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

Njdfg hat gesagt…

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

BLinz hat gesagt…

Lösch einfach die Datei

.alexa.devicelist.json

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

BLinz hat gesagt…

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)

Alexander Noack hat gesagt…

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.

Tim hat gesagt…

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

Daniel hat gesagt…

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

Alexander Noack hat gesagt…

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.

Alexander Noack hat gesagt…

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.

Daniel hat gesagt…

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."

Daniel hat gesagt…

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.

Alexander Noack hat gesagt…

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.

Alexander Noack hat gesagt…

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.

Daniel hat gesagt…

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

Syntax6 hat gesagt…

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

Alexander Noack hat gesagt…

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

Alexander Noack hat gesagt…

Du kannst nun auch "-e sound:amzn_sfx_doorbell_01" verwenden.

Stef hat gesagt…

Hallo,
wie kann man denn dieses OATHTOOL auf FreeBSD installieren?

ManuA hat gesagt…

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

ederhj hat gesagt…

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

Trinitus hat gesagt…

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

Alexander Noack hat gesagt…

https://forum.fhem.de/index.php/topic,82631.msg1022377.html#msg1022377

renerene hat gesagt…

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

Jan hat gesagt…

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!

Benjamin R. hat gesagt…

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

Benjamin R. hat gesagt…

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

Unknown hat gesagt…

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

Wolfgang K. hat gesagt…

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

Alexander Noack hat gesagt…

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

Alexander Noack hat gesagt…

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

Alexander Noack hat gesagt…

Mit dem neuen "-e textcommand:'Schalte Lampe Schlafzimmer'" sollte das funktionieren.

Alexander Noack hat gesagt…

In the latest version this should be fixed.

tjareson hat gesagt…

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

Unknown hat gesagt…

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!!

Alexander Noack hat gesagt…

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"/<'

Alexander Noack hat gesagt…

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

jmleglise hat gesagt…

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'

martti hat gesagt…

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

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

Leroy hat gesagt…

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?

renerene hat gesagt…

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

Alexander Noack hat gesagt…

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

Alexander Noack hat gesagt…

New version is up!

Alexander Noack hat gesagt…

A new version has been uploaded!

Alexander Noack hat gesagt…

Die neue Version steht bereit!

sm0k0 hat gesagt…

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 ?

lele hat gesagt…

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?

lele hat gesagt…

well, it works on my docker machine host, but does not work on the docker container for some reason

Alexander Noack hat gesagt…

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

Leroy hat gesagt…

Thank you Alexander!

Peter hat gesagt…

@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!

Alexander Noack hat gesagt…

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

Alexander Noack hat gesagt…

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.

Maddin hat gesagt…

Hey, wie kann ich denn dieses Package ausführen? Was muss ich in die Kommando Zeile eingeben?

Michael hat gesagt…

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

Alexander Noack hat gesagt…

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.

Maddin hat gesagt…

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?

Alexander Noack hat gesagt…

Probier mal die neueste Version.

Alexander Noack hat gesagt…

Nein, hier geht leider immer nur ein Kommando pro Aufruf.

Anonym hat gesagt…

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

Maddin hat gesagt…

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?

Maddin hat gesagt…

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 ?

Anonym hat gesagt…

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.

Maddin hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

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.

ManuA hat gesagt…

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.

Maddin hat gesagt…

Danke für die ausführliche Antwort. wird getestet :-)

Unknown hat gesagt…

Hallo,

wo kann das Paket bekommen?

Unknown hat gesagt…

* ich

jmleglise hat gesagt…

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

Anonym hat gesagt…

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

Alexander Noack hat gesagt…

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?

Alexander Noack hat gesagt…

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

Anonym hat gesagt…

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

Alexander Noack hat gesagt…

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.

Anonym hat gesagt…

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

LG
Günter

Anonym hat gesagt…

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

Laurence hat gesagt…

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'

Anonym hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

Nicht, dass ich wüsste. Bei mir funktioniert alles noch. Gehen denn andere Kommandos?

Anonym hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

Die anderen Kommandos funktionieren, nur TTS funktioniert nicht.

Anonym hat gesagt…

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.

Anonym hat gesagt…

Dann machst allerdings etwas falsch. Die Option "-e speak" funktioniert einwandfrei.

Anonym hat gesagt…

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

Anonym hat gesagt…

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.

Anonym hat gesagt…

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

Anonym hat gesagt…

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.

Anonym hat gesagt…

Erinnerungen / Alarm funktionieren übrigens auch immer noch. Nur kein TTS

Maddin hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

Warum eigentlich /tmp und nicht das Environment fragen, ob TMP existiert und dann das nehmen?

Anonym hat gesagt…

ebenfalls kein TTS mehr. Authentifizierungsmethode ist RefreshToken.

Anonym hat gesagt…

Nice post thank you Maritza

Anonym hat gesagt…

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.

Anonym hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

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

Anonym hat gesagt…

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

wennes hat gesagt…

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

dfcv hat gesagt…

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)

Peter hat gesagt…

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

Anonym hat gesagt…

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