Adaptive Cover Pro ⛅ v2.28.0-beta.1
Pre-releaseℹ Using release notes from: release_notes/v2.28.0-beta.1.md
This beta introduces a FOV-mode selector that lets you derive field-of-view from physical reveal measurements instead of manually entering angles, patches a low-sun edge-case that incorrectly left covers open at near-zero elevations, and ships several performance and robustness improvements under the hood.
🎯 Highlights
Beta — please test and report back.
- Try the new FOV-mode selector: configure a window using
MEASUREMENTSmode (reveal depth →fov_from_reveal()) and confirm the computed angles match your physical window. - Verify the low-sun behavior change: at very low sun elevations the cover now returns 0 (fully closed) rather than the previous h_win value (fully open). Confirm this is correct for your installation.
- Geometry caching and write-gating are internal changes — normal operation should be unchanged. Flag any unexpected behavior.
✨ Features
FOV-mode selector (#565)
Adds a FovMode enum (ANGLES | MEASUREMENTS) and a new CONF_FOV_MODE option to the config flow. When MEASUREMENTS mode is selected, the integration derives the field of view from physical reveal depth via fov_from_reveal() rather than requiring manual angle entry. The fov_mode_schema() helper builds the relevant config-flow step, and supports_fov_mode on the cover-type policy gates the option to cover types where it applies. Translations updated for English, German, and French.
🐛 Bug Fixes
Low-sun edge case returns closed position (#559, #562)
At very low sun elevations a geometry edge case caused the cover calculation to return h_win (fully open) instead of 0 (fully closed). The fix corrects the return value so the cover closes rather than opens when the sun is near the horizon. Verified by test_low_elevation_calc_percentage_is_fully_closed.
🔧 Internal
Write-gating, geometry caching, and sun availability guard (#543)
Three robustness and performance improvements shipped together:
- Write-gating:
_acp_render_signature()detects when a calculated position is identical to the last written value and skips the HA state write, reducing redundant entity updates. - Geometry cache: Pure geometry helpers are decorated with
@lru_cache(maxsize=512), eliminating repeated identical calculations across update cycles. - Sun availability guard: A guard on
sun.sunsuppresses solar tracking when the sun entity is unavailable, preventing stale or error-state data from driving cover commands.
🧪 Testing
Test suite grows from 4,214 to 4,271 (+57 net new tests). New modules:
test_config_flow_fov_mode.py/test_fov_mode.py— FOV-mode selector andfov_from_reveal()calculationtest_entity_write_gating.py— write-gating behaviortest_geometry_cache.py— cache correctness and hit behaviortest_sun_unavailable_guard.py— solar tracking suppression when sun entity unavailable
Compatibility
Requires Home Assistant 2026.3.0+. No new coupled-component requirements.