Alexa automatisiert "Fernsteuern"

Hier geht es um grundlegende Diskussionen bezüglich des Alexa Voice Service.
Benutzeravatar

adn77
Beiträge: 63
Registriert: Di 10. Okt 2017, 19:44

Mi 22. Nov 2017, 10:48

fantasticn hat geschrieben: Mi 22. Nov 2017, 07:31 1. Den Pfad zu CURL auf der CCU2 gesetzt (also im Script "curl" ersetzt durch ""/usr/local/addons/cuxd/extra/curl").

2. Hinter dem Befehl "sed" den Parameter "-E" ersetzt gegen "-r". Soweit ich herausfinden konnte, bewirken beide das selbe. Indes unterstützt die CCU2 kein "-E", sondern eben nur "-r".
Ich habe die sed Option angepasst - Danke!
fantasticn hat geschrieben: Mi 22. Nov 2017, 07:31 Nun indes hänge ich beim Befehl "getopts". Auch dieser wird von der CCU2 nicht unterstützt, wohl aber "getopt" (falls das eine Alternative darstellt). Leider habe ich von der Script-Programmierung kaum Ahnung und meine Frage lautet daher, kann jemand vielleicht den "getopts"-Aufruf auf "getopt" umstellen, so dass es damit funktioniert? Eventuell läuft das Script ja dann auf der Homematic CCU2 auch, was für mich und viele andere Leute sehr hilfreich wäre.
Ich habe getopts komplett ersetzt - sollte jetzt funktionieren
fantasticn hat geschrieben: Mi 22. Nov 2017, 07:31 PS: Ich habe den post von adn77 so verstanden, dass eventuell noch nach Ideen für das Script gesucht wird. Deshalb Folgendes: Besteht vielleicht die Möglichkeit, das Script so zu erweitern, das Multiroom-Gruppen geschaffen und aufgelöst werden können? So könnte man dann beliebige Echos und Sonos-Lautsprecher (mit denen das vorliegende Script übrigens nach meinen Tests auch läuft) beliebigen zu Multiroom-Gruppen zusammenfügen. Über die Alexa-App ist das ja leider recht aufwendig und "starr". Eine flexible Gestaltung wäre vor allem deshalb hilfreich, weil ja aktuell jedes Device zeitgleich nur Mitglied einer Gruppe sein kann. Man könnte sich deshalb über ein solches Script verschiedene Gruppen vorfertigen und bei Bedarf aktivieren. Ist nur so eine Idee.
Ich würde mir wünschen, wenn ihr Eure Ideen direkt in URLs und POST Daten übermitteln würdet ;)

Zum Thema Multiroom das habe ich glatt mal ausprobiert. zum Löschen einer Gruppe:

Code: Alles auswählen

-X DELETE https://alexa.amazon.de/api/lemur/tail/<deviceSerialNumber_MultiRoomDevice>
Zum Neuanlegen:

Code: Alles auswählen

-X POST -d {"id":null,"name":"<MultiRoomName>","members":[{"dsn":"<deviceSerialNumber1>","deviceType":"<deviceType1>"},{"dsn":"<deviceSerialNumber2>","deviceType":"<deviceType2>"},...etc.]} https://alexa.amazon.de/api/lemur/tail
Allerdings dauert ein Neuanlegen eine Weile (zumindest in der Weboberfläche). Und beim Löschen werden alle historischen Playlists vom Device gelöscht (siehe mein vorheriger Post mit -v Option).
Matthy hat geschrieben: Mi 22. Nov 2017, 10:24 Ein echtes STOP-Kommando fände ich noch extrem nützlich. Vor allem in Bezug auf Heimautomatisierung.
Es gibt aktuell nur das Kommando "pause", was das Abspielen aber auch wieder fortsetzt, falls die Musik bereits pausiert ist.
Da die API ein Stop nicht "nativ" anbietet, könnte man über "query queue" erst abfragen in welchem Zustand sich der Abspieler befindet. Und dann nur ein "pause" senden, wenn der Status nicht "IDLE" ist.
Ich sende ein "PAUSE", wenn ich das Haus verlasse - aber bisher hat Alexa nie wieder zu spielen angefangen, selbst, wenn ich es mehrfach sende. Zum Fortsetzen muss ich PLAY senden...

Alex
1 x
Benutzeravatar

Matthy
Beiträge: 61
Registriert: Do 26. Okt 2017, 00:27
Vorhandene Echos: 1
Vorhandene Echo Dots: 5

Mi 22. Nov 2017, 11:05

adn77 hat geschrieben: Mi 22. Nov 2017, 10:48 Ich sende ein "PAUSE", wenn ich das Haus verlasse - aber bisher hat Alexa nie wieder zu spielen angefangen, selbst, wenn ich es mehrfach sende. Zum Fortsetzen muss ich PLAY senden...
Hmm, ich könnte schwören, dass es sich bei mir so verhalten hat. Ich werde es heute Abend aber nochmal testen.
0 x
Benutzeravatar

radza
Beiträge: 43
Registriert: Fr 16. Dez 2016, 02:42
Vorhandene Echos: 3
Vorhandene Echo Dots: 2
Vorhandene Echo Shows: 1

Mi 22. Nov 2017, 11:18

adn77 hat geschrieben: Di 21. Nov 2017, 22:32 Ich habe jetzt nochmal eine erweiterte Version gebaut - leider fallen mir kaum noch kreative Kommandozeilen Parameter ein...
Ich danke dir vielmals für deine Arbeit! Du bist der MVP dieses Forums ;-) :slightly_smiling_face:
0 x
Benutzeravatar

dizzy85
Beiträge: 39
Registriert: Mi 15. Mär 2017, 13:44
Vorhandene Echos: 3
Vorhandene Echo Dots: 1

Mi 22. Nov 2017, 22:20

Hallo Leute...
Gab es evtl. schon wieder ein Update von Amazon? Habe seid heute Morgen das Problem das importierte Tracks auf Amazon-Music nur auf meinem Echo abspielt werden obwohl ich Sie über meine "Überall" - Gruppe (1 Echo, 2Dot´s) abspielen möchte. Dieses Problem habe ich seid sowohl mit dem Script von Alex als auch wenn ich sie im Alexa-Webinterface laufen lassen will.... Es wird nur auf dem Echo gespielt und nichts auf den Dot´s. Wähle ich einen Sender über Tunein funktioniert es Wunderbar ... spiel ich die Tracks einzeln auf den Dot´s funktioniert es auch...... Nur die importiertenTracks von Amazon-Music funktionieren nicht in der Überall-Gruppe....? Jemand eine Idee
Zuletzt geändert von dizzy85 am Mi 22. Nov 2017, 22:25, insgesamt 1-mal geändert.
0 x
Benutzeravatar

Matthy
Beiträge: 61
Registriert: Do 26. Okt 2017, 00:27
Vorhandene Echos: 1
Vorhandene Echo Dots: 5

Do 23. Nov 2017, 00:37

Matthy hat geschrieben: Mi 22. Nov 2017, 11:05
adn77 hat geschrieben: Mi 22. Nov 2017, 10:48 Ich sende ein "PAUSE", wenn ich das Haus verlasse - aber bisher hat Alexa nie wieder zu spielen angefangen, selbst, wenn ich es mehrfach sende. Zum Fortsetzen muss ich PLAY senden...
Hmm, ich könnte schwören, dass es sich bei mir so verhalten hat. Ich werde es heute Abend aber nochmal testen.
Tatsächlich, du hattest Recht! Pause setzt die Musik doch nicht fort! Super Sache! Sorry, hatte dann wohl falsch geschaut. :blush:
0 x
Benutzeravatar

fantasticn
Beiträge: 9
Registriert: Do 23. Mär 2017, 17:00

Do 23. Nov 2017, 09:28

@adn77

Zunächst einmal vielen herzlichen Dank für die Anpassung des Scripts. Das Problem mit dem getopts-Befehl ist damit behoben. Dennoch läuft das Script noch nicht auf der CCU2. Und ich kann aktuell nicht erkennen, woran es liegt. Bei einem Aufruf mit parameter -a kommt nur mehrfach "no such file or directory". Der Cookie und die weiteren Dateien werden auch nirgend angelegt.

Ich habe natürlich vorher den Pfad zu allen CURL-Aufrufen angepasst (hier wäre meine Frage, ob man nicht eine Variable auch in den Header einbauen könnte, so dass man hier den Pfad zur CURL nur einmal eintragen muss). Zudem habe ich probeweise auch nochmals den Pfad zum tmp-Verzeichnis anders gesetzt. Das brachte aber keine Veränderung.

Hier ist mein debugging-log (mit E-Mail und Passwort unkenntlich gemacht):

/usr/local/addons/user$ sh -x alexa_remote_control.sh -a
+ EMAIL=XXX@XXX.de
+ PASSWORD=XXXXXXXX
+ TMP=/usr/local/addons/user/tmp
+ COOKIE=/usr/local/addons/user/tmp/.alexa.cookie
+ DEVLIST=/usr/local/addons/user/tmp/.alexa.devicelist.json
+ DEVTXT=/usr/local/addons/user/tmp/.alexa.devicelist.txt
+ GUIVERSION=1.24.2698.0
+ LIST=
+ LOGOFF=
+ COMMAND=
+ STATIONID=
+ QUEUE=
+ SONG=
+ ASIN=
+ SEEDID=
+ HIST=
+ [ 1 -gt 0 ]
+ LIST=true
+ shift
+ [ 0 -gt 0 ]
+ [ -z -a -z -a -z -a -z -a -z -a -z -a -z -a -n ]
+ [ ! -f /usr/local/addons/user/tmp/.alexa.devicelist.json -o ! -f /usr/local/addons/user/tmp/.alexa.cookie ]
+ echo files do not exist. logging in ...
files do not exist. logging in ...
+ log_in
+ rm -f /usr/local/addons/user/tmp/.alexa.devicelist.json
+ rm -f /usr/local/addons/user/tmp/.alexa.devicelist.txt
+ rm -f /usr/local/addons/user/tmp/.alexa.cookie
+ grep hidden
+ /usr/local/addons/cuxd/extra/curl -s -D /usr/local/addons/user/tmp/.alexa.header -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L https://alexa.amazon.de
+ sed -r s/^.*name="([^"]+)".*value="([^"]+)".*/\1=\2\&/g
+ sed s/hidden/\n/g
+ grep value="
+ sed s/Location: /Referer: /
+ grep Location: /usr/local/addons/user/tmp/.alexa.header
+ sed -r s/^.*name="([^"]+)".*value="([^"]+)".*/\1=\2\&/g
+ sed s/hidden/\n/g
+ grep hidden
+ grep value="
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L -H -d @/usr/local/addons/user/tmp/.alexa.postdata https://www.amazon.de/ap/signin
+ awk $0 ~/.amazon.de.*session-id[\s\t]/ {print $7} /usr/local/addons/user/tmp/.alexa.cookie
awk: /usr/local/addons/user/tmp/.alexa.cookie: No such file or directory
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L -H Referer: https://www.amazon.de/ap/signin/ --data-urlencode email=norman@gerritzmann.de --data-urlencode password=TFFama11# -d @/usr/local/addons/user/tmp/.alexa.postdata2 https://www.amazon.de/ap/signin
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 --compressed -H DNT: 1 -H Connection: keep-alive -L -H Referer: https://alexa.amazon.de/spa/index.html -H Origin: https://alexa.amazon.de https://layla.amazon.de/api/language
+ awk $0 ~/.amazon.de.*csrf[\s\t]/ {print $7} /usr/local/addons/user/tmp/.alexa.cookie
awk: /usr/local/addons/user/tmp/.alexa.cookie: No such file or directory
+ /usr/local/addons/cuxd/extra/curl -s -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 --compressed -H DNT: 1 -H Connection: keep-alive -L -H Content-Type: application/json; charset=UTF-8 -H Referer: https://alexa.amazon.de/spa/index.html -H Origin: https://alexa.amazon.de -H csrf: https://layla.amazon.de/api/devices-v2/device
+ rm -f /usr/local/addons/user/tmp/.alexa.header
+ rm -f /usr/local/addons/user/tmp/.alexa.postdata
+ rm -f /usr/local/addons/user/tmp/.alexa.postdata2
+ check_status
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 --compressed -H DNT: 1 -H Connection: keep-alive -L https://layla.amazon.de/api/bootstrap?v ... .24.2698.0
+ sed -r s/^.*"authenticated":([^,]+),.*$/\1/g
+ AUTHSTATUS=
+ [ = true ]
+ return 0
+ [ 0 -eq 0 ]
+ echo cookie expired, logging in again ...
cookie expired, logging in again ...
+ log_in
+ rm -f /usr/local/addons/user/tmp/.alexa.devicelist.json
+ rm -f /usr/local/addons/user/tmp/.alexa.devicelist.txt
+ rm -f /usr/local/addons/user/tmp/.alexa.cookie
+ + sedgrep s/hidden/\n/g hidden+

+ + sed/usr/local/addons/cuxd/extra/curlgrep -r -s value=" s/^.*name="([^"]+)".*value="([^"]+)".*/\1=\2\&/g -D

/usr/local/addons/user/tmp/.alexa.header -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L https://alexa.amazon.de
+ grep value="
+ sed s/hidden/\n/g
+ grep hidden
+ sed s/Location: /Referer: /
+ sed -r s/^.*name="([^"]+)".*value="([^"]+)".*/\1=\2\&/g
+ grep Location: /usr/local/addons/user/tmp/.alexa.header
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L -H -d @/usr/local/addons/user/tmp/.alexa.postdata https://www.amazon.de/ap/signin
+ awk $0 ~/.amazon.de.*session-id[\s\t]/ {print $7} /usr/local/addons/user/tmp/.alexa.cookie
awk: /usr/local/addons/user/tmp/.alexa.cookie: No such file or directory
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L -H Referer: https://www.amazon.de/ap/signin/ --data-urlencode email=norman@gerritzmann.de --data-urlencode password=TFFama11# -d @/usr/local/addons/user/tmp/.alexa.postdata2 https://www.amazon.de/ap/signin
+ /usr/local/addons/cuxd/extra/curl -s -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 --compressed -H DNT: 1 -H Connection: keep-alive -L -H Referer: https://alexa.amazon.de/spa/index.html -H Origin: https://alexa.amazon.de https://layla.amazon.de/api/language
+ awk $0 ~/.amazon.de.*csrf[\s\t]/ {print $7} /usr/local/addons/user/tmp/.alexa.cookie
awk: /usr/local/addons/user/tmp/.alexa.cookie: No such file or directory
+ /usr/local/addons/cuxd/extra/curl -s -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 --compressed -H DNT: 1 -H Connection: keep-alive -L -H Content-Type: application/json; charset=UTF-8 -H Referer: https://alexa.amazon.de/spa/index.html -H Origin: https://alexa.amazon.de -H csrf: https://layla.amazon.de/api/devices-v2/device
+ rm -f /usr/local/addons/user/tmp/.alexa.header
+ rm -f /usr/local/addons/user/tmp/.alexa.postdata
+ rm -f /usr/local/addons/user/tmp/.alexa.postdata2
+ [ -n ]
+ [ -n ]
+ [ -n ]
+ [ -n ]
+ [ -n ]
+ [ -n ]
+ [ -n ]
+ [ -n true ]
+ set_var
+ [ ! -f /usr/local/addons/user/tmp/.alexa.devicelist.txt ]
+ sed s/[\,]/ /g
+ sed s/\"//g
+ sed s/\"\:\"/\|/g
+ awk -v k=text {n=split($0,a,","); for (i=1; i<=n; i++) print a}
+ sed s/[{}]//g
+ sed s/\\\\\//\//g
+ cat /usr/local/addons/user/tmp/.alexa.devicelist.json
+ [ -n true ]
+ return
+ ATTR=accountName
+ echo the following devices exist in your account:
the following devices exist in your account:
+ + sedsed s/^.*accountName|// s/ /_/g

+ grep accountName| /usr/local/addons/user/tmp/.alexa.devicelist.txt
+ [ -n ]
0 x
Benutzeravatar

adn77
Beiträge: 63
Registriert: Di 10. Okt 2017, 19:44

Do 23. Nov 2017, 13:36

Hmm, ich hatte auf meiner Fritz!Box zunächst das Problem, dass cURL ohne libz compiliert wurde (--compress Option).
Desweiteren konnte mein cURL keine Zertifikate überprüfen - dazu muss es mit der "-k" Option aufgerufen werden oder ein ensprechendes Zertifikatsbundle installiert werden. (https://curl.haxx.se/docs/caextract.html)

Ruf doch mal die erste URL in der Shell auf:

Code: Alles auswählen

/usr/local/addons/cuxd/extra/curl -s -D /usr/local/addons/user/tmp/.alexa.header -c /usr/local/addons/user/tmp/.alexa.cookie -b /usr/local/addons/user/tmp/.alexa.cookie -A Mozilla/5.0 -H Accept-Language: de,en --compressed -H DNT: 1 -H Connection: keep-alive -H Upgrade-Insecure-Requests: 1 -L https://alexa.amazon.de
Alex
PS: vielleicht kannst du den Ouput in deinem Posts noch in "code" Tags packen... ;)
Zuletzt geändert von adn77 am Do 23. Nov 2017, 13:37, insgesamt 1-mal geändert.
0 x
Benutzeravatar

fantasticn
Beiträge: 9
Registriert: Do 23. Mär 2017, 17:00

Fr 24. Nov 2017, 11:03

Sorry, ich komme leider jetzt erst zum testen und antworten.

Also der Aufruf klappt bei mir nicht. "Fehlercode 60" wird mir vom Eingabefenster in WinSCP gemeldet. Ich entsinne mich aber, dass wir für die CCU2 den ursprünglichen Curl-Aufruf aus dem Script von Gehrig auch umbauen mussten, damit er klappt. Ich dachte indes damals, dass es etwas mit dem Escapen und drei Ebenen von "-Zeichen zutun gehabt hätte, die sich damit umgehen ließen.

Ich hab mal das Script beigefügt, das Dragonfly für die CCU2 entwickelt hatte. Damit lassen sich auch die Echos fernsteuern. Der CURL-Aufruf darin zeigt also, wie es bei der CCU2 geht. Das Script hat nur den Nachteil, dass es den Cookie nicht aktualisieren kann.

@adn77
Nachtrag: ES GEHT!!! Es lag tatsächlich an der Option -k. Kaum hatte ich diese hinter alle curl-Befehle hinzugefügt, hat es auch schon funktioniert. An dieser Stelle also ein fettes Dankeschön, sowohl für das Script, als auch für Deinen Support

Nun kommen aber doch noch ein paar Fragen:
1. Meine Echos und Sonos Lautsprecher haben teilweise Umlaute ("Büro", "Küche" etc.). Wenn ich das Script in der Bash-Shell von Windows laufen lasse, werden die Geräte vom Script mit korrekten Umlauten identifiziert und lassen sich auch so ansprechen. Auf der CCU indes werden statt der Umlaute kryptische Zeichen ausgegeben. Auch lassen sich die Geräte nur mit diesen kryptischen Zeichen, nicht mit den Umlauten, ansprechen. Ich würde natürlich nun ungern diese Geräte umbenennen, zumal ich dann nicht weiß, ob es bei der Spracheingabe dann Probleme gäbe, wenn ich sage "Alexa, spiel Radio FFH auf Echo Büro" und das Gerät heißt aber "Echo_Buero". Any ideas?

2. Falls Du das Script künftig noch weiter updaten solltest, wäre für mich wichtig zu wissen, ob Du den Paramater "-k" mit aufnimmst, oder ob ich dann selbst wieder einbauen soll. Zudem wäre meine Frage, ob Du eventuell eine Pfad-Variable für CURL vorsehen könntest, die man nur am Anfang des Scripts einmal einstellen muss, weil CURL auf der CCU2 leider nachträglich installiert wird und dort dann in einem separaten Verzeichnis liegt. Beides ist aber natürlich "up to you". Ich kann das auch notfalls weiterhin immer manuell anpassen.

3. Die Sache mit dem Multiroom habe ich - offen gesagt - noch nicht verstanden. Du sagst es geht mit "CURL -x ...". Das Script hat aber dafür noch keine Option, soweit ich das sehen kann. Heißt das, Du willst es nicht einbauen?

4. Es gibt ja noch die Script mit der jq-Unterstützung. Hast Du eine Ahnung, ob und wie ich es auf der CCU2 realisieren könnte? Ansonsten bleibe ich natürlich jetzt bei der Version ohne jq-Unterstützung.

Also nochmals many, many thanx für Deine Hilfe!
Dateianhänge
alexa.zip
(2.2 KiB) 276-mal heruntergeladen
0 x
Benutzeravatar

adn77
Beiträge: 63
Registriert: Di 10. Okt 2017, 19:44

Sa 25. Nov 2017, 01:37

fantasticn hat geschrieben: Fr 24. Nov 2017, 12:13 1. Meine Echos und Sonos Lautsprecher haben teilweise Umlaute ("Büro", "Küche" etc.).
Die "kryptischen Zeichen", die du siehst ist die Darstellung der Umlaute in der CCU-Shell. Wenn die Shell kein UTF8 kann, musst du leider mit diesem Problem leben oder einen Konverter wie "uconv" zu Hilfe nehmen. Wenn es dir lieber ist, kannst du die Geräte auch mit deviceType und deviceSerialnumber ansprechen ;)
cURL bekommt eine JSON Antwort (per default UTF8 codiert) mit den Namen der Geräte, Seriennummer und Devicetyp. Ich parse diese Daten und schreibe sie in die .alexa.devicelist.txt, um die Geräte per Namen ansprechen zu können. D.h. die Zeichenfolge muss exakt so lauten, wie sie in dieser Datei steht, damit die Rückauflösung zu Seriennummer und Devicetyp klappt.
fantasticn hat geschrieben: Fr 24. Nov 2017, 12:13 2. Falls Du das Script künftig noch weiter updaten solltest, wäre für mich wichtig zu wissen, ob Du den Paramater "-k" mit aufnimmst, oder ob ich dann selbst wieder einbauen soll. Zudem wäre meine Frage, ob Du eventuell eine Pfad-Variable für CURL vorsehen könntest, die man nur am Anfang des Scripts einmal einstellen muss, weil CURL auf der CCU2 leider nachträglich installiert wird und dort dann in einem separaten Verzeichnis liegt. Beides ist aber natürlich "up to you". Ich kann das auch notfalls weiterhin immer manuell anpassen.
Ich habe eine leicht geänderte Version hochgeladen, die cURL konfigurierbar macht.
fantasticn hat geschrieben: Fr 24. Nov 2017, 12:13 3. Die Sache mit dem Multiroom habe ich - offen gesagt - noch nicht verstanden. Du sagst es geht mit "CURL -x ...". Das Script hat aber dafür noch keine Option, soweit ich das sehen kann. Heißt das, Du willst es nicht einbauen?
Ich finde das Thema Multiroom total spannend und die Idee von dir, die Geräte dynamisch einzubinden absolut brilliant!

So wie bei der Bluetooth-Thematik würde ich mir hier ein wenig Input wünschen. Ich hatte für das Multiroom Thema nur mal beispielhaft angeführt, welche Daten übermittelt werden - diese Informationen werden zur Umsetzung benötigt.
Man kann so schon erkennen, dass ziemlich viel Informationen übergeben werden müssen... wie könnte eine schlüssige Kommandozeile lauten?
fantasticn hat geschrieben: Fr 24. Nov 2017, 12:13 4. Es gibt ja noch die Script mit der jq-Unterstützung. Hast Du eine Ahnung, ob und wie ich es auf der CCU2 realisieren könnte? Ansonsten bleibe ich natürlich jetzt bei der Version ohne jq-Unterstützung.
Ohne die CCU2 genauer zu kennen... der Prozessor scheint ein wenig Ähnlichkeit mit dem Marvel Kirkwood zu haben. Mit extrem viel Glück könntest du hier https://downloads.openwrt.org/snapshots ... rkwood.ipk das ipk als tgz auspacken und ausprobieren...
Ansonsten hilft nur selbst kompilieren. Die OpenWRT Build-Umgebung war bisher mein bevorzugtes Mittel für solche Fälle.

Alex
0 x
Benutzeravatar

fantasticn
Beiträge: 9
Registriert: Do 23. Mär 2017, 17:00

Sa 25. Nov 2017, 13:29

@Alex,

erneut ein herzliches Dankeschön für Deinen support! Mit den eingebauten Variablen ist es jetzt sehr easy, das Script für verschiedene Umgebungen anzupassen. Es läuft nun einwandfrei auf der CCU2. Ebenso hab ich es jetzt auch unter Windows in der Bash Shell laufen. Alles bestens!

Die Sache mit Multiroom wäre (natürlich ebenso wie die Bluetooth-Unterstützung) sehr interessant, weil man damit den Nachteil aus der von Google eingebauten Limitierung (jedes Gerät darf nur in einer Multiroom-Gruppe gleichzeitig Mitglied sein) etwas kompensieren könnte. Man bastelt sich vorgefertigte Sets von Multiroom-Gruppen und ruft diese einfach je nach Bedarf auf. Wenn man eine Heimautomation wie die Homematic CCU2 besitzt, dann lässt sich so etwas sogar ziemlich cool automatisieren (Event abhängig oder einfach ein Tastendruck auf der Fernbedienung). Man muss halt noch schauen, wie viel Verzögerung bestehen muss (1.) zwischen dem Befehl zur Auflösung der alten Gruppe und dem Anlegen einer neuen Gruppe sowie (2.) nach dem Anlegen der neuen Gruppe bis zur Möglichkeit, diese anzusprechen und Musik darauf ausgeben zu lassen.

Was den Befehlsaufbau anbelangt, hattest Du das Grundprinzip - wenn ich Dich richtig verstanden habe - schon aufgezeigt. Also ist wohl "nur" die extreme Länge das Problem. Ich entsinne mich, dass Dragonfly bei der Erstellung seines Scripts (siehe Anlage zu meinem vorherigen Post) auch zuerst Probleme mit der Länge des Curl-Befehls hatte wegen des Cookies. In der Befehlszeile selbst durfte der Cookie deshalb nicht direkt stehen, weil der Befehl dann abgeschnitten und nicht mehr interpretiert wurde (zu viele Zeichen). Aber wenn man den Cookie in eine Variable ausgelagert und nur diese eingesetzt hat, ging es. Bei der oben verlinkten Version wurde der Cookie sogar - ähnlich wie bei Dir - in eine externe Datei ausgelagert (nur dass das Script von Dragonfly nicht in der Lage ist, den Cookie zu aktualisieren; das musste man deshalb alle paar Wochen manuell machen, weshalb ich jetzt so begeistert bin von Deinem Script). Kurzum: Man müsste also vermutlich so viele Parameter und Befehlsbestandteile wie möglich in Variablen setzen, um den Curl-Aufruf selbst so kurz wie möglich zu halten. Wie das auszusehen hat, kann ich indes kaum überblicken. Ich hab von der Script-Programmierung wirklich nur ganz, ganz wenig Ahnung. Ich bin froh ein "Hello world" damit hinzubekommen :-) Ich bin aber gerne bereit, mit zu testen und feedback zu geben.

Many thanx auch für den Tipp mit der jq-Unterstützung. Ich werde das mal versuchen. Ich bin zwar schon mehr als glücklich mit dem Script wie es jetzt läuft. Aber mit jq-Unterstützung wären wohl auch noch ein paar zusätzliche Statusabfragen zu den devices möglich, die man nutzen könnte. Allerdings beim Thema "selbst compilieren" werde ich wieder zurückhaltend, weil das etwas ist, was meinen Horizont überschreitet.
0 x
Antworten

Zurück zu „Alexa Allgemein“

  • Information