The water heater is inside a circuit you already measure

  • Tested on firmware v1.1.7
  • Intermediate

A water heater is one of the largest loads in a house and one of the hardest to see, because it usually isn't on a circuit of its own in the way you'd want. It shares a breaker with a utility room, or sits in a basement behind a sub-panel, or simply lands inside a circuit total you already measure โ€” so what you have is a big number with the tank somewhere inside it, and no way to tell how much of it is the tank.

This guide separates it. Either with a clamp at the board, if the tank's circuit is reachable from there, or with a remote node at the tank itself when it isn't.

What you need:

  • an RBgrid hub on your home Wi-Fi, with a tariff entered if you want the cost as well as the energy;
  • the water heater's conductor reachable by an rbAmp module โ€” at the board, or at the appliance;
  • for a tank the hub's IยฒC cable can't reach, a remote node: a second ESP32 with its own rbAmp modules, reporting by radio. On v1.1.7, up to 6 nodes per hub, 4 inputs each (Remote nodes).

Safety. For any work inside an electrical panel, call a qualified electrician.

1. First decide where to measure, because it changes what you learn

Three places, and they answer different questions:

Where the clamp goes What you get
The tank's own circuit, at the board the heater alone โ€” the cleanest answer, and no node needed
At the tank, on a node the heater alone, when its circuit isn't reachable from the hub
The shared circuit, at the board the heater plus whatever shares that breaker โ€” a total you then can't take apart

If the tank has its own breaker in a panel the hub can already reach, stop here: one clamp on that circuit is the whole job and the rest of this guide is about a problem you don't have.

The node exists for the other case โ€” a tank in a basement, an outbuilding, or behind a sub-panel the hub's cable won't reach.

2. ๐Ÿ”‘ Don't meter the same energy twice

This is the mistake that makes the numbers stop meaning anything, and it is specific to the case this article is about: a load inside something you already measure.

  • Your house total is safe either way. System totals are taken at the grid boundary โ€” the supply point only. Load points are never summed into them, so adding the water heater as its own point does not change the house total, inflate it, or double-count it.
  • The "unmetered" figure is not safe. That figure is the input minus the sum of all your line points, and a node's points are lines like any other. Meter the sub-panel the tank sits behind and the tank inside it, and the tank's energy is subtracted twice: the remainder reads too low, and can go negative.

So: meter either the sub-panel or the loads inside it, not both, if you want the "unmetered" figure to mean anything.

For a water heater the choice is usually easy โ€” the tank is the thing you wanted to see, so meter the tank and leave the sub-panel alone.

โš ๏ธ There is no hierarchy of points. Every point in RBgrid is flat and independent: nothing is "inside" anything else, and the hub does not know that your tank is fed from a panel you also measure. The arithmetic above is yours to get right, not something the app will warn you about.

3. What you need to buy for a node

๐Ÿ”‘ A node records energy only if one of its rbAmp modules measures voltage. With current-only modules a node still reports live current, and closes no energy records โ€” so you would watch the tank heating and never get the kilowatt-hours or the cost. For a water-heater node, buy a single-phase rbAmp set with voltage measurement.

And two that readers get wrong:

  • An original ESP32 โ€” 4 MB flash, no PSRAM. The S2, S3 and C3 are not built or tested, and an S3 is what most people have spare.
  • No over-the-air update. A node is flashed over USB, so leave it reachable with a laptop.

On v1.1.7 a node is single-phase only, with no phase grouping. A three-phase heater in an outbuilding is not something a node covers today; at the board, the hub meters three phases properly.

4. Will the radio reach the basement?

You find out by trying, and the trying takes ten minutes before anything is mounted: pair the node on the bench, carry it to where it will live, and read the link while the heater is actually drawing โ€” a tank that has just started heating is the honest test, not a quiet house. The procedure and the three numbers it gives you are in pairing a remote node, with the fallbacks in the order people try them.

The one worth repeating here: if the circuit is reachable at the board, measure it there. A node is for the tank you can't reach, not for every tank.

5. Give it a point and read it

In Management โ†’ Points, bind the channel as its own point and name it before anything else sees it โ€” an entity id in Home Assistant is frozen at first discovery, so "UI7 I2" will follow you around.

What the app then shows you:

  • Live, every 3 seconds โ€” power while the element is on. A tank is close to a square wave: full draw while heating, nothing while it isn't, so the live view tells you immediately whether it is heating right now.
  • Energy, per 15-minute period, kept as history โ€” so you can see when it heated, not only how much.
  • Cost, by tariff zone. Each 15-minute period is priced at the zone in effect for it, and Monitoring โ†’ Economics gives the tank's energy and cost for an hour, today, yesterday, the last 7 days, a month or a year. This is the figure people actually came for: not the nameplate, not an estimate from the tank's litres, but what your tank drew at your prices.

On v1.1.7, history covers up to 12 measurement points, and a node's points come out of that same pool rather than adding to it. (Which loads are worth a history slot works through the choice.)

A node holds its clock from the hub and closes its own 15-minute periods, so a brief outage doesn't lose the measurement:

  • Up to 8 periods โ€” about two hours โ€” are held in the node's memory, then the oldest is lost for good. When the link returns they arrive late and land in the hours they belong to: energy is filed by when it was measured, not when it arrived.
  • A power cut at the node loses the queue and the period in progress, because it is held in RAM. Nothing marks the gap afterwards.
  • A node that boots while the hub is unreachable closes no periods until it has heard the hub once.

Out of range and switched off look identical to the app โ€” a node that stopped being heard, 15 seconds after its last frame. The honest check is the simple one: watch that lost packets stay at zero and the node stays online while the tank is actually heating. There is no signal or loss threshold in RBgrid, so don't look for one.

What this doesn't do

  • RBgrid switches nothing. It has no relay and no outputs: it will not move your heating to the cheap hours, and nothing in this guide does that. People who act on these figures do it in Home Assistant, on their own equipment โ€” and a tank's temperature schedule is a decision about that equipment, not about a monitor.
  • It makes no claim about what you'll save. You get what the tank used and what it cost at your rates, per period and per zone. What to do with that is yours.
  • It can't take a shared circuit apart after the fact. If one clamp covers the heater and the utility room together, no setting separates them later โ€” the separation happens at the clamp.
  • No alerts. Nothing watches the pattern for you.
  • Cost by zone is a running total, not a per-month view: the Economics split is since the hub last restarted and doesn't follow the period selector. For a month, use the period selector and take the total.

Next