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
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
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
Ja, aber nicht in der yml Datei :-\
thx
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.
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
Oder man legt das Volumen ./alexa-cookie-data:/data gleich nach .fhem/alexa-cookie-data:/data
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
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 8yml:
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.
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
Zitat von: Sidey am 14 Mai 2026, 21:30:15Zitat 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...
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
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
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?
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
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
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
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
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
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
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.
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.
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
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"
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
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
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
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 AmazonDieser at ist aktiv
defmod AlexaCookieRefresh at +*06:00:00 {Alexa_CookieRefresh("AlexaAccount");;}
attr AlexaCookieRefresh room AmazonUnd 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
@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
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 8Damit 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_AlexaCookieServiceRefresh
set 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.
Supi,
Ich werde Perl Packages in FHEM bereitstellen, damit wird die Integrstion einfacher denke ich.
Grüße Sidey
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
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
Mir 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.
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.txtUnd 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.3Damit wäre die Installation deutlich vereinfacht.
Wenn Du noch Anregungen hast, dann her damit :)
Grüße Sidey
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
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
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"}
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
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.
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 60060Mit 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.
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 ^^
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.
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.
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
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.
Zitat von: FlatTV am 19 Juni 2026, 18:10:28Zitat 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
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
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.
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
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).
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
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.