Skip to content

ZPC Version 2.1.0 - Release Notes (Oct 29, 2026)

The Z-Wave Protocol Controller (ZPC) is a Linux and macOS host application for controlling Z-Wave networks through MQTT using a Silicon Labs Z-Wave - NCP Serial API Controller.

This release follows v2.0.1. It adds MQTT controls for more device functions, improves SmartStart and firmware update behavior, and changes how node IDs appear in MQTT reports. See Impact and Migration before updating clients that read those reports.

Release Summary

Key Features · API Changes · Bug Fixes · Chip Enablement · Known Issues · Impact and Migration

  • Control more Command Classes: use MQTT to read values and control the Meter, Sensor Binary, Sensor Multilevel, Configuration, Schedule, Time, Node Naming and Location, and Thermostat Command Classes.
  • Get useful interview results: zpc/<home_id>/Interview/Report now includes the root device's protocol and device-class information, Command Class lists, security details, and version information after its interview finishes.
  • Handle node IDs more easily: ZPC publishes node IDs as decimal numbers in reports and topic paths. For node-specific command topic paths, clients can use decimal IDs or hexadecimal IDs prefixed with 0x.
  • Improve setup reliability: SmartStart can start as soon as a provisioned device announces its preferred protocol. After a firmware update, ZPC gives the device more time to restart before interviewing it.
  • Simplify development builds: Linux and macOS use consistent build steps, with smaller runtime dependencies and broader automated test coverage.

Key Features

New Features

  • Command Class MQTT controls. The table lists each Command Class added or expanded in this release, its version, ZPC's role, and what MQTT clients can do.
Command Class Version ZPC role MQTT client capability
Meter Command Class 6 Controller Read meter values.
Binary Sensor Command Class 2 Controller Read sensor values.
Multilevel Sensor Command Class 11 Controller Read sensor values.
Configuration Command Class 4 Controller Read and change parameters, including bulk settings and parameter details.
Schedule Command Class 4 Controller Query capabilities and read or change schedule entries and state.
Time Command Class 3 Supporting and controlling Read remote clock values; answer Time, Date, and Time Offset requests from the host clock; send Time Reports to interviewed endpoints.
Node Naming Command Class 1 Controller Get and set a remote node's display name and location through MQTT; publish returned names.
Thermostat Fan State Command Class 2 Controller Read fan state reports; MQTT support is new in this release.
Thermostat Operating State Command Class 2 Controller Read operating state and logging reports; MQTT support is new in this release.
Thermostat Setback Command Class 1 Controller Read and change setback settings; MQTT support is new in this release.
Thermostat Fan Mode Command Class 5 Controller Read supported modes and change the fan mode; existing MQTT support gains automated tests.
Thermostat Mode Command Class 3 Controller Read supported modes and change the thermostat mode; existing MQTT support gains automated tests.
Thermostat Setpoint Command Class 3 Controller Read supported setpoints and capabilities, and read or change setpoint values; existing MQTT support gains automated tests.

Enhancements

  • For a provisioned device that supports both Z-Wave and Z-Wave Long Range, ZPC can begin SmartStart inclusion when the first Prime announces the preferred protocol. If it announces the less-preferred protocol first, ZPC continues discovery before choosing.
  • When an endpoint interview ends, ZPC publishes zpc/<home_id>/Interview/Report with node_id, endpoint_id, and numeric status (0 means success). A successful report is sent after the post-interview requests finish; failed or cancelled interviews also produce a report. The endpoint 0 report additionally includes node_information (device classes, protocol capabilities, Command Class lists, inclusion protocol, and granted keys) and version_report (Z-Wave library and protocol versions, firmware and hardware versions, and firmware target count). Other endpoint reports omit these two objects. See the Device Interviewer MQTT API for the full fields and example.
  • An exclusion request can include {"node_id": 2} to accept only that classic Z-Wave node. If a different node initiates exclusion, ZPC stops the operation and leaves that node in the network. Z-Wave Long Range node-specific exclusion is not supported; see known issues.
  • After a firmware update, ZPC adds a controller-selected margin to the device's advertised Wait Time before probing for reconnection. The margin is 5, 10, or 30 seconds depending on the advertised wait, giving slower-restarting devices more time before the reachability check and re-interview.
  • CMake presets now provide consistent configure/build workflows across Linux and macOS. CI runs unit tests with AddressSanitizer and UndefinedBehaviorSanitizer under GCC and Clang; separate sanitizer builds include ThreadSanitizer. A Clang coverage job checks line and branch coverage, with 90% thresholds for components outside the documented exemption list.
  • The Paho MQTT C++ client library is updated from 1.5.3 to 1.6.0. Debian packages now depend on libc and OpenSSL at runtime; SQLite, fmt, yaml-cpp, and nlohmann/json are built into ZPC or provided as headers. Sanitizer packages declare their required sanitizer runtime libraries.
  • Supported compiler builds enable -fstack-protector-strong; debug builds also initialize automatic variables with a pattern. Google Test and Google Mock are integrated into the project, with new tests covering CRC, Meter, Sensor Binary, Switch Binary, Schedule, and Thermostat Command Class implementations.

API Changes

New APIs

MQTT interface What it does
New Command Class topics Added support for Meter, Sensor Binary, Sensor Multilevel, Configuration, Schedule, Time, and Thermostat Command Classes, including their corresponding MQTT topics for reading values and controlling devices where applicable. See the MQTT API Index.
Node naming topics Get or set a node's display name with NodeNamingNodeNameGet/Set; ZPC publishes the response on NodeNamingNodeNameReport. See the Node Naming MQTT interface.
Node exclusion with a specified node ID Add node_id to a normal Network/Node/Remove request to make ZPC accept only that classic Z-Wave node during exclusion. See the Network Management MQTT API.

Modified APIs

  • Published node IDs now use decimal numbers. Node-specific MQTT topic paths accept decimal IDs or hexadecimal IDs with a 0x prefix; for node_id values inside JSON payloads, follow the format documented for that API. Update clients that expect hexadecimal node IDs in reports or topic paths.
  • zpc/<home_id>/Interview/Report is an existing topic. This release adds node_information and version_report to the report for endpoint 0; clients can use those fields after the interview instead of making a separate request to Network/Node/List for the root-device details.

Bug Fixes

The following table lists issues fixed in this release. The ID values are the ticket UIDs; related GitHub issues are linked where available.

ID Issue Description GitHub Issue
1491217 Z-Wave Long Range SmartStart could miss the first SmartStart Prime frame and wait for another announcement before starting inclusion. It now starts on the first eligible SmartStart Prime frame. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/197
1490551 The post-update interview could start before a device was ready. ZPC now waits longer before starting it. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/195
1491199 An empty attribute value could trigger an invalid memory copy. ZPC now skips the copy when there is no value to copy. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/126
1606358 S2 AES-CMAC now handles a zero-length message without forming a pointer from a null buffer, avoiding undefined behavior. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/212
1490774 ZPC now detects Wake On Event End Nodes (WOEEN) and suppresses ACK requests for singlecast transmissions and NOPs to those nodes, as required by LR-NWK:0090.1-0. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/78

Chip Enablement

Hardware and software used for the release verification. The platform is unchanged from v2.0.1.

Component Hardware Firmware version
ZPC Raspberry Pi 4 Model B v2.1.0
NCP Controller BRD4001A WSTK + BRD4205B radio board Simplicity SDK 2025.12.3
End Device BRD4001A WSTK + BRD4205B radio board Simplicity SDK 2025.12.3

Known Issues and Limitations

For resolved issues, see Bug Fixes.

ID Issue or Limitation Description GitHub Issue
1745183 If a device does not answer a Command Class Get, later MQTT Get requests for that value may be blocked until the device sends a report. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/262
1491006 When inclusion fails or times out, ZPC may send Stop Controller Replication (0x06) instead of Stop Network Inclusion (0x05). https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/263
1491182 Excluding a specific Z-Wave Long Range device is not supported. https://github.com/SiliconLabsSoftware/z-wave-protocol-controller/issues/264

Impact and Migration

v2.1.0 works with networks created by v2.0.1. No database migration is required.

Published node IDs now use decimal numbers in JSON reports and node-specific topic paths. Update clients that expect hexadecimal IDs in reports or topic paths. When sending to a node-specific topic, clients may use a decimal ID or a hexadecimal ID with a 0x prefix. A node_id field inside a JSON command payload follows that API's documented format.

New Command Class MQTT topics can be adopted as needed. Existing clients can continue using their existing topics.

Documentation Changes

  • The MQTT API index and generated Command Class pages cover the new interfaces. Network Management, SmartStart, Device Interviewer, OTA, and inclusion-flow guides describe the new report, command, and protocol-selection behavior, including accepted node ID formats.
  • Getting Started and Contributing explain the shared CMake presets, sanitizer and coverage workflows, and component test setup. Debian packaging docs list the reduced runtime dependencies and sanitizer package requirements.
  • The Command Class implementation guide documents variable-length report parsing and optional-parameter overrides in the generator.
  • Thermostat Operating State documentation has been corrected.

Using This Release

To build and run ZPC, see the Getting Started guide.

For the full documentation set, see the docs README.

Help and Feedback