FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: Sidey am 12 April 2026, 16:56:20

Titel: [Docker / Container] echodevice
Beitrag von: Sidey am 12 April 2026, 16:56:20
Hallo,

ich möchte hier mein Projekt kurz vorstellen und auch die grundlegende Architektur erläutern, weil die Frage sonst vermutlich recht schnell aufkommt.

Der FHEM-Docker-Container ist in erster Linie darauf ausgelegt, Perl-Programme auszuführen. Das Modul `echodevice` und auch einige andere Lösungen nutzen zusätzlich weitere Laufzeitumgebungen, zum Beispiel Node.js.

Seit Version 5 des FHEM-Images ist kein Node Package Manager mehr im FHEM-(Perl-)Docker-Image enthalten. In der Vergangenheit bedeutete das meist, dass man sich dafür ein eigenes angepasstes Image bauen musste.
Das dorr enthaltene NodeJS (18) ist schon längst aus der Wartung.
Da hier auch mit Authentifizierungsinformationen handelt, sollte einem die Sicherheit der Software nicht völlig egal sein.

Nach einer kurzen Diskussion hier im Forum habe ich mich daher entschieden, das von `echodevice` verwendete `alexa-cookie2` in einen eigenen Hilfscontainer auszulagern. Das Ganze heißt `alexa-cookie-service`.

Der Service stellt eine REST-API zur Verfügung, über die die notwendigen Schritte für die Anmeldung am Amazon-Dienst umgesetzt werden können.

Projektlink: 
https://github.com/fhem/alexa-cookie-service

Grobes Integrationsmuster: 
FHEM / echodevice -> HTTP/REST -> alexa-cookie-service -> Amazon

Das bedeutet konkret:

- Das Modul `echodevice` bleibt im normalen FHEM-Container.
- Der separate Service-Container stellt per REST-API die Funktionen rund um `alexa-cookie2` bereit.
- FHEM ruft diese API bei Bedarf auf, anstatt Node.js-Code direkt im FHEM-Container auszuführen.

Die Motivation für die Trennung ist vor allem:

- Der FHEM-Container soll möglichst nah an einer klassischen und gut wartbaren FHEM-Laufzeitumgebung bleiben.
- Ein Node.js-Projekt bringt eine eigene Runtime, eigene Abhängigkeiten und meist auch einen anderen Release- und Update-Zyklus mit.
- Wenn man beides in einen einzigen Container packt, vermischt man zwei technisch unterschiedliche Aufgabenbereiche.
- Das macht Images größer, die Wartung aufwendiger und erschwert Updates, Fehlersuche und Debugging.
- Zusätzlich wird es unpraktisch, wenn man nur den Service neu starten oder aktualisieren möchte, ohne gleichzeitig die FHEM-Umgebung anzufassen.

Mit einem separaten Service-Container ist die Trennung sauberer:

- Der Node.js-Dienst kann in einer dafür passenden Umgebung laufen.
- Beide Komponenten können unabhängig voneinander gestartet, gestoppt und aktualisiert werden.
- Fehler lassen sich leichter eingrenzen, weil klarer ist, ob ein Problem aus FHEM oder aus dem Service stammt.

Mir ist wichtig, dass diese Entscheidung nicht als unnötige Verkomplizierung verstanden wird. Auf den ersten Blick könnte es einfacher wirken, alles in einen Container zu legen. Praktisch erkauft man sich diese vermeintliche Einfachheit aber oft mit mehr Aufwand bei Pflege und Betrieb.

Die Aufteilung in FHEM-Container und Service-Container ist daher eine bewusste Designentscheidung zugunsten von Stabilität, Wartbarkeit und klaren Zuständigkeiten.

Damit das aktuelle echodevice Modul mit der Integration funktioniert, habe ich ein HTTPMOD (als Hilfsgerät)  auf der Projektseite beschrieben.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 12 Mai 2026, 16:26:02
Hallo Sidey,

ich wollte das mal kurz testen, bekomme nach
curl -H "x-auth-token: change-me" http://127.0.0.1:58080/api/statusein
{"error":"Unauthorized"}zurück
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 12 Mai 2026, 16:47:25
Zitat von: FlatTV am 12 Mai 2026, 16:26:02Hallo Sidey,

ich wollte das mal kurz testen, bekomme nach
curl -H "x-auth-token: change-me" http://127.0.0.1:58080/api/status

Hast Du als AUTH_TOKEN auch change-me gesetzt?
Der Wert muss mit dem Header übereinstimmen.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 12 Mai 2026, 17:10:12
Ja, aber nicht in der yml Datei  :-\
thx
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 12 Mai 2026, 18:25:25
Also wenn ich nur eine yml Datei auf meinem pi habe, startet der Container nicht.

name: alexa-cookie-service
alexa-cookie-service-1 exited with code 1 (restarting)
alexa-cookie-service-1  |
alexa-cookie-service-1  | > alexa-cookie-service@0.3.0 start
alexa-cookie-service-1  | > node src/server.js
alexa-cookie-service-1  |
alexa-cookie-service-1  | node:fs:1370
alexa-cookie-service-1  |   const result = binding.mkdir(
alexa-cookie-service-1  |                          ^
alexa-cookie-service-1  |
alexa-cookie-service-1  | Error: EACCES: permission denied, mkdir '/data/cookie-export'
alexa-cookie-service-1  |     at Object.mkdirSync (node:fs:1370:26)
alexa-cookie-service-1  |     at Object.<anonymous> (/app/src/server.js:13:4)
alexa-cookie-service-1  |     at Module._compile (node:internal/modules/cjs/loader:1705:14)
alexa-cookie-service-1  |     at Object..js (node:internal/modules/cjs/loader:1838:10)
alexa-cookie-service-1  |     at Module.load (node:internal/modules/cjs/loader:1441:32)
alexa-cookie-service-1  |     at Function._load (node:internal/modules/cjs/loader:1263:12)
alexa-cookie-service-1  |     at TracingChannel.traceSync (node:diagnostics_channel:328:14)
alexa-cookie-service-1  |     at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
alexa-cookie-service-1  |     at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
alexa-cookie-service-1  |     at node:internal/main/run_main_module:36:49 {
alexa-cookie-service-1  |   errno: -13,
alexa-cookie-service-1  |   code: 'EACCES',
alexa-cookie-service-1  |   syscall: 'mkdir',
alexa-cookie-service-1  |   path: '/data/cookie-export'
alexa-cookie-service-1  | }
alexa-cookie-service-1  |
alexa-cookie-service-1  | Node.js v22.22.2
alexa-cookie-service-1  | npm notice
alexa-cookie-service-1  | npm notice New major version of npm available! 10.9.7 -> 11.14.1
alexa-cookie-service-1  | npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.14.1
alexa-cookie-service-1  | npm notice To update run: npm install -g npm@11.14.1
alexa-cookie-service-1  | npm notice
alexa-cookie-service-1 exited with code 1 (restarting)

cat alexa-cookie-service.yml
name: alexa-cookie-service
networks:
  fhem-net:
    external: true
services:
  alexa-cookie-service:
    image: ghcr.io/fhem/alexa-cookie-service:0.3.0
    volumes:
      - ./alexa-cookie-data:/data
      - ./fhem/cache/alexa-cookie:/opt/fhem/cache/alexa-cookie
    environment:
      HOST: 0.0.0.0
      PORT: 58080
      AUTH_TOKEN: 87b4feb87546bc9bca881d54dde1c3381f39711d5419dbfdb1b35c688db533fc
      DATA_DIR: /data
      STATE_FILE: /data/alexa-registration.json
      METADATA_FILE: /data/service-metadata.json
      COOKIE_EXPORT_DIR: /data/cookie-export
      # COOKIE_EXPORT_DIR: /opt/fhem/cache/alexa-cookie
      DEBUG_HTML_DIR: /data/debug-html
      AMAZON_PAGE: amazon.de
      BASE_AMAZON_PAGE: amazon.com
      ACCEPT_LANGUAGE: de-DE
      PROXY_PUBLIC_HOST: 192.168.178.188
      PROXY_LISTEN_BIND: 0.0.0.0
      PROXY_PORT: 58090
      PROXY_ONLY: true
      SETUP_PROXY: true
      APP_NAME: FHEM EchoDevice Cookie Service
      USE_HERMES: false
      REFRESH_SCHEDULE_HOURS: 24
      REFRESH_MIN_AGE_HOURS: 6
      REQUEST_TIMEOUT_MS: 30000
      LOG_LEVEL: combined
      TZ:   Europe/Berlin
    ports:
      - '58090:58090'
    networks:
      - fhem-net
    restart: unless-stopped
    user: '6061:6061'

So sieht das Verzeichnis aus:
571567 4 drwxrwxr-x  5 pi   pi   4096 May 12 18:12 .
 132722 4 drwx------ 22 pi   pi   4096 May 12 18:12 ..
1116707 4 drwxr-xr-x  2 root root 4096 May 12 18:12 alexa-cookie-data
 535855 4 -rw-rw-r--  1 pi   pi   1256 May 12 18:12 alexa-cookie-service.yml
 566774 4 drwxr-xr-x  4 6062 6062 4096 May 12 10:26 alexa-fhem
 535631 4 -rw-rw-r--  1 pi   pi    380 May 12 09:25 alexa-fhem.yml
 535633 4 -rw-rw-r--  1 pi   pi    847 May 12 09:20 deconz.yml
 535629 4 -rw-rw-r--  1 pi   pi    389 May 12 09:48 docker-compose.yml
 571777 4 drwxr-x--- 15 6061 6061 4096 May 12 15:51 fhem
 535888 4 -rw-rw-r--  1 pi   pi   1837 May 12 16:47 fhem.yml
 535628 4 -rw-rw-r--  1 pi   pi    408 May 12 09:03 openccu.yml
 535619 4 -rw-rw-r--  1 pi   pi    560 May 12 09:58 portainer.yml
 

//edit
Wenn der Ordner von fhem angelegt wurde, geht das auch.
Ich habe das mal mit sudo chown -R 6061:6061 alexa-cookie-data/ simuliert.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 12 Mai 2026, 22:00:13
Zitat von: FlatTV am 12 Mai 2026, 18:25:25Also wenn ich nur eine yml Datei auf meinem pi habe, startet der Container nicht.

...

Ich habe das mal mit sudo chown -R 6061:6061 alexa-cookie-data/ simuliert.

Ja, das /data Verzeichnis muss für den angegeben User beschreibbar sein. Das könnte ich in der readme noch hinterlegen.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 13 Mai 2026, 21:32:28
Oder man legt das Volumen ./alexa-cookie-data:/data gleich nach .fhem/alexa-cookie-data:/data
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 13 Mai 2026, 21:50:04
Zitat von: FlatTV am 13 Mai 2026, 21:32:28Oder man legt das Volumen ./alexa-cookie-data:/data gleich nach .fhem/alexa-cookie-data:/data

Das kann ich jetzt nicht bewerten, was bei dir der Ordner fhem ist.

Was ich aber sagen kann ist, dass das data Volume von alexa-cookie-service nichts im fhem app Volume zu suchen hat.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Mai 2026, 19:36:57
Ich bekomme kein Cookie.
Der Login auf der Amazon Webseite meldet zwar ,,success" und im Log werden auch ohne Ende Daten ausgetauscht, am Ende aber dann:
alexa-cookie-service  | [2026-05-14T19:28:03,005 Europe/Berlin] [INFO] Alexa-Cookie: Response (401)
alexa-cookie-service  | [2026-05-14T19:28:03,007 Europe/Berlin] [INFO] Get User data Response: ""
alexa-cookie-service  | [2026-05-14T19:28:03,007 Europe/Berlin] [ERROR] Alexa login flow failed: Unexpected end of JSON input

Kann ich da irgendwie debuggen?

Ah, jetzt ist es ohne Fehler durchgelaufen
... csrf=1481045025","csrf":"1481045025","dataVersion":2}


alexa-cookie-service  | [2026-05-14T19:40:38,205 Europe/Berlin] [INFO] 127.0.0.1 - - [14/May/2026:17:40:38 +0000] "GET /healthz HTTP/1.1" 200 4449 "-" "-"

Gespeichert wird aber nichts, irgendwas ist da noch falsch?!

Internals:
   BUSY       0
   DEF        http://alexa-cookie-service:58080/api/status 300
   FUUID      6a05fb1a-f33f-c628-f574-27055de8ff6d3b4b
   Interval   300
   MainURL    http://alexa-cookie-service:58080/api/status
   ModuleVersion 4.2.0 - 11.8.2023
   NAME       AlexaCookieService
   NOTIFYDEV  global
   NR         45
   NTFY_ORDER 50-AlexaCookieService
   STATE      ???
   TYPE       HTTPMOD
   eventCount 12
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       http://alexa-cookie-service:58080
     auth       0
     buf       
     code       401
     compress   1
     conn       
     data       
     displayurl http://alexa-cookie-service:58080/api/status
     header     
     host       alexa-cookie-service
     httpheader HTTP/1.1 401 Unauthorized
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
Content-Type: application/json; charset=utf-8
Content-Length: 24
ETag: W/"18-XPDV80vbMk4yY1/PADG4jYM4rSI"
Date: Thu, 14 May 2026 17:48:27 GMT
Connection: close
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    58080
     hu_portSfx :58080
     ignoreredirects 1
     loglevel   4
     path       /api/status
     protocol   http
     redirects  0
     timeout    8
     url        http://alexa-cookie-service:58080/api/status
     sslargs:
   QUEUE:
   READINGS:
     2026-05-14 19:48:27   LAST_REQUEST    update
     2026-05-14 19:48:27   MATCHED_READINGS error
     2026-05-14 19:48:27   UNMATCHED_READINGS ok updatedAt ageHours hasCookie hasRefreshToken proxyUrl message
     2026-05-14 19:48:27   error           Unauthorized
     2026-05-14 19:39:56   message         Please open http://192.168.178.188:58090/ with your browser and login to Amazon. The cookie will be output here after successfull login.
     2026-05-14 19:39:56   proxyUrl        http://192.168.178.188:58090/
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        http://alexa-cookie-service:58080/api/status
   defptr:
     readingBase:
       error      reading
       message    reading
       proxyUrl   reading
     readingNum:
       error      08
       message    07
       proxyUrl   06
     readingOutdated:
     requestReadings:
       get01:
         error      reading 08
         message    reading 07
         proxyUrl   reading 06
       update:
         error      reading 08
Attributes:
   get01Header1 x-auth-token: %%ACS_TOKEN%%
   get01Name  loginUrl
   get01URL   http://alexa-cookie-service:58080/api/cookie/login/url
   reading01JSON ok
   reading02JSON updatedAt
   reading03JSON ageHours
   reading04JSON hasCookie
   reading05JSON hasRefreshToken
   reading06JSON proxyUrl
   reading07JSON message
   reading08JSON error
   replacement01Mode key
   replacement01Regex %%ACS_TOKEN%%
   replacement01Value alexa_cookie_service_token
   replacement02Mode key
   replacement02Regex %%ACS_EXPORT_NAME%%
   replacement02Value alexa_cookie_service_export_name
   room       Amazon
   set01Data  {}
   set01Header1 x-auth-token: %%ACS_TOKEN%%
   set01Header2 Content-Type: application/json
   set01Method POST
   set01Name  loginStart
   set01NoArg 1
   set01ParseResponse 1
   set01URL   http://alexa-cookie-service:58080/api/cookie/login/start
   set02Data  {}
   set02Header1 x-auth-token: %%ACS_TOKEN%%
   set02Header2 Content-Type: application/json
   set02Method POST
   set02Name  refresh
   set02NoArg 1
   set02ParseResponse 1
   set02URL   http://alexa-cookie-service:58080/api/cookie/refresh?save=%%ACS_EXPORT_NAME%%
   showError  1
   showMatched 1
   timeout    8
yml:
networks:
  fhem-net:
    external: true
services:
  alexa-cookie-service:
    image: ghcr.io/fhem/alexa-cookie-service:0.3.0
    container_name: alexa-cookie-service
    volumes:
      - ./alexa-cookie-data:/data
      - ./fhem/cache/alexa-cookie:/opt/fhem/cache/alexa-cookie
    environment:
      BASE_AMAZON_PAGE: amazon.com
      REFRESH_MIN_AGE_HOURS: 6
      COOKIE_EXPORT_DIR: /opt/fhem/cache/alexa-cookie
      STATE_FILE: /data/alexa-registration.json
      SETUP_PROXY: true
      METADATA_FILE: /data/service-metadata.json
      DEBUG_HTML_DIR: /data/debug-html
      APP_NAME: FHEM EchoDevice Cookie Service
      TZ: Europe/Berlin
      PROXY_ONLY: true
      PROXY_PORT: 58090
      AMAZON_PAGE: amazon.de
      PROXY_LISTEN_BIND: 0.0.0.0
      USE_HERMES: false
      REQUEST_TIMEOUT_MS=: 30000
      LOG_LEVEL: combined
      AUTH_TOKEN: xxx
      HOST: 0.0.0.0
      PORT: 58080
      DATA_DIR: /data
      PROXY_PUBLIC_HOST: 192.168.178.188
      REFRESH_SCHEDULE_HOURS: 24
      ACCEPT_LANGUAGE: de-DE
    ports:
      - '58090:58090'
    networks:
      - fhem-net
    restart: unless-stopped
    user: '6061:6061'
Und
set AlexaCookieService storeKeyValue alexa_cookie_service_export_name 45result.jsonhabe ich gesetzt.

Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 14 Mai 2026, 21:30:15
Zitat von: FlatTV am 14 Mai 2026, 19:36:57set AlexaCookieService storeKeyValue alexa_cookie_service_export_name 45result.jsonhabe ich gesetzt.

Hast Du auch
set AlexaCookieService storeKeyValue alexa_cookie_service_token change-me
gesetzt?

Debuggen:

Nach jedem Schritt der Anleitung das Logfile vom Cookie Service sichten.

Grüße
Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Mai 2026, 21:39:58
Zitat von: Sidey am 14 Mai 2026, 21:30:15
Zitat von: FlatTV am 14 Mai 2026, 19:36:57set AlexaCookieService storeKeyValue alexa_cookie_service_export_name 45result.jsonhabe ich gesetzt.

Hast Du auch
set AlexaCookieService storeKeyValue alexa_cookie_service_token change-me
gesetzt?
Ja

Der ganze Prozess läuft auch jetzt sauber durch, nur gespeichert wird nichts.
Ich Fummel mal das log zusammen...
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Mai 2026, 22:04:01
Ich hoffe nicht zu viel gelöscht zu haben, sieht aber doch gut aus.
Kann ich den Befehl zum speichern auch mal händisch aufrufen?
Ich verliere langsam den Überblick  :o
alexa-cookie-service  | [2026-05-14T21:15:08,410 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie session-id = 257-6240670-8059815
alexa-cookie-service  | [2026-05-14T21:15:08,411 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie session-id-time = 2409506108l
alexa-cookie-service  | [2026-05-14T21:15:08,412 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie ubid-acbde = 261-0774669-5824445
alexa-cookie-service  | [2026-05-14T21:15:08,412 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie session-token = du9...
alexa-cookie-service  | [2026-05-14T21:15:08,412 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie x-acbde = "l1EF...."
alexa-cookie-service  | [2026-05-14T21:15:08,413 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie at-acbde = "Atza|gQBmp..."
alexa-cookie-service  | [2026-05-14T21:15:08,413 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie sess-at-acbde = "j6BvfZ ...="
alexa-cookie-service  | [2026-05-14T21:15:08,415 Europe/Berlin] [INFO] Alexa-Cookie: Step 4: get CSRF via /api/language
alexa-cookie-service  | [2026-05-14T21:15:08,415 Europe/Berlin] [INFO] Alexa-Cookie: Sending Request with {"host":"alexa.amazon.de","path":"/api/language","method":"GET","headers":{"DNT":"1","User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36","Connection":"keep-alive","Referer":"https://alexa.amazon.de/spa/index.html","Cookie":"session-id=257-6240670-8059815; session-id-time=2409506108l; ubid-acbde=261-0774669-5824445; session-token=...
alexa-cookie-service  | [2026-05-14T21:15:08,778 Europe/Berlin] [INFO] Alexa-Cookie: Response (200)
alexa-cookie-service  | [2026-05-14T21:15:08,973 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie csrf = 1512042944
alexa-cookie-service  | [2026-05-14T21:15:08,976 Europe/Berlin] [INFO] Alexa-Cookie: Result: csrf=1512042944, Cookie=session-id=257-6240670-8059815; session-id-time=2409506108l; ubid-acbde=261-0774669-5824445; session-token=...
alexa-cookie-service  | [2026-05-14T21:15:08,977 Europe/Berlin] [INFO] Final Registration Result
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Mai 2026, 22:24:12
Okay, ,,set AlexaCookieService refresh" speichert.
Für heute Abend ist das genug.

alexa-cookie-service  | [2026-05-14T22:19:18,869 Europe/Berlin] [INFO] Refresh finished (api) in 3598 ms
alexa-cookie-service  | [2026-05-14T22:19:18,881 Europe/Berlin] [INFO] Refresh request handled in 3613 ms (saveTarget=45result.json)
alexa-cookie-service  | [2026-05-14T22:19:18,884 Europe/Berlin] [INFO] 172.27.0.2 - - [14/May/2026:20:19:18 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.0" 200 4376 "-" "fhem"
alexa-cookie-service  | [2026-05-14T22:19:18,889 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/45result.json


alexa-cookie-service  | [2026-05-14T22:19:48,650 Europe/Berlin] [INFO] 127.0.0.1 - - [14/May/2026:20:19:48 +0000] "GET /healthz HTTP/1.1" 200 4435 "-" "-"

Okay, jetzt passt alles.
Mein Echodevice hat die NR. 44, das musste ich noch korrigieren.
set AlexaCookieService storeKeyValue alexa_cookie_service_export_name 44result.jsonJetzt ist der Account online  8)

THX Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 09 Juni 2026, 20:50:24
Ich habe gerade auf die aktuelle Version umgestellt.

Login -> funktioniert
Refresh -> funktioniert
[2026-06-09T20:41:24,053 Europe/Berlin] [INFO] Refresh finished (api) in 3424 ms
[2026-06-09T20:41:24,066 Europe/Berlin] [INFO] Refresh request handled in 3438 ms (saveTarget=44result.json)
fhem Log:
2026.06.09 20:41:24.613 3: [AlexaAccount] [echodevice_NPMWaitForCookie] [unbekannt] write new refreshtokenHier irritiert mich nur das ,,unbekannt", ist das gewollt?

Edit:
Das habe ich auch noch
fhem  | 2026.06.09 21:07:24.576 3: at_AlexaCookieExport: Unknown argument exportCookie, choose one of loginUrl:noArgDas liegt am notify:
define n_AlexaCookieServiceInit notify global:(INITIALIZED|REREADCFG) {\
  my $nr = $defs{"AlexaAccount"}{NR};;\
  setKeyValue("alexa_cookie_service_export_name", "${nr}result.json");;\
  fhem("define -temporary at_AlexaCookieExport at +00:00:10 get AlexaCookieService exportCookie");;\
  fhem(q[define -temporary at_AlexaCookieImport at +00:00:12 { $main::NPMLoginTyp = "NPM Login Refresh external";;;; echodevice_NPMWaitForCookie($defs{"AlexaAccount"});;;; }]);;;;\
}
attr n_AlexaCookieServiceInit room Amazon

get AlexaCookieService exportCookieGibt es nicht, was sollte denn da hin?

Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 10 Juni 2026, 08:11:51
Zitat von: FlatTV am 09 Juni 2026, 20:50:24Ich habe gerade auf die aktuelle Version umgestellt.

get AlexaCookieService exportCookieGibt es nicht, was sollte denn da hin?


Hallo FlatTV,
ich habe vergessen den get Befehl in das AlexaCookieService(httpmod) zu dokumentieren.
Folgende Zeilen fehlen aktuell im Beispiel:

   
   attr AlexaCookieService get02Name exportCookie
   attr AlexaCookieService get02URL http://alexa-cookie-service:58080/api/cookie?save=%%ACS_EXPORT_NAME%%
   attr AlexaCookieService get02Header1 x-auth-token: %%ACS_TOKEN%%


Ich aktualisiere es in Github, wenn es bei dir damit funktioniert.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 10 Juni 2026, 17:50:16
THX Sidey,
ich lass das jetzt mal einige Zeit laufen...

[2026-06-10T17:44:40,736 Europe/Berlin] [INFO] Alexa-Cookie: Response (200)
[2026-06-10T17:44:40,738 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie csrf = -xxxxxx
[2026-06-10T17:44:40,738 Europe/Berlin] [INFO] Alexa-Cookie: Result: csrf=-xxxxxx, Cookie=...
...
[2026-06-10T17:44:40,740 Europe/Berlin] [INFO] Refresh finished (api) in 2586 ms
[2026-06-10T17:44:40,826 Europe/Berlin] [INFO] Refresh request handled in 2673 ms (saveTarget=44result.json)
[2026-06-10T17:44:40,827 Europe/Berlin] [INFO] 172.27.0.2 - - [10/Jun/2026:15:44:40 +0000] "POST /api/cookie/refresh?save=44result.json HTTP/1.0" 200 4376 "-" "fhem"
[2026-06-10T17:44:40,830 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/44result.json

Grüße
Jörg
Titel: Aw: [Docker / Container] echodevice
Beitrag von: rabehd am 10 Juni 2026, 18:14:09
Ich bin leider kein Systemadmin und taste mich oft an Dinge ran.
Ich nutze FHEM im Docker. Bisher funktioniert echodrive. Ich halte diesen Container für langfristig besser.
Also habe ich das mal im Stack eingefügt.

########################
  FHEM:
    container_name: fhem_main
    hostname: fhem_main
    image: ghcr.io/fhem/fhem-docker:4-bullseye
    restart: always
    networks:
      fhem-network:
        ipv4_address: 172.31.31.60
    ports:
      - 8083:8083
      - 1883:1883 # MQTT
      - 3002:3002
    environment:
    - FTP_PASSIVE=1
    volumes:
    - /docker/fhem:/opt/fhem/
    - /docker/fhem-backup/MAIN:/backup
    - /docker/Logs:/log
    - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - FHEM-DB
      - FHEM-alexa
      - FHEM-Homematic

########################
  alexa-cookie-service:
    image: ghcr.io/fhem/alexa-cookie-service:0.3.1
    container_name: fhem_alexa_cookie_service
    volumes:
      - /docker/alexa-cookie-data:/data
      - /docker/fhem/cache/alexa-cookie:/opt/fhem/cache/alexa-cookie
    environment:
      AUTH_TOKEN: change-me
      COOKIE_EXPORT_DIR: /opt/fhem/cache/alexa-cookie
      PROXY_PUBLIC_HOST: 192.168.31.60
    ports:
      - "58090:58090"
    networks:
    fhem-network:
        ipv4_address: 172.31.31.63
    restart: unless-stopped
    user: "6061:6061"     

Der Container startet und geht dann auf unhealthy.
Ist das erstmal ok? Vermutlich nicht.

Zitat[2026-06-10T16:03:45,958 UTC] [INFO] 127.0.0.1 - - [10/Jun/2026:16:03:45 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"

Danke
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 10 Juni 2026, 21:37:50
Zitat von: rabehd am 10 Juni 2026, 18:14:09Der Container startet und geht dann auf unhealthy.
Ist das erstmal ok? Vermutlich nicht.


Nein, das ist nicht in Ordnung. Kannst Du bitte einmal das komplette log vom alexa-cookie-service container bereitstellen, wenn er startet?

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 11 Juni 2026, 03:37:46
Zitat von: FlatTV am 10 Juni 2026, 17:50:16,
ich lass das jetzt mal einige Zeit laufen...

Hmmm, so sah der Auto-Refresh aus.
[2026-06-10T22:59:23,143 Europe/Berlin] [INFO] Starting refresh (api)
[2026-06-10T22:59:23,143 Europe/Berlin] [INFO] Alexa-Cookie: Use as Login-Amazon-URL: amazon.de
[2026-06-10T22:59:23,144 Europe/Berlin] [INFO] Alexa-Cookie: Use as Base-Amazon-URL: amazon.com
[2026-06-10T22:59:23,144 Europe/Berlin] [INFO] Alexa-Cookie: Use as Device-App-Name: FHEM EchoDevice Cookie Service
[2026-06-10T22:59:23,144 Europe/Berlin] [INFO] Alexa-Cookie: Use as User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
[2026-06-10T22:59:23,144 Europe/Berlin] [INFO] Alexa-Cookie: Use as Accept-Language: de-DE
[2026-06-10T22:59:23,144 Europe/Berlin] [INFO] Alexa-Cookie: Proxy-Mode enabled if needed: 192.168.178.188:58090 to listen on 0.0.0.0
[2026-06-10T22:59:23,146 Europe/Berlin] [INFO] Alexa-Cookie: Refresh Token
...
[2026-06-10T22:59:23,603 Europe/Berlin] [INFO] Alexa-Cookie: Response (200)
[2026-06-10T22:59:23,609 Europe/Berlin] [INFO] Refresh Token Response:...
...
[2026-06-10T22:59:23,875 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie session-id = xxx-xxxx-xxxx
[2026-06-10T22:59:23,876 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie session-id-time = 2411845163l
[2026-06-10T22:59:23,876 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie ubid-main = xxx-xxxx-xxxx
[2026-06-10T22:59:23,877 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie session-token = xxxx
...
[2026-06-10T22:59:23,879 Europe/Berlin] [INFO] Alexa-Cookie: Add Cookie sess-at-main = "xxxxxx="
[2026-06-10T22:59:23,880 Europe/Berlin] [INFO] Handle token registration Start: {...
...
[2026-06-10T22:59:23,881 Europe/Berlin] [INFO] Alexa-Cookie: Register App
[2026-06-10T22:59:23,882 Europe/Berlin] [INFO] {"host":"api.amazon.com",...
...
[2026-06-10T22:59:23,883 Europe/Berlin] [INFO] Alexa-Cookie: Sending Request with {"host":"api.amazon.com","path...
...
[2026-06-10T22:59:24,041 Europe/Berlin] [INFO] Alexa-Cookie: Response (400)
[2026-06-10T22:59:24,042 Europe/Berlin] [INFO] Register App Response: {"response":{"error":{"code":"InvalidToken","index":"xxxxxxg==","message":"Auth time of the token is expired."}},"request_id":"xxxxxxx"}
[2026-06-10T22:59:24,045 Europe/Berlin] [ERROR] Refresh request failed: No tokens in Register response
[2026-06-10T22:59:24,046 Europe/Berlin] [INFO] 172.27.0.2 - - [10/Jun/2026:20:59:24 +0000] "POST /api/cookie/refresh?save=44result.json HTTP/1.0" 500 42 "-" "fhem"
[2026-06-10T22:59:24,069 Europe/Berlin] [INFO] 172.27.0.2 - - [10/Jun/2026:20:59:24 +0000] "GET /api/status HTTP/1.0" 200 4435 "-" "fhem"

Grüße
Jörg
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 11 Juni 2026, 04:57:43
Was mir gerade aufgefallen ist.
[2026-06-11T04:53:29,536 Europe/Berlin] [INFO] 172.27.0.2 - - [11/Jun/2026:02:53:29 +0000] "POST /api/cookie/refresh?save=44result.json HTTP/1.0" 200 4355 "-" "fhem"
im Verzeichnis Cache liegt aber ein altes Cookie mit der NR 45
Titel: Aw: [Docker / Container] echodevice
Beitrag von: rabehd am 11 Juni 2026, 08:11:21
Zitat von: Sidey am 10 Juni 2026, 21:37:50Nein, das ist nicht in Ordnung. Kannst Du bitte einmal das komplette log vom alexa-cookie-service container bereitstellen, wenn er startet?
Reicht das?
> alexa-cookie-service@0.3.1 start
> node src/server.js
[2026-06-11T06:04:36,531 UTC] [INFO] alexa-cookie-service listening on 0.0.0.0:58080
[2026-06-11T06:04:36,575 UTC] [INFO] Log timestamps use timezone UTC
[2026-06-11T06:04:40,729 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:04:40 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:04:45,820 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:04:45 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:04:50,896 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:04:50 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:04:55,992 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:04:55 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:05:26,067 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:05:26 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:05:56,165 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:05:56 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:06:26,321 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:06:26 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:06:56,411 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:06:56 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:07:26,493 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:07:26 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:07:56,567 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:07:56 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:08:26,712 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:08:26 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:08:56,810 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:08:56 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
[2026-06-11T06:09:26,909 UTC] [INFO] 127.0.0.1 - - [11/Jun/2026:06:09:26 +0000] "GET /healthz HTTP/1.1" 503 141 "-" "-"
Wie gesagt, ich habe nur den Container angelegt und im bestehenden System nichts angepasst.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 11 Juni 2026, 17:41:06
Zitat von: FlatTV am 11 Juni 2026, 04:57:43Was mir gerade aufgefallen ist.
[2026-06-11T04:53:29,536 Europe/Berlin] [INFO] 172.27.0.2 - - [11/Jun/2026:02:53:29 +0000] "POST /api/cookie/refresh?save=44result.json HTTP/1.0" 200 4355 "-" "fhem"
im Verzeichnis Cache liegt aber ein altes Cookie mit der NR 45


Das Problem liegt beim Speichern des alexa_cookie_service_export_name im Klartext.
Hier wird der ,,alte" verschlüsselte Eintrag genommen

alexa_cookie_service_export_name:56result.json
HTTPMOD_AlexaCookieService_alexa_cookie_service_export_name:56531657401655151a09155d0b

//Edit
Das ist aber noch nicht alles.
Im Log sieht es dann richtig aus
[2026-06-11T18:50:02,039 Europe/Berlin] [INFO] 172.27.0.2 - - [11/Jun/2026:16:50:02 +0000] "POST /api/cookie/refresh?save=56result.json HTTP/1.0" 200 4380 "-" "fhem"
[2026-06-11T18:50:02,047 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/56result.json
[2026-06-11T18:50:08,267 Europe/Berlin] [INFO] 127.0.0.1 - - [11/Jun/2026:16:50:08 +0000] "GET /healthz HTTP/1.1"
Gespeichert wird aber nix
I have no name!@46db69a954c5:/app$ ls -lisa /opt/fhem/cache/alexa-cookie/             
total 8
657271 4 drwxr-x--- 2 6061 6061 4096 Jun 11 18:50 .
668597 4 drwxr-xr-x 3 root root 4096 Jun 11 18:45 ..
I have no name!@46db69a954c5:/app$
Das ging aber schon mal.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 11 Juni 2026, 21:23:43
Zitat von: rabehd am 11 Juni 2026, 08:11:21Wie gesagt, ich habe nur den Container angelegt und im bestehenden System nichts angepasst.

In diesem Fall ist das erklärt.
Solange Du keinen Login per API Aufruf vorgenommen hast, ist der Service nicht lauffähig und es kommt zu diesem Verhalten.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 12 Juni 2026, 20:37:50
Ich gebe jetzt hier erstmal auf.
Mein sub (nach Vorgabe aus dem Git) über at aufgerufen speichert des Cookie nicht, obwohl im log alles richtig aussieht.
#############################################################################
#  Refresh Alexa cookie via alexa-cookie2 service
#############################################################################

sub Alexa_CookieRefresh_
{
  my ($name) = @_;
  my $hash   = $defs{$name};

  if (!$hash)
  {
    Log 1, "[Alexa_CookieRefresh] unknown device $name";
    return;
  }

  my $save_name = $hash->{NR} . "result.json";

  setKeyValue(
    "alexa_cookie_service_export_name",
    $save_name
  );

  my $token = "xxx";

  my $refresh_raw = qx(curl -sS -X POST -H "x-auth-token: $token" -w "\\n%{http_code}" "http://alexa-cookie-service:58080/api/cookie/refresh?save=$save_name" 2>&1);

  if (!defined($refresh_raw) || $refresh_raw eq "")
  {
    Log 1, "[Alexa_CookieRefresh] empty response";
    return;
  }

  $refresh_raw =~ s/\r//g;

  my ($body, $code) = $refresh_raw =~ /\A(.*)\n(\d{3})\z/s;

  if (!defined($code))
  {
    Log 1, "[Alexa_CookieRefresh] cannot parse response: $refresh_raw";
    return;
  }

  if ($code ne "200")
  {
    Log 1, "[Alexa_CookieRefresh] http=$code body=$body";
    return;
  }

  if ($body eq "")
  {
    Log 1, "[Alexa_CookieRefresh] empty body";
    return;
  }

  echodevice_NPMWaitForCookie($hash);

  Log 3, "[Alexa_CookieRefresh] refresh successful for $name";
}

Log:
alexa-cookie-service  | [2026-06-12T20:35:11,019 Europe/Berlin] [INFO] Proxy Init: reuse deviceSerial from former data
alexa-cookie-service  | [2026-06-12T20:35:11,020 Europe/Berlin] [INFO] Refresh finished (api) in 767 ms
alexa-cookie-service  | [2026-06-12T20:35:11,029 Europe/Berlin] [INFO] Refresh request handled in 776 ms (saveTarget=45result.json)
alexa-cookie-service  | [2026-06-12T20:35:11,031 Europe/Berlin] [INFO] 172.27.0.2 - - [12/Jun/2026:18:35:11 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.1" 200 4405 "-" "curl/7.88.1"
alexa-cookie-service  | [2026-06-12T20:35:11,035 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/45result.json alexa-cookie-service  | [2026-06-12T20:35:11,019 Europe/Berlin] [INFO] Proxy Init: reuse deviceSerial from former data
alexa-cookie-service  | [2026-06-12T20:35:11,020 Europe/Berlin] [INFO] Refresh finished (api) in 767 ms
alexa-cookie-service  | [2026-06-12T20:35:11,029 Europe/Berlin] [INFO] Refresh request handled in 776 ms (saveTarget=45result.json)
alexa-cookie-service  | [2026-06-12T20:35:11,031 Europe/Berlin] [INFO] 172.27.0.2 - - [12/Jun/2026:18:35:11 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.1" 200 4405 "-" "curl/7.88.1"
alexa-cookie-service  | [2026-06-12T20:35:11,035 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/45result.json

Händisch im fhem Container ausgeführt, wird auch gespeichert.
curl -sS -X POST -H "x-auth-token: xxx" -w "\\n%{http_code}" "http://alexa-cookie-service:58080/api/cookie/refresh?save=45result.json"
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 12 Juni 2026, 20:48:00
Zitat von: FlatTV am 11 Juni 2026, 04:57:43Was mir gerade aufgefallen ist.
[2026-06-11T04:53:29,536 Europe/Berlin] [INFO] 172.27.0.2 - - [11/Jun/2026:02:53:29 +0000] "POST /api/cookie/refresh?save=44result.json HTTP/1.0" 200 4355 "-" "fhem"
im Verzeichnis Cache liegt aber ein altes Cookie mit der NR 45

...

Gespeichert wird aber nix
I have no name!@46db69a954c5:/app$ ls -lisa /opt/fhem/cache/alexa-cookie/           
total 8
657271 4 drwxr-x--- 2 6061 6061 4096 Jun 11 18:50 .
668597 4 drwxr-xr-x 3 root root 4096 Jun 11 18:45 ..
I have no name!@46db69a954c5:/app$
Das ging aber schon mal.


Mir fällt es schwer, diese Aussagen einzuordnen. Einerseits ist der Ordner leer und dann liegt eine Datei mit alter Referenz darin?


alexa_cookie_service_export_name wird nach jedem Restart oder Reload neu gesetzt.
Hast Du denn eine Idee, ob es jetzt stimmt?

Dann würde ein List der Devices und ein Log des ACS Containers helfen.

Grüße Sidey

Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 12 Juni 2026, 20:53:35
Zitat von: FlatTV am 12 Juni 2026, 20:37:50Ich gebe jetzt hier erstmal auf.
Mein sub (nach Vorgabe aus dem Git) über at aufgerufen speichert des Cookie nicht, obwohl im log alles richtig aussieht.

Was ruft Alexa_CookieRefresh_ denn auf und vor allem mit welchen Parametern?

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 13 Juni 2026, 01:40:30
Zitat von: FlatTV am 12 Juni 2026, 20:37:50Ich gebe jetzt hier erstmal auf.
Mein sub (nach Vorgabe aus dem Git) über at aufgerufen speichert des Cookie nicht, obwohl im log alles richtig aussieht.

Ich habe auf Basis deiner Funktion eine Version erstellt die bei mir einwandfrei funktioniert:
https://github.com/fhem/alexa-cookie-service/blob/main/scripts/example_fhem_at.txt

Die Datei im cache wird in der Regel nach dem Import gelöscht, es ist also normal, wenn dort keine zu sehen ist.
Wichtig: Du brauchst den container v0.3.2 .    Der hat einen Fix für eine Amazon Änderung implementiert.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 13 Juni 2026, 08:02:35
Guten Morgen,
ich hoffe, ich gehe dir nicht auf die Nerven^^.

Zitat von: Sidey am 13 Juni 2026, 01:40:30Die Datei im cache wird in der Regel nach dem Import gelöscht, es ist also normal, wenn dort keine zu sehen ist.
Das wusste ich nicht ^^ bisher lagen die da immer rum. Daher ja auch noch die alten, wie ich oben schrieb.
Ich dachte der Import landet in /opt/fhem/cache/alexa-cookie
Naja, da liegt jedenfalls nix mehr.
ZitatWichtig: Du brauchst den container v0.3.2 .    Der hat einen Fix für eine Amazon Änderung implementiert.
Damit hatte ich nochmal alles neu aufgebaut.

Dieser at ist deaktiviert (Name wird nicht aufgelöst)
defmod at_AlexaCookieServiceRefresh at +*16:00:00 { my $nr = $defs{'AlexaAccount'}{NR};; setKeyValue('alexa_cookie_service_export_name', "${nr}result.json");; fhem('set AlexaCookieService refresh');; }
attr at_AlexaCookieServiceRefresh room Amazon

Dieser at ist aktiv
defmod AlexaCookieRefresh at +*06:00:00 {Alexa_CookieRefresh("AlexaAccount");;}
attr AlexaCookieRefresh room Amazon

Und dazu passend das Script, dort habe ich noch auf curl verzichtet (sorry für meine Fummelei) und so angewendet.
#############################################################################
# Refresh Alexa cookie via alexa-cookie-service from a FHEM at
#############################################################################
# Die Funktion gehoert z.B. in 99_myUtils.pm.
#
# Einmalig in FHEM setzen:
# { setKeyValue('alexa_cookie_service_token', 'change-me') }
# Optional, wenn der Service nicht unter dem Docker-Service-Namen erreichbar ist:
# { setKeyValue('alexa_cookie_service_base', 'http://127.0.0.1:58080') }
#
# Beispiel-at:
# defmod AlexaCookieRefresh at +*06:00:00 { Alexa_CookieRefresh('AlexaAccount');; }

sub Alexa_CookieRefresh
{
  my ($name) = @_;

  if (!$name)
  {
    Log(1, qq[[Alexa_CookieRefresh] missing device name]);
    return;
  }

  if (!IsDevice($name, 'echodevice'))
  {
    Log(1, qq[[Alexa_CookieRefresh] $name is not an echodevice]);
    return;
  }

  my $hash = $defs{$name};

  if (!$hash)
  {
    Log(1, qq[[Alexa_CookieRefresh] unknown device $name]);
    return;
  }

  if (!defined($hash->{NR}))
  {
    Log(1, qq[[Alexa_CookieRefresh] missing internal FHEM NR for $name]);
    return;
  }

  my ($tokenErr, $token) = getKeyValue('alexa_cookie_service_token');

  if ($tokenErr)
  {
    Log(1, qq[[Alexa_CookieRefresh] getKeyValue alexa_cookie_service_token failed: $tokenErr]);
    return;
  }

  if (!$token)
  {
    Log(1, qq[[Alexa_CookieRefresh] missing alexa_cookie_service_token]);
    return;
  }

  my $base                   = 'http://alexa-cookie-service:58080';
  my ($baseErr, $storedBase) = getKeyValue('alexa_cookie_service_base');

  $base = $storedBase if (!$baseErr && $storedBase);
  $base =~ s{/+$}{};

  my $save_name = $hash->{NR} . 'result.json';
  my $err       = setKeyValue('alexa_cookie_service_export_name', $save_name);

  if ($err)
  {
    Log(1, qq[[Alexa_CookieRefresh] cannot store export name: $err]);
    return;
  }

  HttpUtils_NonblockingGet({
    url      => "$base/api/cookie/refresh?save=$save_name",
    method   => 'POST',
    header   => {'x-auth-token' => $token,},
    timeout  => 30,
    hash     => $hash,
    callback => sub
    {
      my ($param, $httpErr, $data) = @_;

      if ($httpErr)
      {
        Log(1, qq[[Alexa_CookieRefresh] request failed: $httpErr]);
        return;
      }

      my $code = $param->{code} // '';

      if ($code ne '200')
      {
        Log(1, qq[[Alexa_CookieRefresh] http=$code body=$data]);
        return;
      }

      if (!defined($data) || $data eq '')
      {
        Log(1, qq[[Alexa_CookieRefresh] empty body]);
        return;
      }

      $main::NPMLoginTyp = 'NPM Login Refresh external';

      echodevice_NPMWaitForCookie($param->{hash});

      Log(3, qq[[Alexa_CookieRefresh] refresh successful for $name]);
    }
  });

  return;
}

Das ist jetzt die Ausgabe
[2026-06-13T07:37:58,185 Europe/Berlin] [INFO] Alexa-Cookie: Use as Login-Amazon-URL: amazon.de
[2026-06-13T07:37:58,185 Europe/Berlin] [INFO] Alexa-Cookie: Use as Base-Amazon-URL: amazon.com
[2026-06-13T07:37:58,185 Europe/Berlin] [INFO] Alexa-Cookie: Use as Device-App-Name: FHEM EchoDevice Cookie Service
[2026-06-13T07:37:58,186 Europe/Berlin] [INFO] Alexa-Cookie: Use as User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
[2026-06-13T07:37:58,186 Europe/Berlin] [INFO] Alexa-Cookie: Use as Accept-Language: de-DE
[2026-06-13T07:37:58,186 Europe/Berlin] [INFO] Alexa-Cookie: Proxy-Mode enabled if needed: 192.168.178.188:58090 to listen on 0.0.0.0
[2026-06-13T07:37:58,188 Europe/Berlin] [INFO] Alexa-Cookie: Refresh Token
...
[2026-06-13T07:37:58,983 Europe/Berlin] [INFO] Proxy Init: reuse deviceSerial from former data
[2026-06-13T07:37:58,984 Europe/Berlin] [INFO] Refresh finished (api) in 800 m2026-06-13T07:37:58,993 Europe/Berlin] [INFO] Refresh request handled in 809 ms (saveTarget=45result.json)
[2026-06-13T07:37:58,995 Europe/Berlin] [INFO] 172.27.0.2 - - [13/Jun/2026:05:37:58 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.0" 200 4405 "-" "fhem"
[2026-06-13T07:37:58,999 Europe/Berlin] [INFO] Cookie export written to /opt/fhem/cache/alexa-cookie/45result.json
Was sagst du?


//Edit: Kleine Anmerkung noch:
get AlexaCookieService exportCookieliefert auch nicht den save Namen
[2026-06-13T08:28:51,272 Europe/Berlin] [INFO] 172.27.0.2 - - [13/Jun/2026:06:28:51 +0000] "GET /api/cookie?save= HTTP/1.0" 200 11753 "-" "fhem"
//Edit2:
Mit der Änderung des replacement scheint es jetzt zu laufen
attr AlexaCookieService replacement02Mode expression
attr AlexaCookieService replacement02Regex %%ACS_EXPORT_NAME%%
attr AlexaCookieService replacement02Value {getKeyValue('alexa_cookie_service_export_name')}
[2026-06-13T09:22:26,051 Europe/Berlin] [INFO] 172.27.0.2 - - [13/Jun/2026:07:22:26 +0000] "GET /api/cookie?save=45result.json HTTP/1.0" 200 11753 "-" "fhem"
Liebe Grüße und danke für deine Geduld
Jörg
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 13 Juni 2026, 11:10:14
@FlatTV:

Soweit ich das sehe vermischst Du zwei Integrationspptionen.

1) Das HTTPMod "AlexaCookieService":

Das ist als single Device Oberfläche für die notwendige API Integration gedacht.
Darüber kann der Initiale Login und der Refresh ausgelöst werden.


2) Die Perl Sub "Alexa_CookieRefresh":

Das ist eine einzelne Funktion, den Refresh auszuführen. Hat mit dem HTTPMOD nichts zu tun.
Der Initiale Login ist hierfür Voraussetzung.

Die Zeile im Log attestiert, dass das Refresh Token im cache abgelegt wurde:

[2026-06-13T09:22:26,051 Europe/Berlin] [INFO] 172.27.0.2 - - [13/Jun/2026:07:22:26 +0000] "GET /api/cookie?save=45result.json HTTP/1.0" 200 11753 "-" "fhem"
Der Aufruf von dieser Funktion, liest den Inhalt ein und löscht die Datei im Cache.
echodevice_NPMWaitForCookie($param->{hash});


Du kannst den Status mit diesem Befehl abfragen:

get AlexaAccount


Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 13 Juni 2026, 15:48:15
Zitat von: Sidey am 13 Juni 2026, 11:10:14Soweit ich das sehe vermischst Du zwei Integrationspptionen.
Sowas ist bei mir natürlich immer möglich.

Ich habe jetzt aber alles zusammen.

defmod AlexaCookieService HTTPMOD http://alexa-cookie-service:58080/api/status 300
attr AlexaCookieService get01Header1 x-auth-token: %%ACS_TOKEN%%
attr AlexaCookieService get01Name loginUrl
attr AlexaCookieService get01URL http://alexa-cookie-service:58080/api/cookie/login/url
attr AlexaCookieService get02Header1 x-auth-token: %%ACS_TOKEN%%
attr AlexaCookieService get02Name exportCookie
attr AlexaCookieService get02URL http://alexa-cookie-service:58080/api/cookie?save=%%ACS_EXPORT_NAME%%
attr AlexaCookieService reading01JSON ok
attr AlexaCookieService reading02JSON updatedAt
attr AlexaCookieService reading03JSON ageHours
attr AlexaCookieService reading04JSON hasCookie
attr AlexaCookieService reading05JSON hasRefreshToken
attr AlexaCookieService reading06JSON proxyUrl
attr AlexaCookieService reading07JSON message
attr AlexaCookieService reading08JSON error
attr AlexaCookieService replacement01Mode key
attr AlexaCookieService replacement01Regex %%ACS_TOKEN%%
attr AlexaCookieService replacement01Value alexa_cookie_service_token
attr AlexaCookieService replacement02Mode expression
attr AlexaCookieService replacement02Regex %%ACS_EXPORT_NAME%%
attr AlexaCookieService replacement02Value {getKeyValue('alexa_cookie_service_export_name')}
attr AlexaCookieService requestHeader1 x-auth-token: %%ACS_TOKEN%%
attr AlexaCookieService room Amazon
attr AlexaCookieService set01Data {}
attr AlexaCookieService set01Header1 x-auth-token: %%ACS_TOKEN%%
attr AlexaCookieService set01Header2 Content-Type: application/json
attr AlexaCookieService set01Method POST
attr AlexaCookieService set01Name loginStart
attr AlexaCookieService set01NoArg 1
attr AlexaCookieService set01ParseResponse 1
attr AlexaCookieService set01URL http://alexa-cookie-service:58080/api/cookie/login/start
attr AlexaCookieService set02Data {}
attr AlexaCookieService set02Header1 x-auth-token: %%ACS_TOKEN%%
attr AlexaCookieService set02Header2 Content-Type: application/json
attr AlexaCookieService set02Method POST
attr AlexaCookieService set02Name refresh
attr AlexaCookieService set02NoArg 1
attr AlexaCookieService set02ParseResponse 1
attr AlexaCookieService set02URL http://alexa-cookie-service:58080/api/cookie/refresh?save=%%ACS_EXPORT_NAME%%
attr AlexaCookieService showError 1
attr AlexaCookieService showMatched 1
attr AlexaCookieService stateFormat {my $ok = ReadingsVal($name,"ok",0);; my $cookie = ReadingsVal($name,"hasCookie",0);; my $refresh = ReadingsVal($name,"hasRefreshToken",0);; my $age = ReadingsVal($name,"ageHours","-");; my $err = ReadingsVal($name,"error","");; !$ok && $err ne "" ? "error: $err" : !$ok ? "not initialized" : ($cookie && $refresh) ? "ready, age ${age}h" : ($cookie ? "cookie only, age ${age}h" : "login required")}
attr AlexaCookieService timeout 8

Damit geht das für n_AlexaCookieServiceInit benötige
get AlexaCookieService exportCookie [2026-06-13T15:36:46,286 Europe/Berlin] [INFO] 172.27.0.2 - - [13/Jun/2026:13:36:46 +0000] "GET /api/cookie?save=45result.json HTTP/1.0" 200 11752 "-" "fhem"und auch das aus at_AlexaCookieServiceRefreshset AlexaCookieService refresh[2026-06-13T15:38:37,301 Europe/Berlin] [INFO] Refresh finished (api) in 885 ms
[2026-06-13T15:38:37,310 Europe/Berlin] [INFO] Refresh request handled in 895 ms (saveTarget=45result.json)
[2026-06-13T15:38:37,312 Europe/Berlin] [INFO] 172.27.0.2 - - [13/Jun/2026:13:38:37 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.0" 200 4405 "-" "fhem"
Damit ist das provisorische  ,,Alexa_CookieRefresh" in der 99_myUtils.pm wieder obsolet.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 13 Juni 2026, 16:24:46
Supi,
Ich werde Perl Packages in FHEM bereitstellen,  damit wird die Integrstion einfacher denke ich.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Juni 2026, 12:29:43
Hi Sidey,

du warst ja gestern noch fleißig.
Ich gehe jetzt erstmal nicht produktiv mit dem ACS und warte.
So kann ich die Integration besser testen, ohne dich damit unter Druck setzen zu wollen 🙋

LG
Jörg
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 14 Juni 2026, 12:34:48
Zitat von: FlatTV am 14 Juni 2026, 12:29:43Hi Sidey,

du warst ja gestern noch fleißig.
Ich gehe jetzt erstmal nicht produktiv mit dem ACS und warte.
So kann ich die Integration besser testen, ohne dich damit unter Druck setzen zu wollen 🙋

LG
Jörg

:)

Meine Idee ist, ein HTTPMod ohne at, notify usw.  kein setkeyvalue.
Damit wenig code und kein 99_myutils notwendig ist, stelle ich Integrations Packages bereit.

Die Packages können dann auch für eine native Integration in das echodevice Modul verwendet werden. Das könnte aber länger dauern bis es soweit ist :)

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Juni 2026, 13:46:33
Mir juckt es in den Fingern, sag einfach Bescheid wenn du jemanden zum testen brauchst.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 14 Juni 2026, 19:33:47
Zitat von: FlatTV am 14 Juni 2026, 13:46:33Mir juckt es in den Fingern, sag einfach Bescheid wenn du jemanden zum testen brauchst.

Zitat von: FlatTV am 14 Juni 2026, 13:46:33Mir juckt es in den Fingern, sag einfach Bescheid wenn du jemanden zum testen brauchst.

Du brauchst die Packages, aktuell liegen diese noch nicht im SVN:

update all https://raw.githubusercontent.com/fhem/alexa-cookie-service/refs/heads/main/lib/controls_alexa-cookie-service.txt
Und dann dieses HTTPMod: (Ein altes mit gleichem Namen am besten vorher löschen.)

ACS_httpmod_package (https://github.com/fhem/alexa-cookie-service/blob/main/scripts/example_fhem_httpmod_package.cfg)


Da ich an Fehlermeldungen aus dem Container noch etwas geschraubt habe brauchst Du aktuell mindestens diese Version des Container Images:
ghcr.io/fhem/alexa-cookie-service:0.3.3

Damit wäre die Installation deutlich vereinfacht.
Wenn Du noch Anregungen hast, dann her damit :)


Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Juni 2026, 20:21:13
THX 🙏

Ich habe jetzt alle at und notify deaktiviert.
AlexaCookieService ist neu und läuft.

[2026-06-14T20:13:03,823 Europe/Berlin] [INFO] 172.27.0.2 - - [14/Jun/2026:18:13:03 +0000] "GET /api/cookie?save=45result.json HTTP/1.0" 200 11750 "-" "fhem" 2026.06.14 20:13:03.830 3: [AlexaAccount] [echodevice_NPMWaitForCookie] [unbekannt] write new refreshtoken
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 14 Juni 2026, 20:33:52
Das State Format gefällt mir noch nicht sooo.
Die Meldung durch loginUrl bleibt auch nach Login, refresh und Status stehen.
Internals:
   BUSY       0
   CFGFN     
   DEF        %%ACS_BASEURL%%/api/cookie/refresh?save=%%ACS_EXPORT_NAME%% 57600
   FUUID      6a2eeecb-f33f-b5a4-f594-7a36e57d9dc13ad2
   Interval   57600
   MainURL    %%ACS_BASEURL%%/api/cookie/refresh?save=%%ACS_EXPORT_NAME%%
   ModuleVersion 4.2.0 - 11.8.2023
   NAME       AlexaCookieService
   NOTIFYDEV  global
   NR         51
   NTFY_ORDER 50-AlexaCookieService
   STATE      Please open http://192.168.178.188:58090/ with your browser and login to Amazon. The cookie will be output here after successfull login.
   TYPE       HTTPMOD
   eventCount 5
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       http://alexa-cookie-service:58080
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl http://alexa-cookie-service:58080/api/status
     header     x-auth-token: edde9d6bc89032430581637bdb11accd0d449f73bf88388da1af0a8027534038
     host       alexa-cookie-service
     httpheader HTTP/1.1 200 OK
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
Origin-Agent-Cluster: ?1
Referrer-Policy: no-referrer
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-DNS-Prefetch-Control: off
X-Download-Options: noopen
X-Frame-Options: SAMEORIGIN
X-Permitted-Cross-Domain-Policies: none
X-XSS-Protection: 0
Content-Type: application/json; charset=utf-8
Content-Length: 4436
ETag: W/"1154-XvMMvLnLhVnCq9WNnjEYhXQL1V8"
Date: Sun, 14 Jun 2026 18:28:03 GMT
Connection: close
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    58080
     hu_portSfx :58080
     ignoreredirects 1
     loglevel   4
     path       /api/status
     protocol   http
     redirects  0
     timeout    30
     url        http://alexa-cookie-service:58080/api/status
     sslargs:
   QUEUE:
   READINGS:
     2026-06-14 20:28:03   LAST_REQUEST    get01
     2026-06-14 20:28:03   MATCHED_READINGS service_ok service_updated_at service_age_hours cookie_available refresh_available amazon_page
     2026-06-14 20:28:03   UNMATCHED_READINGS refresh_message export_name import_result export_import_result login_url last_error refresh_code refresh_action
     2026-06-14 20:28:03   amazon_page     amazon.de
     2026-06-14 20:28:03   cookie_available 1
     2026-06-14 20:26:44   export_import_result ok
     2026-06-14 20:25:14   last_error     
     2026-06-14 20:25:14   login_url       http://192.168.178.188:58090/
     2026-06-14 20:28:03   refresh_available 1
     2026-06-14 20:25:14   refresh_message Please open http://192.168.178.188:58090/ with your browser and login to Amazon. The cookie will be output here after successfull login.
     2026-06-14 20:28:03   service_age_hours 0.04
     2026-06-14 20:28:03   service_ok      1
     2026-06-14 20:28:03   service_updated_at 2026-06-14T18:25:56.266Z
   REQUEST:
     context    get
     data       
     header     x-auth-token: %%ACS_TOKEN%%
     ignoreredirects 0
     num        01
     retryCount 0
     type       get01
     url        %%ACS_BASEURL%%/api/status
     value     
   defptr:
     readingBase:
       amazon_page reading
       cookie_available reading
       export_import_result reading
       last_error reading
       login_url  reading
       refresh_available reading
       refresh_message reading
       service_age_hours reading
       service_ok reading
       service_updated_at reading
     readingNum:
       amazon_page 15
       cookie_available 13
       export_import_result 04
       last_error 17
       login_url  16
       refresh_available 14
       refresh_message 01
       service_age_hours 12
       service_ok 10
       service_updated_at 11
     readingOutdated:
     requestReadings:
       get01:
         amazon_page reading 15
         cookie_available reading 13
         refresh_available reading 14
         service_age_hours reading 12
         service_ok reading 10
         service_updated_at reading 11
       get02:
         last_error reading 17
         login_url  reading 16
         refresh_message reading 01
       get03:
         export_import_result reading 04
Attributes:
   baseUrl    http://alexa-cookie-service:58080
   echodevice AlexaAccount
   get01Name  status
   get01NoData 1
   get01URL   %%ACS_BASEURL%%/api/status
   get02Name  loginUrl
   get02NoData 1
   get02URL   %%ACS_BASEURL%%/api/cookie/login/url
   get03Name  exportCookie
   get03NoData 1
   get03URL   %%ACS_BASEURL%%/api/cookie?save=%%ACS_EXPORT_NAME%%
   getHeader1 x-auth-token: %%ACS_TOKEN%%
   reading01JSON message
   reading01Name refresh_message
   reading02JSON saveTarget
   reading02Name export_name
   reading02OExpr BEGIN { require FHEM::AlexaCookieService::EchodeviceImport; }; $val || FHEM::AlexaCookieService::EchodeviceImport::export_name_for_device(AttrVal($name,"echodevice","")) || ""
   reading03JSON saveTarget
   reading03Name import_result
   reading03OExpr $val ? (FHEM::AlexaCookieService::EchodeviceImport::trigger_import_for_device(AttrVal($name,"echodevice","")) || "ok") : "skipped"
   reading04JSON serviceUpdatedAt
   reading04Name export_import_result
   reading04OExpr $val ? (FHEM::AlexaCookieService::EchodeviceImport::trigger_import_for_device(AttrVal($name,"echodevice","")) || "ok") : "skipped"
   reading10JSON ok
   reading10Name service_ok
   reading11JSON updatedAt
   reading11Name service_updated_at
   reading12JSON ageHours
   reading12Name service_age_hours
   reading13JSON hasCookie
   reading13Name cookie_available
   reading14JSON hasRefreshToken
   reading14Name refresh_available
   reading15JSON amazonPage
   reading15Name amazon_page
   reading16JSON proxyUrl
   reading16Name login_url
   reading17JSON error
   reading17Name last_error
   reading18JSON code
   reading18Name refresh_code
   reading19JSON code
   reading19Name refresh_action
   reading19OExpr $val eq "NO_STATE" ? "Start Login Flow." : ($val ? "Refresh failed: $val" : "")
   replacement01Mode key
   replacement01Regex %%ACS_TOKEN%%
   replacement01Value alexa_cookie_service_token
   replacement02Mode expression
   replacement02Regex %%ACS_EXPORT_NAME%%
   replacement02Value FHEM::AlexaCookieService::EchodeviceImport::export_name_for_device(AttrVal($name,"echodevice",""))
   replacement03Mode expression
   replacement03Regex %%ACS_BASEURL%%
   replacement03Value AttrVal($name,"baseUrl","")
   requestData {}
   requestHeader1 x-auth-token: %%ACS_TOKEN%%
   requestHeader2 Content-Type: application/json
   room       Amazon
   set01Data  {}
   set01Method POST
   set01Name  refresh
   set01NoArg 1
   set01ParseResponse 1
   set01URL   %%ACS_BASEURL%%/api/cookie/refresh?save=%%ACS_EXPORT_NAME%%
   set02Data  {}
   set02Method POST
   set02Name  loginStart
   set02NoArg 1
   set02ParseResponse 1
   set02URL   %%ACS_BASEURL%%/api/cookie/login/start
   setHeader1 x-auth-token: %%ACS_TOKEN%%
   setHeader2 Content-Type: application/json
   showError  1
   showMatched 1
   stateFormat {my $msg=ReadingsVal($name,"refresh_message",""); my $act=ReadingsVal($name,"refresh_action",""); my $err=ReadingsVal($name,"last_error",""); my $imp=ReadingsVal($name,"import_result",""); my $age=ReadingsVal($name,"service_age_hours","-"); $msg ne "" ? $msg : $act ne "" ? $act : $err ne "" ? "error: $err" : $imp ne "" ? "refresh/import: $imp" : "age ${age}h"}
   timeout    30
   userattr   baseUrl echodevice
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 15 Juni 2026, 08:04:45
Zitat von: FlatTV am 14 Juni 2026, 20:33:52Das State Format gefällt mir noch nicht sooo.
Die Meldung durch loginUrl bleibt auch nach Login, refresh und Status stehen.


Ja da habe ich so viel gebastelt, dass es nicht mehr so gut ist :)

Wie sieht es mit dieser angepassten Variante aus?

attr AlexaCookieService stateFormat {my $statusUpdatedAt=ReadingsTimestamp($name,"service_updated_at","");; my $msg=ReadingsVal($name,"refresh_message","");; my $msgTs=ReadingsTimestamp($name,"refresh_message","");; my $act=ReadingsVal($name,"refresh_action","");; my $actTs=ReadingsTimestamp($name,"refresh_action","");; my $err=ReadingsVal($name,"last_error","");; my $errTs=ReadingsTimestamp($name,"last_error","");; my $imp=ReadingsVal($name,"import_result","");; my $impTs=ReadingsTimestamp($name,"import_result","");; my $age=ReadingsVal($name,"service_age_hours","-");; ($msg ne "" && ($statusUpdatedAt eq "" || $msgTs ge $statusUpdatedAt)) ? $msg : ($act ne "" && ($statusUpdatedAt eq "" || $actTs ge $statusUpdatedAt)) ? $act : ($err ne "" && ($statusUpdatedAt eq "" || $errTs ge $statusUpdatedAt)) ? "error: $err" : ($imp ne "" && ($statusUpdatedAt eq "" || $impTs ge $statusUpdatedAt)) ? "refresh/import: $imp" : "age ${age}h"}
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 15 Juni 2026, 17:21:17
Hallo Sidey,
erstmal - ,,haste gut gemacht".

Ein wenig irreführend ist noch, wer hier was macht.
Das ist ein Auszug aus dem fhem-Log
2026.06.15 10:50:35.919 3: [AlexaAccount] [echodevice_setState] to connected
2026.06.15 11:41:37.003 3: [AlexaAccount] [echodevice_setState] to connected
2026.06.15 12:02:18.333 3: [AlexaAccount] [echodevice_LoginStart] Alter COOKIE=56134/6000 Refresh Cookie!
2026.06.15 12:02:18.345 3: [AlexaAccount] [echodevice_NPMLoginRefresh] alexa-cookie modul not found
2026.06.15 12:11:24.226 3: [AlexaAccount] [echodevice_NPMWaitForCookie] [NPM Login Refresh Mon Jun 15 12:02:18 2026] write new refreshtoken
2026.06.15 12:25:37.959 3: [AlexaAccount] [echodevice_setState] to connected
2026.06.15 14:41:41.497 3: [AlexaAccount] [echodevice_setState] to connected

Um 12:02 macht der ACS jedenfalls nichts, die Meldungen kommen aus dem 37_echodevice.pm
[2026-06-15T12:00:55,626 Europe/Berlin] [INFO] 127.0.0.1 - - [15/Jun/2026:10:00:55 +0000] "GET /healthz HTTP/1.1" 200 4437 "-" "-"
[2026-06-15T12:01:25,966 Europe/Berlin] [INFO] 127.0.0.1 - - [15/Jun/2026:10:01:25 +0000] "GET /healthz HTTP/1.1" 200 4437 "-" "-"
[2026-06-15T12:01:56,368 Europe/Berlin] [INFO] 127.0.0.1 - - [15/Jun/2026:10:01:56 +0000] "GET /healthz HTTP/1.1" 200 4436 "-" "-"
[2026-06-15T12:02:26,699 Europe/Berlin] [INFO] 127.0.0.1 - - [15/Jun/2026:10:02:26 +0000] "GET /healthz HTTP/1.1" 200 4437 "-" "-"
[2026-06-15T12:02:57,028 Europe/Berlin] [INFO] 127.0.0.1 - - [15/Jun/2026:10:02:57 +0000] "GET /healthz HTTP/1.1" 200 4437 "-" "-"
[2026-06-15T12:03:27,421 Europe/Berlin] [INFO] 127.0.0.1 - - [15/Jun/2026:10:03:27 +0000] "GET /healthz HTTP/1.1" 200 4437 "-" "-"

Um 12:11 Uhr gehts dann mit dem ACS los
[2026-06-15T12:11:23,214 Europe/Berlin] [INFO] Starting refresh (api)
[2026-06-15T12:11:23,215 Europe/Berlin] [INFO] Alexa-Cookie: Use as Login-Amazon-URL: amazon.de
[2026-06-15T12:11:23,216 Europe/Berlin] [INFO] Alexa-Cookie: Use as Base-Amazon-URL: amazon.com
...
[2026-06-15T12:11:24,202 Europe/Berlin] [INFO] Refresh finished (api) in 988 ms
[2026-06-15T12:11:24,214 Europe/Berlin] [INFO] Refresh request handled in 1001 ms (saveTarget=45result.json)
[2026-06-15T12:11:24,216 Europe/Berlin] [INFO] 172.27.0.2 - - [15/Jun/2026:10:11:24 +0000] "POST /api/cookie/refresh?save=45result.json HTTP/1.0" 200 4362 "-" "fhem"

Der AlexaAccount steht ebenfalls auf intervallogin 57660.
Sollte man daran drehen oder fällt dir noch was schickes ein.

LG
Jörg
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 15 Juni 2026, 18:03:38
Gibt es eigentlich ungefähr sowas schon?

98_Template.pmdefine <NAME> Template <TYPE> <TEMPLATE>FHEM/
 ├─ 98_Template.pm
 └─ templates/
     ├─ HTTPMOD/
     │   ├─ AlexaCookieService.cfg
     │   └─ irgendwas.cfg

Dann wäre es möglich, die cfg als Template für die Config zu nehmen.
define AlexaCookieService Template HTTPMOD AlexaCookieService
... ich schweife ab.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 15 Juni 2026, 22:23:17
Zitat von: FlatTV am 15 Juni 2026, 17:21:17Hallo Sidey,
erstmal - ,,haste gut gemacht".

Ein wenig irreführend ist noch, wer hier was macht.
Das ist ein Auszug aus dem fhem-Log
2026.06.15 10:50:35.919 3: [AlexaAccount] [echodevice_setState] to connected
2026.06.15 11:41:37.003 3: [AlexaAccount] [echodevice_setState] to connected
2026.06.15 12:02:18.333 3: [AlexaAccount] [echodevice_LoginStart] Alter COOKIE=56134/6000 Refresh Cookie!
2026.06.15 12:02:18.345 3: [AlexaAccount] [echodevice_NPMLoginRefresh] alexa-cookie modul not found
2026.06.15 12:11:24.226 3: [AlexaAccount] [echodevice_NPMWaitForCookie] [NPM Login Refresh Mon Jun 15 12:02:18 2026] write new refreshtoken
2026.06.15 12:25:37.959 3: [AlexaAccount] [echodevice_setState] to connected
2026.06.15 14:41:41.497 3: [AlexaAccount] [echodevice_setState] to connected

Der AlexaAccount steht ebenfalls auf intervallogin 57660.
Sollte man daran drehen oder fällt dir noch was schickes ein.

Das ist mir zunächst nicht aufgefallen :)  Ist bei mir aber exakt genau so, weil alle 6000 Sekunden das Alter vom gespeicherten cookie geprüft wird.

Den Intervall kann man seltsamerweise mit einem npm Attribut (hat mit npm nichts zu tun) ändern:
attr AlexaAccount npm_refresh_intervall 60060
Mit dem Attribut wird auch nicht direkt das refresh Intervall gesteuert, sondern das Mindestalter, bevor ein refresh ausgelöst wird.
Kurzum, wenn das Attribut größer als der zyklische refresh von acs ist, dann sollte es zu keiner Meldung im Log bei verbose 3 kommen.


Zitat von: FlatTV am 15 Juni 2026, 18:03:38Gibt es eigentlich ungefähr sowas schon?

FHEM/
 ├─ 98_Template.pm
 └─ templates/
     ├─ HTTPMOD/
     │   ├─ AlexaCookieService.cfg
     │   └─ irgendwas.cfg

So gibt es das leider derzeit nicht, wäre aber wirklich eine besser verwaltbare Lösung als die heutigen Templat Optionen..

Wenn wir einen stabilen Stand haben, kann ich ein Template für die Aufnahme vorschlagen.

Der Copy&Paste Ansatz ist aber aktuell auch nicht so übel finde ich für gefühlt ~3 Anwender.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 16 Juni 2026, 06:04:44
Zitat von: Sidey am 15 Juni 2026, 22:23:17Der Copy&Paste Ansatz ist aber aktuell auch nicht so übel finde ich für gefühlt ~3 Anwender.

Auch wieder wahr ^^
Titel: Aw: [Docker / Container] echodevice
Beitrag von: tatu123 am 17 Juni 2026, 19:55:16
Melde mich mal als Nutzer "4"  :D

Vielen Dank. Ich hab zwar einen kleinen Moment gebracht alles zum laufen zu bringen. Aber jetzt
tut. Am längsten hab ich gebraucht zu erkennen das EchodeviceImport.pm aus dem git zu nehmen da die Funktion
"export_name_for_device" im fhem fehlt. Aber war lösbar.

Super Sache das.

Titel: Aw: [Docker / Container] echodevice
Beitrag von: JWRu am 18 Juni 2026, 10:16:59
Mal eine generelle Frage, da ich mit Docker nicht so bewandert bin:
Funktioniert das auch, wenn der Docker-Container auf einer anderen Maschine läuft?
Mein FHEM läuft nativ unter Debian Trixie auf einer ZBox und ich würde den Container eher auf meinem Synology NAS installieren.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 18 Juni 2026, 22:30:56
Zitat von: JWRu am 18 Juni 2026, 10:16:59Mal eine generelle Frage, da ich mit Docker nicht so bewandert bin:
Funktioniert das auch, wenn der Docker-Container auf einer anderen Maschine läuft?
Mein FHEM läuft nativ unter Debian Trixie auf einer ZBox und ich würde den Container eher auf meinem Synology NAS installieren.

Ja das geht problemlos, da die Kommunikation über Netzwerk Verbindungen läuft. In deinem Fall dann über dein LAN und kein container Netzwerk. Also musst Du die Ports beide im Netzwerk veröffentlichen.

Edit:
Da das Cookie über eine Datei ausgetauscht wird, braucht es noch eine Dateifreigabe. Z.B. via NFS. Ich könnte da aber auch was entwickeln,  dass es in FHEM gespeichert wird.
Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: FlatTV am 19 Juni 2026, 18:10:28
Zitat von: tatu123 am 17 Juni 2026, 19:55:16Am längsten hab ich gebraucht zu erkennen das EchodeviceImport.pm aus dem git zu nehmen da die Funktion
"export_name_for_device" im fhem fehlt.

@Sidey
Hast du das mitbekommen?
Da gibt es unterschiedliche Inhalte.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 19 Juni 2026, 22:01:11

Zitat von: FlatTV am 19 Juni 2026, 18:10:28
Zitat von: tatu123 am 17 Juni 2026, 19:55:16Am längsten hab ich gebraucht zu erkennen das EchodeviceImport.pm aus dem git zu nehmen da die Funktion
"export_name_for_device" im fhem fehlt.

@Sidey
Hast du das mitbekommen?
Da gibt es unterschiedliche Inhalte.

Jetzt habe ich es verstanden, danke für den Hinweis.  8)
Bin mir aber nicht im klaren wieso es den Unterschied gibt.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 21 Juni 2026, 22:20:00
Zitat von: JWRu am 18 Juni 2026, 10:16:59Mal eine generelle Frage, da ich mit Docker nicht so bewandert bin:
Funktioniert das auch, wenn der Docker-Container auf einer anderen Maschine läuft?
Mein FHEM läuft nativ unter Debian Trixie auf einer ZBox und ich würde den Container eher auf meinem Synology NAS installieren.

Ich habe die Integration angepasst. Es funktioniert jetzt auch auf unterschiedlichen Hosts und ohne Dateifreigabe.
Dafür braucht es FHEM ab rev. 31377 (ab 22.06.2026) im Update und das im git repo hinterlegte HTTPMod.

Aktuell findet die Übertragung noch unverschlüsselt statt, das werde ich die nächsten Tage noch erweitern, so dass eine TLS Verschlüsselung möglich ist.

Grüße Sidey

Titel: Aw: [Docker / Container] echodevice
Beitrag von: JWRu am 25 Juni 2026, 08:23:46
Vielen Dank für die Anpassung!
Ich komme hoffentlich im Laufe der nächsten Woche mal dazu, den Container zu installieren.
Dazu habe ich noch die folgende Frage:
Woher weiß echodevice, dass der Cookie vom Container bezogen werden soll und nicht von dem lokal laufenden NPM-Service, der ja Probleme bereitet und die Systemlast nach oben treibt?
Die aktuelle Version von 37_echodevice.pm ist vom 14.11.2025 - da gab's ja deine Lösung noch gar nicht.
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 25 Juni 2026, 12:55:27
Zitat von: JWRu am 25 Juni 2026, 08:23:46Die aktuelle Version von 37_echodevice.pm ist vom 14.11.2025 - da gab's ja deine Lösung noch gar nicht.

Die Grundidee ist, früher per ACS zu aktualisieren, als im echodevice angegeben.

Zum anderen, wenn Du in der FHEM Umgebung kein node hast, dann kann da nichts aufgerufen werden. Maximal kann eine Fehlermeldung erzeugt werden.

Grüße Sidey
Titel: Aw: [Docker / Container] echodevice
Beitrag von: JWRu am 25 Juni 2026, 23:02:06
ZitatZum anderen, wenn Du in der FHEM Umgebung kein node hast, dann kann da nichts aufgerufen werden. Maximal kann eine Fehlermeldung erzeugt werden.
Habe ich aber. Ich habe das nach dieser Vorschrift installiert: https://www.mwinklerblog.de/modul-echodevice-npm/ und auch bis zum Auftreten der Probleme genutzt.
(Zur Zeit ist mein Account-Device disabled).
Titel: Aw: [Docker / Container] echodevice
Beitrag von: Sidey am 26 Juni 2026, 12:51:43
Zitat von: JWRu am 25 Juni 2026, 23:02:06Habe ich aber. Ich habe das nach dieser Vorschrift installiert: https://www.mwinklerblog.de/modul-echodevice-npm/ und auch bis zum Auftreten der Probleme genutzt.
(Zur Zeit ist mein Account-Device disabled).

Möchtest Du ACS nutzen oder geht damit etwas nicht und daher ist aktuell dein Stand deaktiviert?


Ich habe die Doku von ACS aktualisiert.

Solange der Wert von echodevice_NPMWaitForCookie größer ist, als der refresh von ACS wird das echodevice keine Aktualisierung versuchen.

Grüße Sidey

Titel: Aw: [Docker / Container] echodevice
Beitrag von: JWRu am 26 Juni 2026, 14:52:47
ZitatMöchtest Du ACS nutzen oder geht damit etwas nicht und daher ist aktuell dein Stand deaktiviert?
Mein echodevice Account-Device ist zur Zeit deswegen deaktiviert: https://forum.fhem.de/index.php?topic=144852.0
Ich habe den von Michael Winkler beschriebenen Patch in alexa.cookie.js https://forum.fhem.de/index.php?topic=144852.msg1364944 bisher nicht gemacht und auf einen endgültigen Fix gewartet.
Da es diesen noch nicht gibt, hatte ich überlegt auf ACS umzusteigen.