Greenlight is a companion project from Ampernomics, built around the same goal: helping people understand whether Agile pricing is actually working in their favour.
- Shows the current Agile unit price in p/kWh.
- Classifies the current slot as Super Cheap, Cheap, Normal, Expensive, or Very Expensive.
- Highlights how long the current period lasts and when the next change happens.
- Previews the next grouped pricing blocks so you can decide whether to run appliances now or later.
- Displays day-level price histograms for today and, when published, tomorrow.
- Supports on-device Wi-Fi setup, brightness control, region selection, and touch calibration.
The main screen is optimized for glanceability. It emphasizes the current tariff band, the live unit rate, and the next few grouped periods.
The detail screen shows the full daily shape of Agile pricing so it is easy to spot the best and worst parts of the day.
Greenlight currently supports three build-time Cheap Yellow Display profiles from the same repository:
| Board ID | Hardware | Display | Source |
|---|---|---|---|
esp32_2432s028_ili9341 |
Guition-branded ESP32-2432S028 2.8-inch board |
ILI9341, XPT2046 | AliExpress |
esp32_2432s028_st7789 |
Unbranded ESP32-2432S028 2.8-inch board |
ST7789, XPT2046 | Amazon UK |
esp32_32e_st7789 |
3.2" LCD Display / ESP32-32E 240x320 / Reistance Touch board |
ST7789, XPT2046 | AliExpress |
All three targets are ESP32-based boards with integrated Wi-Fi and a 240x320 touchscreen display. The selected build bakes in the matching board profile and OTA board ID through main/Kconfig.projbuild and main/board_profile.c.
Operationally, the easiest way to tell them apart is the silkscreen family and LCD/controller pairing:
esp32_2432s028_ili9341: 2.8-inchESP32-2432S028boards using ILI9341.esp32_2432s028_st7789: 2.8-inchESP32-2432S028boards using ST7789.esp32_32e_st7789: the distinct 3.2-inchESP32-32Eboard family.
If you are preparing a board for the first time, identify the hardware before flashing. Greenlight must receive the matching board-specific firmware over USB first so the installed image carries the correct board ID, display profile, touch defaults, and OTA compatibility rules from first boot onward.
Greenlight Case is a 3D-printable enclosure for turning a bare Greenlight touchscreen board into a tidier desk- or wall-mounted device. The CAD exports, printable files, and enclosure notes live in hardware/enclosure, and the published model is available on MakerWorld at https://makerworld.com/en/models/2843371-greenlight-case.
- ESP-IDF 6
- LVGL 9
esp_lvgl_portesp_lcd_ili9341esp_lcd_touch_xpt2046- Public Octopus Energy API
The UI is written as a purpose-built embedded interface rather than a mirrored mobile app. Boot, Wi-Fi onboarding, time sync, tariff refresh, and rendering all happen on-device.
On startup, Greenlight:
- Initializes display, touch, and persistent settings.
- Reconnects to saved Wi-Fi if credentials are already stored.
- Synchronizes local time for the
Europe/Londontimezone. - Downloads the active public Octopus Agile tariff for the selected region.
- Renders a primary summary screen, a detailed chart screen, and a settings screen.
If pricing cannot be loaded on startup, the device surfaces an offline state instead of pretending stale data is current.
- On-device Wi-Fi scanning and password entry
- Saved Wi-Fi credentials for reconnect after reboot
- Touchscreen calibration stored in NVS
- Adjustable display brightness
- Region selection for Octopus Agile pricing
- Manual OTA firmware update checks and installs from the Settings screen
- Startup splash screen with live status text
- Current and upcoming tariff block summaries
- Today and tomorrow histogram views when data is available
- Graceful handling for partial tomorrow publication from Octopus
Greenlight uses the public Octopus Energy API and currently targets public Agile import pricing by region. It does not require Octopus account authentication for the current firmware flow.
User-facing prices are based on VAT-inclusive unit rates returned by the public tariff endpoints.
- hardware: physical build assets such as enclosure CAD, printable exports, and assembly notes
- main: ESP-IDF application code
- docs: setup notes and project documentation
- docs/img: README screenshots and documentation images
- tools: validation, asset generation, and screenshot capture helpers
The simplest way to install Greenlight on a supported board is the browser-based installer at https://greenlight.ampernomics.com. It uses Web Serial (Chrome or Edge on a desktop) to write the latest release directly over USB without installing ESP-IDF locally. This is the recommended path for first-time setup.
The rest of this section covers building from source for contributors or out-of-band testing. For local setup and validation details, see docs/getting-started.md.
Minimal firmware build flow:
idf.py set-target esp32
idf.py build
idf.py -p /dev/ttyUSB0 flash monitorTo build an explicit board variant without changing the default workflow, use docs/getting-started.md and run sh tools/validate.sh firmware esp32_2432s028_ili9341, sh tools/validate.sh firmware esp32_2432s028_st7789, or sh tools/validate.sh firmware esp32_32e_st7789.
When flashing manually over USB, choose the build that matches the physical board:
- Guition
ESP32-2432S0282.8-inch board: flash theesp32_2432s028_ili9341build. - Unbranded
ESP32-2432S0282.8-inch ST7789 board: flash theesp32_2432s028_st7789build. ESP32-32E3.2-inch board: flash theesp32_32e_st7789build.
OTA selects release assets by the board ID compiled into the running firmware, so a device must already be running the correct board-specific image before Settings can safely install later updates. The browser flasher and a local idf.py flash both satisfy this requirement.
The project is developed against ESP-IDF 6.0. The checked-in dev container is the easiest way to get a matching environment.
Tagged releases also publish OTA update artifacts to GitHub Releases so deployed devices can check for and install newer firmware from Settings.
Release artifacts are published with stable board-specific names:
firmware-esp32_2432s028_ili9341.bin: 2.8-inchESP32-2432S028ILI9341 release image.firmware-esp32_2432s028_st7789.bin: 2.8-inchESP32-2432S028ST7789 release image.firmware-esp32_32e_st7789.bin: 3.2-inchESP32-32EST7789 release image.metadata.json: OTA manifest containing shared release fields plus per-board entries undervariants.
OTA is board-aware at runtime. The running device checks metadata.json, requires a variants object, selects variants.<board_id> for its compiled board, and refuses releases when variants or the matching board entry is missing. A sample manifest is checked in at docs/ota-metadata.sample.json.
See CONTRIBUTING.md for contribution and validation expectations.
Greenlight is an independent project and is not affiliated with Octopus Energy. Octopus Agile and Octopus Energy are trademarks of their respective owners.
Greenlight is maintained by Ampernomics.



