Skip to main content

zencontrol-python

This is an implementation of the Zencontrol TPI Advanced protocol, written in Python. This library has been written with three levels of abstraction:

  • zencontrol.io: Implementation of the raw TPI Advanced UDP packet specification;
  • zencontrol.api: Implementation of most TPI Advanced API commands and events;
  • zencontrol.interface: An opinionated abstraction layer suitable for integration into smart building control software. It provides methods, objects, and callbacks for managing lights, groups, profiles, buttons, motion sensors, and system variables.

Documentation

In addition to an extensive test suite, this library is extensively tested by zencontrol-simulator, a nearly feature-complete simulator of zencontrol hardware. As part of its own test suite, the simulator imports and implements this library to a substantial extent.

This library is actively used as a central part of zencontrol-homeassistant, a Home Assistant integration. This integration gives you GUI access to most zencontrol-python features, making it an excellent practical demonstration of the library.

Features

Beyond basic lighting control, this library supports:

  • Broad command surface — inhibit, custom fade, step/up/down helpers, colour scene membership queries, EAN/serial, and most related TPI Advanced commands
  • Object-based entity model — Optional. Expresses lights, groups, profiles, buttons, motion sensors, absolute inputs, and system variables as rich objects with interview/discovery helpers
  • UDP transport resilience — request retries and queue-failure backoff
  • Event keepalive — periodic emit-state ping; re-enables TPI events (and unicast target) if a controller reboots while the listener stays up
  • Multicast controller discovery — find controllers on the LAN without a preconfigured host
  • Button events — discovery of control-device button instances, plus press and long-press event callbacks
  • Absolute inputs — discovery of numerical ECD instances (dials/sliders) with 16-bit value-change event callbacks
  • Event filtering — configure which TPI events the controller emits
  • System variables — labelled SV discovery, read/write, and change events
  • Profiles — query, change, and return to the scheduled profile
  • Simulator-backed tests — protocol path exercised against zencontrol-simulator

Known limitations

  • RGB+ and XY colour commands have not been tested with hardware
  • Numerical (absolute) instances have not been tested with hardware

Out of scope

  • Any commands involving DMX, Control4, or virtual instances (I don't have licenses for any of these so I couldn't test them even if I wanted to, but the scaffolding is there if anyone wishes to add support)
  • Any commands described in the documentation as "legacy" (they aren't useful)

Requirements

  • Python 3.14 (or later)
  • Controller firmware 2.2.130 or later is strongly recommended (minimum 2.2.11 required)

Install

pip install zencontrol-python

Testing

Integration tests start zencontrol-simulator on an ephemeral local port and exercise a real UDP TPI protocol path. Either install the simulator, or check it out as a sibling directory (../zencontrol-simulator); tests will pick it up automatically. Note that PyYAML is a simulator dependency.

pip install -e ".[dev]"
pip install PyYAML
# optional if not using a sibling checkout:
# pip install -e ../zencontrol-simulator
pytest -m simulator
pytest -m "not simulator"
# or run everything:
pytest

TPI Advanced wishlist

  • Command to return a controller's MAC address used for multicast packets (There are other ways to get or infer the MAC access, but they're unreliable.)
  • Command to list active system variables (As a workaround, you can query every number for its label. This assumes no system variables of interest are unlabelled.)
  • Command to read an ambient light sensor's lux value. (As a workaround, you can target a light sensor to a system variable. Not elegant but it works.)
  • Event notification for ambient light sensor lux values. (Same workaround as above.)

License

MIT

Links

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zencontrol_python-1.0.0.tar.gz (119.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zencontrol_python-1.0.0-py3-none-any.whl (105.2 kB view details)

Uploaded Python 3

File details

Details for the file zencontrol_python-1.0.0.tar.gz.

File metadata

  • Download URL: zencontrol_python-1.0.0.tar.gz
  • Upload date:
  • Size: 119.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for zencontrol_python-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e382031cdd7d82602e81a0f483c6c03b1fa83d01d01f40b46186e0618ab86c4b
MD5 de1683d320e0d5995a82cb6a79730384
BLAKE2b-256 4f66d7b68cef0f908c95b27fbce51819af7bb532a103647046485215f5a00f3a

See more details on using hashes here.

File details

Details for the file zencontrol_python-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for zencontrol_python-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f4d100ff6acf978502abb9d5fccacc7bac446c7a83d2c12acc207445d0f1fb40
MD5 fb10d098d94f2406261158d96c5cf5b3
BLAKE2b-256 00c93246caee57dee9e57c307787a89be1b784b395be2e38818970f54a5c85e8

See more details on using hashes here.

Release history Release notifications | RSS feed

3.0.0

2 files

2.5.0

2 files

2.0.0

2 files

This release

1.0.0 This release

2 files

0.1.7

2 files

0.1.6

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page