Zigbee2MQTT
Athena has no dedicated Zigbee2MQTT integration - and doesn't need one. Zigbee2MQTT publishes Home Assistant's own MQTT discovery convention by default, and Athena's MQTT integration already implements that same convention (the one Tasmota, Shelly, and ESPHome's own native MQTT component also speak) - so every Zigbee gateway and end device Zigbee2MQTT manages shows up automatically once both point at the same broker, with zero Athena-specific setup.
Running Zigbee2MQTT
Not bundled with Athena - run it as its own container, on whichever machine the Zigbee
coordinator (a CC2531/CC2652/ConBee/Sonoff dongle, etc.) is physically plugged into. Athena's
own repo already ships this as a ready-made docker-compose-zigbee2mqtt.yml (with a
matching .env.zigbee2mqtt.example and configuration.yaml.example) -
copy all three, fill in the .env, and skip straight to the
configuration.yaml step below. Or save the snippet here as your own
docker-compose.yml in a new folder:
# docker-compose.yml - zigbee2mqtt, standalone services: zigbee2mqtt: container_name: zigbee2mqtt image: ghcr.io/koenkk/zigbee2mqtt restart: unless-stopped volumes: - ./data:/app/data - /run/udev:/run/udev:ro ports: - '8080:8080' # Zigbee2MQTT's own web frontend - device pairing, network map environment: - TZ=Europe/Helsinki 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'
Before first start, create ./data/configuration.yaml pointing it at an MQTT broker
and turning on Home Assistant-style discovery - this is the setting that makes devices appear in
Athena automatically, the same convention already covered on the
MQTT page:
# data/configuration.yaml homeassistant: true mqtt: server: 'mqtt://<your-broker-host>:1883' # user/password only if your broker requires auth - Athena's own docker-compose-mqtt.yml # (see Installation) allows anonymous access by default, so these can stay unset.
Run docker compose up -d (or docker compose -f
docker-compose-zigbee2mqtt.yml up -d if you're using the ready-made file, which doesn't
auto-discover the way a bare docker-compose.yml does), then open
http://<that-host>:8080 to pair Zigbee devices onto the network. Point that
same broker at Athena's own
MQTT_BROKER_URL (see Installation) - if
you're already running docker-compose-mqtt.yml for another MQTT device, Zigbee2MQTT
can share that exact broker, no second one needed.
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), and point
serial.port in configuration.yaml at the stable by-id path directly
rather than a plain /dev/ttyACM0 - with the whole host /dev visible,
that symlink (and whatever real device it points at after a replug) is visible inside the
container too:
devices: - /dev:/dev device_cgroup_rules: - 'c 188:* rmw' # ttyUSB* - CP210x/CH340-style adapters (some CC2531 dongles) - 'c 166:* rmw' # ttyACM* - USB CDC-ACM (CC2652/ConBee/Sonoff-style adapters)
What shows up
Whatever Athena's own MQTT integration already recognizes: sensors, binary sensors, switches, lights, and buttons, all with live state and control where applicable - see MQTT for the full list. This is exactly the same path Zigbee devices take through Home Assistant's own Zigbee2MQTT integration, so anything documented as working there over MQTT discovery works here too.
Prefer a dedicated Zigbee integration with its own device model in Athena instead (occupancy feeding Area presence automatically, cover position sliders, etc.)? See Zigbee (a bare EZSP coordinator, no separate service) or deCONZ (a ConBee/RaspBee gateway) - both talk to Athena directly instead of through MQTT.