TightWatt v3.1.0In production

Charge the battery on the cheapest half-hours — and not one slot more.

TightWatt is my published Home Assistant blueprint for grid-assisted home batteries on Octopus Agile — built for single-sink (no-export) setups. It reads the Victron VRM solar forecast, works out how much grid charge you still need, and buys only the cheapest half-hours that cover it before your evening cutover. Running on my own hand-built 8 kWh system; shared for everyone else's.

The problem

Dumb schedules waste the whole point of Agile

Fixed windows buy at the wrong price

Most charge automations are "turn on at 2 a.m." Agile prices change every 30 minutes and reshuffle daily — last night's cheap window is tonight's expensive one. A fixed schedule leaves money on the table every single day.

Naive price triggers overcharge

"Charge whenever it's cheap" ignores how much charge you actually need. If solar has already done most of the work, buying every cheap slot just cycles the battery for nothing. The right amount of grid energy depends on your bank's capacity and its state — not just the price.

How it works

Capacity-aware, deadline-driven

1. Work out the real deficit

From your usable capacity, current state of charge and expected consumption, TightWatt computes the energy still needed — then subtracts the Victron VRM solar forecast (trusted as-is; it self-calibrates against actual yield). What's left is the grid charge that actually has to be bought.

2. Respect the deadline

You set a cutover time — the point in the evening when you want to stop relying on the grid and run from the battery (mine: 18:30, just before the expensive evening peak). Everything TightWatt buys is in service of arriving at cutover with enough stored energy.

3. Buy only the cheapest covering slots

The 3.1 planner ranks every remaining Agile slot before cutover by price and selects the cheapest set whose combined duration covers that deficit — then only lets the charger run inside those slots. Slots above your price cap are never chosen (a missed target beats an expensive one), and negative-price slots always qualify and sort first, so it naturally waits to be paid to charge. Safety and emergency SoC floors override everything and charge at any price.

Install

Up and running in four steps

  • Prerequisites

    Agile pricing in Home Assistant

    You need the Octopus Energy integration (for half-hourly rates) and a switch entity that controls your battery charger — a smart plug or contactor rated for the charger load.

  • Step 1

    Import the blueprint

    Import TightWatt from the repository link above into Settings → Automations & Scenes → Blueprints.

  • Step 2

    Create an automation from it

    Set battery_capacity_kwh to your usable bank size and cutover_time to when you want to be running on stored energy.

  • Step 3

    Keep your protection automations

    TightWatt optimises cost; it is not a BMS. Keep independent low-voltage and low-SoC protections in place — the install guide shows the tiered pattern I run alongside it.

Proof

Running on my own hardware, every day

TightWatt's development system is the 2.32 kW solar + 8 kWh battery installation documented on this site. On 9 July 2026 the whole house drew 6.74 kWh of grid energy for £1.98 — TightWatt buying the bottom of the price curve.

Changelog

Releases

  • Current release

    v3.1.0 — Price-aware charge planner

    Ranks every future Agile slot before cutover by price and charges only inside the cheapest set that covers the grid energy still needed after the Victron VRM solar forecast. Slots above the price cap are never bought — a missed SoC target is preferred to expensive charging — while negative-price slots always qualify and sort first. Falls back to the 3.0.x Target-Timeframes behaviour when the Octopus rate-event entities are unavailable.