Adaptive Cover Pro ⛅ v2.29.0
ℹ Using release notes from: release_notes/v2.29.0.md
Highlights
v2.29.0 is the first stable release of the 2.29 series, shipping eight new features and nine fixes since v2.28.2. The headline work is a restructured four-layer config flow, runtime-configurable pipeline handler priorities, Jinja2 template support for is_sunny/presence/weather inputs, and a daytime gate that ties sunset/sunrise automation to a sensor or template. Smaller additions round out the set: end-of-window close position, awning pivot offset modeling with monotone shade correction, summer climate min-position enforcement, and tilt-only custom slot surfacing in Control Status. All new options default to their "off" state; no reconfiguration is needed when upgrading from v2.28.2.
Added
-
Config flow restructured into a 4-layer pipeline setup UI (#613, #614): The configuration flow is now organized into a four-layer pipeline setup, replacing the previous flat form with a staged layout that groups related settings by pipeline layer.
-
Runtime-configurable built-in handler priorities (#651): The seven built-in pipeline handler priorities — weather, manual override, motion timeout, cloud suppression, climate, glare zone, and solar — can now be reconfigured per instance rather than being fixed constants. Existing installs default to the same values as before; no change in behavior when left unset.
-
Daytime gate for sunset/sunrise automation (#632, #641): Sunset and sunrise position changes can now be gated on a binary sensor or a Jinja template. When the gate reads dark, the automation holds. Both options default to None; existing installs are unaffected.
-
Jinja template option for is_sunny, presence, and weather sensors (#639, #646): The is_sunny, presence, weather-is-raining, and weather-is-windy inputs now accept Jinja2 templates in addition to entity IDs. All template-mode keys default to None; existing entity-based configurations continue to work without change.
-
End-of-window close position (#625, #647): A new optional setting lets you configure a fixed close position applied when the automation window ends, independently of sunset behavior. Leaving it unset preserves existing behavior exactly.
-
Sun-tracking min position honored in summer climate close (#631, #648): The summer climate close path now respects the configured sun-tracking minimum position before returning a final position, preventing over-close on installs with a raised floor.
-
Active tilt-only custom slot surfaced in Control Status (#667, #671): When a custom-position slot contributes a tilt overlay without winning the position axis, the Control Status tracker entity now shows which slot is actively fixing the tilt angle. The position explanation and control state reason both gain a "tilt fixed by Custom #N" annotation.
-
Awning pivot-to-pane offset modeled; monotone low-sun shade corrected (#586, #661): A new optional
CONF_AWNING_PIVOT_OFFSETsetting captures the horizontal standoff of the arm housing from the window glass. At low sun the dropped fabric now shades further down the pane on wall-mounted awnings. A monotone-coverage constraint is also applied to the solver, eliminating a false mid-sweep optimum that previously drove some installs to a partial angle at very low sun instead of full extension. Existing installs are unaffected —CONF_AWNING_PIVOT_OFFSETdefaults to 0.0 m, reproducing the prior model exactly.
Fixed
-
Tilt min-delta gate bypassed for special positions 0 and 100 (#629, #672): Tilt commands targeting fully-open (100) or fully-closed (0) now bypass the min-delta drift-suppression gate. Previously a venetian blind in tilt-only mode could silently discard an explicit 0 or 100 tilt command when the actuator was already within the configured delta threshold.
-
Lux and irradiance switches now gated on cloud suppression as well as climate mode (#668, #670): The predicates that control whether lux/irradiance toggle switches appear now check for cloud suppression in addition to climate mode. Previously a configuration using cloud suppression without climate mode did not surface these switches even though the lux/irradiance entities were actively used.
-
ACP-owned non-cover entity service targets resolved correctly (#665, #666):
_resolve_targets()now includes an entity registry fallback so diagnostic sensors, switches, and buttons owned by an ACP config entry can be used as service call targets. Previously targeting a diagnostic entity (e.g. a decision-trace sensor) silently no-opped because the entity was not in the coordinator's cover-entity list. -
Override engaged on context-less remote move with no recorded command target (#654, #662): Position delta detection now carries old-position context into the no-recorded-target path, distinguishing a genuine physical-remote move from a resting-position republish. A genuine move — where the position changed between old and new state by more than the effective threshold — now correctly engages manual override.
-
Diagnostics download triggers coordinator refresh when data is empty (#660): Downloading diagnostics now forces a coordinator refresh when data is empty, so the export is never blank on first request.
-
Daytime-gate sources tracked for immediate reposition (#632, #659): Daytime-gate template and sensor sources are now registered so a gate state change triggers an immediate cover reposition rather than waiting for the next scheduled cycle.
-
Night and custom positions dispatched when gate is dark but clock window is open (#656, #658): Night and custom positions are now dispatched correctly when the daytime gate reads dark but the automation clock window is still open.
-
SunData cache primed off the event loop to avoid tzdata blocking at boot (#655, #657): The SunData cache is now primed off the event loop, preventing a blocking tzdata import from stalling the event loop during startup.
-
Resolved options used on apply-user-position path (#643, #644): The manual-control apply-user-position path now uses the resolved options cache, consistent with the scheduled update path.
-
Oscillating awning arm_length UI cap raised to 6 m (#636, #640): The arm_length config UI cap is now 6.0 m. Thanks to @muhamedfazalps (#637) for surfacing this.
Testing
4735 tests passing.
Compatibility
Requires Home Assistant 2026.3.0+. The companion Lovelace card (jrhubott/adaptive-cover-pro-card) is a separate repo with its own release cycle.