[37_echodevice] Amazon Echo Modul (nicht Alexa)

Begonnen von michael.winkler, 12 Januar 2018, 18:20:12

Vorheriges Thema - Nächstes Thema

Grml

Zitat von: mthome am 16 November 2018, 17:41:31
Habe dann einfach das Coockie aus dem Browser kopiert und ins Cookie-Attribut eingefügt. Danach funktioniert der Connect wieder auch nachdem ich es wieder entfernt hatte.
Was genau müsste ich denn da kopieren? Ich habe "EditThisCookie" als Erweiterung in Chrome, habe mich auf alexa.amazon.de angemeldet und alle möglichen Werte durch, aber wirklich weiter komme ich nicht. Oft steht zwar dran connected aber im State dann entweder unauthorized oder error.
Das Modul habe ich in der aktuellen Version genommen. Mit der 0.0.39 hat es bis vor 2, 3 Wochen noch problemlos funktioniert.

MadMax-FHEM

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Grml

Danke für den Link.
Aber ich habe kein "queue-and-play" um dort das Cookie auszulesen. Alle möglichen anderen sind da ("device?[...]","state?[...]","player?[...]" etc.). Musik habe ich auch abgespielt (bzw. spielt noch). Hat sich da was geändert?

mthome

Hi,

Du kannst auch device nehmen. Wenn Du im Request Header (rechts) schaust, dann steht dort die Cookie Info.

An den Tabs oben musst Du Network auswählen.

VG,
mthome

steffen83

Wie rufst du denn über das Shell Script eine Routine auf? Das geht nicht.
Als Routine habe ich zb "Alexa, Test" und dann soll sie reden.
Aber mit ...sh. -d Küche -e automatic:'test'
Passiert leider nix
Zitat von: awel am 18 November 2018, 20:34:56
Na, wenn da noch jemand Interesse hat, klinke ich mich wieder ein.

Z.Zt. nutze ich tatsächlich das angesprochene Script von Alexander Noack - sogar in der schmalen Non-Json-Version.
Ein Beispiel:

  • In der Alexa-App gibt es eine Routine zur Abfrage der Außentemperatur eines Sensors
  • Die Routine schaltet einen Fhem-Dummy-Schalter über Ha-Bridge, der eine myutils-Funktion aufruft
    (Früher hatte ich einen SmartHome-Skill nach Justme1968, aber da tut sich nichts mehr, insbesondere ist offensichtlich die Entwicklung eines 'echten' Fhem-Skills, der auch mit DSL-Lite funktioniert, eingestellt. Zudem ist Ha-Bridge schneller.)
  • die Funktion ermittelt über das Script das gerade in dem Moment angesprochene Device und gibt die Temperatur über speak (auch mit dem schmalen Script möglich) auf diesem Gerät aus.
    Das funktioniert wirklich in Echtzeit! Egal an welchem Alexa-Device im Haus gefragt wird, die Antwort wird (bisher) immer am richtigen Gerät ausgegeben.
    Der Aufruf des Scripts erfolgt natürlich blockierend - die Zeitverzögerung fällt i.d.R. nicht auf
Theoretisch könnte man komplette programmierte "Unterhaltungen", die bei Bewegung mit durchs Haus wandern, erstellen - Alexa antwortet immer auf dem Gerät, mit dem gerade gesprochen wurde.

Alle Versuche in Fhem scheiterten bisher an mangelnden Perl-Kenntnissen meinerseits ;) und am Nicht-Abwarten von Fhem. Die Abfrage muss blockierend erfolgen, evtl. mit einer maximalen Wartezeit.
Wichtig ist auf jeden Fall, dass das letzte Alexa-Gerät manuell in genau dem Moment abgerufen (oder aktualisiert) wird, in dem man es braucht. Eine regelmäßige automatische Aktualisierung bringt nichts und ist bei wenigen Aufrufen pro Tag absolut unnötig.

Das Modul von Michael benötige ich z.Zt. noch um Textmeldungen über Ereignisse in Abwesenheit zu erstellen, die als textmessage abrufbar sind, wenn jemand nach Hause kommt. Sie werden bewusst nicht automatisch abgespielt - der grüne Ring von Alexa reicht. Leider sieht das Script (noch?!) keine derartigen Textmeldungen vor.

Egal, wie es sich entwickelt: Auf jeden Fall vielen Dank an Michael für die unermüdliche Weiterentwicklung und Anpassung!

Viele Grüße
Achim

Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

awel

Zitat von: steffen83 am 19 November 2018, 19:52:18
Wie rufst du denn über das Shell Script eine Routine auf? Das geht nicht.
Als Routine habe ich zb "Alexa, Test" und dann soll sie reden.
Aber mit ...sh. -d Küche -e automatic:'test'

1. wird das hier ziemlich OT und 2. ist mir nicht so ganz klar, was du meinst.

Den Parameter '-e automatic:<String>' kenne ich nicht. Meinst du vielleicht '-e automation:<Routine>'?
Wenn du eine Routine auf Alexa-Ebene hast, die Test heißt, damit das Script startest und mit dem Script dieselbe Routine Test wieder startest, dürfte das lustig im Kreis laufen, oder sehe ich das falsch?

Ich kann nicht anders beschreiben als ich es schon gemacht habe: Erstelle auf Alexa-Ebene eine Routine, die auf Fhem-Ebene einen Schalter schaltet. Dieser Schalter ruft eine Funktion in 99_myUtils.pm oder 99_myUtils_Alex.pm o.ä. auf.
Als Beispiel meine Funktion Alexa_answer, die einen übergebenen String immer auf dem zuletzt angesprochenen Device ausgibt.
sub Alexa_answer{
my $myAnswer=shift;
my $device="";
# `<Script>` Schrägstrich liefert einen Wert zurück
        my $la = `/opt/fhem/myFiles/alexa_remote/alexa_remote_control_plain.sh -lastalexa`;
# lastalex liefert Seriennumern der Geräte, speak benötigt Namen
        if ($la eq "G090L9xx1") {$device="Dot_Eingang"}
elsif ($la eq "G090L9xx2") {$device="Dot_Küche"}
elsif ($la eq "G090L9xx3") {$device="Dot_Arbeitszimmer"}
# ... weitere Geräte
elsif ($la eq "G090L9xx6") { $device="Dot_TreppeOG"};
if ($device eq "") {$device="Dot_Eingang";$myAnswer="Kein letztes Gerät gefunden.".$myAnswer};
system("/opt/fhem/myFiles/alexa_remote/alexa_remote_control_plain.sh -d $device -e speak:'$myAnswer' &");
}


Vlt. solltest du für die Nutzung des Scripts einen eigenen Thread aufmachen  ;)

VG Achim

michael.winkler

Was ist der Grund hier diese Skript zu verwenden? Das Skript macht im Grunde dasselbe. Bezüglich Cookie verwendet es auch dieselbe Technik. Über das Modul können auch erstellte Routinen abgespielt werden.

Es gibt zwar noch kein Reading in welchem steht welcher ECHO als letztes etwas empfangen hat, aber es ist trotzdem schon möglcih auf einzelne Echos zu reagieren. Ein einfacher Notify würde hier schon reichen.

Hier mal ein Beispielt


defmod michael.echo.voice notify ECHO_G090L910732605D0:voice:.* {\
if ($EVENT =~ m/schalte fernseher/ && ($EVENT =~ m/ein/ || $EVENT =~ m/an/)) {\
if (ReadingsVal("michael.fernseher.power", "state", "0") eq "off") {fhem "set michael.fernseher.esp8266 irsend samsung E0E040BF 32";;}\
}\
if ($EVENT =~ m/schalte fernseher/ && $EVENT =~ m/aus/) {\
if (ReadingsVal("michael.fernseher.power", "state", "0") eq "on") {fhem "set michael.fernseher.esp8266 irsend samsung E0E040BF 32";;}\
}\
if ($EVENT =~ m/schalte licht/ && ($EVENT =~ m/ein/ || $EVENT =~ m/an/)) {\
fhem "set HMSWITCH001_Sw on";;\
}\
if ($EVENT =~ m/schalte licht/ && $EVENT =~ m/aus/) {\
fhem "set HMSWITCH001_Sw off";;\
}\
if ($EVENT =~ m/gute nacht/) {\
fhem "set HMSWITCH001_Sw off";;\
fhem "set ECHO_G090L910732605D0 pause";;\
if (ReadingsVal("michael.fernseher.power", "state", "0") eq "on") {fhem "set michael.fernseher.esp8266 irsend samsung E0E040BF 32";;}\
}\
}

steffen83

#1492
Moin,
ich hatte es mit den Routinen nicht hinbekommen und bin deshalb zum script gewechselt. Michael, du hast recht es ist soweit alles abbildbar.
Auch mit den Routinen klappt jetzt (halb). Ich musste da nur sagen, dass sie über ein gewisses Gerät abgespielt werden sollen.

Wie geht ihr denn mit der Fehlermeldung um:
Wenn ich sage (mit deinem notify von eben) Licht an. Kommt aus der Alexa der Hinweis, dass er Licht nicht gefunden hat. Dann wartet er einen Moment, (ca. 10 Sekunden) dann schaltet er das licht an. Zudem, wenn ich eine Sprachausgabe tätige geht es laut, dann wieder leiser.

Und gibt es mittlerweile eine Möglichkeit, beim Echo Show das Display per Fhem, Script auszuschalten?
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

awel

#1493
Zitat von: michael.winkler am 20 November 2018, 08:27:53
Was ist der Grund hier diese Skript zu verwenden? Das Skript macht im Grunde dasselbe.

"Im Grunde" schon, im Detail nicht.
Dein Modul, Michael, aktualisiert die Werte in konstanten zeitlich einstellbaren Abständen - das Script macht das nicht, sondern man holt selbst aktiv die dann absolut aktuellen Werte, wenn man sie braucht.

Interessant ist das für mich lediglich bei dem Wert von lastalexa, dem zuletzt angesprochenen Device, wenn Alexa mit einer Sprachausgabe antworten soll.
Amazon aktualisiert nahezu in Echtzeit den Verlauf unter  https://alexa.amazon.de/api/activities?startTime=&size=50&offset=-1&_=<Zeitstempel> und ermöglicht damit den Zugriff auf die ID des gerade angesprochenen Gerätes.
Wenn man z.b. "Alexa, wie warm ist es?" - "Die Außentemperatur beträgt 2 Grad" in einer natürlichen zeitlichen Abfolge erreichen will, muss man in fhem mit Ermitteln des Temperaturwertes auch das gerade angesprochene Device haben, um darauf antworten zu können, falls man mehrere Devices hat.

Und genau das funktioniert nur mit der aktiven sofortigen Abfrage mit dem Script. Man kann zwar im Modul das Aktualisierungsintervall klein wählen, produziert damit aber jede Menge unnötigen Traffic für vlt. eine Frage in zwei Tagen.
In Deinem Beispiel reagiert Alexa mit einem Schaltbefehl - das ist aber vom Zeitempfinden etwas ganz anderes als eine Sprachantwort.

Ich denke, dass man die Intervalle im Modul sogar relativ hoch einstellen könnte, wenn es möglich wäre, aktiv die momentanen Werte abzurufen bzw. die Readings aktiv bei Bedarf zu aktualisieren. Das müsste allerdings blockierend erfolgen, damit fhem solange wartet.
Prozeduren in fhem starte ich i.d.R. nicht über ein notify des echo-Devices sondern über einen Dummy-Schalter mit HA-Bridge; ohne Schalter o.ä. weiß Alexa ohnehin nicht, was sie mit dem Befehl anfangen soll und antwortet entsprechend. Eine manuelle Abfrage würde da fast vollkommen ausreichen; die einstellbaren automatischen Intervalle sind dagegen gut für die Auswertung mit notify.

VG Achim

sash.sc


Hallo zusammen.

Ich muss mal hier rein grätschen.
Ich habe mich gewundert, dass alexa beim abspielen von Musik über Spotify, nach ca. 1 Minute das Lied passiert. Ohne Anweisung. Habe dann festgestellt, anhand des Event Monitor, das es an diesem Modul liegt. Jedesmal wenn die Abfrage der Geräte kommt, wird der Steam gestoppt bzw auf Pause gelegt.

Habe dann mal die komplette Definition gelöscht, und es funktionierte wurde ohne probleme bzw Unterbrechungen.

Hatte die version 0.0. 48e drauf gehabt.

Ist diesen behoben?

Hatte jemand noch eine Idee, wie ich die Temperatur von einem LaCrosse Sensor abfragen kann, oder eine Anleitung dafür?

Gruß und danke
Sascha



Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Byte09

Zitat von: sash.sc am 20 November 2018, 15:52:05
Hallo zusammen.

Ich muss mal hier rein grätschen.
Ich habe mich gewundert, dass alexa beim abspielen von Musik über Spotify, nach ca. 1 Minute das Lied passiert. Ohne Anweisung. Habe dann festgestellt, anhand des Event Monitor, das es an diesem Modul liegt. Jedesmal wenn die Abfrage der Geräte kommt, wird der Steam gestoppt bzw auf Pause gelegt.

Habe dann mal die komplette Definition gelöscht, und es funktionierte wurde ohne probleme bzw Unterbrechungen.

Hatte die version 0.0. 48e drauf gehabt.

Ist diesen behoben?

Hatte jemand noch eine Idee, wie ich die Temperatur von einem LaCrosse Sensor abfragen kann, oder eine Anleitung dafür?

Gruß und danke
Sascha



Gesendet von meinem E6653 mit Tapatalk

ist ja interessant . ich habe dieses phänomen auch , tritt aber nur bei einem echo der ersten generation - und auch nur bei spotify - bei mir auf. auf die idee, hier einen zusammenhang zu suchen bich in bisher nicht gekommen und werde das bei mir mal testen .

gruss Byte09

Byte09

#1496
habe gerade mal versucht den abbruch von spotify bewusst durch ein -get settings- herbeizuführen . Davon ist der Echo aber unbeeindruckt und spielt weiter . naja , werde das mal beobachten.

habe aber gerade etwas anderes gesehen: ein Echo legt seit einiger zeit 100erte von readings an ( siehe anhang ) - und es sind wirklich hunderte  :-\ . lässt sich das irgendwie ändern ?

gruss Byte09

edit : gerade genau geschaut , es sind 1416 readings gewesen !  ???

michael.winkler

Zitat von: awel am 20 November 2018, 13:01:29
"Im Grunde" schon, im Detail nicht.
Dein Modul, Michael, aktualisiert die Werte in konstanten zeitlich einstellbaren Abständen - das Script macht das nicht, sondern man holt selbst aktiv die dann absolut aktuellen Werte, wenn man sie braucht.
Das stimmt so nicht ganz. Über ein get settings kann es jederzeit manuell angestartet werden. Für mich stellt sich nur die Frage wann diesen manuell abholen dann zutrifft? Wer triggert dieses manuell?

Explizit das reading "voice" kann über einen eigenen Intervall gesteuert werden.

rolf

Hallo,
ich suche nach der Möglichkeit einen direkten Befehl per FHEM an meine Echo-Devices zu senden (z.B. zeige mir Kamera xxxx) und bin dabei auf set routine_play gestossen.
Ich bekomme zwar alle vorhandenen Routinen angezeigt - aber beim eigentlichen Befehl passiert leider nichts - mit Verbose 3 auf das Echo-Device bekomme ich
folgende Meldungen:


2018.11.20 19:51:59 4: [ECHO_G000JN0573720799] [echodevice_SendCommand] [routine_play] START
2018.11.20 19:51:59 4: [ECHO_G000JN0573720799] [echodevice_SendCommand] [routine_play] PushToCmdQueue SendURL =https://layla.amazon.de/api/behaviors/preview
2018.11.20 19:51:59 4: [ECHO_G000JN0573720799] [echodevice_SendCommand] [routine_play] PushToCmdQueue SendData={"behaviorId":"amzn1.alexa.automation.164a2b43-b9fd-445d-898a-22f90402ea12","sequenceJson":"{\"@type\":\"com.amazon.alexa.behaviors.model.Sequence\",\"startNode\":{\"@type\":\"com.amazon.alexa.behaviors.model.SerialNode\",\"nodesToExecute\":[{\"@type\":\"com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode\",\"type\":\"\",\"operationPayload\":{}}]}}","status":"ENABLED"}
2018.11.20 19:51:59 4: [ECHO_G000JN0573720799] [echodevice_HandleCmdQueue] [routine_play] send command=https://layla.amazon.de/api/behaviors/preview
2018.11.20 19:52:00 4: [ECHO_G000JN0573720799] [echodevice_Parse] [routine_play]
2018.11.20 19:52:00 5: [ECHO_G000JN0573720799] [echodevice_Parse] [routine_play] DATA Dumper=$VAR1 = '{"message":null}';

2018.11.20 19:52:00 4: [ECHO_G000JN0573720799] [echodevice_Parse] [routine_play] json for unknown message
$VAR1 = {
          'message' => undef
        };



Hat jemand eine Idee ?
Apropo - ich habe die aktuelle Version 0.49 im Einsatz - alle anderen Dinge wie speak, volume etc. funktionieren tadellos und seit Tagen super stabil...
System 1: Intel NUC (ubuntu 18.04.1 lts) mit diversen Homematic-Komponenten + CUNO mit Uniroll/Hoermann + RFXTRX mit TFA + EnOcean mit Eltako + Alexa + Harmony + per HMCCU gekoppelter PI3-Raspberrymatic mit HM-IP-Komponenten
System 2: PI2-Raspberry (Jessie) + Signalduino mit Somfy/RTS

steffen83

Hallo kann dir da nicht helfen. Bin aber auch stark daran interessiert. Meine aber dass es noch nicht geht auch nicht über Routine..

Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM