zigbee2mqtt in Docker

Begonnen von rabehd, 09 Januar 2026, 21:58:39

Vorheriges Thema - Nächstes Thema

rabehd

(eigentlich kein FHEM-Thema)
Ich bekomme zigbee2MQTT im Docker-Container zwar zum Laufen, aber nicht konfiguriert.

Auf dem Raspi
Zitatls -la /dev/serial/by-id/
usb-dresden_elektronik_ingenieurtechnik_GmbH_ConBee_II_DE2439911-if00 -> ../../ttyACM0
usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0 -> ../../ttyUSB0
usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_48d17ff1cb8aef118f9e24ccef8776e9-if00-port0 -> ../../ttyUSB1

Den Container starte ich mit
Zitatdocker run   --name zigbee2mqtt   --restart=unless-stopped    --device=/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_48d17ff1cb8aef118f9e24ccef8776e9-if00-port0:/dev/ttyACM0    -p 8089:8080    -v $(pwd)/data:/app/data    -v /run/udev:/run/udev:ro    -e TZ=Europe/Amsterdam    ghcr.io/koenkk/zigbee2mqtt
Damit bekomme ich die Konfigurationsseite von zigbee2mqtt. Unter "Found Devices" werden alle USB-Geräte des Raspi aufgelistet und auch mit dem Mappping des Host. Egal was ich dann ausprobiere, jedes submit führt wieder zur Konfigurationsseite.
Wieso sehe ich die anderen USB-Geräte?
Wieso wird Sonoff_Zigbee_3.0_USB_Dongle mit ttyUSB1 und nicht mit ttyACM0?
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Was sagt denn:docker exec zigbee2mqtt ls -la /dev
Eigentlich dürfte Z2M aber im Container nicht die Devices des Docker-Hosts sehen. Sicher, dass Z2M nicht parallel als nicht-container irgendwo läuft und du aus Versehen gar nicht mit port 8089 verbunden bist?

Poste bitte auch mal Log von Z2M beim Start.

rabehd

Danke, fürs Helfen.

Zitat von: passibe am 09 Januar 2026, 22:42:28Was sagt denn:
docker exec zigbee2mqtt ls -la /dev
total 4
drwxr-xr-x    5 root    root          340 Jan  9 21:41 .
drwxr-xr-x    1 root    root          4096 Jan  9 21:38 ..
lrwxrwxrwx    1 root    root            13 Jan  9 21:41 fd -> /proc/self/fd
crw-rw-rw-    1 root    root        1,  7 Jan  9 21:41 full
drwxrwxrwt    2 root    root            40 Jan  9 21:41 mqueue
crw-rw-rw-    1 root    root        1,  3 Jan  9 21:41 null
lrwxrwxrwx    1 root    root            8 Jan  9 21:41 ptmx -> pts/ptmx
drwxr-xr-x    2 root    root            0 Jan  9 21:41 pts
crw-rw-rw-    1 root    root        1,  8 Jan  9 21:41 random
drwxrwxrwt    2 root    root            40 Jan  9 21:41 shm
lrwxrwxrwx    1 root    root            15 Jan  9 21:41 stderr -> /proc/self/fd/2
lrwxrwxrwx    1 root    root            15 Jan  9 21:41 stdin -> /proc/self/fd/0
lrwxrwxrwx    1 root    root            15 Jan  9 21:41 stdout -> /proc/self/fd/1
crw-rw-rw-    1 root    root        5,  0 Jan  9 21:41 tty
crw-rw----    1 root    dialout  188,  1 Jan  9 21:41 ttyACM0
crw-rw-rw-    1 root    root        1,  9 Jan  9 21:41 urandom
crw-rw-rw-    1 root    root        1,  5 Jan  9 21:41 zero

Zitat von: passibe am 09 Januar 2026, 22:42:28Sicher, dass Z2M nicht parallel als nicht-container irgendwo läuft und du aus Versehen gar nicht mit port 8089 verbunden bist?
Das wäre für mich nicht erklärbar, denn ich habe bisher zigbee2mqtt nur im Docker getestet.
Wenn ich zum Test den Port aus dem Container auf 8119 umbiege, dann antwortet auf 8089 nichts mehr.

Zitat von: passibe am 09 Januar 2026, 22:42:28Eigentlich dürfte Z2M aber im Container nicht die Devices des Docker-Hosts sehen.
Meine ich auch. Gibt es eine Einstellung für Docker, das alle Geräte durchreicht? Habe ich da mal was kaputt gemacht?

Zitat von: passibe am 09 Januar 2026, 22:42:28Poste bitte auch mal Log von Z2M beim Start.
[2026-01-10 11:16:04] info:    z2m: Logging to console, file (filename: log.log)
[2026-01-10 11:16:04] info:    z2m: Starting Zigbee2MQTT version 2.7.2 (commit #3a49c95786c2fba749e7696aab4cc38e467d2c4c
)
[2026-01-10 11:16:04] info:    z2m: Starting zigbee-herdsman (8.0.1)
[2026-01-10 11:16:04] info:    zh:adapter:discovery: Matched adapter: {"path":"/dev/ttyUSB1","manufacturer":"ITead","serialNumber":"48d17ff1cb8aef118f9e24ccef8776e9","pnpId":"usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_48d17ff1cb8aef118f9e24ccef8776e9-if00-port0","vendorId":"10c4","productId":"ea60"} => zstack: 4
[2026-01-10 11:16:04] info:    zh:zstack:znp: Opening SerialPort with {"path":"/dev/ttyUSB1","baudRate":115200,"rtscts":false,"autoOpen":false}
[2026-01-10 11:16:04] error:    z2m: Error while starting zigbee-herdsman
[2026-01-10 11:16:04] error:    z2m: Failed to start zigbee-herdsman
[2026-01-10 11:16:04] error:    z2m: Check https://www.zigbee2mqtt.io/guide/installation/20_zigbee2mqtt-fails-to-start_crashes-runtime.html for possible solutions
[2026-01-10 11:16:04] error:    z2m: Exiting...
[2026-01-10 11:16:04] error:    z2m: Error: Error: No such file or directory, cannot open /dev/ttyUSB1





Auch funktionierende Lösungen kann man hinterfragen.

passibe

Ah, ok. Im Dateisystem sind auch nicht alle weitergereicht, sonst hättest du unter /tty im Container noch ganz viele andere. Vermutlich liegt das an udev, dass die autodiscovery alle sieht.

Aber stell doch einfach in der configuration.yaml den Pfad manuell auf /dev/ttyACM0. Dann ist er der Pfad fix und passt genau zu deinem Mapping.

rabehd

Zitat von: passibe am 10 Januar 2026, 12:19:39stell doch einfach in der configuration.yaml den Pfad manuell auf /dev/ttyACM0
Das hat geholfen.
Jetzt muss ich noch das/die Netzwerk/e anpassen, damit sich zigbee2mqtt mit MQTT im FHEM-Container verbindet.

Aber, seit dem hängt sich der Container FHEM auf. Ich muss das mal beobachten.
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Zitat von: rabehd am 10 Januar 2026, 13:15:22Jetzt muss ich noch das/die Netzwerk/e anpassen, damit sich zigbee2mqtt mit MQTT im FHEM-Container verbindet.

Das wäre jetzt der Zeitpunkt wo du auf docker compose umsteigen solltest (davon hatten wir gestern auch kurz: https://forum.fhem.de/index.php?topic=143596.msg1355471#msg1355471 )

Denn wenn du sowohl FHEM als auch Z2M in dasselbe compose file packst, werden sie beide automatisch Teil des von docker compose erstellten Netzwerks. Würde ich hier unbedingt empfehlen, es sind ja auch Services die sowieso zusammengehören.

Falls nicht, musst du selbst Netzwerk erstellen (also mit docker network create ...) und dann beide container so starten, dass sie da hinzugefügt werden.

rabehd

Ich nutze normalerweise Docker per Portainer mit Stacks (compose). Den erste Versuch hatte ich auch mit der compose-Datei vom zigbee2mqtt gemacht. Weil das mit dem Stick nicht klappte, habe ich das Beispiel aus dem Forum hier genutzt und jetzt auch als eigenes compose unter Stack angelegt. 

Es ist aber egal, ob  sobald ein zigbee2mqtt-Container läuft, hängt der FHEM-Container.

 
 
Auch funktionierende Lösungen kann man hinterfragen.

passibe

Hier mal ein Beispiel meiner Compose-File für Z2M, damit sollte es eigentlich klappen. Habs auf deine Gegebenheiten angepasst, ggfs. musst du das depends_on noch rausschmeißen, bis alles läuft:

  z2m:
    image: koenkk/zigbee2mqtt:latest
    container_name: zigbee2mqtt
    restart: unless-stopped
    depends_on:
      fhem:
        condition: service_healthy
    ports:
      - "8089:8080"
    volumes:
      - ./data:/app/data
      - /run/udev:/run/udev:ro
    devices:
      - /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_48d17ff1cb8aef118f9e24ccef8776e9-if00-port0:/dev/ttyACM0
    privileged: false
    environment:
      TZ: Europe/Berlin

Zitat von: rabehd am 10 Januar 2026, 15:21:34hängt der FHEM-Container
Wie kommt das? Steht was im FHEM-Log? Was sagt das Z2M-Log jetzt? Welchen MQTT-Broker benutzt du? MQTT2_SERVER direkt in FHEM?

rabehd

Ich kann das jetzt eingrenzen.
Die Kommunikation zigbee2mqtt zu MQTT hat ein Problem und "bremst" FHEM.

[2026-01-10 16:09:40] info: z2m: Connecting to MQTT server at mqtt://192.168.31.60:1883
[2026-01-10 16:09:40] info: z2m: Connected to MQTT server
[2026-01-10 16:09:40] info: z2m:mqtt: MQTT publish: topic 'esperanto2023/bridge/state', payload '{"state":"online"}'
[2026-01-10 16:09:40] info: z2m: Started frontend on port 8080
[2026-01-10 16:09:40] info: z2m: Zigbee2MQTT started!
[2026-01-10 16:09:42] info: z2m:mqtt: MQTT publish: topic 'esperanto2023/bridge/state', payload '{"state":"online"}'
[2026-01-10 16:11:10] error: z2m: MQTT error: Keepalive timeout
[2026-01-10 16:11:10] error: z2m: Not connected to MQTT server!
[2026-01-10 16:11:20] error: z2m: Not connected to MQTT server!
[2026-01-10 16:11:30] error: z2m: Not connected to MQTT server!
[2026-01-10 16:11:40] error: z2m: Not connected to MQTT server!
[2026-01-10 16:11:41] error: z2m: MQTT error: connack timeout

[2026-01-10 16:14:30] error: z2m: Not connected to MQTT server!
[2026-01-10 16:14:30] error: z2m: MQTT error: connect ECONNREFUSED 192.168.31.60:1883
[2026-01-10 16:14:31] error: z2m: MQTT error: connect ECONNREFUSED 192.168.31.60:1883
[2026-01-10 16:14:36] info: z2m: Connected to MQTT server
[2026-01-10 16:14:36] info: z2m:mqtt: MQTT publish: topic 'esperanto2023/bridge/state', payload '{"state":"online"}'
[2026-01-10 16:16:06] error: z2m: MQTT error: Keepalive timeout
[2026-01-10 16:16:10] error: z2m: Not connected to MQTT server!
[2026-01-10 16:16:20] error: z2m: Not connected to MQTT server!
[2026-01-10 16:16:30] error: z2m: Not connected to MQTT server!
[2026-01-10 16:16:37] error: z2m: MQTT error: connack timeout
[2026-01-10 16:16:39] error: z2m: Not connected to MQTT server!

Scheinbar fehlt hier was.
defmod MQTT2Broker MQTT2_SERVER 1883 global
attr MQTT2Broker autocreate simple
attr MQTT2Broker keepaliveFactor 0
attr MQTT2Broker respectRetain 1
Das Log von FHEM enthält nur die Neustarts.
Auch funktionierende Lösungen kann man hinterfragen.