Skip to content

SolarLens v2.9.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 10:13
· 61 commits to main since this release

Daylight saving handled properly, history as a file, a dashboard that can speak
up, and accessibility checked rather than assumed.

Added

  • Download CSV, on the Historical Data tab. The rows on screen - day, month
    or year - written out as a file, with the systems named, times in ISO, and a
    figure the vendor never reported left empty rather than written as zero. A
    value containing a comma is quoted the way every spreadsheet expects. Built in
    the page from what is already fetched, so it costs no database read and adds
    no route to guard.

  • "Tell me when something changes", on the Alerts tab. The browser raises a
    notification when a new alert appears - a system going offline, a fault, a
    relay login about to expire - on whichever device has the dashboard open.
    Permission is asked for only when the switch is turned on. Turning it on
    records what is already wrong without announcing it: you turned it on to hear
    what happens next, not to be told the last week at once. A fault that clears
    and returns is announced again.

    Honest about what it is: the browser runs the page only while a tab holds it
    open, so this is a louder dashboard rather than a pager. Reaching a closed
    browser needs Web Push, which is written up in docs/feature-gaps.md rather
    than half-built here.

  • Accessibility is checked on every view, desktop and mobile, with axe-core's
    WCAG 2 A and AA rules, failing the run on anything serious or critical - plus
    a keyboard walk-through and a check that every control shows its focus.

  • The dashboard's own script is measured. V8 coverage during an end-to-end
    walk-through, written to coverage/page-coverage.json and attached to the
    run: 67.3%, with a floor of 65% that fails the run if it drops. The figure
    moves as the page grows - it was 69.6% before this release added the export and
    notification code - so the floor is set below it rather than at it. Until now
    only the Worker's half of the project had a number.

Fixed

  • Daylight saving no longer moves a day of history. The plant's UTC offset
    was a number on the inverter row, refreshed on every poll, and every day of
    history was cut with whatever that number said today: a summer evening read
    back in winter landed in the wrong day, and for the five minutes around a
    switch the current day was cut wrong too.

    The zone's own name is stored now, where the vendor states one, and each
    reading carries the offset that was in force at its own timestamp - so a day
    keeps the boundary it was recorded under, whatever the clocks do afterwards. A
    plant whose vendor only ever sends a number still falls back to that number,
    which is the best that can be said for it. Migration 0012 adds both columns,
    and scripts/backfill-reading-offsets.mjs gives the readings already stored
    the offset they were taken under - a dry run first, which says how many rows
    it would touch before it touches any.

    Today's chart follows the same rule. It used to open at midnight computed
    from the offset in force now, so on the one morning a year the clocks go
    back there, the first hour of the day sat outside the window and off the
    picture, and a time printed beside a sample was an hour out. The day is now
    drawn between the instants it actually ran between - twenty-three or
    twenty-five hours where that is what it was - and every time beside a reading
    is the time that reading was taken.

  • Four accessibility faults, found by the new checks on their first run:
    muted text at 2.93:1 against the page's own ground where 4.5 is the bar; the
    brand orange used for 16px type at 3.42:1; the normal and warning pills a
    shade under; and tables that scroll sideways with no way to reach them from a
    keyboard. The brand colours now have darker ink versions for type, while the
    charts keep the brighter ones.


The full entry is in CHANGELOG.md.