All notable changes to this project are documented in this file. The format is based on Keep a Changelog, and the project follows Semantic Versioning.

0.1.0 - 2026-07-07

Initial release: a from-scratch, pure-Elixir Zigbee coordinator stack for Silicon Labs EmberZNet dongles. No NIFs and no C daemons, just circuits_uart and binary pattern matching.

Added

  • Zigbee facade: the backend-agnostic public API (start_link/2, form_network/2, reestablish_network/2, reestablish_or_form_network/2, reset_network/1, permit_joining/2, add_endpoint/6, send_aps/7, identifier/1, subscribe/2, info/1).
  • Zigbee.Adapter: the behaviour that separates the application layer from the radio. Backends emit normalized {:zigbee, :device_joined, _} and {:zigbee, :message, %Zigbee.Message{}} events.
  • Zigbee.EZSP.Adapter: the Silicon Labs EmberZNet backend (EZSP over ASH), including the ASH framing, the EZSP protocol client, and NCP diagnostics. Verified live against a Home Assistant Connect ZBT-2 on EmberZNet 7.5.1.0.
  • Zigbee.ZCL and Zigbee.ZDO: chip-agnostic Zigbee-spec codecs for cluster-library and device-object frames.
  • Zigbee.Interview: the join, interview, bind, and configure-reporting flow, plus collect/2 to decode incoming reports into engineering units.
  • Zigbee.Message: the normalized inbound APS message.
  • Zigbee.MockAdapter: an in-memory backend for testing without hardware.
  • Examples: pair_and_read.exs (a runnable end-to-end demo) and sensor_hub.exs (a supervised GenServer that owns the radio and reacts to events).

Known limitations

  • The pairing flow (Interview.run/4 and report decoding) is written to the spec and tested against Zigbee.MockAdapter, but has not yet been exercised against live Zigbee end-devices. Expect to tune the incoming-message layout and per-device quirks.
  • reestablish_network/2 is implemented but not yet confirmed against real paired devices across a restart. See "Persistence & restart" in the README.
  • Only the Silicon Labs EmberZNet (EZSP) family is supported. TI Z-Stack and deCONZ radios need their own Zigbee.Adapter backend.