Skip to content

Adaptive Cover Pro ⛅ v2.21.5

Latest

Choose a tag to compare

@jrhubott jrhubott released this 19 May 02:50
· 9 commits to main since this release

ℹ Using release notes from: release_notes/v2.21.5.md

v2.21.5

🔑 Highlights

  • The managed cover entity now mirrors transient opening and closing states from the underlying physical cover, so automations and dashboards that read state from the managed entity no longer see it stuck at open or closed during movement.
  • Venetian blinds with a custom-position or default/sunset handler tilt configured in v2.21.3 now apply that tilt correctly — a logic-order bug was stripping handler-supplied tilt on any non-SOLAR control method.

✨ Features

  • Managed cover mirrors opening/closing state from source (#388, PR #389): AdaptiveProxyCover now implements is_opening and is_closing properties that return the source cover's live CoverState.OPENING / CoverState.CLOSING state. Previously, HA's entity base class fell through to is_closed when these properties were absent, leaving the managed entity reporting only open or closed regardless of what the source was doing. Users who issue stop-during-travel commands or drive position-feedback scripts through the managed entity will now see the correct transient state without having to also poll the physical cover directly.

🐛 Bug Fixes

  • Handler-supplied tilt wiped on non-SOLAR venetian paths (#369, PR #387): When a custom-position handler or the default/sunset handler supplied an explicit tilt value (configured in v2.21.3), VenetianPolicy.post_pipeline_resolve discarded it on any ControlMethod other than SOLAR. The suppression gate that clears engine-computed tilt was running unconditionally before the handler-tilt honor check, so CUSTOM_POSITION and DEFAULT tilts were cleared to None on every cycle. The fix reorders the two checks: handler-supplied tilt (result.tilt is not None) is honored first and returned early; the engine-suppression gate (_engine_tilt_suppressed) now runs only when no handler tilt is present, preserving its original role of blocking solar-engine tilt on non-SOLAR, non-direct-sun cycles. Movie-mode and cleaning-mode scenes configured via custom position tilt or default_tilt / sunset_tilt will now hold their intended slat angle.

🧪 Testing

  • ✅ 3239 tests passing.
  • New tests in tests/cover/test_proxy_cover_mirror.py cover is_opening/is_closing for OPENING, CLOSING, OPEN, and CLOSED source states, the closed → opening → open transition sequence, and unavailable/unknown source edge cases.
  • New tests in tests/test_cover_types/test_venetian_post_pipeline.py and tests/test_pipeline/test_tilt_integration.py cover handler tilt on CUSTOM_POSITION (including tilt=0), DEFAULT, and SOLAR with direct_sun_valid=False; three previously-passing tests that encoded the bug behavior are corrected.

Compatibility

  • Home Assistant 2026.3.0+
  • Python 3.11+