# zigbee2mqtt: the house Zigbee stack on esh-docker-vm, replacing Home Assistant's ZHA. # Requested by ha-dev, operator-approved (Prime, 2026-09-27). Greenfield: no devices migrated. # # Radio: SLZB-MR1U at 10.0.90.10 (VLAN 90), chip 0 = EFR32MG21 / EmberZNet 8.0.2 on TCP 6638, # so adapter `ember`. Chip 1 (CC2652P7, :6639) is unused. By IP on purpose: containers here # cannot resolve *.internal, and the SLZB's mDNS TXT wrongly advertises radio_type znp for 6638. # ONE client per radio socket: HA's ZHA entry must stay disabled/deleted while this runs. # # ⚠ STATE, and the Zigbee NETWORK KEY, live in /opt/docker/data/zigbee2mqtt on the host (root # 0700): configuration.yaml, secret.yaml (network key, MQTT password, frontend token), # coordinator_backup.json, database.db. Covered by the host's restic (/opt/docker). NEVER in # git: this repo holds only this file, .env.example and the README. Losing the network key # means re-pairing every device, so the vault holds a copy (see README). # # .env (tunables): IMAGE, FRONTEND_PORT. name: zigbee2mqtt services: zigbee2mqtt: image: ${IMAGE:?set IMAGE} container_name: zigbee2mqtt restart: unless-stopped environment: TZ: America/Los_Angeles volumes: - /opt/docker/data/zigbee2mqtt:/app/data ports: - "${FRONTEND_PORT:-8099}:8080" networks: - tnet # reaches the broker as mqtt://mosquitto:1883 labels: - homepage.group=Apps - homepage.name=Zigbee2MQTT - homepage.icon=si-zigbee2mqtt - homepage.description=Zigbee stack (SLZB-MR1U, channel 25) - homepage.href=http://10.0.50.45:${FRONTEND_PORT:-8099} healthcheck: test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:8080"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: tnet: name: traefik-net external: true