Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuer

Beitrag von Fonzo » 28.05.2018, 20:16

Sweatchuck hat geschrieben:

Code: Alles auswählen

var url = "https://alexa.amazon.de/api/media/state?deviceSerialNumber=<DEVIVCE_SERIAL>&deviceType=<DEVICETYPE>";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q  --auth-no-challenge -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
Ich denke das Thema übersteigt meine Können :roll:
Ich kenne mich selber mit der HomematicSkript Sprache null aus und werde mich damit auch nicht mehr beschäftigen :wink: .
Auf alle Fälle ist offensichtlich das die passenden Variablen an das Skript übergeben müssen dann sollte das auch klappen.
<DEVICE_SERIAL> und <DEVICETYPE> sind in dem Fall nur Platzhalter für die Variablen, d.h. Du musst dort entweder die echte Deviceserialnummer und Devicetype eintragen oder eben Variablen die Du dann an das Skript übergibst.

Sieht also in echt ungefähr so aus:

Code: Alles auswählen

https://layla.amazon.de/api/media/state?deviceSerialNumber=G000ABC0272740DB4&deviceType=A1BAOAVLQ4L3N3&queueId=0e7d86f5-d5a4-4a3a-933e-5910c15d9d4f&shuffling=false&firstIndex=1&lastIndex=1&screenWidth=1920&_=1495289082979
Was passiert denn wenn Du die ermittelte URL in einen Browser eingibst, bekommst Du dann eine Antwort?

Benutzeravatar
joni-blue
Beiträge: 1171
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuer

Beitrag von joni-blue » 23.06.2018, 13:28

hallo zusammen,

vielleicht hat ja jemand ein addon programmiert, das man sich nur noch auf der CCU installieren brauch?

gruß aus hannover
Reboot tut gut ! ! !

l1ss1
Beiträge: 79
Registriert: 23.04.2014, 21:36
System: CCU
Hat sich bedankt: 3 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von l1ss1 » 03.10.2018, 21:58

Liebe Themenverfolger, gibt es in diesem Thread irgendwo ein Skript damit ich eine Sounddatei, die bei Amazon Music von mir abgelegt wurde über einen oder mehrere Echo-Lautsprecher abgespielt werden kann?

Hintergrund ist, dass ich die Außenhaut mittlels Bewegungsmeldern überwache. Sollte bei Abwesenheit dort Bewegung sein schließen automatisch alle Rollläden und die Außenbeleuchtung wird eingeschaltet. Nun war die Idee zusätzlich noch Krach von innen zu machen ohne noch eine extra Sirene anschaffen zu müssen.
Aktuell 40 HomeMatic-Komponenten im Einsatz (16 HMwired-Aktoren).
ioBroker auf Raspberry Pi 3

Fonzo
Beiträge: 6687
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 478 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von Fonzo » 03.10.2018, 22:11

l1ss1 hat geschrieben:
03.10.2018, 21:58
gibt es in diesem Thread irgendwo ein Skript damit ich eine Sounddatei, die bei Amazon Music von mir abgelegt wurde über einen oder mehrere Echo-Lautsprecher abgespielt werden kann?
Ich hatte das mal in IP-Symcon genutzt, ich habe die Funktion aber wieder rausgenommen, da es ja nicht mehr möglich ist eigene Sound Daten auf Amazon Musik hochzuladen in sofern inzwischen obsolet. Falls Du da noch Sound Dateien liegen haben solltest die für Dich verfügbar sind kannst Du diese aufrufen wenn Du die SeedID kennst. Hier ist der Code in PHP, den müstest Du umschreiben wenn Du das direkt auf einer CCU nutzten willst.

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von Xel66 » 20.10.2018, 16:19

Es geht hier zwar um die Fernsteuerung von Alexa, aber ich habe mir eine Lösung für die TextToSpeech-Ausgabe über ein Echo für meine Raspberrymatic gebaut. Mit dem Script kann man auch Dinge fernsteuern. Aber das benötige ich nicht. Ich stelle mal hier meine TTS-Lösung vor auf deren Basis auch eigene Erweiterungen/Fernsteuerungen möglich sind. Es läuft bei mir seit zwei Tagen.

Von Lötzimmer gibt es ein Shell-Script, welches man auch auf auf einer Raspberrymatic laufen lassen kann. Das Script ermöglicht von Haus aus diverse Fernsteuerungen. Die Möglichkeiten und die Syntax kann man der Lötzimmer-Seite entnehmen. Für die Installation lädt man sich die Version ohne jq runter. Dann öffnet man sie mit einem Editor und hinterlegt die Mailadresse und das Passwort des Amazon-Accounts in dem Script. Das ist auch der größte Pferdefuß an dieser Lösung, denn das Script muss mit den Zugangsdaten im Klartext auf die CCU. Darum darf kein ungeschützter Zugang aus dem Internet auf die CCU/RM möglich sein! Für das Script habe ich per ssh ein eigenes Verzeichnis mit dem Namen "echo" unter /usr/local/addons/ erstellt und in diese Verzeichnis das Script hinterlegt.

Ich persönlich habe dieses mit vi gemacht. Andere User bevorzugen dort SFTP oder ähnliche Dinge. Gerade wenn man aus der Windows-Welt kommt, hat ein solches Vorgehen mit dem Kopieren ganzer Dateien manchmal Nachteile, wenn diese Dateien mit einem Windows-Tool bearbeitet hat. Darum ist für mich vi das Mittel der Wahl. Nach dem Abspeichern habe ich das Script noch ausführbar gemacht (chmod +x alexa_remote_control_plain.sh) Anschließend habe ich per SSH mit ./alexa_remote_control_plain.sh -a eine Abfrage der verfügbaren Geräte gemacht. Hierbei werden gleich die notwendigen Cookies unter /tmp abgelegt und man kann gleich testen, ob der Zugriff über diesen Weg funktioniert. Für Probleme beim Zugang kann ich allerdings keinen Support geben. Bei mir hat es out of the box funktioniert.

Im Anschluss daran habe ich auf der Raspberrymatic via GUI eine Systemvariable vom Typ Text/String erstellt ("EchoText"). Diese dient zur Übergabe des anzusagenden Textes an das Scipt. Dann benötigt man noch ein Programm mit einem Homematic-Script, welches getriggert durch die Aktualisierung der "EchoText"-Variable diese ausliest und an das Script übergibt.
Echo-Sprachausgabe.jpg
Ich triggere auf Aktualisierung der Systemvariable mit dem Wort "leer". Also ein Wort, welches ich allein eher nicht zur Ansage bringen werde. Das Script ist aber im DANN und im SONST hinterlegt (letzeres erledigt die Ansage). Das DANN benutzt man nur bei manuellem Starten des Programms oder zur wiederholten Ansage. Das Homematicscript ersetzt für die Übergabe erst alle Leerzeichen durch Unterstriche und danach den Punkt zwischen/nach Ziffern. Dieses ist notwendig, da sonst Temperaturansagen nicht richtig laufen. Anstatt 11.7 (Elf Punkt Sieben) oder besser wie es Android macht Elf Komma Sieben wird nämlich durch Alexa 117 (Einhundersiebzehn) Grad angesagt. Hier noch das Script des Programms:

Code: Alles auswählen

! Alexa-Sprachausgabe ########################################
var AText = dom.GetObject('EchoText').Variable();
AText = AText.Replace(' ', '_');
AText = AText.Replace('1.', '1,'); 
AText = AText.Replace('2.', '2,'); 
AText = AText.Replace('3.', '3,'); 
AText = AText.Replace('4.', '4,'); 
AText = AText.Replace('5.', '5,'); 
AText = AText.Replace('6.', '6,'); 
AText = AText.Replace('7.', '7,'); 
AText = AText.Replace('8.', '8,');
AText = AText.Replace('9.', '9,');
AText = AText.Replace('0.', '0,'); 
AText = "sh /usr/local/addons/echo/alexa_remote_control_plain.sh -d Wohnzimmer -e speak:'" # AText # "'";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(AText);
Das Script ist sicher nicht schön, funktioniert aber. Ein generelles Ersetzen der Punkte durch Kommata empfiehlt sich eher nicht, da es zu merkwürdigen Betonungen bei der Sprachausgabe führt.

Wie kann man nun anders als diese Sprachausgabe eigene Steuerungen per Homematic auslösen? Eigentlich braucht man nur die Zeile AText = "sh /usr/local/addons/echo/alexa_remote_control_plain.sh -d Wohnzimmer -e speak:'" # AText # "'"; an die eigenen Steuerungsbedürfnisse anpassen. Zum Beispiel für das Wetter AText = "sh /usr/local/addons/echo/alexa_remote_control_plain.sh -e weather"; Dann diesen String zusammen mit der letzten obigen Scriptzeile in ein neues Programm und Script und getriggert durch irgendeine Homematic-Aktion wird die Steuerung ausgelöst.

Keine Ahnung, ob das auch so auf einer CCU lauffähig ist. Ich war überrascht, dass das so problemlos auf meiner Raspberrymatic funktionierte.

EDIT:
Ergänzung:
Bei einem Reboot gehen ja die unter /tmp abgelegten Cookies verloren. Ein Neuanlegen ist je nach Gusto vom Amazon etwas tricky (Stichwort: Captcha). Damit diese Funktion nicht mehr als notwendig zum Pflegefall wird, habe mir hierfür ein Programm angelegt, welches täglich die vorhandenen Cookies aus dem /tmp-Verzeichnis auf ein Verzeichnis eines angesteckten USB-Sticks kopiert, bzw. beim Reboot der Raspberrymatic diese von dort wieder in das /tmp-Verzeichnis schreibt. Hierbei wird auch auf das Vorhandensein Rücksicht genommen (cp -u) und nicht ggf. vorhandene neuere Dateien überschrieben.
Backup-Cookie.jpg
Der Inhalt des ersten "Scripts" zum täglichen Sichern der Dateien (alle Dateien mit Namen .alexa) lautet

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("cp -u /tmp/.alexa* /media/usb0/backup/echo/");
Für das Zurückschreiben nach einem Reboot (ich nutze hierfür die umbenannte originale Anwesenheitsvariable mit ihrem speziellen Boot-Verhalten) lautet die Zeile:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("cp -u /media/usb0/backup/echo/.alexa* /tmp/");
Wie man sehen kann, ist für diese Befehlszeile ein installiertes Addon CUxD und ein angelegtes SystemExec-Geräte (2801001) notwendig. So kann ich auch mal ggf. die Rasperrymatic durchbooten oder ein Addon updaten, ohne dass es gleich notwendig ist, die Cookies neu anzulegen. Man muss sich ja nicht mehr Arbeit machen, als unbedingt notwendig ist. hth

Gruß Xel66
Zuletzt geändert von Xel66 am 15.12.2018, 02:22, insgesamt 1-mal geändert.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Homematic-wusel
Beiträge: 209
Registriert: 26.10.2012, 21:21
Wohnort: Weil der Stadt (im Ländle)
Danksagung erhalten: 2 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von Homematic-wusel » 24.10.2018, 20:12

Ich habe das Script von Lötzimmer jetzt seit einigen Wochen im Einsatz, bis vor ein paar Tagen alles perfekt. Seit kurzem geht nun nichts mehr, die Echos regieren nicht mehr auf die Aufrufe. Geht das jetzt nur mir so, oder hat hier Amazon etwas gedreht ? :?:

Das ganze läuft (oder besser lief ?) auf einer RaspberryMatic, aktuelle Version.

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von Xel66 » 24.10.2018, 23:31

Vielleicht muss das Cookie mal erneuert werden. Ich würde die entsprechenden Dateien aus /tmp verschieben (ggf. angelegtes Unterverzeichnis) und dann das Script mit -a aufrufen.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

terny
Beiträge: 76
Registriert: 23.10.2015, 09:08
Hat sich bedankt: 6 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von terny » 08.11.2018, 21:37

Ich habe aktuell auch das Problem, dass das Skript nicht mehr funktioniert.
Habe schon alles mit Änderung UserAgent und Language versucht. Bisher ohne Erfolg.
Auch nach mehrmaligen anmelden mit Captcha klappt der Login per Skript leider nicht...

Es kommt immer Folgendes zurück:

/usr/local/addons/user$ ./alexa_remote_control.sh -a
cookie does not exist. logging in ...
ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
Try logging in to https://alexa.amazon.de with your browser. In your browser
make sure to have all Amazon related cookies deleted and Javascript disabled!

(For more information have a look at /usr/local/addons/user/.alexa.login)

Geht bei euch noch alles oder hat Amazon was gedreht?

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von Xel66 » 12.11.2018, 19:28

Ich tippe, dass da was gedreht wurde. Wie schon in der von Dir geposteten Fehlermeldung wirst Du ein Captcha zu lösen bekommen haben. Folglich kommst Du nicht rein und es wird kein Cookie gesetzt. Bleibt nur der manuelle Weg.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

terny
Beiträge: 76
Registriert: 23.10.2015, 09:08
Hat sich bedankt: 6 Mal

Re: Brauche Hilfe für CURL um Amazon Echo/Alexa fernzusteuern

Beitrag von terny » 29.11.2018, 12:03

Hallo zusammen,

ich wollte mich mal wieder melden und Rückmeldung zum Lötzimmer Script in Verbindung mit der CCU2 von Homematic geben.
Das Script ohne jq läuft einwandfrei auf der CCU mit CUxD. Wenn es bei der Anmeldung mal nicht klappen sollte, hat bei mir ein mehrfaches Einloggen ohne Java und das lösen des Captcha geholfen. Das habe ich dann auf der alexa.amazon.com und auch auf der alexa.amazon.de durchgeführt. Teilweise musste ich jedoch einen Tag nach dem Captcha warten, bis der Login über das Skript wieder ging und ein cookie auf der CCU abgelegt wurde. Zum Glück geht der Login dann aber über Wochen ohne Probleme.

Also Entwarnung: Das Skript funktioniert weiterhin einwandfrei auf der CCU2, wenn der Login erstmal klappt.

Auch die Sprachausgabe über TTS funktioniert mit der CCU2 problemlos über der CUxD Aufruf ohne weitere Zusatzaufwände:
...alexa_remote_control.sh -d Arbeitszimmer -e speak:'Guten_Appetit!'
Die Sprachausgabe ist sehr gut/flüssig und braucht bei mir keiner weiteren Veränderung.
Leider lassen sich damit jedoch nur einzelne Geräte zum Sprechen bringen und keine Gruppen oder Multiroomverknüpfungen.
Hier sende ich bei Bedarf in mehreren Räumen den Befehl zeitgleich an die jeweiligen Echos, was jedoch zu keiner synchronen Ausgabe führt.
Damit kann ich aber leben.

Danke nochmals an die fleißigen Entwickler des Scripts!!!

Antworten

Zurück zu „CUxD“