| Changes |
-
Complete rebuild, solving all known issues currently reported.
Note: if you are coming from a previous version, a full deletion of your controllers in Composer is necessary.
- v3.8.8 (2026-04-07) — Dedicated Dim-to-Off command, Dim to Off default
- Drivers: zc_lcm_driver (v429), zc_ecg_driver (v431), zc_scene_light_driver (v438)
- Features
- - New MODE_4_DALI_DOWN_TO_OFF (0xC2) TPI command — imported the dedicated Down-to-Off DALI command added in TPI firmware v2.002.091.
Dims continuously and turns the gear off when the minimum level is reached, replacing the previous compound STEP_DOWN_AND_OFF + DOWN pattern. - _startDimToggleRepeat simplified — when "Dim-down Behaviour" is set to "Dim to Off", the long-press dim-down ramp now sends a single DOWN_TO_OFF command on each 200ms tick instead of two commands.
- Changes
- - Default "Dim-down Behaviour" is now "Dim to Off" — new ECG and Scene Light driver instances default to "Dim to Off" rather than "Dim
to Min". Existing instances that have a persisted "Dim to Min" choice are preserved.
- Bug Fixes
- - UpdateProperties() no longer clobbers driver.xml <default> — on a fresh driver install, self.dim_down_behaviour is empty ("") until
the controller's persisted property is read in. The previous unconditional else branch wrote Dim to Min for any non-Dim to Off value, overwriting the driver.xml default during init. The conditional now only writes Dim to Min when that value is explicitly set.
- Internal
-
- Added RequestDALIDownToOff wrapper in lib/tpi_client.lua, DOWN_TO_OFF IDC enum, dispatch + fire-and-forget allow-list entry in zc_lcm_driver/lcm_tpi.lua, name map in driver_names.lua, and a busted test verifying the on-the-wire byte layout.
- v3.8.7 (2026-04-06) — Blind type fix, absolute input refactor, remove auto-create relay/blind
- Drivers: zc_blind_driver (v384), zc_ecg_driver (v428), zc_lcm_driver (v428), zc_absolute_input_driver (v384)
- Bug Fixes
- - Blind type not set on creation — when converting an ECG to a blind and selecting a type (Shade, Blind, Louver, etc.), the type was
sent to the blind driver but silently ignored. The blind driver now forwards the selected type to the C4 blind proxy via TYPE_CHANGED notification. Also guards against sending an invalid type when "Select Later" is chosen.
- Changes
- - Removed "Automatically Create Relay Drivers" and "Automatically Create Blind Drivers" options — these LCM properties have been
removed. Relay and blind conversions must now be done manually via the ECG driver actions. Fan auto-creation remains available. - Group room mapping always updates — group-to-room mapping now updates on every commission instead of only on first assignment, so moved devices report their current room.
- Refactors
-
- Absolute input driver refactored to group instances by DALI address — a single driver now represents all absolute input instances on a DALI address instead of one driver per instance. Adds dynamic BUTTON_LINK bindings per instance, a "Number of Inputs" property, per-instance programming events, and a LAST_INPUT_CHANGED variable.
- v3.8.6 (2026-03-20) — Dim-toggle dimming methods, ON/Off command modes, read-only properties
- Drivers: zc_ecg_driver (v427), zc_scene_light_driver (v435)
- Features
- - Dim-down Behaviour now affects dim-toggle long press — when set to "Dim to Off", dimming up sends ON_AND_STEP_UP on the first tick
then UP; dimming down sends DOWN on the first tick then STEP_DOWN_AND_OFF + DOWN on each subsequent tick. - New "ON/Off Commands" property — controls whether the dim-toggle and toggle short press sends DALI Recall Max/Off commands (default) or direct arc levels. Available on both ECG and group drivers.
- Changes
-
- Min/Max DALI Level and Colour Temperature properties are now read-only — these values are read from the zencontrol system and should be changed there, not in Composer.
- v3.8.5 (2026-03-19) — Fix dim-toggle debounce and auto-stop
- Drivers: zc_scene_light_driver (v425), zc_ecg_driver (v416)
- Bug Fixes
-
- Long press stopped after ~3 dim steps — removed the 500ms auto-stop timeout that prematurely killed the repeat timer. DO_RELEASE is now the sole stop mechanism. - Direction did not flip on release — the auto-stop timeout and DO_RELEASE were both flipping direction, cancelling each other out. Now only DO_RELEASE flips. - Short press also triggered dimming — increased debounce from 50ms to 400ms so DO_CLICK has time to arrive before the handler assumes a long press. Short and long press are now cleanly separated. - Same fixes applied to TC Toggle and RGBWAF Toggle handlers.
- v3.8.4 (2026-03-19) — Align BUTTON_LINK protocol with C4 native keypad convention
- Drivers: zc_keypad_driver (v384), zc_scene_light_driver (v425)
- Breaking Changes
- - Keypad driver now sends a single DO_PUSH on hold start and DO_RELEASE on release, matching C4 native keypad behavior. Previously sent
repeated DO_PUSH events during hold.
- Features
-
- C4 native keypads can now dim zencontrol lights via BUTTON_LINK bindings. - zencontrol keypads now work correctly with C4 native dimmers. - DimToggle, TC Cooler/Warmer/Toggle, and RGBWAF Up/Down/Toggle handlers now drive their own 200ms repeating timers internally instead of relying on repeated DO_PUSH events.
- v3.8.3 (2026-03-19) — Blind driver BUTTON_LINK bindings
- Drivers: zc_blind_driver (v383)
- Features
-
- Added 6 BUTTON_LINK bindings to the blind driver: Open, Close, Stop, Toggle, Up, Down. - Keypads (C4 native or zencontrol) can now control blinds via the Composer Connections tab. - Toggle behavior: if any amount open, closes; if fully closed, opens.
- v3.8.2
- Bug Fixes
-
- Group controllers not re-commissioned after device deletion — fixed stale group driver rescan issue where group controllers were not properly re-commissioned when devices were deleted from a group. - ALS scene content not populated during creation — fixed issue where Advanced Lighting Scene content was empty when scenes were first created.
- v3.8.1
- Features
-
- Absolute input driver added to release — the absolute input driver (Part 302 devices: potentiometers, sliders, rotary encoders) is now included in release builds. - Reduced group discovery log noise.
- v3.8.0
- Features
-
- Device Name property — all drivers now expose a read-only Device Name property showing the full unfiltered reference name. - Group Controller fix — resolved Group Controller commissioning issues. - Blind driver improvements — various improvements to the blind driver.
- v3.7.6
- Documentation
-
- Comprehensive documentation update for all drivers. - ECG driver documentation updated with naming conventions, actions, and auto-conversion details.
- v3.7.4
- Features
-
- Auto-conversion table — native driver improvements with automatic device type conversion. - Switch events — push button event handling improvements. - Device type name visibility toggle — new option to show/hide device type suffix in device names. - Broadcast handling fix — fixed broadcast parameter handling for system-wide commands.
- v3.6.0
- Features
-
- Dynamic BUTTON_LINK bindings based on actual scenes. - "Group Controller" suffix appended to DALI Group device names. - Scene sync — adds, renames, and removes scene bindings and ALS scenes. - Scene removal sync — deleted scenes are removed from C4 proxy and ALS agent on sync. - Flush stale scene state at start of each sync cycle. - Info-level logging for QUERY_SCENE_NUMBERS_FOR_GROUP. - TPI: stop retracting sequence number hint on request removal. - Enhanced BUTTON_LINK binding support across drivers.
- v3.5.2
- Features
-
- Per-group scene controllers — one scene controller per group with per-group scene queries (replaces the previous single-controller approach).
- v3.5.0 (untagged)
- Features
- - Move/remove detection — discovery now detects moved or removed devices during scan.
- Bug Fixes
-
- Persistence preservation across driver updates — drivers preserve persistence data during updates and restore target_address from C4 properties when persistence is lost. - ECG re-commission — removed device_driver_ids filter from all_ids_fn so devices can be re-commissioned. - Native relay/gate cross-branch sync — fixed sync issues plus several pre-existing bugs. - Fan double TPI commands — removed duplicate commands, fixed ON preset being ignored, added re-entry guard to FanState, deduped SET_SPEED proxy echo. - Commission guard — prevent duplicate device creation when sync runs concurrently. - LCM concurrency guards — added to commission and sync handlers. - Native manager — deep-copy ECG objects to prevent mutation corruption. - Sync cleanup — clean up device_driver_ids when a device is removed from Composer. - Discovery filter — filter already-commissioned devices from all_ids_fn. - Prototype table sharing — initialize table fields per-instance in all data-type constructors (fixes shared-state bug). - Keypad events — rewrite events with 1-based Switch naming, fix Composer overflow.
- v3.4.1
- Bug Fixes
-
- Group discovery — remove reply_type guard that blocked group commissioning (#52).
- v3.4.0 — Initial tagged release (PRs #1–#51)
- Bug Fixes
- - TPI checksum (#1).
- Keypad hold time (#4) and command/typo fixes (#11). - Scene Light: notifications placement (#5), toggle (#15), set_brightness_target (#28), XML capability (#18). - ECG: notify placement (#7), variable IDs (#14), missing return (#29), power-off flag reset (#36), toggle condition (#37). - DMX: binding comparison (#8), level conversion (#10), process_driver_command (#13), commissioning notify (#32), Sentry label (#17). - Fan: onC4Level (#16), DALI level calc (#19). - Blind proxy fixes (#12). - Keypad dynamic bindings early (#35). - OnDriverDestroyed lifecycle fixes for ECG/Blind/Fan/Scene Light/LCM (#17, #21, #22, #23, #24). - Occupancy bitshift (#3). - Group discovery filter (#20) and reply_type inversion (#49). - online_changed notifications (#25). - Relay filename TODO (#16). - DALI status bitmask (#26). - XML metadata (#31). - Event matcher expiry (#46). - Request manager seq-hint retract on removal (#51).
- Performance
- - request_manager FIFO queue (#41) and seq-hint (#42).
- IDC DALI cmd set (#47). - sync/commission set lookup (#44). - TPI client table.concat (#38).
|
Comments
0 comments
Article is closed for comments.