Adaptive Cover Pro ⛅ v2.30.0-beta.4
Pre-releaseHeads-up: I'm planning to cut a stable v2.30.0 release tomorrow, so this is likely the last beta on this line — please test now if you can. I'll also be traveling for the next week, so responses and fixes may be slower than usual. Thanks for your patience.
Highlights
2.30.0-beta.4 refines the Building Profile feature introduced in beta.3: a new linked-cover overview step surfaces sensor inheritance and divergence across all covers tied to a profile, and a per-cover override UI lets individual covers selectively deviate from inherited profile sensors. Outside the profile work, two new configuration options land: an on/off master toggle for the weather override (#719) and an opt-in summer-close sun-floor bypass (#689). The options flow also gains a warning when a custom-position slot is set to safety priority and bypasses all gates (#711). All of beta.3's additions carry forward — roof/skylight cover type, building profiles, multi-slot blind spots, ten custom-position slots, and endpoint-aware open/close. The config-entry schema moves from v3.5 to v3.6; existing installs keep weather override on automatically through migration, and the summer-close bypass defaults off.
To install, enable "Show beta versions" in HACS. Feedback is especially welcome on: the Building Profile overview and per-sensor override UI, the weather override toggle and its off-by-default for new installs, and the summer-close bypass in climate-aware configurations.
Added
-
Roof/skylight window cover type (#212, #696): New cover type
"cover_roof_window"with pitch-aware sun geometry. ConfigureCONF_ROOF_PITCHandCONF_ROOF_HEIGHT_ABOVEto match the physical installation;RoofSunGeometryhandles the tilted-plane math,RoofWindowCoverdrives position calculation, andRoofWindowPolicyprovides the policy layer. The type is registered inALL_COVER_TYPESalongside 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.BuildingProfilePolicyandSensorSourcedefine 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. -
Building Profile overview of linked covers:
async_step_profile_overviewin the newbuilding_overview.pypresents a comparison table of every cover linked to the profile. Rows are modeled with the_CoverRecord,_DiffSpec, and_Entrydataclasses; diff logic uses_comparison_as_list,_comparison_as_table, and_format_diff_line, with local overrides rendered by_local_override_repr. Number normalization via_numensures numeric values compare correctly regardless of representation. -
Inherit/override model for Building Profile sensors:
async_step_profile_overrideslets a linked cover override any inherited profile sensor locally. Each override is tracked as anOverrideRecorddataclass, giving the options flow a structured representation of which fields are inherited and which are locally set. -
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_BELOWblocks low-sun intrusion,BLIND_SPOT_ELEV_MODE_ABOVEblocks high-sun intrusion.BlindSpotis 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_NUMBERSnow 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()andapply_user_position_endpoint_close()handle the axis-aware dispatch;_POSITION_AXIS_SERVICESmaps each axis to its service. -
On/off master toggle for weather override (#719):
CONF_WEATHER_ENABLEDgates the entire weather handler. New installs default to off (DEFAULT_WEATHER_ENABLED = False); the v3.5→v3.6 migration setsCONF_WEATHER_ENABLED = Truefor all existing entries, so upgrading changes nothing for installs that already have weather sensors configured. -
Opt-in summer-close sun-floor bypass (#689):
CONF_SUMMER_CLOSE_BYPASS_SUN_FLOORlets summer climate mode close covers regardless of sun position. Default off — enabling it is additive and changes nothing for installs that leave it unset. -
Safety-slot warning (#711): The options flow warns when a custom-position slot is set to safety priority (100), which bypasses all gates including the time window and delta checks.
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. -
Building Profile options flow routed to sensor-only step (#715, #717): The Building Profile options flow now routes to
async_step_profile_sensors— a sensor-only step — rather than the full cover options flow, so profile entries can only configure shared sensors. -
Building Profile template fields scoped and surfaced in UI (#720, #722): Template fields in the Building Profile options flow are now correctly scoped to the profile entry and visible in the UI; previously they could leak across entries or not appear.
-
Building Profile entries skipped in
loaded_coordinators(#712): Building profile entries are now excluded fromloaded_coordinatorsso coordinator lookups intended for cover entries don't inadvertently resolve to profile entries. -
async_unload_entryguarded for non-cover building profiles (#712, #714):async_unload_entrynow guards against non-cover building profile entries, preventing an unhandled path when unloading a profile entry. -
German translation drift resolved (#709, #710): Several config and options flow strings were out of sync between English and German. The drift is resolved; no string keys changed.
Upgrade notes
Upgrading from any earlier beta or from a stable release requires no manual reconfiguration. The schema minor-version bumps to v3.6; the migration is transparent. Weather override: the v3.6 migration sets CONF_WEATHER_ENABLED = True for all existing entries — installs with weather sensors configured keep the same behavior, and the off-by-default applies only to new installs. Summer-close bypass: defaults off and only takes effect if you enable it under climate settings.
Testing
5183 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.