v1.8.4 is the data-correctness + forecast cycle on top of v1.8.3's HA Energy rewiring.
Energy: every measured series matches the HA Energy dashboard to the watt-hour
Solar production, grid import / export and battery charge / discharge now read the recorder's pre-computed change metric, the exact numbers the HA Energy dashboard shows. The recorder handles counter resets and unit conversion natively, so a daily-reset meter no longer paints a midnight spike, and the live chips average over a short window so a meter that only reports every 15 minutes (SolarEdge) no longer flickers between 0 and a wrong value. Battery charge/discharge come from separate meters with HA's Sources sign, and the chip colours fall back to the HA Energy hexes when the theme variable isn't exposed. (#200, #215, #216, #220)
Forecast overhaul
- Anisotropic plane-of-array per panel orientation via Open-Meteo
global_tilted_irradiance(Perez), replacing the isotropic transposition. - Real direct / diffuse split from Open-Meteo instead of a cloud-cover approximation.
- Snow-cover derate for buried panels.
- A learned sky-residual map: per sun position, Helios relearns the correction between your real production and the model over a rolling 60 days, so a tree the LiDAR missed (or one that grew) is captured, including on future days; a neighbour-smoothing pass lets it reach the leading-edge sun positions the future samples.
- The inverter-cutoff guard is re-wired into that learning, skipping the hours where a full battery clamped output so they don't teach a false low.
- Forecast + learning run at the graph-detail cadence, so short shadow dips show up instead of being stepped over by an hourly curve.
- One unified store feeds every visual (timeline, tooltip, chips, dashboard), so they all agree. (#199)
Load robustness
The timeline renders from the first frame (seeded from the engine's synthetic window), and the background Open-Meteo fetches (60-day history, per-orientation GTI) defer until the critical weather has landed so they can't starve it.
See the CHANGELOG for the full per-beta detail.