deCONZ

Connects to a deCONZ/ConBee/RaspBee gateway's own local REST API, with live updates pushed over its own WebSocket. Split out into its own integration, separate from Zigbee - a deCONZ gateway and a bare EZSP coordinator are both "Zigbee coordinators" conceptually, but talk completely different local protocols, so each now has its own gateways, devices, and settings.

Running deCONZ

Not bundled with Athena's own compose files - run it as its own container, on whatever machine the ConBee/RaspBee stick is physically plugged into. Athena's own repo already ships this as a ready-made docker-compose-deconz.yml (with a matching .env.deconz.example) - copy both, fill in the .env, and run docker compose -f docker-compose-deconz.yml up -d directly. Or save the snippet here as your own docker-compose.yml in a new folder:

# docker-compose.yml - deCONZ, standalone
services:
  deconz:
    container_name: deconz
    image: deconzcommunity/deconz:latest
    restart: unless-stopped
    devices:
      # Use /dev/serial/by-id/... (see `ls /dev/serial/by-id/`), not /dev/ttyACM0/ttyUSB0 - that
      # mapping can shift across reboots if more than one USB-serial adapter is plugged in.
      - '/dev/serial/by-id/<your-stick-here>:/dev/ttyACM0'
    volumes:
      - deconz-data:/opt/deCONZ
    ports:
      - '8080:8080'  # deCONZ's own web UI (Phoscon) + REST API - matches Athena's own default Port below
      - '8443:8443'  # the WebSocket API Athena's own live-update connection uses
    environment:
      - DECONZ_DEVICE=/dev/ttyACM0
      - DECONZ_WEB_PORT=8080
      - DECONZ_WS_PORT=8443
      # - DECONZ_BAUDRATE=115200 # ConBee III; use 38400 for RaspBee II instead
volumes:
  deconz-data:

Run docker compose up -d, then open http://<that-host>:8080 once to run Phoscon's own setup wizard and generate an API key (Settings > Gateway > Advanced > Authenticate app, or the "unlock gateway" step in the deCONZ desktop app) - Athena's own "Add gateway" form needs that key, plus this host's address and the 8080 port above.

The devices: mapping above pins one specific stick to one fixed container-side device node - Docker resolves it once at container start, so unplugging the stick (or swapping it for a different one) isn't guaranteed to keep working without running docker compose up -d again. For real hot-plug support instead, bind-mount the whole host /dev and grant the relevant device class, the same tradeoff documented on Athena's own docker-compose.yml for its Zigbee EZSP mount:

devices:
  - /dev:/dev
device_cgroup_rules:
  - 'c 166:* rmw'  # ttyACM* - USB CDC-ACM, e.g. ConBee II/III
environment:
  # Point this at the stable by-id path directly rather than /dev/ttyACM0 - with the whole
  # host /dev visible above, that symlink (and whatever real device it points at after a
  # replug) is visible inside the container too, so deCONZ keeps finding the same stick even
  # if it re-enumerates under a different ttyACMn.
  - DECONZ_DEVICE=/dev/serial/by-id/<your-stick-here>

Adding a gateway

Devices & Services > deCONZ > "Add gateway" takes the stick's address, port, and an API key created via deCONZ's own "unlock gateway" pairing step (done once, from the deCONZ app itself). End devices are added by hand underneath a connected gateway - IEEE address, endpoint, and device type - rather than auto-discovered.

What's supported

  • Switches - on/off, controllable.
  • Dimmable lights - on/off plus brightness, kept in Zigbee's own native 0-254 range.
  • Color lights - hue/saturation color and color temperature on top of dimming.
  • Temperature & occupancy sensors - read-only.

Every device type works with Dashboard cards and Automations exactly like any other integration. deCONZ entities aren't wired into the History page's own multi-entity graph picker yet.