Skip to content

Adaptive Cover Pro ⛅ v2026.7.0

Choose a tag to compare

@jrhubott jrhubott released this 07 Jul 04:23

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.json now reports 2026.7.0 instead of the 2.30.x line. Monthly stable releases ship as YYYY.M.0 on the first Tuesday of the month; YYYY.M.1 and 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.py and import_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 in engage_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_tilt could be configured outside the cover's own minimum/maximum tilt limits, producing a target angle the cover physically can't reach. Saving now clamps default_tilt into 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_time service 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_time field; 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_position of 0 now accepted for close-only covers (a2abb8b): A cover configured to never open past closed (max_position of 0) was treated as if 0 meant unset. max_position of 0 is now a valid, honored setting.

  • default_height applied by set_position_limits (100acdd): Calling set_position_limits without also passing a new default_height left 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 astral helper removed (822a814): Replaces a helper the astral library 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.