Shifting household load into cleaner hours, locally
A local-first grid intensity meter with an e-paper display.
Tracks grid carbon intensity for your region and turns it into a run-or-wait recommendation for energy-hungry appliances, over a small HTTP API with recent history and a week-shifted comparison. There is a web dashboard with a trend chart, and firmware for a Raspberry Pi Pico 2 W with a tri-colour e-paper display. A mock Pico runs the whole system on a laptop before any hardware is bought.
The problem
Domestic electricity demand is flexible in ways industrial demand is not. A dishwasher, a washing machine, an EV charger or a heat pump's water cycle does not care whether it runs at 14:00 or 02:00. What differs between those two times is the generation mix: a windy night can be several times cleaner than a still evening peak, on the same grid, for the same kilowatt-hour.
Shifting flexible load into clean windows is one of the few things a household can do about its emissions without buying anything. It requires knowing when the clean windows are, and that information is not available in a form anyone acts on:
- National grid dashboards show a real-time chart. Nobody checks a chart before starting a dishwasher.
- The information is not where the decision is. The decision happens standing in a kitchen; the data is on a website on a phone that is charging in another room.
- A bare figure needs interpreting. "312 gCO2e/kWh" does not answer "should I run this now?" without a sense of what a good number looks like on this grid: 312 is excellent in one country and mediocre in another.
- The privacy trade is unattractive. The cloud-connected alternative is a smart appliance or an energy app that reports household usage to a vendor, in exchange for a hint.
The method
Recommend as well as report. /status returns the current intensity and a run/wait recommendation. That is the interface difference that decides whether the thing gets used: a person standing at a machine wants an answer.
Compare against the same window one week earlier. The recommendation is driven by /em/window-overlay: the readings from two days before this hour to twelve hours after it, taken one week ago. Grid intensity has a strong weekly and daily rhythm, so asking "is this hour cleaner than this grid usually is at this point in the week?" is answerable and useful. Comparing against a fixed threshold or a global average would mark an entire country permanently good or bad and produce a recommendation that never changes. The cost is that the comparison is relative: on a grid that is dirty all week, "run now" means the cleanest of a dirty week.
Local-first, with a real device. The firmware path targets a Raspberry Pi Pico 2 W with a Waveshare WS-19588 tri-colour e-paper display. E-paper suits an always-on ambient display: it draws power only when it changes, and it is readable in daylight. The device sits where the decision is made, needs no account, and sends nothing about the household's consumption anywhere.
A mock Pico, so the software is usable without hardware. python -m mock.mock_pico serves the same /status interface, and python -m web.server runs the dashboard against it. The whole system runs on a laptop, which means it can be evaluated, developed and used before any hardware is ordered, and the dashboard is a legitimate deployment in its own right for anyone who does not want a device.
Three endpoints carry the decision. /status for the decision now. /em/window for recent history: what has the grid been doing. /em/window-overlay for the comparison basis, exposed rather than hidden, so the recommendation can be checked rather than trusted. The firmware also serves /em/summary (a compact document for home automation), /em/window.csv, /system-info and a small HTML view.
The headline results
- The rule.
- Where the overlay comes from.
- What the tests assert.
The full results, with the tables and the reasoning behind each figure, are in the PDF.
What is in the PDF
- The problem — what goes unanswered without it, and who notices first.
- Why the obvious alternative falls short — stated plainly, including where it is the better choice.
- How it works — the method, not a feature list.
- Concrete use cases — with console output quoted from the repository, never reconstructed.
- The methodology behind any number it emits — every term shown, so the figure survives a question.
- What it deliberately does not do — the section most papers leave out.
Part of the GreenOps theme.
Get the PDF
This paper already selected; the download starts when you send the form. No follow-up sequence.