[37_echodevice] Amazon Echo Modul (nicht Alexa)

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

Vorheriges Thema - Nächstes Thema

KyleK

@michael.winkler vielleicht noch ein Hinweis/eine Frage:

Ich habe mich beim Experimentieren gewundert warum keine Logausgaben von HttpUtils kommen.
Ich wusste dass von dort auf Level 5 eigentlich alles inklusive request und Response Header ausgegeben wird.

Ist das mit Absicht so?

Ich bin im Forum auf diesen Post gestoßen und hab das im Modul eingebaut:
https://forum.fhem.de/index.php?topic=110192.msg1042256#msg1042256

Damit kamen auch Logs von HttpUtils, und ich konnte die Fehler oben finden.
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

bloodybeginner

@KyleK
super, vielen lieben Dank für die Arbeit die du da rein gesteckt hast

Felix_86

#5867
Hallo,

haben die seit Anfang November besprochenen Probleme mit der teilweise / baldigen Abschaltung seitens Amazon zu tun? -> https://forum.fhem.de/index.php?topic=135472.0

Ich habe seit der Nutzung des Moduls immer mal wieder Probleme, aktuell läuft aber alles (noch). Ich kann meine Echos über FHEM steuern und sprechen lassen, wie auch per Spracheingabe über die Echos Kommandos in FHEM ausführen. Nachdem ich hier die letzten Einträge gelesen habe warte ich nun eigentlich nur darauf dass es bei mir auch knallt....

Genutzt wird aktuell:
TYPE echodevice
model ACCOUNT
COOKIE_TYPE NPM_Login
version 0.2.19
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT, SD_GT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS, Nina

HansDampfHH

Moin. Ich bin soeben mit meinem FHEM in einen Docker-Container umgezogen und habe leider bei der Einrichtung vom echodevice auch folgenden Fehler:
[AmazonEcho] [echodevice_setState] to connected but loginerror

Die Meldung taucht hier im Thread öfter auf, eine Lösung habe ich da für mich aber nicht gefunden.

Was habe ich gemacht:
  • npm_proxy_ip gesetzt
  • npm_proxy_listen_ip gesetzt
  • NPM_install -> fehlerfrei
  • NPM_login new -> Login über die Amazon Webseite Port 3002 -> fehlerfrei

Daraufhin entsprechende Fehlermeldungen:
[AmazonEcho] [echodevice_LostConnect] JSON error = no content / set loginerror to 1
[AmazonEcho] [echodevice_setState] to connected but loginerror

Ich habe dann ...
  • den cache-Ordner gelöscht
  • sudo npm install --prefix /opt/fhem/cache/alexa-cookie alexa-cookie2
  • sudo chown -R fhem:  /opt/fhem/cache/alexa-cookie
  • FHEM neu gestartet
  • und noch einmal NPM_login laufen lassen

Der Cookie wird scheinbar auch in die 289result.json geschrieben.

{"loginCookie":"session-id=135-64 ..."}

Was kann ich noch tun?

/usr/bin/npm -v -> 8.19.4
/usr/bin/node -v -> v16.20.2

Hier ein List vom echodevice:
Internals:
   DEF        xxx@xxx.xx xxx
   FUUID      62ad6c34-f33f-1971-6b51-9a96c0b419e1977d
   FVERSION   37_echodevice.pm:v5.0.0-s28113/2023-10-31
   IODev     
   LOGINMODE  NPM
   NAME       AmazonEcho
   NR         289
   NTFY_ORDER 50-AmazonEcho
   STATE      connected
   TYPE       echodevice
   eventCount 150
   model      ACCOUNT
   OLDREADINGS:
   READINGS:
     2023-11-07 11:27:29   BrowserLanguage de,de-DE
     2023-11-07 11:27:29   BrowserUserAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0
     2023-11-07 10:13:15   COOKIE_MODE     NPM
     2023-11-07 10:13:28   COOKIE_TYPE     READING_NPM
     2023-11-07 11:27:29   alarm_count     0
     2023-11-07 09:54:06   amazon_refreshtoken vorhanden
     2023-11-07 10:13:28   autocreate_devices stop
     2023-11-07 11:27:29   musicalarm_count 0
     2023-11-07 11:27:29   parse_error     OK
     2023-11-07 11:27:29   reminder_count  0
     2023-11-07 11:27:29   state           connected
     2023-11-07 11:27:29   timer_count     0
     2023-11-07 11:27:29   timer_id        -
     2023-11-07 11:27:29   timer_remainingtime 0
     2023-11-07 10:13:28   version         0.2.25
   helper:
     CMD_QUEUE 
     CMD_QUEUE_NUMBER 2904
     DEVICETYPE A1RABVCI4QCIKC
     RUNLOGIN   0
     RUNNING_REQUEST 0
     SERVER     layla.amazon.de
     TWOFA     
     VERSION    9295801732
     echodevice_refreshvoice 0
     echodevice_refreshvoice_lastdate 1699348408.99071
Attributes:
   alias      Amazon Echo
   browser_language de,de-DE
   devStateIcon connected:general_ok@green .*:general_ok@orange
   event-on-change-reading state
   group      Amazon
   icon       echo
   npm_bin_node /usr/bin/node
   npm_proxy_ip 192.168.148.121
   npm_proxy_listen_ip 172.28.0.3
   room       System
   server     layla.amazon.de
FHEM Docker, CUL868, Zigbee, CCU2, Jeelink

mthome

@HansDampfHH, mach die Änderungen im Modul wie in Post #5862 von KyleK beschrieben (ggf. stehen die referenzierte Zeilen ein paar Zeilen drunter)

Seit ich die Änderung eingefügt habe läuft es ohne Probleme.

JoWiemann

Zitat von: KyleK am 04 November 2023, 23:04:40Ich glaube ich habe das Problem gefunden.

Im Modul sind 2 Fehler, die die korrekte Kommunikation mit der Amazon-API verhindern.

Fehler 1: Für den Step "cookielogin6" wird kein User-Agent gesetzt. Damit ist der User-Agent per default "fhem", und den akzeptiert Amazon offenbar nicht (mehr?).
Fehler 2: Der reguläre Ausdruck für "localCookie" ist zu "großzügig", er erfasst mehr Daten als er sollte. Damit landet im "Cookie: " Header mehr Text als soll, auch das mögen die Amazon Server nicht.

Hier ein Diff des Codes:
--- 37_echodevice.pm.old        2023-11-04 22:51:42.046808098 +0100
+++ 37_echodevice.pm    2023-11-04 22:54:37.235628434 +0100
@@ -2487,7 +2487,7 @@

        if ($type eq "cookielogin6" ) {
                $param->{url}        = "https://".$hash->{helper}{SERVER}."/api/bootstrap";
-              $param->{header}      = 'Cookie: '.$hash->{helper}{".COOKIE"};
+              $param->{header}      = "User-Agent: ".$UserAgent."\r\nCookie: ".$hash->{helper}{'.COOKIE'};
                $param->{callback}    = \&echodevice_ParseAuth;
                $param->{noshutdown}  = 1;
                $param->{keepalive}  = 1;
@@ -4268,7 +4268,7 @@
                if (index($hash->{helper}{".COOKIE"}, "{") != -1) {
                        # NPM Login erkannt
                        readingsSingleUpdate ($hash, "COOKIE_TYPE", "READING_NPM" ,0);
-                      $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*)","?/;
+                      $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*?)","?/;
                        $hash->{helper}{".COOKIE"} = "session-id=" . $1;
                        $hash->{helper}{".COOKIE"} =~ /csrf=([-\w]+)[;\s]?(.*)?$/ if(defined($hash->{helper}{".COOKIE"}));
                        $hash->{helper}{".CSRF"}  = $1  if(defined($hash->{helper}{".COOKIE"}));
@@ -5240,7 +5240,7 @@
                                readingsSingleUpdate( $hash, "COOKIE_TYPE", "NPM_Login",1 );

                                $hash->{helper}{".COOKIE"} = $CookieResult;
-                              $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*)","?/;
+                              $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*?)","?/;
                                $hash->{helper}{".COOKIE"} = "session-id=" . $1;
                                $hash->{helper}{".COOKIE"} =~ /csrf=([-\w]+)[;\s]?(.*)?$/ if(defined($hash->{helper}{".COOKIE"}));
                                $hash->{helper}{".CSRF"}  = $1  if(defined($hash->{helper}{".COOKIE"}));

Damit funktioniert bei mir die Sprachausgabe wieder.

Das voice-Reading wird auch aktualisiert (wenn auch mit starker Verzögerung).

Hallo,

ich bin jetzt etwas verwirrt. In meiner Version vom:
# $Id: 37_echodevice.pm 28113 2023-10-31 15:08:20Z michael.winkler $
#
##############################################
#
# 2023.10.31 v0.2.25

sind die von Dir korrigierten Code-Zeilen so nicht zu finden. Da steht genau das, was Du geändert hast.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

HansDampfHH

@mthome
Sauber, hat auf Anhieb funktioniert.
Hat sich wohl was geändert, Zeilennummern passten nicht mehr ganz.
Wird das integriert?
FHEM Docker, CUL868, Zigbee, CCU2, Jeelink

KyleK

Zitat von: JoWiemann am 07 November 2023, 11:46:10
Zitat von: KyleK am 04 November 2023, 23:04:40Ich glaube ich habe das Problem gefunden.

Im Modul sind 2 Fehler, die die korrekte Kommunikation mit der Amazon-API verhindern.

Fehler 1: Für den Step "cookielogin6" wird kein User-Agent gesetzt. Damit ist der User-Agent per default "fhem", und den akzeptiert Amazon offenbar nicht (mehr?).
Fehler 2: Der reguläre Ausdruck für "localCookie" ist zu "großzügig", er erfasst mehr Daten als er sollte. Damit landet im "Cookie: " Header mehr Text als soll, auch das mögen die Amazon Server nicht.

Hier ein Diff des Codes:
--- 37_echodevice.pm.old        2023-11-04 22:51:42.046808098 +0100
+++ 37_echodevice.pm    2023-11-04 22:54:37.235628434 +0100
@@ -2487,7 +2487,7 @@

        if ($type eq "cookielogin6" ) {
                $param->{url}        = "https://".$hash->{helper}{SERVER}."/api/bootstrap";
-              $param->{header}      = 'Cookie: '.$hash->{helper}{".COOKIE"};
+              $param->{header}      = "User-Agent: ".$UserAgent."\r\nCookie: ".$hash->{helper}{'.COOKIE'};
                $param->{callback}    = \&echodevice_ParseAuth;
                $param->{noshutdown}  = 1;
                $param->{keepalive}  = 1;
@@ -4268,7 +4268,7 @@
                if (index($hash->{helper}{".COOKIE"}, "{") != -1) {
                        # NPM Login erkannt
                        readingsSingleUpdate ($hash, "COOKIE_TYPE", "READING_NPM" ,0);
-                      $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*)","?/;
+                      $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*?)","?/;
                        $hash->{helper}{".COOKIE"} = "session-id=" . $1;
                        $hash->{helper}{".COOKIE"} =~ /csrf=([-\w]+)[;\s]?(.*)?$/ if(defined($hash->{helper}{".COOKIE"}));
                        $hash->{helper}{".CSRF"}  = $1  if(defined($hash->{helper}{".COOKIE"}));
@@ -5240,7 +5240,7 @@
                                readingsSingleUpdate( $hash, "COOKIE_TYPE", "NPM_Login",1 );

                                $hash->{helper}{".COOKIE"} = $CookieResult;
-                              $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*)","?/;
+                              $hash->{helper}{".COOKIE"} =~ /"localCookie":".*session-id=(.*?)","?/;
                                $hash->{helper}{".COOKIE"} = "session-id=" . $1;
                                $hash->{helper}{".COOKIE"} =~ /csrf=([-\w]+)[;\s]?(.*)?$/ if(defined($hash->{helper}{".COOKIE"}));
                                $hash->{helper}{".CSRF"}  = $1  if(defined($hash->{helper}{".COOKIE"}));

Damit funktioniert bei mir die Sprachausgabe wieder.

Das voice-Reading wird auch aktualisiert (wenn auch mit starker Verzögerung).

Hallo,

ich bin jetzt etwas verwirrt. In meiner Version vom:
# $Id: 37_echodevice.pm 28113 2023-10-31 15:08:20Z michael.winkler $
#
##############################################
#
# 2023.10.31 v0.2.25

sind die von Dir korrigierten Code-Zeilen so nicht zu finden. Da steht genau das, was Du geändert hast.

Grüße Jörg
Hm. Vielleicht hast du den Patch schon angewandt, und kannst dich nur nicht erinnern? :)

Die Änderungen in meinem Post sind mit Modul-Version 0.2.23 (glaube ich).
Da derzeit die 0.2.25 aktuell ist, kann es sein dass die Zeilennummern nicht ganz korrekt stimmen, aber die Änderungen aus meinem Post sind dort noch nicht enthalten.
(siehe z.B. hier: https://github.com/mhop/fhem-mirror/blob/master/fhem/FHEM/37_echodevice.pm#L2496)
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

JoWiemann

Zitat von: KyleK am 07 November 2023, 12:19:41Hm. Vielleicht hast du den Patch schon angewandt, und kannst dich nur nicht erinnern? :)

Es lag an der Brille  O:-)

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

juemuc

Auch bei mir ist nach der Korrektur dieser 3 Zeilen alles ok. Vielen Dank.  ;D

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).


michael.winkler

Zitat von: KyleK am 05 November 2023, 08:05:47@michael.winkler vielleicht noch ein Hinweis/eine Frage:

Ich habe mich beim Experimentieren gewundert warum keine Logausgaben von HttpUtils kommen.
Ich wusste dass von dort auf Level 5 eigentlich alles inklusive request und Response Header ausgegeben wird.

Ist das mit Absicht so?

Ich bin im Forum auf diesen Post gestoßen und hab das im Modul eingebaut:
https://forum.fhem.de/index.php?topic=110192.msg1042256#msg1042256

Damit kamen auch Logs von HttpUtils, und ich konnte die Fehler oben finden.

Was hast du hier alles geändert? Kannst du mir hier auch ein DIFF senden?

KyleK

@michael.winkler 
Ich hab im Prinzip überall wo HttpUtils_NonblockingGet() aufgerufen wird, dem Parameter der Funktion (meist $param oder $params) noch einen Wert hinzugefügt:

$param->{NAME} = $name;

Das sind nur 4 oder 5 Stellen im Code.

Heute abend kann ich das Diff dazu bereitstellen.
FHEM on Raspberry Pi 3B+
CUL868
7x MAX! Thermostat, 8x MAX! Fensterkontakte
Conbee II + deConz, TradFri Lampen, Osram Smart+ Steckdosen

michael.winkler

Ab morgen früh ist eine neue Version online

# 2023.11.08 v0.2.26
# - BUG:     User-Agent https://forum.fhem.de/index.php?topic=82631.msg1292057#msg1292057
#

Fakenius

Zitat von: michael.winkler am 08 November 2023, 19:46:03Ab morgen früh ist eine neue Version online
# 2023.11.08 v0.2.26
# - BUG:    User-Agent https://forum.fhem.de/index.php?topic=82631.msg1292057#msg1292057
#

Diese neue Version müllt bei mir immer noch das Logfile voll mit:
[echodevice_Parse] [activities] [10397] WRONG JSON Type Type=
FS20, Homematic (DebMatic), Zigbee (deCONZ), LaCrosse, selbstgebaute Sensoren und Aktoren via MQTT
 (CUL, HB-RF-USB-2, Jeelink, SIGNALDuino, ConBee III)