fhem im Docker-Container: echodevice läßt sich nicht aktivieren

Begonnen von rabehd, 11 Januar 2025, 18:06:35

Vorheriges Thema - Nächstes Thema

rabehd

Ich habe einen Pi 5 mit bookworm auf dem FHEM gut läuft. Jetzt versuche ich das alels in Docker-Container umzuziehen. Erstmal als "Testsystem".
Der Container wird per docker-compose-Datei erzeugt.
  FHEM:
    container_name: fhem_appl
    image: ghcr.io/fhem/fhem-docker:4-bullseye
    restart: always
    networks:
      fhem-network:
        ipv4_address: 172.31.31.60
    ports:
      - 8073:8083
      - 1883:1883
      - 3002:3002
    volumes:
      - /docker/fhem:/opt/fhem/

Ich habe versucht mich an die Anleitung von Michael zuhalten.
So sieht das Device aus.
[code]define AccountEsperanto echodevice xxx@xxx.xx xxx
attr AccountEsperanto npm_proxy_ip 192.168.31.60
attr AccountEsperanto npm_proxy_listen_ip 172.31.31.60
attr AccountEsperanto npm_proxy_port 3002
#   DEF        xxx@xxx.xx xxx
#   FUUID      67811d62-f33f-294e-af4e-aa0723892a81923b
#   LOGINMODE  NPM
#   NAME       AccountEsperanto
#   NR         214
#   NTFY_ORDER 50-AccountEsperanto
#   STATE      INITIALIZED
#   TYPE       echodevice
#   model      ACCOUNT
#   OLDREADINGS:
#   READINGS:
#     2025-01-11 17:23:29   COOKIE_MODE     NPM
#     2025-01-11 17:23:36   COOKIE_TYPE     NEW
#     2025-01-11 17:23:36   autocreate_devices stop
#     2025-01-11 17:23:36   version         0.2.30
#   helper:
#     RUNLOGIN   0
#     SERVER     layla.amazon.de
#     TWOFA     
#
setstate AccountEsperanto INITIALIZED
setstate AccountEsperanto 2025-01-11 17:23:29 COOKIE_MODE NPM
setstate AccountEsperanto 2025-01-11 17:23:36 COOKIE_TYPE NEW
setstate AccountEsperanto 2025-01-11 17:23:36 autocreate_devices stop
setstate AccountEsperanto 2025-01-11 17:23:36 version 0.2.30

[/code]
 
Fhem reagiert nicht mehr und der Container ist meist auf "unhealthy". Nach einem Neustart des Containers habe ich das auf der Oberfläche.
ZitatInstallationsergebnis

Installation wird angestartet

up to date, audited 106 packages in 5s

17 packages are looking for funding
run `npm fund` for details

2 low severity vulnerabilities

To address all issues (including breaking changes), run:
npm audit fix --force

Run `npm audit` for details.

!!Installation fehlgeschlagen!!

Was habe ich übersehen?
Auch funktionierende Lösungen kann man hinterfragen.

passibe

#1
Die "geführte" Installation vom npm-Paket alexa-cookie2 über FHEMWEB läuft unter Docker nicht.

Du musst das Image entsprechend erweitern, sodass alexa-cookie2 schon im Image installiert wird. Dazu einfach den Beispielen auf GitHub folgen: https://github.com/fhem/fhem-docker/blob/dev/docker-compose.yml (für npm-Pakete ab Zeile 154).

Heißt:
    #image: ghcr.io/fhem/fhem-docker:4-bullseye
    build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:4-bullseye
        RUN <<EOF
          npm install -g --unsafe-perm --production alexa-cookie2
          npm cache clean --force
        EOF
    pull_policy: build

Dann einfachset AccountEsperanto NPM_login newausführen.

rabehd

Ich habe es damit testweise probiert.
networks:
  net:
    driver: bridge
    # enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 172.27.0.0/28
          gateway: 172.27.0.1
        # - subnet: fd00:0:0:0:27::/80
        #   gateway: fd00:0:0:0:27::1

services:

  # example with extending npm packages to your image
  fhem_c7:
    build:
      context: .
      dockerfile_inline: |
        FROM ghcr.io/fhem/fhem-docker:4-bullseye
        RUN <<EOF
          npm install -g --unsafe-perm --production alexa-cookie2
          npm cache clean --force
        EOF
    pull_policy: build
    restart: always
    networks:
      - net
    ports:
      - "8883:8083"
    volumes:
      - "./fhem/:/opt/fhem/"


Zitat von: passibe am 11 Januar 2025, 20:58:23Dann einfach
Code Auswählen Erweitern
set AccountEsperanto NPM_login newausführen.
Führt leider zu folgender Fehlermeldung.

ZitatDas alexa-cookie Modul wurde nicht gefunden. Bitte fuehrt am Amazon Account Device einen set "NPM_install" durch

set AccountEsperanto NPM_installzerstört den Container (kein Zugriff auf FHEM, auch nicht nach Neustart des Containers, erst nach Neubau des Containers)
:'(
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Huch? Das hat vorhin bei mir wunderbar funktioniert.

Aber irgendwie kriege ich es jetzt auch nicht mehr hin. Komisch.
alexa-cookie2 wird richtig in /usr/lib/node_modules/alexa-cookie2 installiert. Aber echodevice checkt das irgendwie nicht (mehr? hatte ich vorhin einfach nur Glück?!). Muss man hier irgendwie NODE_PATH als Umgebungsvariable setzen?

Habe es auch mit dem Standard-Image und
docker exec -it <name-fhem-container> /bin/bashund dann
npm install -g --unsafe-perm --production --prefix /opt/fhem/cache/alexa-cookie alexa-cookie2
npm cache clean --force
chown -R fhem: /opt/fhem/cache/alexa-cookie
probiert, einmal hat es funktioniert, danach nicht mehr.

Wäre aber ohnehin eine noch unsauberere Lösung, schon weil alexa-cookie2 dann unter /opt/fhem liegt. Das würde dann auch nicht regelmäßig aktualisiert, wenn das image neu gebaut wird.
Vielleicht zerschießt die Aktualisierung der Permissions in der entry.sh auch irgendwie die Berechtigungen für alles unter /opt/fhem/cache ...

Muss mir das alles demnächst nochmal mit frischem Kopf anschauen.

passibe

#4
Ok, habe verstanden woran es liegt.

Aus irgendeinem Grund geht 37_echodevice.pm davon aus, dass das alexa-cookie-Modul unter /opt/fhem/cache/alexa-cookie/node_modules/alexa-cookie2 liegt.
Wenn man es mit
npm install -g --unsafe-perm --production --prefix /opt/fhem/cache/alexa-cookie alexa-cookie2im laufenden Container installiert, dann liegt es aufgrund des -g flags aber unter
/opt/fhem/cache/alexa-cookie/lib/node_modules/alexa-cookie2

Deshalb, wie in der Anleitung von Michael, das -g flag weglassen, also (EDITs zur Vollständigkeit):
1. Container mit ganz normalem Image starten, für die Dauer der Ersteinrichtung aber im compose-file oder docker run-Kommando Port 3002 mappen.
2. Dann:docker exec -it <name-fhem-container> /bin/bash3. Dann:npm install --unsafe-perm --production --prefix /opt/fhem/cache/alexa-cookie alexa-cookie2
npm cache clean --force
chown -R fhem: /opt/fhem/cache/alexa-cookie
4. EDIT: echodevice definieren, also:
define <devicename> echodevice xxx@xxx.xx xxx5. EDIT: dann Attribut für den Proxy setzen, das muss die IP-Adresse des Systems IM LAN sein (d.h. die reguläre IP-Adresse, unter der man FHEM auch aus dem restlichen Netzwerk erreicht, also idR irgendwas mit 192.168.x.x und nicht die Docker-interne 172.x.x.x-Adresse):
attr <devicename> npm_proxy_ip <IP>6. Dann set <devicename> NPM_login new.

rabehd

Zitat von: passibe am 12 Januar 2025, 21:02:093. Dann:
In welchem Container?
FHEM ->
:/opt/fhem# npm install --unsafe-perm --production --prefix /opt/fhem/cache/alexa-cookie alexa-cookie2
bash: npm: command not found
alexa-FHEM ->
..:/alexa-fhem# chown -R fhem: /opt/fhem/cache/alexa-cookie
chown: invalid spec: 'fhem:'
Auch funktionierende Lösungen kann man hinterfragen.

passibe

#6
Zitat von: rabehd am 13 Januar 2025, 12:16:34In welchem Container?
Im FHEM-Container.
Hier geht es ja um echodevice, alexa-fhem hat damit überhaupt nichts zu tun (geht nur darum, echo-Geräte zu steuern, nicht, dass alexa FHEM-devices steuert ...).

Welches image benutzt du? Nach wie vor ghcr.io/fhem/fhem-docker:4-bullseye?
Das kann eigentlich nicht sein, dass da npm not found steht. Bist du vorher wirklich mit docker exec -it ... in den Container gewechselt?

Edit: In der neusten Version 5.0.0-beta2-bookworm scheint npm tatsächlich nicht vorhanden zu sein ... also bitte erstmal noch Version 4 verwenden.

rabehd

#7
Zitat von: passibe am 13 Januar 2025, 12:46:01Bist du vorher wirklich mit docker exec -it ... in den Container gewechselt?
nein, über Portainer

services:

  FHEM:
    container_name: fhem_appl
    image: ghcr.io/fhem/fhem-docker:5.0.0-beta2-bookworm
    restart: always
    networks:
      fhem-network:
        ipv4_address: 172.31.31.60
    ports:
      - 8073:8083
      - 1883:1883
      - 3002:3002
    volumes:
      - /docker/fhem:/opt/fhem/
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Zitat von: passibe am 13 Januar 2025, 12:46:01Edit: In der neusten Version 5.0.0-beta2-bookworm scheint npm tatsächlich nicht vorhanden zu sein ... also bitte erstmal noch Version 4 verwenden.
Sorry, hab das erst im Edit geschrieben, bitte aktuell für npm noch Version 4 verwenden. Habe bereits im Version 5 Beta-Thread gefragt, ob das Absicht ist, dass npm in Version 5 fehlt.

rabehd

Das Ganze ist irgendwie komisch.
Wenn ich den Container über
  FHEM:
    container_name: fhem_appl
    image: ghcr.io/fhem/fhem-docker:4-bullseye
    restart: always
    networks:
      fhem-network:
        ipv4_address: 172.31.31.60
    ports:
      - 8073:8083
      - 1883:1883
      - 3002:3002
    volumes:
      - ./fhem/:/opt/fhem/

Dann über Portainer in die Console gehe und
npm install --unsafe-perm --production --prefix /opt/fhem/cache/alexa-cookie alexa-cookie2
npm cache clean --force
chown -R fhem: /opt/fhem/cache/alexa-cookie
ausführe, dann bleibt er beim ersten Befehl hängen und ich muss abbrechen und den Befehl neu eingeben.

set <device> NPM_login new, läuft und fordert mich auf
ZitatLogin Ergebnis

Bitte den Link anklicken und die Amazonanmeldung durchfuehren.
http://172.31.31.60:3002

Die Adresse erreiche ich nicht, da sie im Container liegt. Ich ändere sie in die Adresse des Containerhost (192.168....). Damit komme ich auf eine Amazonseite mit QR-Code. Damit wiederrum geht es auf eine nicht vorhandene Alexa-Seite.

Starte ich den Container mit
    volumes:
     - /docker/fhem:/opt/fhem/
 
Dann kann ich die Befehle auch im Container ausführen. Bei  set <device> NPM_login new wird jedoch das npm_install fehlend gemeldet, welches ich aber in der Console getan habe.

Muss ich noch was Altes löschen?

Welche Seite müßte ich nach dem  set <device> NPM_login new aufrufen?
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Zitat von: rabehd am 13 Januar 2025, 19:02:01dann bleibt er beim ersten Befehl hängen und ich muss abbrechen und den Befehl neu eingeben.
Ok, komisch, aber sollte eigentlich kein Problem sein, wenn es danach läuft. Kannst es statt über Portainer natürlich auch mal direkt übers Terminal probieren mit docker exec ... Ist aber letztlich unerheblich, solange die Installation wenigstens einmal durchläuft.

Zitat von: rabehd am 13 Januar 2025, 19:02:01Damit komme ich auf eine Amazonseite mit QR-Code. Damit wiederrum geht es auf eine nicht vorhandene Alexa-Seite.
Du musst das Attribut npm_proxy_ip auf die 192.168 ... Adresse stellen. Dann stimmt auch der Link (d.h. du musst die Adresse nicht manuell ändern) und es kommt nicht ein QR-Code, sondern ein Loginfenster, siehe hier. Andere attrs musst du nicht anpassen oder hinzufügen, nur npm_proxy_ip.

Im bestehenden Container würde ich einfach mal den ./cache-Ordner löschen. Also bei dir – aus Sicht des Hostsystems – /docker/fhem/cache bzw. aus Sicht des Containers /opt/fhem/cache. Vorher natürlich prüfen, ob da nichts anderes wichtiges drin ist (denke aber nicht).
Falls das nichts nützt, zeig bitte mal (aus Sicht des Hostsystems) ein
ls -la /docker/fhem/cachebzw. aus dem Container
ls -la /opt/fhem/cache

rabehd

Zitat von: passibe am 13 Januar 2025, 19:30:14Du musst das Attribut npm_proxy_ip auf die 192.168 ... Adresse stellen.
Das war schon.

Zitat von: passibe am 13 Januar 2025, 19:30:14Im bestehenden Container würde ich einfach mal den ./cache-Ordner löschen.
Danach lief das Login durch und das Device ist grün. Aktuell habe ich aber noch keine Echos, da diese noch auf einem alten Account laufen.

Danke Dir, für die Unterstützung und besonders für die Geduld.

Auch funktionierende Lösungen kann man hinterfragen.