Skip to content

Adaptive Cover Pro ⛅ v2.30.0-beta.3

Pre-release
Pre-release

Choose a tag to compare

@jrhubott jrhubott released this 27 Jun 04:28
· 32 commits to main since this release

ℹ Using release notes from: release_notes/v2.30.0-beta.3.md

Highlights

2.30.0-beta.3 builds on beta.2's diagnostic and venetian additions with five new user-facing capabilities: a roof/skylight window cover type (closing #212), building profiles for shared building-level sensors, three blind-spot slots with per-slot elevation-mode filtering, ten custom-position slots (up from five), and endpoint-aware open/close. A venetian motor back-rotation edge case — where slats drag shut during a close command — is also fixed. The config-entry schema bumps v3.4→v3.5 in a no-op migration; upgrading changes nothing without reconfiguration.

To install, enable "Show beta versions" in HACS. Feedback is especially welcome on: roof windows in pitched installations, building profile setup and sensor-propagation latency, blind-spot elevation modes (BLIND_SPOT_ELEV_MODE_BELOW vs. BLIND_SPOT_ELEV_MODE_ABOVE), and endpoint open/close on covers that support set_position.

Added

  • Roof/skylight window cover type (#212, #696): New cover type "cover_roof_window" with pitch-aware sun geometry. Configure CONF_ROOF_PITCH and CONF_ROOF_HEIGHT_ABOVE to match the physical installation; RoofSunGeometry handles the tilted-plane math, RoofWindowCover drives position calculation, and RoofWindowPolicy provides the policy layer. The type is registered in ALL_COVER_TYPES alongside the existing blind/awning/tilt types. Closes the oldest open feature request.

  • Building profile (#693, #700, #706): A new virtual entry type — created via its own config-flow steps (async_step_create_building_profile(), async_step_building_profile_sensors()) — that holds shared building-level weather and climate sensors without controlling any covers. Linked covers receive live sensor propagation via _async_profile_propagate(); _copy_profile_to_cover() applies profile values and _covers_linked_to() tracks which entries reference a given profile. BuildingProfilePolicy and SensorSource define the data model. On deletion, async_remove_entry() cleans the dangling profile link from all linked covers. The standalone weather-retraction toggle was removed in the same pass (#706); the migration handles existing data transparently.

  • Multiple blind-spot slots with elevation modes (#701, #702, #708): Blind-spot configuration expands from one slot to three (BLIND_SPOT_SLOTS). Each slot carries left/right azimuth bounds plus an elevation threshold and an elevation mode: BLIND_SPOT_ELEV_MODE_BELOW blocks low-sun intrusion, BLIND_SPOT_ELEV_MODE_ABOVE blocks high-sun intrusion. BlindSpot is a frozen dataclass; _make_blind_spot() and _extra_blind_spots_from() build the slot list from config, _blind_spot_slot_keys() drives options-flow validation, _blind_spot_step_errors() validates bounds, and _sun_in_blind_spot() does the single containment check for both modes. Slot 1 reuses the legacy unsuffixed keys so existing configurations carry forward unchanged; slots 2 and 3 are optional and suffixed. Diagnostics loop over all active slots dynamically.

  • Ten custom-position slots (#703, #704): CUSTOM_POSITION_SLOT_NUMBERS now covers slots 1–10, up from 1–5. Slots 6–10 behave identically to existing slots and respect the same priority range (1–100, default 77).

  • Endpoint-aware open/close (#697, #699): When a cover supports set_position, open and close commands now drive the carriage to its physical endpoints rather than issuing only a generic service call. apply_user_position_endpoint_open() and apply_user_position_endpoint_close() handle the axis-aware dispatch; _POSITION_AXIS_SERVICES maps each axis to its service.

Fixed

  • Venetian tilt back-rotated after close (#694): On hardware where the motor drags the slats shut during a close, the integration previously left the verified-tilt flag set and never re-asserted the commanded angle. _tilt_targets_verified.discard() is now called after any position move so the sequencer re-reads actual tilt on the next update and re-asserts the correct angle. Thanks to @vaind for reporting and fixing the edge case.

Testing

5114 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.