Skip to content

Adaptive Cover Pro ⛅ v2.30.0-beta.2

Pre-release
Pre-release

Choose a tag to compare

@jrhubott jrhubott released this 26 Jun 16:41
· 44 commits to main since this release

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

Highlights

2.30.0-beta.2 adds diagnostic transparency and two more venetian/override options on top of beta.1's foundation. The six functional changes: a live solar_calculation sensor that surfaces the per-cycle geometric trace (sun elevation, gamma, computed position, and engine-specific intermediates) for every cover type; a follow-up that populates the sensor's attributes with sun inputs and a status reason even when the sun is outside the tracking window; a correction to the venetian proxy that now drives only the slat axis when a tilt is requested — previously the carriage moved instead; a new set_tilt service for automation use; a configurable drift-reset direction so hardware that rests near-closed can flush accumulated tilt drift faster; and input-sensor override detection for physical wall switches. CONF_VENETIAN_TILT_RESET_DIRECTION defaults to VENETIAN_TILT_RESET_OPEN — the prior hardcoded behavior — and CONF_MANUAL_OVERRIDE_INPUT_ENTITIES defaults to an empty list. Upgrading from beta.1 changes nothing without reconfiguration. Venetian users, users with physical wall switches, and anyone who uses the developer diagnostics are the most likely to see a difference; feedback on all six areas is welcome.

Added

  • Live solar_calculation diagnostic sensor for all cover types (#682, #683): Each cover now gets a solar_calculation sensor whose state is the per-cycle computed position_pct and whose attributes carry the full geometric trace: sun elevation, gamma, engine-specific intermediates, and for venetian covers a nested tilt sub-trace. The calc engines (vertical, horizontal, tilt, venetian) record their raw inputs and outputs in _last_calc_details each cycle. DiagnosticsBuilder._round_trace and _round_trace_value round every numeric leaf at the presentation boundary and stamp cover_type and status before the data reaches the sensor or the diagnostics download. The sensor state is numeric and reads unknown when there is no solar target (see the fix below for when that happens).

  • Configurable Venetian drift-reset direction (#686) (#690): A new per-instance option CONF_VENETIAN_TILT_RESET_DIRECTION (key venetian_tilt_reset_direction, select: open / close) controls which mechanical endpoint the drift-reset drives the slats through before re-sending the target. The default is VENETIAN_TILT_RESET_OPEN (DEFAULT_VENETIAN_TILT_RESET_DIRECTION), which preserves the existing behavior — drive fully open then back. Set to VENETIAN_TILT_RESET_CLOSE on hardware that rests near-closed during sun tracking (quieter, faster reset) or that re-zeroes the slat actuator on a close command. The direction is wired through the same live-lambda path as the threshold so an options change takes effect without a reload; valid values are listed in VENETIAN_TILT_RESET_DIRECTIONS. Upgrading from beta.1 changes nothing without reconfiguration. Thanks to @elmakus (#686) for requesting this.

  • Manual override detection from external input sensors (#688) (#691): A new per-instance option CONF_MANUAL_OVERRIDE_INPUT_ENTITIES (key manual_override_input_entities, multi-entity selector) accepts a list of binary sensors whose off→on edge engages manual override on every cover in the instance. Intended for a physical wall switch wired to an input (e.g. a Shelly 2PM exposing binary_sensor.*_cover_input_0): pressing it pauses automatic control for the configured override duration instead of inferring a manual move from the cover's reported position. The edge filter is strict — on→on, None→on (startup restore), and unavailable/unknown states all do nothing. Each press re-arms the full override duration. Combine with "Only engage manual override from Adaptive Cover Pro commands" to make these sensors the sole override trigger. Defaults to an empty list (feature disabled) — upgrading from beta.1 changes nothing. Thanks to @elmakus (#688) for requesting this.

  • set_tilt service for the slat/tilt axis (#684) (#685): A new adaptive_cover_pro.set_tilt service lets automations drive the venetian slat axis without touching the carriage. The service delegates to async_apply_user_tilt, which routes through the apply_user_tilt policy hook: VenetianPolicy drives only the slats via the sequencer; other cover types fall back to the position path. A force parameter (default false) governs manual-override engagement, matching set_position semantics. Implemented in set_tilt_service.py via async_handle_set_tilt.

Fixed

  • Proxy tilt drove the carriage, not the slats (#684) (#685): The venetian proxy's async_set_cover_tilt_position was calling async_apply_user_position with the requested tilt value, which moved the carriage to that number and left the slats at whatever angle they held. It now calls async_apply_user_tilt, which dispatches through VenetianPolicy.apply_user_tilt to DualAxisSequencer.update_tilt_only with force=True — the carriage is never commanded. The force flag on update_tilt_only bypasses the target-unchanged dedup so a user re-requesting the current tilt value still fires.

  • solar_calculation attributes blank outside the solar window (#682): When the sun was outside the tracking window the solar handler never ran, so _last_calc_details was None and the sensor read unknown with empty attributes. DiagnosticsBuilder._build_position_calc_details now emits a minimal fallback trace — sol_elev_deg, gamma_deg, position_pct=None — whenever no engine trace was recorded. The status field, drawn from control_state_reason, is stamped on every trace (full or fallback) to explain why no solar target was computed.

  • Deploy script stamped raw sha, blocking integration load: The deploy script was writing a bare 7-character git sha as the manifest version field. HA's AwesomeVersion parser rejects shas that contain hex letters, silently blocking the integration from loading. The script now carries the sha as SemVer build metadata (e.g. 2.30.0-beta.1+873727b) and strips any prior metadata on re-deploy.

Testing

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