Adaptive Cover Pro ⛅ v2026.7.0
Highlights
2026.7.0 is the first release on CalVer — Year.Month.Patch, Home-Assistant-style — replacing the SemVer line that ended at 2.30.2. The switch only touches the version string: every default stays exactly as it was, and there's nothing to migrate or reconfigure. The release itself carries a full month of work: bulk config export/import services for cloning or backing up a cover's setup, a new service for engaging manual override straight from an automation, a cluster of venetian tilt refinements (a tilt safety margin, a tilt-skip suppress mode, a post-settle entity-state mode, and drift resets scoped by control method), and a reorganized Geometry step in config flow.
Added
-
First CalVer release (8f95df9, #760): The integration switches from SemVer to Year.Month.Patch versioning —
manifest.jsonnow reports 2026.7.0 instead of the 2.30.x line. Monthly stable releases ship asYYYY.M.0on the first Tuesday of the month;YYYY.M.1and up are reserved for bug-fix-only patches within that month. -
Bulk config export/import services (d96a03f): Two new service actions, backed by
export_service.pyandimport_service.py, export a cover's full configuration to a portable payload and import it back. Useful for cloning a working setup across covers or keeping an offline backup before changing settings. -
Engage manual override service, with firmer hold semantics (a9aab73): A new service lets automations engage manual override directly instead of relying only on the configured override sensor. Landing alongside it in
coordinator.py: the cover now holds its exact position the moment override engages, and that hold stays locked through a safety-release edge instead of drifting once the safety window closes. The new service lives inengage_manual_override_service.py. -
Venetian tilt refinements — safety margin, tilt-skip suppress, post-settle mode, drift-reset scoping (56f1fb2, 44c31cf, fd13f13, 009ba38): Four related changes land in
cover_types/venetian/this release. Tilt calculations now apply a safety margin so slats don't target an angle sitting right at a physical limit. A tilt-skip suppress mode lets you turn off the skip-small-movements behavior. A post-settle entity-state mode reads tilt back from the entity's reported state once the cover settles, instead of trusting the calculated target alone. And drift-reset now scopes by which control method moved the cover, rather than one reset rule for every trigger. -
Geometry config-step reorganization (3d10580): The window Geometry step now holds the per-window facing fields — azimuth, field-of-view, and shaded distance — for a clearer walk-through during setup and later edits. Elevation limits stay on the Sun Tracking step so they can be synced independently of the window-facing measurements.
-
Device target selector on every service action (b7cc3dd, #824, #825): All service actions gained a device target selector in
services.yaml, alongside the existing entity selector, so a call can target a cover's parent device directly instead of only its entity. -
Select-all toggle in the config flow's sync step (cf60af4): Flips every item in the step's checklist at once instead of clicking through them individually.
Fixed
-
Default tilt clamped to venetian's own tilt range (#503, #826):
default_tiltcould be configured outside the cover's own minimum/maximum tilt limits, producing a target angle the cover physically can't reach. Saving now clampsdefault_tiltinto range. -
Force close/open at venetian full endpoints (b65aa6d): Venetian covers commanded to a full 0 or 100 endpoint weren't always settling at a fully closed or open state. Full-endpoint commands for venetian covers now force close/open.
-
Escaped ICU braces in the end_time service description (#793, #823): The
end_timeservice action's description contained literal curly braces that Home Assistant's ICU message formatter read as placeholders, breaking the rendered help text. The braces are now escaped. -
Corrected end-time summary label (f9db3a1): The Configuration Summary mislabeled the
end_timefield; the label now matches the field it describes. -
Invalid device filter removed from
services.yaml(#835): The device target selector added this release carried a device filter left over from entity-only targeting, which Home Assistant rejected as invalid. The filter is gone, so device targeting works on every service action. -
max_positionof 0 now accepted for close-only covers (a2abb8b): A cover configured to never open past closed (max_positionof 0) was treated as if 0 meant unset.max_positionof 0 is now a valid, honored setting. -
default_heightapplied byset_position_limits(100acdd): Callingset_position_limitswithout also passing a newdefault_heightleft that field untouched instead of applying the configured default. It's now applied along with the rest of the limits. -
Manual override dispatches on resolved-target change (f18a5cc): Override previously dispatched only when the raw override sensor value changed. It now also dispatches when just the resolved target changes, so downstream state stays in sync.
-
My-preset and same-position resend properly gated (4bb2772, d308921): My-preset resend now routes through the real router instead of a stub, and same-position resend for open/close-only covers is gated the same way it is for every other cover — both previously could re-send a command that had already landed.
-
Cover Name field no longer required (6bc546a): Config flow demanded a Name value even when a sensible default was available. Name is now optional.
-
Deprecated
astralhelper removed (822a814): Replaces a helper theastrallibrary itself flagged as deprecated, clearing a deprecation warning surfaced during startup.
Testing
5,557 tests passing. CI now brackets the Home Assistant support range — floor, latest stable, and dev — in one test matrix (#837), and a new deprecation-check task flags Home Assistant API removals before they reach a stable release.
Compatibility
Home Assistant 2026.3.0+ and Python 3.11+. No migration runs for this release — the CalVer switch changes only the version string, and every option keeps its existing default. The companion Lovelace card (jrhubott/adaptive-cover-pro-card) is a separate repo with its own release cycle.