Amazon Echo Remote Control

Nachdem ja viele einen Echo oder Dot besitzen und mit IP-Symcon nutzten, wollte ich auch gerne den Echo / Dot Befehle von IP-Symcon aus schicken.

Leider gibt es zur Zeit nur zwei Möglichkeiten einem Echo einen Befehl zu geben. Die erste ist logischerweise über Spracheingabe mit Benutzung des Wakewords. Die zweite ist über die Alexa Seite bzw. die Alexa App.

Dank der Analyse von Thorsten Gehrig, vielen Dank an der Stelle noch mal, hat er sich das näher angeschaut was da passiert und was verschickt wird.

Dank seiner Idee habe ich das zunächst per Skript von IP-Symcon aus gesteuert und das Ganze jetzt mal in ein kleines PHP Modul zusammengefasst.

Voraussetzungen:

[ul]
[li]IP-Symcon 4.1[/li][li]Amazon Echo / Dot mit verknüpften Amazon Account[/li][/ul]

Einrichtung:
Zunächst muss etwas Vorarbeit geleistet werden und mann muss Werte ermitteln und aufschreiben, die wir später zum Schalten benötigen.

Zunächst ist er notwendig Werte aus einer Browser Session zu ermitteln.
In dem Beispiel nutzten wir die Entwicklertools von Chrome andere Browser verfügen aber über ähnliche Werkzeuge. Die Bilder und Anleitung orientiert sich jetzt aber an Chrome.

Wie öffnen also zunächst die Webseite
https://alexa.amazon.com
und melden uns dort mit dem Amazon Account an auf den auch der Echo / Dot registriert ist.

Nun wechslen wir unter Musik und Bücher und wählen TuneIn aus. Jetzt öffnen wir die Entwicklertools mit STRG+Umschalt+I es öffnet sich auf der rechten Seite ein weiteres Fenster.

Nun wählen wir einen Radiosender bei TuneIn mit Doppelklick aus. Der Radiosender sollte nun das Abspielen auf dem Echo beginnen. Gleichzeitig sehen wir im Fenster der Entwicklertools einen Eintrag mit queue-and-play.

Wir öffnen jetzt den Eintrag queue-and-play (linke Spalte) mit einem Doppelklick und es öffnen sich ein weiters Fenster (rechte Spalte).


In dem Fenster können wir nun die Werte einsehen, die wir für das Modul benötigen. Diese markieren wir jeweils mit der Maus und kopieren diese mit STRG+C in die Zwischenablage und setzten den Wert dann z.B. in ein Textdokument zur Zwischenspeicherung um diese dann im Modul ergänzen zu können.

Es wird jeweils der Wert hinter dem Parameter und dem : kopiert.
Zum Beispiel wäre den Eintrag bei CSRF
csrf:-123456789
wir bräuchten dann -123456789 als Wert fü das Modul.

Im Block Request Headers findet man
Cookie: entspricht dem Eintrag Cookie im Modul (Der Cookie ist ziemlich lang und muss komplett kopiert werden)
csrf: entspricht dem Eintrag CSRF im Modul

Im Block Query String Parameters findet man
deviceSerialNumber: entspricht Devicenumber im Modul
deviceType: entspricht Devicetype im Modul
guideId: entspricht Station ID im Modul
mediaOwnerCustomerId: entspricht Customer ID im Modul

Installation IP-Symcon

Laden des Moduls

In IP-Symcon (ab Ver. 4.1) unter Kerninstanzen über Modules -> Hinzufügen das Modul ergänzen mit der URL:


https://github.com/Wolbolar/IPSymconEchoRemote

Anschließend erstellt man an der passenden Stelle im Objekt Baum eine neue Instanz (Ctrl + 1) als Hersteller gibt man Amazon ein und wählt Amazon Echo Remote aus.

In der Instanz trägt man nun die Werte ein die vorher über die Anleitung (s.o.) ermittelt worden sind

Echo-Remote.png

und anschließend mit Übernehmen im Modul abspeichern.

Jetzt sollte man wenn die Werte denn stimmen dem Echo Befehle schicken können.

Siehe auch Dokumentation

Zur Zeit sind die Befehle Play, Pause, Next, Previous, Rewind 30s, Forward 30s verfügbar

Ist noch experimentell aber bei mir funktioniert es zumindest.

Beispiele für das Anpassen der Sprachausgabe bei Text to Speech

Stimmenauswahl für Text to Speech (Sprachausgabe auf einem Echo Gerät)

Stimme Hans


<?php
// Stimme Hans
$text = "<speak><voice name=\"Hans\">Hallo, dies eine Textansage durch die Stimme Hans</voice></speak>";
ECHOREMOTE_TextToSpeech(12345, $text);

Stimme Marlene


<?php
// Stimme Marlene
$text = "<speak><voice name=\"Marlene\">Hallo, dies eine Textansage durch die Stimme Marlene</voice></speak>";
ECHOREMOTE_TextToSpeech(12345, $text);

Stimme Vicki


<?php
// Stimme Vicki
$text = "<speak><voice name=\"Vicki\">Hallo, dies eine Textansage durch die Stimme Vicki</voice></speak>";
ECHOREMOTE_TextToSpeech(12345, $text);

Eine Übersicht an unterstützten SSML Auszeichnung gibt es in der Speech Synthesis Markup Language (SSML) Reference von Amazon

Einfaches Anwendungsbeispiel für leise Aussprache einer Textpassage:


<?php
$text = '<speak>Ich spreche jetzt normal, <prosody volume="x-soft">jetzt flüstere ich</prosody>.</speak>';
ECHOREMOTE_TextToSpeech(12345, $text);

Grundsätzlich können die von Amazon aufgezählten SSML Auszeichnungen benutzt werden, um eine Textansprache individueller zu gestalten.

Es gibt auch spezielle vorgefertige Aussprachen von Alexa für bestimmte Sprachen, das ist ein sogenanntes Speechcon.
Eine Übersicht aller zu verwendeter Speechcons in deutscher Sprache findet man in der Speechcon Reference.

Ein Beispiel für eine Benutzung eines Speechcons


$text = '<speak><say-as interpret-as="interjection">tschö</say-as></speak>';
ECHOREMOTE_TextToSpeech(12345, $text); // 12345 ist die Objekt ID der Amazon Echo Remote Instanz

oder auch als Kombination mit anderen Effekten :cool:


<?php
$text = '<speak><amazon:effect name="whispered">Gute Nacht.<say-as interpret-as="interjection">tschö</say-as> mit <prosody rate="x-slow">ö</prosody></amazon:effect></speak>';
ECHOREMOTE_TextToSpeech(12345, $text); // 12345 ist die Objekt ID der Amazon Echo Remote Instanz

Es gibt sicher noch Dinge zu ergänzen insbesondere eine Radiostation Auswahl, wer da Ideen hat wie man das am Besten umsetzten kann als her mit. Ansonsten bin ich für Ergänzungsvorschläge offen ist zunächst mal ein Test und ich bin gespannt ob es Bei Euch auch funktioniert.

Die Radio Station ID muss auch einmalig ausgelesen werden. Diese ist unter guideId zu finden.

Man könnte jetzt Radio Stationen auf eine Variable im Webfront legen um diese dann zu schalten.

Eine Möglichkeit wäre es jeder passt sich das Variablen Profil so an das seine Liebingssender drauf sind eben maximal 32 pro Variablenprofil. Da es ja aber unüberschaubar viele Sender bei Tune In gibt und jeder einen anderen Musik Geschmack hat wollte ich mal in die Runde fragen ob jemand eine glorreiche Idee für die Auswahl von Tune In Radio Sendern hat ohne das der Nutzer die Station ID einmalig von Hand raussuchen muss.

Tune In Radio Sender lassen sich dann auf dem Echo starten mit


$echoid = 12345; // Objekt ID der Echo Remote Instanz
$station = "s97088"; // Beispiel FFH Soundtrack
EchoRemote_TuneIn($echoid, $station);

Eine einfachere Möglichkeit die Station ID herauszubekommen ohne extra in der Alexa Seite im Traffic nachschauen zu müssen ist über die TuneIn Seite selber.

TuneIn Station ID herausfinden

Also einfach auf die TuneIn Seite gehen der letzte teil der URL ist die Station ID. Mit dieser könnt ihr dann über die Funktion EchoRemote_TuneIn($echoid, $station) (s.o.) den entsprechenden Sender auf Eurem Echo starten.

Wow super - das fehlt mir wirklich noch zu meinem Dot.

Leider will das Modul bei mir nicht. Im Debugfenster der Instanz bekomme ich bei Aufruf Deines Skriptes:
Response : <InternalFailure/><LF>

Den CSRF und Cookie von Amazon Music brauche ich doch nicht zwingend - oder?
Die anderen Parameter habe ich jeweils mit und ohne Anführungszeichen ausprobiert.

Fällt Dir vielleicht noch etwas ein?

Gruß
Boris

Nein wenn Du nur TuneIn nutzten willst brauchst Du das nicht. Wichtig ist das die ganzen Daten halt exakt stimmen. Da ich keine Ahnung habe wie diese aufgebaut sind kann ich diese auch nicht validieren.

Ein Fehler kann sein das beim Vorgehen wie von Thorsten Gehring beschrieben auch Zeichen wie ^ mit kopiert werden. Um zuprüfen ob die Dinge exakt stimmen suchst Du in der Queue den Eintrag mit POST und queue-and-play?.
Wenn Du da mit der Mouse drüberfährst kannst Du in einem Popup Fenster schon mal die guideID (Radiostation), deviceSerialNumber, deviceType und CustomerId auslesen bzw. überprüfen.

Wenn Du jetzt mit der Maus auf den POST Eintrag klickst geht in der Entwicklerconsole ein weiteres Fenster auf. Hier kannst Du unter Request Headers sauber den CSRF und Cookie einsehen, kontrollieren als auch rauskopieren.

Hi,
Dein Tipp war gut. Augenscheinlich standen da die gleichen Werte aber ich denke mal das ich irgendwas mitkopiert habe was da nicht hingehörte.

Gruß
Boris

Funktioniert jetzt also alles oder hast Du noch was gefunden oder Ergänzungen?

Jetzt geht es soweit, ich denke ich hatte beim Cookie nicht alles mitkopiert. Das Radio konnte ich dann anmachen und die Lautstärke ging einzustellen. Weiter bin ich dann aber nicht mehr gekommen.
Gruß
Boris

Gesendet von meinem JAZZ mit Tapatalk

Hi Danke für das Modul, ich bekomme es leider nicht mit der Eingabe der Daten hin. Mein Amazon Music Cookie ist viel kleiner ( ca. 50%) als in dem Beispiel. Wo bekomme ich die beiden Daten von TuneIn her?

LG Izack

Hast Du mal entsprechend
Amazon Echo Remote Control beschrieben geschaut was Dir angezeigt wird wenn Du einen TuneIn Sender auf der Alexa Seite startest? An welcher Stelle scheitert es denn genau?

Ja habe ich… Ich konnte auch alle Parameter finden doch nichts passiert. Wenn ich über Amazon Alexa nun in TuneIN nach einem Sender suche und mir die Logs anschaue ist es dann die Csrf von TuneIn oder Amazon, genauso mit dem Cookies. Müssen bei den Device Typ, Customer ID die " mit gesetzte werden? Hab es so verstanden das man es nicht braucht… Komisch ist das gar nichts funktioniert, nicht mal Lautstärke oder so. Was mache ich bloß flasch?

Hab die Werte geändert, aber so hab ich es eingetragen, die werte habe ich über den Browser bekommen, wie in der Anleitung steht

Unbenannt.JPG

LG Izack

Ich hoffe das sind nicht die echten Werte, aber das hattest Du ja geschrieben. Zur Fehler suche hilft das :). Der Cookie beginnt mit x-amzn das vorher heist nur das das der Cookie ist, vielleicht ist das der Fehler.

Wie gesagt es ist doch etwas schwer da eine Validierung zu bauen weil ich gar nicht wüste wie ich die Eingabe prüfen sollte.

Amazon Musik muss ich selber noch probieren das dürfte zur Zeit sowieso noch nicht gehen da fehlt noch was an der Funktion. Aber TuneIn könntest Du dann Glück haben.

Hi Fonzo,

danke für deine Hilfe. Leider klappt es nicht. Ich habe nun schon ein paar mal das Modul gelöscht und neu angelegt und dabei ist mir aufgefallen, dass unter Befehle testet, die gleichen Befehle mehrfach drin sind. Ich denke jedes Mal wenn man das Modul neu hinzufügt gibt es ein Satz neue Befehle.

Es sind natürlich nicht die richtigen Daten die in meinem Post sind, aber ich komme nicht weiter.

Der Cookie gehört der in TuneIn oder in die Amazon spalte. Ende er mit CSRF - 16846846 usw. oder vor dem -H "Connection:

LG Izack

Zur Zeit geht erst TuneIn, Amazon muss ich noch ergänzen. Das habe ich wie gesagt noch nicht selber ausprobiert daher muss ich da noch was an der Funktion ergänzen, der Eintrag erfolgt also bei TuneIn Cookie und TuneIn CSRF.

Ich habe in der Anleitung im ersten Post jetzt noch mal Grafiken ergänzt damit dies nochmals anschaulicher wird. Der Cookie ist ziemlich lang wie Du auch siehst, wie der im Regelfall endet kann ich nicht sagen, im Bild siehst Du das dies in dem Fall eine Mischung aus Buchstaben und Zahlen ist.

Lieber Fonzo,

vielen vielen Dank für deine Hilfe. Es läuft jetzt… mein Problem, ich hatte mein Vriablenlimit erreicht. Das gemeine an der Sache, es war nicht so leicht zu entdecken. Eine Mail von Symcon wäre da sehr hilfreich gewesen… :banghead:

Fazit RSH funktioniert jetzt mit TuneIn, welches nicht so einfach aufgerufen werden konnte.

Besten Dank für alles.

LG Izack

Funktioniert soweit :slight_smile: Ist es so auch irgendwie möglich an Alexa den „Verbinde Lautsprecher Befehl“ zu senden?
Gruß
Flo

Funktioniert. Danke für das sinnvolle Modul.

Ich wüste jetzt zur Zeit nicht wie, aber vielleicht gibt es da ja doch noch ein Schlupfloch. Aber so lange man solche Sachen nicht von der Alexa Web Oberfläche aus starten kann sehe ich da schwarz. Und offiziell ohne den Umweg kannst Du ja sowieso gar nichts auf dem Echo triggern noch nicht mal Radio.

Hi,

prima Modul, vielen Dank. Ich nutze derzeit nur TuneIn.
Mit dem kopieren der Daten hat es etwas gedauert, aber jetzt geht es.

Einzige Auffälligkeit ist, das sich die Lautstärke verändern lässt, aber der Wert Variable in der Amazon_Echo_Remote Instanz sich nicht ändert.

Das schaue ich mir dann noch mal an.