Releases: jrhubott/adaptive-cover-pro-card
v2.8.0
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) —DecisionStripnow renders a.throttle-countdownbanner showing thedecision.next_change_instring ("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 existingcountdownToformatter, and ticks via_syncTimer()once per second; the banner disappears automatically once the throttle window clears.LastSkippedAttributescarries 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 newnextAllowedIsoformatter is unit-tested alongsidecountdownTo. 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,CoverBarnow labels the solar would-be position usingcovers.target_solarrather than the plaincovers.targetlabel, paired with an override-specific tooltip viacovers.target_tooltip_override. The target marker also picks up an inline clamp andtranslateX(-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) —SkyCompassnow computes ashowHeldboolean and, when the actual cover position diverges from the target, renders a second legend row with a.cover-actual-swatchglyph under the existing target row. The retiredcompass.cover_positionkey is replaced bycompass.cover_targetandcompass.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
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'sheld_positionas 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 theheld_positionfield (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 bymoonPhaseShadowDx; and the window entry shows a slim arrow glyph usingarrowheadPath, 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" withcoverSolarTarget— the position the integration would have sent — while the per-cover fill and number reflectcoverHeldPosition.isOverrideDivergencesuppresses 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, andmanualOverrideActivefrom the new shared modulesrc/lib/cover-position.tsare 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_positionfield (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
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.tsnow shows a floating tooltip with the current local time on hover, matching the elevation chart's existing behavior. The implementation wraps the visible.nowline inside a.now-groupelement and adds a transparent.now-hitline (stroke-width: 10) behind it to give the thin cursor a larger hit area.pointer-events: noneon the visible line prevents it from competing with the hit target. The tooltip text is produced byformatClockand wired throughtooltip().
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
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 optionaltooltipsconfig block:tooltips: { enabled: false }restores the native browser tooltips, andoffset/delaytune the bubble's cursor offset (default[12, 16]) and open delay (default400ms). 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
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 inhass-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
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.tsnow readsthreshold_low,threshold_high, andthreshold_summer_outsidefrom the climate entity and displays them alongside the panel status. When climate mode is loaded but not active, the panel resolves theClimateInactiveReasonslug —mode_off,schedule_off,floor_clamp,motion_control,integration_disabled, oractive— and renders a localized explanation pulled from theclimate.reasoni18n namespace. Reasons listed inSUPPRESSED_REASONSare silently omitted. French translations are included underclimate.reasoninsrc/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()insrc/lib/badge-visibility.tsidentifies when slot-5 is the active slot, andresolveActiveMinModeFloor()insrc/lib/decision-summary.tscontains the slot-finding logic that resolves againstCustomPositionSlotSnapshot.safetyVariantbadge styling insrc/components/tile-badge.tsandsrc/components/more-info-dialog.tsmarks 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
hassupdate.RegistryCachein the newsrc/lib/registry-store.tsholds a singleHassRegistryresult and exposes it vialoadEntityRegistry, so all components share one fetch rather than each issuing their own.createDiscoveryListMemoinsrc/lib/entity-discovery.tsmemoizes the discovered entity list and skips re-discovery when the relevant registry slice has not changed.entityStateChangedinsrc/lib/hass-change.tsis used as ashouldUpdateguard in components, preventing Lit re-renders when none of the component's tracked entities changed state.startMinuteTimerandcancelMinuteTimerinsrc/lib/minute-timer.tsreplace inline timer logic, and_sampleDayCacheinsrc/lib/sun-model.tscaches 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
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 content —
getGridOptions()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 returnsrows: '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
.headerelement usedalign-items: center, which clipped a title that wrapped to a second line; it now usesalign-items: flex-startso both lines are visible. The Sky Compass grid overflowed with six or more covers: row count now scales with cover count,overflow:autoapplies as a fallback, the legend column caps viamax-heightandoverflow-yscroll, and the elevation chart's end-label no longer clips after amin-width:0fix 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-colorregardless of any per-cover color the user configured.src/adaptive-cover-pro-card.tsnow forwardscover_colorsinto the embedded chart, matching what the standalonesrc/components/sky-compass.tsandsrc/components/elevation-chart.tsalready did. -
FOV wedge and cover-bar segment default to cover color, not gold — The FOV visual in
src/components/sky-compass.tsand the position segment insrc/components/cover-bar.tspreviously 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
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) usesvar(--warning-color, gold);.sun-dot.valid(actively hitting) keepsvar(--warning-color, gold)with a drop-shadow glow;.sun-dot.night(below horizon) renders atvar(--secondary-text-color)at reduced opacity — a dim grey that clearly signals the sun has set. Changes land insrc/components/sky-compass.tsandsrc/components/elevation-chart.ts. -
Tile card controls clipping in narrow grids —
getGridOptions()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 insrc/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
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 implementgetGridOptions(), 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()insrc/lib/geometry.tsto 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@mediais 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.tsclassifies 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 thedecision_trace.sun_stateattribute introduced in integration PR #554; on older integration builds the card falls back to deriving the same three states fromdirect_sun_valid+sun_position.in_fov. -
cursor: defaulton all tooltips (#134, #141) — Tooltip elements across the full card suite switch fromcursor: helptocursor: 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-fovCSS rule and thecompass.in_fovi18n 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
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_colorsconfig 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_minutesandschedule_end_minuteson thecontrol_statusentity attributes — is now visualized as a shaded region on the elevation chart and as anoff_schedulebadge 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: helpso users know the element is interactive. The now-line on the elevation/sun chart additionally displays its wall-clock time, usingformatClockwith 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_standbyi18n 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.