Skip to content

Releases: jrhubott/adaptive-cover-pro-card

v2.8.0

16 Jun 17:16

Choose a tag to compare

Highlights

v2.8.0 closes two gaps in how the card communicates what the integration is doing. When the integration throttles consecutive adjustments, the decision strip now shows a live countdown — the exact seconds until the next adjustment is allowed — so the cover sitting still is no longer a silent mystery. The covers bar and sky compass get a round of label and marker fixes: during a manual override, the would-be solar target is labeled distinctly rather than sharing the plain "Target" label with a held position, the target marker no longer clips past the rail endpoints at 0% and 100%, and the compass legend gains a separate "held" row when the actual cover position diverges from the target, making it possible to see at once where the cover sits versus where automation would send it.

Added

  • Throttle countdown in decision strip (src/components/decision-strip.ts, src/lib/formatters.ts, src/types.ts, src/lib/i18n/en.ts, src/lib/i18n/fr.ts) — DecisionStrip now renders a .throttle-countdown banner showing the decision.next_change_in string ("Next adjustment allowed in {time}") when the integration is holding back an adjustment. The countdown derives from the last-skipped action via _throttleNextAllowedIso(), feeds into the existing countdownTo formatter, and ticks via _syncTimer() once per second; the banner disappears automatically once the throttle window clears. LastSkippedAttributes carries the new throttle fields on the integration side; cards running against older integration builds render exactly as before, since the banner only appears when those fields are present. The new nextAllowedIso formatter is unit-tested alongside countdownTo. Refs #163, PR #165.

Changed

  • Target label and marker fixes in covers bar (src/components/cover-bar.ts, src/lib/i18n/en.ts, src/lib/i18n/fr.ts) — During a manual-override divergence, CoverBar now labels the solar would-be position using covers.target_solar rather than the plain covers.target label, paired with an override-specific tooltip via covers.target_tooltip_override. The target marker also picks up an inline clamp and translateX(-50%) centering so it no longer overflows the rail at the 0% and 100% extremes. Refs #158, PR #164.

  • Compass legend second row for held position (src/components/sky-compass.ts, src/lib/i18n/en.ts, src/lib/i18n/fr.ts) — SkyCompass now computes a showHeld boolean and, when the actual cover position diverges from the target, renders a second legend row with a .cover-actual-swatch glyph under the existing target row. The retired compass.cover_position key is replaced by compass.cover_target and compass.cover_held. The window-normal entry is relabeled "Window azimuth". Refs #158, PR #164.

Compatibility

  • Home Assistant 2024.1+
  • Adaptive Cover Pro integration v2.22.1-beta.3 or newer for full functionality
  • The throttle countdown activates only when the companion integration exposes the throttle fields on the last-skipped action; the card renders gracefully without them
  • No config migration needed

Install / Upgrade

Through HACS, update to v2.8.0. A browser restart is not required.

HA caches ES modules aggressively. After updating, bump the ?v=2.8.0 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.8.0) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

v2.7.0

16 Jun 05:42

Choose a tag to compare

Highlights

v2.7.0 delivers three visible upgrades to how the card reads at a glance. The sky-compass legend now renders live SVG glyphs — the sun pulses gold when it is inside the field of view, the moon shows its actual current phase, and the window entry gets a matching arrowhead — replacing the static color swatches that gave no contextual signal. The covers bar gains a solar would-be target during a manual override, so it is always clear what the integration would have done, and the mismatch badge is suppressed when the divergence is intentional. The pipeline view rounds out the picture by showing the held position as each handler's primary position when the integration supplies one, with the solar would-be inline as secondary context.

Added

  • Pipeline view held position (src/components/decision-strip.ts, src/types.ts) — The decision-strip now renders a handler's held_position as its primary position when the integration supplies it, with the solar would-be shown inline as secondary context. A strict non-null check lets 0% read as a valid held position, so older integration builds without the field render exactly as before. The display activates once the companion integration ships the held_position field (integration #608). Refs #161, PR #162.

Changed

  • Interactive sky-compass legend (src/components/sky-compass.ts, src/lib/geometry.ts) — The single- and multi-entry legends now render live SVG glyphs. The sun glyph glows gold only when the sun sits inside the field of view; the moon glyph renders the real current phase via a legend-scoped SVG mask driven by moonPhaseShadowDx; and the window entry shows a slim arrow glyph using arrowheadPath, matching the arrowhead added to the plotted window line. "Window normal" was renamed to "Window azimuth" (FR: "Azimut de la fenêtre"). Sun and Moon were moved to the top of the multi-entry legend. Follow-up fixes landed uniform 20 px row heights, a fixed-width icon cell so labels align, centered glyph rows, and a sun glyph sized visibly larger than the moon. Refs #157, PR #160.

  • Solar target + quieter badge in covers bar (src/components/cover-bar.ts, src/lib/cover-position.ts) — During a manual override the covers bar now labels "Target" with coverSolarTarget — the position the integration would have sent — while the per-cover fill and number reflect coverHeldPosition. isOverrideDivergence suppresses the mismatch badge when the gap is intentional (a genuine reach-failure still shows it), and the badge column is reserved so toggling it does not reflow the bar. displayTarget, coverActualPosition, and manualOverrideActive from the new shared module src/lib/cover-position.ts are reused by both the bar and the compass. Refs #158, PR #159.

Compatibility

  • Home Assistant 2024.1+
  • Adaptive Cover Pro integration v2.22.1-beta.3 or newer for full functionality
  • The pipeline held-position display activates only with a companion integration build that exposes the held_position field (integration #608); the card renders gracefully without it
  • No config migration needed

Install / Upgrade

Through HACS, update to v2.7.0. A browser restart is not required.

HA caches ES modules aggressively. After updating, bump the ?v=2.7.0 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.7.0) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

v2.6.2

15 Jun 18:48

Choose a tag to compare

Highlights

v2.6.2 adds a hover tooltip to the forecast strip's "now" cursor. The thin vertical line that marks the current time on the forecast strip was already interactive on the elevation chart — this patch brings it in line. Hovering the cursor now shows the current local time in a floating tooltip, without making the narrow line any harder to hit.

Fixed

  • Forecast strip "now" cursor tooltip — The vertical line marking the current time in forecast-strip.ts now shows a floating tooltip with the current local time on hover, matching the elevation chart's existing behavior. The implementation wraps the visible .now line inside a .now-group element and adds a transparent .now-hit line (stroke-width: 10) behind it to give the thin cursor a larger hit area. pointer-events: none on the visible line prevents it from competing with the hit target. The tooltip text is produced by formatClock and wired through tooltip().

Compatibility

  • Home Assistant 2024.1+
  • Adaptive Cover Pro integration v2.22.1-beta.3 or newer for full functionality
  • No config migration needed

Install / Upgrade

Through HACS, update to v2.6.2. A browser restart is not required.

HA caches ES modules aggressively. After updating, bump the ?v=2.6.2 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.6.2) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

v2.6.1

14 Jun 05:09

Choose a tag to compare

Highlights

v2.6.1 replaces the browser's native SVG tooltips with a custom floating tooltip system. Tooltips now follow the cursor, stay inside the viewport, and inherit the card's theme — fixing the clipped, unstyled pop-ups that appeared over the sky compass and other SVG elements.

Changed

  • Custom floating tooltips across all cards — The card no longer relies on SVG <title> native tooltips, which browsers render inconsistently and clip at viewport edges. Tooltips now use a cursor-following, viewport-aware implementation that flips position automatically when it would overflow the screen and picks up the current HA theme. Each card accepts an optional tooltips config block: tooltips: { enabled: false } restores the native browser tooltips, and offset / delay tune the bubble's cursor offset (default [12, 16]) and open delay (default 400 ms). Closes #134 (#156).

Compatibility

  • Home Assistant 2024.1+
  • Adaptive Cover Pro integration v2.22.1-beta.3 or newer for full functionality
  • No config migration needed; floating tooltips are on by default and degrade gracefully

Install / Upgrade

Through HACS, update to v2.6.1. A browser restart is not required.

HA caches ES modules aggressively. After updating, bump the ?v=2.6.1 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.6.1) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

v2.6.0

13 Jun 22:18

Choose a tag to compare

Highlights

v2.6.0 makes the card substantially more useful on small screens and gives users more visibility into what climate control is doing and why. Under the hood, a shared registry-caching layer eliminates redundant entity-registry fetches across all three cards and adds re-render throttling, keeping the card responsive without hammering Home Assistant on every hass update.

Added

  • Climate thresholds and inactive reason in the climate panel — The climate panel now shows the configured indoor/outdoor temperature thresholds alongside an explanation of why climate control is not currently acting when it is idle. Previously the panel offered no feedback on either setting. Closes #129 (#152).

  • Force-override custom-position (slot 5) display — The card now reflects the integration's v2.28.0 force-override-into-custom-position behavior, including correct badge visibility. Requires integration v2.28.0 or newer; older integrations are unaffected and the card degrades gracefully. Closes #150 (#151).

Changed

  • Tile controls reflow at phone widths — Override tile controls collapse into a full-width row at narrow viewport widths instead of overflowing or wrapping awkwardly. No config change needed. (#154).

  • Shared entity-registry caching and re-render throttling — All three cards now share a single entity-registry fetch through a new caching layer (registry-store.ts) rather than each issuing an independent request. Discovery results are memoized between updates. Re-render guards throttle updates so only meaningful hass changes trigger a re-render, and a wall-clock-aligned minute timer (minute-timer.ts) drives time-sensitive UI without polling. The change-tracking logic lives in hass-change.ts (#153).

Compatibility

  • Home Assistant 2024.1+
  • Adaptive Cover Pro integration v2.22.1-beta.3 or newer for full functionality
  • Force-override custom-position (slot 5) display requires integration v2.28.0 or newer
  • No config migration needed; all changes are additive

Install / Upgrade

Through HACS, update to v2.6.0. A browser restart is not required.

HA caches ES modules aggressively. After updating, bump the ?v=2.6.0 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.6.0) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

v2.5.3-beta.1

13 Jun 18:30

Choose a tag to compare

v2.5.3-beta.1 Pre-release
Pre-release

Highlights: This beta lands three independent changes: two features and a performance overhaul. The climate panel now shows threshold temperatures and explains why climate mode is inactive when it is. The force-override tile migrates to the integration's v2.28.0 custom-position slot-5 model. The render path gets a significant restructure — RegistryCache shares a single entity-registry fetch across components, createDiscoveryListMemo avoids redundant discovery work on irrelevant state updates, and shouldUpdate guards (via entityStateChanged) prevent re-renders when nothing the component cares about changed. The bundle grew roughly 8 KB to accommodate the new registry-store.ts module.

Beta feedback wanted: confirm climate thresholds and inactive reasons render correctly against your integration version; confirm force-override behaves on integration v2.28.0+; and report any render glitches or unexpected re-render pauses introduced by the throttling changes.

✨ Features

  • Climate panel shows thresholds and inactive reason (#129, #152) — src/components/climate-panel.ts now reads threshold_low, threshold_high, and threshold_summer_outside from the climate entity and displays them alongside the panel status. When climate mode is loaded but not active, the panel resolves the ClimateInactiveReason slug — mode_off, schedule_off, floor_clamp, motion_control, integration_disabled, or active — and renders a localized explanation pulled from the climate.reason i18n namespace. Reasons listed in SUPPRESSED_REASONS are silently omitted. French translations are included under climate.reason in src/lib/i18n/fr.ts. Requires no new config keys.

  • Force-override migrates to integration v2.28.0 custom-position slot-5 (#150, #151) — The force-override path now targets the integration's new custom-position slot at priority 100 (CUSTOM_POSITION_SAFETY_PRIORITY). activeSlotIsSafety() in src/lib/badge-visibility.ts identifies when slot-5 is the active slot, and resolveActiveMinModeFloor() in src/lib/decision-summary.ts contains the slot-finding logic that resolves against CustomPositionSlotSnapshot. safetyVariant badge styling in src/components/tile-badge.ts and src/components/more-info-dialog.ts marks the force-override state visually. Requires integration v2.28.0 or newer; earlier integration versions will not produce a slot-5 snapshot and the force-override badge will not appear.

⚡ Performance

  • Throttled re-renders, memoized discovery, shared registry fetch (#153) — Three coordinated changes reduce unnecessary work on every hass update. RegistryCache in the new src/lib/registry-store.ts holds a single HassRegistry result and exposes it via loadEntityRegistry, so all components share one fetch rather than each issuing their own. createDiscoveryListMemo in src/lib/entity-discovery.ts memoizes the discovered entity list and skips re-discovery when the relevant registry slice has not changed. entityStateChanged in src/lib/hass-change.ts is used as a shouldUpdate guard in components, preventing Lit re-renders when none of the component's tracked entities changed state. startMinuteTimer and cancelMinuteTimer in src/lib/minute-timer.ts replace inline timer logic, and _sampleDayCache in src/lib/sun-model.ts caches the day's sun-path sample. Installations with many covers or frequent HA state traffic should see the most improvement.

📦 Install / Upgrade

Through HACS, update to v2.5.3-beta.1. Restart is not required for the card; reload your browser or dashboard.

HA caches ES modules aggressively. After updating, bump the ?v=2.5.3-beta.1 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.5.3-beta.1) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

No config migration needed. Existing configs work without modification.

Compatibility: Home Assistant 2024.1+, Adaptive Cover Pro integration v2.22.1-beta.3 or newer. The force-override custom-position slot-5 feature requires integration v2.28.0 or newer.

v2.5.2

11 Jun 03:18

Choose a tag to compare

Highlights: Four layout and color fixes land in this patch. The detailed card no longer clips content or grows a scrollbar when you have several covers; it now sizes itself to its content. The Sky Compass handles large cover sets without overflowing. Color overrides set per-cover now propagate all the way through: legend swatches, the embedded elevation chart, and the FOV wedge and cover-bar segment all respect them instead of falling back to gold or --primary-color. No new config keys; no migration needed.

🐛 Fixed

  • Card height now auto-sizes to contentgetGridOptions() previously returned a fixed row count based on cover count, and a :host { height: 100% } rule locked the card to that allocation. With many covers the content clipped and showed an inner scrollbar; with few it left unused space. getGridOptions() now returns rows: 'auto' and the fixed-height rule is removed, so the card grows to its actual content. Fixes #146.

  • Card header wrapping and Sky Compass overflow with many covers — Two layout problems with larger cover counts. The .header element used align-items: center, which clipped a title that wrapped to a second line; it now uses align-items: flex-start so both lines are visible. The Sky Compass grid overflowed with six or more covers: row count now scales with cover count, overflow:auto applies as a fallback, the legend column caps via max-height and overflow-y scroll, and the elevation chart's end-label no longer clips after a min-width:0 fix to its schedule-tick anchor. Fixes #147, #146.

  • Cover-color overrides now reach legend swatches and the embedded elevation chart — The window-normal legend swatch and the Sun Today elevation chart embedded in the main card were hardcoded to --primary-color regardless of any per-cover color the user configured. src/adaptive-cover-pro-card.ts now forwards cover_colors into the embedded chart, matching what the standalone src/components/sky-compass.ts and src/components/elevation-chart.ts already did.

  • FOV wedge and cover-bar segment default to cover color, not gold — The FOV visual in src/components/sky-compass.ts and the position segment in src/components/cover-bar.ts previously fell back to gold when no explicit color override was set. They now fall back to the cover's assigned color instead, so the FOV blends with the cover it represents rather than standing out as a fixed gold shape. Fixes #144, #145.

📦 Install / Upgrade

Through HACS, update to v2.5.2. Restart is not required for the card; reload your browser or dashboard.

HA caches ES modules aggressively. After updating, bump the ?v=2.5.2 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.5.2) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

No config migration needed. All changes are layout corrections and color propagation fixes; existing configs work without modification.

Compatibility: Home Assistant 2024.1+, Adaptive Cover Pro integration v2.22.1-beta.3 or newer.

v2.5.1

09 Jun 14:03

Choose a tag to compare

Highlights: Two visual and layout corrections ship in this patch. The sun dot on the sky compass and elevation chart now reads clearly at a glance: warm yellow or gold when the sun is up, dim grey when it has set. The detailed tile card floors its grid height at 2 rows so the controls row never clips in tight Sections layouts. No new config keys; no migration needed.

🐛 Fixed

  • Sun dot color legibility — The sky compass and elevation chart sun dot previously used colors that blurred the distinction between daytime and nighttime states. .sun-dot.up (above horizon, outside FOV) now fills #ffe680 (light yellow); .sun-dot.in-fov (in FOV but not hitting) uses var(--warning-color, gold); .sun-dot.valid (actively hitting) keeps var(--warning-color, gold) with a drop-shadow glow; .sun-dot.night (below horizon) renders at var(--secondary-text-color) at reduced opacity — a dim grey that clearly signals the sun has set. Changes land in src/components/sky-compass.ts and src/components/elevation-chart.ts.

  • Tile card controls clipping in narrow gridsgetGridOptions() on the detailed tile layout now enforces a minimum of 2 grid rows. Previously, a single-row allocation could clip the controls row in narrow or compact Sections columns. The floor is applied in src/adaptive-cover-pro-tile-card.ts.

📦 Install / Upgrade

Through HACS, update to v2.5.1. Restart is not required for the card; reload your browser or dashboard.

HA caches ES modules aggressively. After updating, bump the ?v=2.5.1 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.5.1) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

No config migration needed. All changes are visual corrections and a layout floor; existing configs work without modification.

Compatibility: Home Assistant 2024.1+, Adaptive Cover Pro integration v2.22.1-beta.3 or newer.

v2.5.0

09 Jun 04:08

Choose a tag to compare

Highlights: The cover bar and sky compass visual language now form a coherent whole — cover-bar fill colors match the compass wedges, an override wedge shows the gap between commanded and actual position, and the sun dot distinguishes three states (hitting, in-FOV-not-valid, outside-FOV) so users can diagnose solar-control behavior at a glance. Tile controls reflow to their own row in narrow Sections columns, and every card now declares getGridOptions() so the HA Sections layout sizes cards correctly without manual tuning. The legend loses its redundant sun entries and gains a single "Sun" entry. Bundle grew ~5.7 KB (228,900 → 234,747 bytes).

✨ Features

  • getGridOptions() declared on all three card types (#143) — The main card, sky-compass card, and tile card now implement getGridOptions(), telling the Sections layout the card's default column span, row count, and min/max bounds. The main card scales its row count with the number of visible sections. Without this, HA would size every card identically and resizing was erratic.

  • Override actual-vs-target wedge on the sky compass (#132, #142) — When a cover is under manual or force override, the compass renders a second wedge via overrideDivergenceTarget() in src/lib/geometry.ts to visualise the gap between the integration-commanded position and where the cover physically sits. The window segment color on the main-card compass follows the same override state, so the two visuals stay in sync.

  • Tile controls reflow in narrow Sections columns (#136, #139) — Tile card layout now uses CSS container queries (container-type: inline-size) instead of viewport media queries. Below 340 px card width the controls row drops to its own line, preventing icon and label truncation in narrow Sections columns where @media is blind to the actual column width.

  • Cover bar colors match the sky compass (#135, #140) — The cover-bar fill now uses the same gold/blue palette as the compass wedges: the open segment is gold, the closed segment is the selected cover color. The percentage label shifts left to clear the bar edge.

  • 3-way sun dot state (#137, #138) — A new pure helper src/lib/sun-dot-state.ts classifies the sky-compass and elevation-chart sun dot as gold (hitting), light-yellow (in_fov_not_valid), or dim (outside_fov). The authoritative source is the decision_trace.sun_state attribute introduced in integration PR #554; on older integration builds the card falls back to deriving the same three states from direct_sun_valid + sun_position.in_fov.

  • cursor: default on all tooltips (#134, #141) — Tooltip elements across the full card suite switch from cursor: help to cursor: default, removing the misleading question-mark cursor on non-interactive elements.

  • Collapsed Sun legend entry — The sky-compass legend previously listed separate swatches for each above-horizon sun state. These collapse into a single "Sun" entry, removing the .sun.in-fov CSS rule and the compass.in_fov i18n key.

🐛 Fixed

  • Cover bar closed segment color (#135) — Two earlier iterations painted the open/closed segments in the wrong colors or used hard-coded values that ignored the cover's configured color. The closed segment now always uses the selected cover color; the open segment is gold to match the compass hitting-sun wedge.

📦 Install / Upgrade

Through HACS, update to v2.5.0. Restart is not required for the card; reload your browser or dashboard.

HA caches ES modules aggressively. After updating, bump the ?v=2.5.0 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.5.0) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

No config migration needed. All changes are additive or visual corrections; existing configs work without modification.

Compatibility: Home Assistant 2024.1+, Adaptive Cover Pro integration v2.22.1-beta.3 or newer. The authoritative sun-dot path (#137) requires an integration build that includes decision_trace.sun_state (integration PR #554); the card falls back gracefully on older builds.

v2.4.0

07 Jun 21:35

Choose a tag to compare

Highlights: The sky compass and elevation chart gain substantial new visual depth: an actual-vs-target cover wedge makes position error immediately visible, multi-window field-of-view ribbons are now overlaid directly inside the chart grid, and schedule windows are surfaced on both the elevation chart and across the decision strip and tile cards. Tooltip elements across all cards now signal interactivity with cursor: help, and the now-line on the sun/elevation chart shows its current time. One fix corrects a climate standby label that was silently showing "Unknown". Bundle grew ~3.9 KB (224,977 → 228,900 bytes).

✨ Features

  • Actual-vs-target cover wedge on the sky compass (#132) — A second wedge now renders alongside the FOV arc to show the gap between where a cover is commanded and where it physically sits. Main-card quadrant coloring adapts via the quadrant_colors config option, with arrow coloring conditioned on the same state.

  • Multi-window FOV ribbon in the elevation chart grid — Multiple windows now each contribute a stacked FOV row rendered directly inside the chart grid, replacing the previous single-window overlay. Each row maps to its own window's field-of-view band, making per-window solar exposure easy to read at a glance.

  • Schedule window surfaced across all cards (#128, #131) — The automation schedule window — derived from schedule_start_minutes and schedule_end_minutes on the control_status entity attributes — is now visualized as a shaded region on the elevation chart and as an off_schedule badge on the decision strip and tile card. Coverage of out-of-window states no longer requires opening more-info.

  • Help cursor on tooltips and now-line time on the sun chart — Every tooltip across the card suite now sets cursor: help so users know the element is interactive. The now-line on the elevation/sun chart additionally displays its wall-clock time, using formatClock with correct timezone handling.

🐛 Fixed

  • Climate standby shown instead of "Unknown" (#129, #130) — When the climate switch is off, the climate panel was falling through to a generic "Unknown" label. The climate_standby i18n key is now resolved correctly, giving users a meaningful state string in all supported locales.

📦 Install / Upgrade

Through HACS, update to v2.4.0. Restart not required for the card; reload your browser/dashboard.

HA caches ES modules aggressively. After updating, bump the ?v=2.4.0 query string on your Lovelace resource URL (/hacsfiles/adaptive-cover-pro-card/adaptive-cover-pro-card.js?v=2.4.0) to ensure browsers pick up the new bundle. A hard-refresh alone is not sufficient.

No config migration needed. The quadrant_colors config option is additive and optional — existing configs continue to work without it.

Compatibility: Home Assistant 2024.1+, Adaptive Cover Pro integration v2.22.1-beta.3 or newer.