Energy monitor
An Emporia Vue 3 reflashed to keep its data in the house
A gadget in the breaker panel measures how much electricity each circuit uses. I replaced its software so the numbers stay in the house instead of going to the manufacturer.
| Device | Emporia Vue Gen 3 in the breaker panel: two mains CTs and sixteen 50 A branch CTs |
|---|---|
| Firmware | emporia-vue-local community ESPHome component, local API only, no cloud |
| Flashing | Soldered to test pads on the back of the board; stock firmware dumped first |
| Circuits | 13 of 16 inputs mapped into 11 named circuits |
| Biggest load | A tankless water heater with three elements, about 24.6 kW together |
Why reflash a perfectly good product
The Vue is a good piece of hardware: a split-phase whole-house monitor with sixteen branch clamps for not much money. Out of the box it sends everything to Emporia’s cloud and shows you a graph in their app. I don’t want my power usage leaving the house, and I wanted the numbers in Home Assistant’s Energy dashboard next to everything else. The ESP32 inside has a community ESPHome firmware. So, out with the stock firmware.
Getting at the chip
There is no USB port. The board has test pads on the back near the ESP32: ground, 3.3 V, the UART pair, and a plated ring that is IO0 for forcing download mode. The pads are labelled from the programmer’s point of view, so “TXD” is the ESP’s receive line. That took a while.
I used an ESP32 dev board as a USB-serial adapter, which only works once you ground its EN pin so its own chip stops answering the programmer. The symptoms before I did that (a sync that never completes, a 230 kHz square wave of garbage on the line) are now written down so I never re-derive them. Before writing anything I dumped the full 8 MB of stock firmware, verified the checksum against the chip, and put copies in two places. If I ever want Emporia’s cloud back, it’s one esptool command.
The dev board’s 3.3 V regulator could not power the Vue’s WiFi radio at startup, so flashing happened on the bench and the first boot happened in the panel on the real harness.
Mapping sixteen clamps
Split-phase power makes each 240 V circuit a small puzzle. A clamp on one leg of a 240 V circuit reads half the power with a sign that depends on which way the clamp faces; a 120 V circuit reads correctly with a sign that depends on its leg. The method that worked: run each input through a diagnostic filter that shows the sign, then configure it as negate-and-double, absolute value, or sum with its partner. Unused inputs read a phantom 40 to 57 W, so they come out of the config entirely.
The result is eleven named circuits: the three water-heater elements (summed into one “hot water” sensor), the air handler and outdoor unit, the well pump, the range and dryer (a clamp per leg each), the sewage pump, the washing machine and the garage. Whatever is left over is “everything else”: lights, outlets, the fridge, the servers in the basement.
What it feeds
Home Assistant’s Energy dashboard, with each circuit as a device, plus a custom dashboard with four views: what is drawing power right now, energy and cost, per-circuit history, and the panel layout. Daily counters reset at midnight and feed long-term statistics, so the graphs survive restarts.
The surprise was the water heater. Tankless electric heaters are rated in kilowatts most people never see on a single appliance; watching three elements step on in sequence during a shower explains the electric bill better than any spreadsheet.
What I’d do differently
Buy a proper USB-serial adapter instead of improvising with a dev board. Three hours of lessons for a fifteen-dollar part.