Skip to content

Commit 94215ba

Browse files
committed
Docs + version: 2026.8.0-b9 (grid/battery per-source split, iPad scene fix)
1 parent c89b53b commit 94215ba

5 files changed

Lines changed: 38 additions & 18 deletions

File tree

ARCHITECTURE.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,11 @@ plus a screen-space `<svg>` it repaints each frame with the occluding geometry
105105
(the cast shadows and the extruded buildings). It
106106
coalesces redraws into one `requestAnimationFrame` pass, owns its own
107107
`ResizeObserver`, and fires `onAfterDraw` so the card can re-project its HUD in
108-
lock-step. Colour math (building tint, day / night grading of the ground + buildings) lives in
108+
lock-step. The `<svg>` is bound to the card box (`contain: paint`): its building
109+
paths reach a whole neighbourhood past the card, and without that bound an old iOS
110+
compositor sized the layer's backing store to that content, capped it and painted
111+
only the top half (#304); binding it also trims the off-card raster on every frame.
112+
Colour math (building tint, day / night grading of the ground + buildings) lives in
109113
`core/render-kit/colors.ts`, over the shared hex primitives in
110114
`core/render-kit/hex.ts`; the shared 2D point type + SVG-points formatter live in
111115
`core/render-kit/geometry.ts`.
@@ -205,11 +209,15 @@ track in at noon and out to the arc's own feet at sunrise and sunset. Every grou
205209
point is where the sun really stood at that moment, so position on the track carries
206210
the hour with no clock convention to agree on, and the southern hemisphere needs no
207211
mirroring. The gesture is generic; a few metrics draw more than one line and are the
208-
only per-metric branch in `day-profile.ts`: production splits one line per PV source
209-
(each in its energy-dashboard colour); grid draws import and export; battery draws
210-
its power, tinted by charge/discharge flow, plus a dashed state-of-charge line per
211-
bank; a monitoring group draws one line per device; irradiance draws one, except in
212-
Month, where the weather model does not reach. Switching chips re-points the curve
212+
only per-metric branch in `day-profile.ts`: production splits one stacked band per PV
213+
source (each in its energy-dashboard colour); grid and battery split the same way, one
214+
stacked band per source per direction (import/export, charge/discharge), so a
215+
multi-meter grid or multi-pack battery reads each source rather than one lumped flow;
216+
the battery keeps a dashed state-of-charge line per bank; a monitoring group draws one
217+
line per device; irradiance draws one, except in Month, where the weather model does
218+
not reach. The arc and the timeline read the same per-source split (the layers come
219+
from `period-totals.ts`, coloured by the HA-energy ramp in `core/format`), so a metric
220+
never shows two different readings of the same day. Switching chips re-points the curve
213221
and leaves it up, so tapping across the cluster walks one day through each metric.
214222

215223
Geometry is shared and computed once (the ground track, the near/far depth split,
@@ -308,9 +316,10 @@ so it is gone and that path with it.
308316
### Charts, `src/charts/`
309317

310318
The timeline is a re-targetable SVG chart over the store. `_chartTarget` selects
311-
the series-set: production (with dashed forecast and a per-string stacked
312-
breakdown, in `charts/charts-pv.ts`), consumption, grid, battery, battery SoC,
313-
irradiance, cloud or a monitoring group (the generic single-series path lives in
319+
the series-set: production (with dashed forecast and a per-source stacked
320+
breakdown, in `charts/charts-pv.ts`), consumption, grid and battery (each stacked
321+
per source when several are wired), battery SoC, irradiance, cloud or a monitoring
322+
group (the generic path, and the grid/battery per-source stacking, live in
314323
`charts/charts-generic.ts`). It draws day separators, night-zone hatching
315324
(`timeline/timeline-overlays.ts`), a future mask, the live + the scrub cursors, and a
316325
hover tooltip (`timeline/timeline-tooltip.ts`) whose icons take each series'

CHANGELOG.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,13 @@ Every metric draws itself its own way. **Production** splits into one curve per
7171
source, each in its energy-dashboard colour, like the timeline; today's remaining
7272
hours carry on from your forecast, dashed, so the shape of the day runs unbroken from
7373
this morning to tonight and only its certainty gives way at the present moment.
74-
**Grid** draws import and export together. **Battery** draws its power, tinted by
75-
charge and discharge, alongside a dashed state-of-charge curve for each pack.
76-
A **monitoring group** draws one curve per device, in each device's colour.
74+
**Grid** and **Battery** now split the same way: one stacked band per source, every
75+
grid meter's import and export and every battery's charge and discharge, in the Home
76+
Assistant energy colours, so a multi-meter grid or a multi-pack battery reads each
77+
source instead of one lumped flow. The battery keeps its dashed state-of-charge curve
78+
per pack. The curve on the house and the timeline below it draw the exact same split,
79+
so there is never a second reading of the same day. A single grid meter or battery is
80+
unchanged. A **monitoring group** draws one curve per device, in each device's colour.
7781
**Irradiance** draws one too, on every period but Month, which reaches back further
7882
than the weather model does.
7983

@@ -131,6 +135,13 @@ languages kept; any other language falls back to English.
131135

132136
### Fixed
133137

138+
- The scene now renders in full on older iPads. The buildings-and-shadows layer draws
139+
a whole neighbourhood, well past the card, and on those devices the browser capped
140+
that layer's size and painted only its top half. It is now bound to the card, so the
141+
whole scene draws, and as a bonus every device now paints far less off-card area on
142+
each frame (#304).
143+
- Map and building colours repaint live as you change them in the editor, instead of
144+
waiting for the next data refresh.
134145
- Scene: left-click drag-rotate now works on Firefox (#306).
135146
- The basemap no longer vanishes after the card has sat in a background tab for a
136147
while, leaving the buildings floating over nothing. It is repainted from memory

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ Helios is a single live **2.5D scene** with a re-targetable timeline below it.
3333
* **Cast ground shadows**, projected from the surrounding building footprints, fading as the sun nears the horizon. Toggle and opacity are configurable.
3434
* **Day / night ground**, the ground darkens where the sun is below the horizon, so dawn and dusk read at a glance.
3535
* **Hover glow + auto-rotation**, a soft halo signals the home is interactive; an opt-in idle orbit slowly turns the scene counter to the sun's motion and pauses the moment you touch the card.
36-
* **Timeline**, the active period as a re-targetable chart below the scene: production (with dashed forecast and per-string breakdown), consumption, grid, battery, battery SoC, irradiance (with the cloud layers overlaid) or any monitoring group. Click or drag to scrub; the whole scene snaps to the selected instant.
37-
* **Day curve**, click any active chip a second time and the day you are scrubbing rises around the house as a line (or several), standing on the sun's own path projected down onto the ground. It is not a ring: the track closes in on the house at noon, when the sun is overhead, and reaches out to the arc's own feet at sunrise and sunset, so where a point sits on it IS the hour. Each metric draws itself its own way: production splits one line per PV source in its dashboard colour, grid draws import and export, battery draws its power and a dashed state-of-charge line per bank, a monitoring group draws one line per device, and irradiance draws one (except on Month, where the weather model does not reach). A dashed leader drops from the sun to the line beneath it, so the scrub reads the day at a glance, and today's remaining hours carry on from your solar forecast, dashed. Switch chips and the curve re-points and stays up; click the active chip again to put it away.
36+
* **Timeline**, the active period as a re-targetable chart below the scene: production (with dashed forecast and per-source breakdown), consumption, grid and battery (each split per source when several are wired), battery SoC, irradiance (with the cloud layers overlaid) or any monitoring group. Click or drag to scrub; the whole scene snaps to the selected instant.
37+
* **Day curve**, click any active chip a second time and the day you are scrubbing rises around the house as a line (or several), standing on the sun's own path projected down onto the ground. It is not a ring: the track closes in on the house at noon, when the sun is overhead, and reaches out to the arc's own feet at sunrise and sunset, so where a point sits on it IS the hour. Each metric draws itself its own way: production splits one stacked band per PV source in its dashboard colour, grid and battery split the same way (one band per source, import and export, charge and discharge, so a multi-meter grid or multi-pack battery reads each source; the battery keeps a dashed state-of-charge line per bank), a monitoring group draws one line per device, and irradiance draws one (except on Month, where the weather model does not reach). A dashed leader drops from the sun to the line beneath it, so the scrub reads the day at a glance, and today's remaining hours carry on from your solar forecast, dashed. Switch chips and the curve re-points and stays up; click the active chip again to put it away.
3838
* **Detail panels**, tap any chip to open a compact readout top-right, tinted in that chip's colour: it aggregates the metric over the selected window as icon-only figures, all in your chosen unit. Production / consumption and each group show total, peak and per-day average; grid shows import, export and net; battery shows energy charged and discharged; battery SoC shows min / average / max; the sun shows peak and average irradiance plus the astronomy (sunrise, solar noon, sunset, max altitude, day length). Tap the scene background to close it.
3939
* **No UI mode** *(optional)*, fades the timeline and the on-card controls after a few seconds of inactivity and brings them back on any tap or move. Built for kiosks and wall displays.
4040
* **Sun-only card** *(optional)*, hide every chip (including home consumption) and the card collapses to just the sun position and your location, a solar-position card for a non-energy dashboard.

0 commit comments

Comments
 (0)