The biggest release of the v1.8.x line by a wide margin. Three structural moves and several older surfaces retired in one cycle.
Headline changes
HA Energy dashboard as the single source of truth for entity wiring (#184)
The card's PV, grid and battery entity slots are no longer configured per-card. They resolve from Settings → Dashboards → Energy, the same global block the official HA Energy card reads. The two surfaces never disagree again on which sensor a number came from, and the card's configuration surface shrinks to what HA does not know about: PV peak kWp + per-string tilt / azimuth via pv-arrays, optional inverter cap, LiDAR providers, visual options.
Radial sundial dashboard (#199)
Clicking the home dives into a chip-styled detail panel built around a radial sundial card: an annular instrument that lays out the day on a 24-hour ring with concentric tracks for production, battery and cloud cover, sunrise / sunset markers anchored on the dial, hover dots that snap every series to the same instant, and a live cursor tracking the current hour. A graph view toggle swaps the dial for a full-day production curve whose Y-axis is locked to the installation's peak power. Today / Tomorrow / Battery sections sit as a CoverFlow strip above the chart.
Weather mode with GPU-shader cloud overlay (#210, #213)
The top-right mode bar gains a Weather segment. Weather mode tilts the camera top-down at zoom 11 and overlays the modelled cloud coverage as three altitude bands (low / mid / high) drawn through a MapLibre custom layer with a fragment shader: a 10×10 RGBA8 data texture (R/G/B = the three bands' cloud cover %) modulated by 4 octaves of simplex FBM noise carves organic cloud shapes per altitude, each band at a different scale + phase so the three altitudes paint distinct signatures. All bands tint with --primary-text-color. Three altitude toggle buttons in the top-left rail flip individual bands on/off. Timeline scrubs pick a different hour slice from the cached grid and re-upload a ~400-byte data texture, no fresh HTTP round-trip.
Open-Meteo rate-limit fix + dead-weight purge (#212)
A full audit of the card's Open-Meteo traffic cut three sources of API waste: the weather-mode grid drops from 31×31 (961 calls) to 10×10 (100 calls), gets a 30 min localStorage cache + inflight Promise dedup + AbortController so re-entry within the TTL window costs zero API calls, and the home-point fetch past_days drops from 30 (vestigial from the retired shading-map trainer) to 5, cutting its cost from 6 to 2 API calls per fetch. The same pass drops the legacy localStorage sweeps, the YAML colour identity keys, and the LiDAR-view styling keys.
Shading-map family fully retired
The polar shading-map trainer, its hemispheric dome visualisation, and the editor's shading panel are gone. The per-(sun × cloud) cell ratio added ~2 pp accuracy on top of the 5-day calibration, against ~2,600 projected points per camera transform and ~300 KB of cached polar grid per home — the cost / benefit didn't survive a second look. Forecast accuracy is now carried by the 5-day calibration ratio plus the LiDAR-aware ray-march.
Other changes
- LiDAR-View polish (#194, #201): instant cloud-toggle, point-cloud opacity slider tunable live in-card via the bottom slider, point + wireframe inherit
--primary-text-colorfrom the active HA theme. - Boot progress banner (#191): replaces the sun-spinner with a phase-aware progress banner during the first data hydration wave.
- Open-Meteo rate-limit alert banner (#193): user-facing alert when the home-point fetch trips HTTP 429.
- Grid history backfill regression fixes (#172, #173, #206): the grid IN / OUT chips no longer go blank when the recorder window is shorter than the 72 h backfill target.
- PV regression fixes (#180, #188, #205): peak-kWp summed across
pv-arraysentries when each carries its own nameplate, thermal derating fed by Open-Meteo temperature + wind, multi-array shading applied per-string against the LiDAR raster. - UI polish (#189, #195, #196, #198, #203, #209): radial dial digits inside the annulus, thicker cursors, day-weather sky background, smaller mode-bar segments, calmer hover transitions.
- i18n surface 11 → 63 locales.
- Configurable bearing + camera pose persistence (#201).
- Display radius single source of truth (#197): every overlay (buildings + LiDAR cells + raster shadows) reads from a single
DEFAULT_DISPLAY_RADIUS_M = 200constant.
See CHANGELOG.md for the full per-topic detail. Public roadmap with upcoming work tracked live at helios-lidar.org/roadmap.