Hi everyone, I’ve published a custom integration for zencontrol application controllers over their TPI Advanced protocol. If you have zencontrol / DALI lighting and a TPI Advanced licence, this brings all of your lights, groups, scenes, buttons, motion sensors, profiles, and labelled system variables into Home Assistant. This integration is backed by a robust protocol library that I’ve been actively using and refining over nine months, and a controller simulator used for the comprehensive test suite.
The current integration release is available through this HACS custom repository:
https://github.com/sjwright/zencontrol-homeassistant
It is strongly advised to upgrade your controller to the very latest beta firmware as I’ve been helping zencontrol to squash firmware bugs over the past year; the state of TPI Advanced is dramatically improved now compared to twelve months ago.
Happy to hear from anyone running zencontrol in the wild… especially multi-controller installs, odd network topologies, and unusual lights. (Support for RGBW lights is complete in theory, but I don’t have any to test.) If you have any feedback or bug reports, the best place is right here rather than on Github.
Cheers
Simon
Currently implemented
- Local control — exclusively LAN-based communications; no cloud dependency
- Easy setup — discover a controller on your subnet at the press of a DALI button
- Stable entity IDs — unique IDs based on controller identity and DALI addressing, so automations will continue to work after replacing faulty DALI devices
- Runtime discovery — additional controllers found later can be confirmed and added with ease
- Rooms and areas — divide a large DALI bus into virtual sub-devices, so your DALI lights can be divided among multiple Home Assistant areas
- Full colour control — dimming, colour temperature, and colour where the fixture supports it, with correct conversion between linear DALI levels and perceptual Home Assistant brightness
- Custom fade times — HA transition times are transformed into DALI fade times
- Scene control — complete support for recalling group scenes, plus a per-group select entity so you can trigger on scene changes triggered by others
- All device events — short and long press button events, occupancy sensors, dials, sliders, and other ECD inputs
- Profiles — view and change the active controller profile, and use profile changes to trigger (or vary) automations
- System variables — expose zen SVs as switches or sensors by suffixing their label with
switch,sensor, orlux sensor - Translations — English, German, French, Danish, Swedish, Polish, Hindi, and Simplified Chinese
Architecture (why three repos?)
In short, because it is necessary for comprehensive testing and fault-finding. Built in early 2025, zencontrol-python was the first complete, field-deployed client implementation of the TPI Advanced protocol, as far as I’m aware. I know this because the protocol had enough bugs and feature gaps to only work for the most rudimentary of applications.
By building the library progressively, in discrete layers, I was able to systematically map out the gaps in the controller firmware, as well as identify missing functionality necessary for making a fully functional integration. This work would have been all but impossible without a careful separation of concerns and the ability to write a comprehensive test suite.
- zencontrol-python — the complete TPI Advanced stack. Available on PyPI.
zencontrol.io— a framing / transport layer, managing connections and implementing the core wire protocol.zencontrol.api— building on the IO layer, this is where the API is materialised. The full suite of API commands are implemented, and where incoming events are parsed and routed.zencontrol.interface— building on the API layer, this implements a world model where lights, groups, buttons, sensors, SVs, profiles have object representations in python.
-
zencontrol-homeassistant — this is the platform-agnostic zencontrol.interface layer is laced into Home Assistant, and where any HA-specific decisions are made.
-
zencontrol-simulator — a mostly feature-complete simulator of a zencontrol controller. This powers the comprehensive end-to-end test suite for all other parts of this project. It provides a real UDP connection (timing, reconnects, edge cases) without needing hardware.
If you’re building something using the TPI Advanced protocol, you can use the python library and/or simulator on their own. All the code is licensed under MIT.