Alexa automatisiert "Fernsteuern"

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

terny
Beiträge: 14
Registriert: Do 27. Apr 2017, 12:45

Sa 25. Nov 2017, 16:41

Hallo Alex,

auch von meiner Seite vielen Danke für das neue Script (PLAIN shell ohne JSON Parser) inklusive der automatischen Cookie-Aktualisierung.
Auch bei mir läuft dein Skript mit der Unterstützung von fantasticn auf der CCU2 soweit gut.

Das einzige was bei uns noch Probleme bereitet ist der Aufruf von eigenen Tracks bei Amazon mittels "-s : play library track".
Hier bleibt der Echo einfach stumm und es wir auch kein Fehler ausgespuckt.
Die anderen Befehle funktionieren soweit getestet ohne Probleme.( -t : play Prime playlist, -u : play Prime station)

Ich hatte mich mit fantasticn schon dazu ausgetauscht und wir vermuten ein Problem aufgrund der vielen "Schachtel- Ebenen" in dem "-s : play library track" Befehl in Zusammenhang mit dem Curl-Aufruf auf der CCU.
Desweiteren ist uns bei unseren erfolglosen Versuchen, die Verschachtelungen in deinem Script anzupassen, aufgefallen, dass unsere Track-ID aus fünf Blöcken bestehen. In deinem Beispiel ist jedoch nur ein Vierer Block aufgeführt, was jedoch nicht zwingend ein Fehler sein muss.

Bei dem Dragonfly-Skript gab es beim Aufruf von Track-IDs keine Probleme auf der CCU. (Siehe Anhang von fantasticn oben)
Leider ist unser Kenntnisstand nicht ausreichend die funktionsrelevanten Unterschiede zwischen deinem und dem Dragonfly-Skript ausfindig zu machen.
Vielleicht könntest du mit deinem geschulten Blick für eine vollwertige Funktion auf der CCU2 helfen?

Gerade habe ich bemerkt, dass Befehle mit dem Gerät "ALL" ebenfalls nicht funktionieren. Vielleicht ist hier die Ursache ja ähnlich dem Track-ID Problem?

Danke vorab!

P.S. Wenn ich das richtig sehe, hast du mit deinem Skript meine "50Euro Ausschreibung" im Homematic Forum gewonnen.


Gruß
Terny
Zuletzt geändert von terny am Sa 25. Nov 2017, 17:32, insgesamt 2-mal geändert.
0 x
Benutzeravatar

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

Sa 25. Nov 2017, 17:50

terny hat geschrieben:
Sa 25. Nov 2017, 16:41
Das einzige was bei uns noch Probleme bereitet ist der Aufruf von eigenen Tracks bei Amazon mittels "-s : play library track".
Hier bleibt der Echo einfach stumm und es wir auch kein Fehler ausgespuckt.
Die anderen Befehle funktionieren soweit getestet ohne Probleme.( -t : play Prime playlist, -u : play Prime station)
Bitte probiert unbedingt zunächst die "jq" Variante auf einem anderen Gerät aus. In meinem Post hier: alexa-allgemein-f14/alexa-automatisiert ... tml#p30994 und im Blog: http://blog.loetzimmer.de/2017/10/amazo ... -echo.html habe ich die verschiedenen Abspielmöglichkeiten erläutert, die mir bisher bekannt sind und wie man an die jeweiligen Parameter kommt.

Ich habe auch das Script von Dragonfly heruntergeladen. Dort gibt es noch eine Möglichkeit, eine Cloud-Playlist abzuspielen. Ich bin mir nicht ganz sicher, wie man so eine Playlist erstellt...
Außerdem habe ich gesehen, dass in dem Script das übergebene JSON "playQueuePrime":true enthält, während ich mit "playQueuePrime":false abspielen kann. Könntet ihr bitte im Alexa-Web-Frontend verschiedene Szenarien ausprobieren und die POST-Daten kopieren und hier posten (zusammen mit der aufgerufenen URL). Gut zu wissen wäre auch noch, ob Ihr Prime Member seid.

Bsp:

Code: Alles auswählen

URL: https://layla.amazon.de/api/cloudplayer/queue-and-play?deviceSerialNumber=XXX&deviceType=YYY}&mediaOwnerCustomerId=ZZZ&shuffle=false
Method: POST
Parameter: {"trackId":"'1234-1234-1234-1234-AB'","playQueuePrime":false}
terny hat geschrieben:
Sa 25. Nov 2017, 16:41
Ich hatte mich mit fantasticn schon dazu ausgetauscht und wir vermuten ein Problem aufgrund der vielen "Schachtel- Ebenen" in dem "-s : play library track" Befehl in Zusammenhang mit dem Curl-Aufruf auf der CCU.
Ich denke nicht, dass es an der Zeilenlänge des Befehls liegt (wenn du das mit der "Verschachtelung" meinst). Vier Blöcke sind es, weil ich meine Track-ID nicht preisgeben wollte ;)
terny hat geschrieben:
Sa 25. Nov 2017, 16:41
P.S. Wenn ich das richtig sehe, hast du mit deinem Skript meine "50Euro Ausschreibung" im Homematic Forum gewonnen.
Von der "Ausschreibung" wusste ich nichts. Ich mache das auch nur aus Begeisterung an der Sache und freue mich, dass es euch nutzt - gut möglich dass es auch nur zeitlich begrenzt funktioniert.
Ich bin ebenso wie du Nutznießer einer grandiosen Community wenn es um freie Software geht, daher bin ich mir sicher, dass du, falls du das Geld wirklich ausgeben möchtest, bestimmt eine Organisation findest. Ist ja bald Weihnachten.. ;)

Alex

PS: wenn du der Sache nicht auf den Grund gehen möchtest/kannst, versuch mal in Zeile 384 das "false" am Zeilenende in ein "true" zu ändern...
Zuletzt geändert von adn77 am Sa 25. Nov 2017, 17:53, insgesamt 1-mal geändert.
0 x
Benutzeravatar

terny
Beiträge: 14
Registriert: Do 27. Apr 2017, 12:45

Sa 25. Nov 2017, 19:15

Danke für die schnelle Rückmeldung.
Leider führt der einfache false/true Tausch auch nicht zum Erfolg.
Ja, ich habe Amazon Prime, glaube jedoch nicht, dass sich damit an selbst hochgeladenen Tracks was ändert.

Mit Verschachtelung habe ich die Ebenen gemeint, die ein Befehl mit den einzelnen " ", \\\" \\\" oder ' ' hat. Bei der CCU hatten wir vor dem Dragonfly-Skript auch damit zu kämpfen.
Mit Cloud-Playlist und Cloud-Track hat Dragnofly umgesetzt gehabt, dass man die eigenen Files bzw. Playlisten, welche man bei Amazon Musik hochladen kann, getriggert abgespielt werden konnten.
Ich nutzte das bei mir bisher für Sprachausgabe und Alarme bei Waschmaschine fertig, Trockner fertig, Fenster zu lange auf,.....

Der Befehl, den ich eigentlich mit dem Skript Umsetzten will, sieht wie folgt aus:

Code: Alles auswählen

curl "https://alexa.amazon.de/api/cloudplayer/queue-and-play?deviceSerialNumber=abc&deviceType=abc&shuffle=false&mediaOwnerCustomerId=abc" -H "Cookie: ..." -H "Origin: https://alexa.amazon.de" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" -H "Content-Type: application/json; charset=UTF-8" -H "Accept: application/json, text/javascript, */*; q=0.01" -H "Referer: https://alexa.amazon.de/spa/index.html" -H "csrf: abc" -H "X-Requested-With: XMLHttpRequest" -H "Connection: keep-alive" --data-binary "{\"playlistId\":\"4a45423d-abc-abc-823a-ae945b2e37f4\",\"playlistTitle\":\"Dachfenster_kurz\",\"initialTrackIndex\":1,\"trackId\":\"a2c6ca5d-abc-abc-abc-ade933f76\",\"isoTimestamp\":\"2017-11-25T17:45:16.843Z\",\"playQueuePrime\":false,\"trackIds\":[{\"trackId\":\"a2c6ca5d-abc-abc-abc-ade933f76\"}]}" --compressed
Führt dein Skript den Befehl in dieser Art aus?

Auf das Json Skript "umzusteigen" ist bei meinem Wissen bzw. benötigten Zeitaufwand unrealistisch. Deshalb habe ich ja auch die Ausschreibung gestartet, um jemand zum Motivieren, der bereits die Skills dazu hat. Dazu gehörst du ja definitiv.

Wäre es nicht möglich den bereits funktionierenden "cloud" Abschnitt von Dragonfly in dein Skript zu übersetzten?
In meiner naiven Weltanschauung stelle ich mir da einfach ein "-c : play cloud-track" Abschnitt vor :blush:

Das mit dem "Spenden" kannst du ja auch übernehmen, habe sonst ein schlechtes Gewissen und will zu meinem geschriebenen Wort stehen :-)

Gruß
Terny
Zuletzt geändert von terny am Sa 25. Nov 2017, 19:19, insgesamt 1-mal geändert.
0 x
Benutzeravatar

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

Sa 25. Nov 2017, 20:02

@terny:
Wie schon geschrieben, weiß ich nicht, wie du zu der Playliste kommst... wenn es sich nur um einen Track handelt (ganz am Ende deines Playlistkommandos steht er: a2c6ca5d-abc-abc-abc-ade933f76), kannst du den bereits jetzt mit der Option -s abspielen.
Ich habe nun in der neuen Version v0.7 die Option -w eingebaut, die als Parameter eine playlistId übernimmt - analog zum Script von Dragonfly.

Mit dem Ausprobieren der 'jq' Variante meinte ich auch nur, dass du dort mit den Kommandos -i und -p die TrackIds auslesen könntest (z.B. auf einem Linux Rechner)..

@fantasticn:
Ich habe eine neue Version (v0.7) gebaut, die eine Multiroom-Gruppen-Verwaltung enthält

Code: Alles auswählen

-m <Gruppe>
löscht die Multiroomgruppe

-m <Gruppe> <Gerät1> ... <GerätX)
löscht die Multiroomgruppe und legt sie mit den Geräten 1..X neu an
Da ich momentan nicht in der Nähe meiner Echos bin, ist alles ungetestet.

Alex
Zuletzt geändert von adn77 am Sa 25. Nov 2017, 21:21, insgesamt 1-mal geändert.
0 x
Benutzeravatar

Fenderman2
Beiträge: 2
Registriert: Sa 25. Nov 2017, 23:41

Sa 25. Nov 2017, 23:44

Matthy hat geschrieben:
Fr 17. Nov 2017, 13:55
Maragon hat geschrieben:
Mi 15. Nov 2017, 19:46
Hallo, ich lese schon eine Weile mit. möchte mich jetzt jedoch mit meiner Frage einbringen. Ist es möglich über solch ein Skript die Bluetooth Verbindung von Alexa zu starten? Der Hintergrund ist, dass ich per IO Broker einige Szenen habe die zwar alles einstellen, meine Bluetooth Verbindung mit den Lautsprechern jedoch "manuell" (per Sprachbefehl) hergestellt werden muss.
Würde mich auch interessieren! Das wäre eine super Sache! Da man die Bluetooth-Geräte über die Alexa-Weboberfläche verbinden und trennen kann, sollte es meiner Meinung nach per Skript technisch grundsätzlich möglich sein.
Genau das Gleiche suche ich auch!
Gibt es schon eine Idee, wie man das als Skript umsetzen könnte?
0 x
Benutzeravatar

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

Sa 25. Nov 2017, 23:57

Wegen Bluetooth brauche ich Eure Mithilfe weil ich keine BT-Geräte benutze!
Bitte im Webfrontend alexa.amazon.de auf den Webentwicklermodus umschalten und im Netzwerk-Tab den Verkehr beobachten, beim Bluetooth Verbinden, Trennen.
Interessant sind i.d.R alle Verbindungen die auch Daten an den Server senden (meistens per POST-Methode). Ich brauche die URLs und die POST-Daten (bei Firefox "Parameter").

Bitte probiert alle Möglichkeiten, das Script soll am Ende so generisch wie möglich sein.

Alex
0 x
Benutzeravatar

terny
Beiträge: 14
Registriert: Do 27. Apr 2017, 12:45

So 26. Nov 2017, 10:30

Morgen Alex,

ich habe nun das neue V0.7 Skript getestet. Leider auch mit der Ergänzung kein Erfolg auf der CCU mittels CuxD Aufruf beim -s oder -w Befehl.

Dragonfly-Skript funktioniert

Code: Alles auswählen

./alexa.sh cloud track a2c6ca5d-xyz-xyz-xyz-ad437e9f76
Rückmeldung der Konsole:

Code: Alles auswählen

{"error":null}

Bei deinem Skript bleibt der Echo leider stumm:

Code: Alles auswählen

./alexa_remote_control.sh -d Arbeitszimmer -s a2c6ca5d-xyz-xyz-xyz-ad437e9f76
Rückmeldung der Konsole:

Code: Alles auswählen

playing library track:a2c6ca5d-xyz-xyz-xyz-ad437e9f76 on dev:Arbeitszimmer type:...
Irgendwo muss im ausgegebenem Befehlt ein Unterschied liegen oder eine andere Syntax verwendet worden sein?
Möglicherweise hängt es auch an dem Cookie, der ja nicht im Skript steht, sondern in einem Unterordner gezogen wird.
Dies hat beim Dragonfly Skript nicht funktionieren wollen.

Wenn ich damals im zweiten Semester doch auf Informatik gewechselt hätte... :unamused:
Zuletzt geändert von terny am So 26. Nov 2017, 10:38, insgesamt 2-mal geändert.
0 x
Benutzeravatar

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

So 26. Nov 2017, 14:08

Hallo Alex,

auch von meiner Seite kurzes feedback:

Die Multiroom-Optionen funktionieren bei mir nicht. Hab eine Gruppe angelegt namens "test". Ich konnte sie weder löschen ( -m test), noch konnte ich sie löschen und gleichzeitig mit neuen Geräten bestücken (-m test device1 device 2 ...). Die Gruppe bleibt einfach bestehen wie sie ist.
0 x
Benutzeravatar

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

So 26. Nov 2017, 22:19

@terny:
Ich habe jetzt nochmals alles aus der Entfernung (bin nicht zu Hause) getestet.
Führe mal folgendes Kommando auf deiner CCU2 aus.

Code: Alles auswählen

date --utc +%FT%T.%3NZ
Das dient zum Timestamp generieren und fehlt im Script von Dragonfly. Da Amazon dieses Attribut bisher nicht zwingend benötigt, habe ich es mal entfernt.
Jetzt sollte es wirklich funktionieren! Bitte lade die Scripte nochmal neu - die Version 0.7 ist gleich geblieben.

Ich habe den -q Aufruf um alle drei Möglichkeiten der Statusabfrage erweitert und es gibt jetzt bei jedem Kommando eine JSON Antwort {..}
Außerdem werden Playlists und Songs jetzt immer mit "playQueuePrime=true" abgespielt, weil man sonst unterscheiden müsste, ob es sich um Prime-Songs, hochgeladene, oder gekaufte handelt.

@fantasticn:
Wäre ja auch zu schön gewesen... teste ich sobald ich wieder zu Hause bin (ca. 4.12.)

Alex
0 x
Benutzeravatar

terny
Beiträge: 14
Registriert: Do 27. Apr 2017, 12:45

Mo 27. Nov 2017, 18:08

Hallo Alex,

beim Kommando:
date --utc +%FT%T.%3NZ
Kommt folgende Antwort:
2017-11-27T16:39:23.%3NZ

Das neue Skript funktioniert jedoch leider nicht, hier die Antwort auf den -a Startbefehl:
/usr/local/addons/user$ ./alexa_remote_control.sh -a
cookie do not exist. logging in ...
awk: /usr/local/addons/tmp/.alexa.cookie: No such file or directory
device list do not exist. downloading ...
awk: /usr/local/addons/tmp/.alexa.cookie: No such file or directory
cookie expired, logging in again ...
awk: /usr/local/addons/tmp/.alexa.cookie: No such file or directory
the following devices exist in your account:
grep: /usr/local/addons/tmp/.alexa.devicelist.txt: No such file or directory


UPDATE: MIT DER LETZTEN VERSION VON ALEX GEHT NUN AUCH TRACK/PLAYLIST AUF DER CCU2!
Ich habe beim vergleichen der Skripte gemerkt, dass in der letzten Version in der Zeile OPTS='-k --compressed' das "-k" verschwunden ist.
Nach dem Anpassen gehen nun auch Tracks und Playlisten. Top!

Vielleicht kannst du das ja noch anpassen, damit nicht auch andere darüber stolpern.

Desweiteren ist mir aufgefallen, dass das Skript im Vergleich mit dem Dragonfly-Skript deutlich länger benötigt, bis der Track auf dem Echo abgespielt wird. Ist jedoch nur ein Komfort-Thema...

Dickes Dankeschön!

Gruß
Terny
Zuletzt geändert von terny am Mo 27. Nov 2017, 19:28, insgesamt 4-mal geändert.
0 x
Antworten

Zurück zu „Alexa Allgemein“

  • Information