Skip to content
Explainer

How to Build a Home Assistant Energy Dashboard That Tracks Solar Export and Time-of-Use Tariffs

Home Assistant's Energy dashboard is free, but it only becomes useful once it separates solar export from grid import and prices each kilowatt-hour at the right peak, shoulder or off-peak rate. Here's how to wire up the data, the tariffs and the sanity checks.

Kritin Curtis

Published ·Updated •7 min read
How to Build a Home Assistant Energy Dashboard That Tracks Solar Export and Time-of-Use Tariffs
AI-generated illustration

Drafted with AI writing tools, then edited and fact-checked by Kritin Curtis. How we research.

The short answer

Feed Home Assistant separate cumulative kWh sensors for grid import, grid export and solar production, then attach a template sensor that returns your current peak, shoulder or off-peak rate as the price entity for each source. Add a utility_meter with tariffs to see how many kilowatt-hours you actually burn in the expensive window.

Australia has the highest rooftop solar uptake in the world, and most of us are now on some flavour of time-of-use billing. Yet the app that came with your inverter probably shows you a pretty generation curve and nothing about what your electricity actually cost yesterday.

Home Assistant's built-in Energy dashboard can do that job properly — but only if you feed it the right sensors and tell it your tariff structure. This guide walks through the whole chain: getting solar and grid data in, splitting import from export, layering time-of-use pricing on top, and checking the result against a real bill.

The short version: what the Energy dashboard actually needs

Before you install anything, understand the shape of the data Home Assistant wants. The Energy dashboard is fussy about one thing above all: it needs cumulative kWh sensors with state_class: total_increasing, not instantaneous watts.

At minimum you want four entities:

  • Grid consumption — total kWh imported from the grid
  • Return to grid — total kWh exported
  • Solar production — total kWh generated by your panels
  • Battery in/out — if you have storage

If your inverter or meter only publishes power in watts, you convert it using the Riemann sum integral helper (Settings → Devices & Services → Helpers → Integration). Set it to the trapezoidal method with kilowatt-hour output. It's an approximation, so expect it to drift a percent or two from your retailer's meter — fine for insight, not for disputing a bill.

Getting solar and grid data into Home Assistant

Start with your inverter. Home Assistant has built-in integrations for Fronius, SMA, Enphase Envoy, GoodWe and Tesla Powerwall, all of which poll locally, plus a built-in SolarEdge integration that polls SolarEdge's cloud. Huawei SUN2000 and Sungrow inverters are covered by community projects rather than the core install — the Huawei Solar custom integration (installed via HACS) and a Modbus YAML package for Sungrow. Support differs between models and firmware versions (Powerwall 3, for example, exposes fewer entities than Powerwall 2), so check the integration page for your exact model before you buy anything. Local polling over your LAN is always preferable to a cloud API — it survives internet outages and won't get rate-limited.

The catch: many inverters report solar generation and site consumption, but not clean bidirectional grid figures unless you've had a consumption CT fitted at the switchboard. Without it, Home Assistant can't tell the difference between "exporting 3 kW" and "self-consuming 3 kW".

That's where a dedicated bidirectional meter earns its place. A CT-clamp WiFi meter sits on your main tails and reports import and export separately, independent of the inverter brand.

WEM3050T WiFi Energy Meter
#1

IAMMETER WEM3050T WiFi Energy Meter

Best for: Australian homeowners and solar owners seeking bidirectional three-phase energy tracking with local network integration for platforms like Home Assistant without mandatory subscription fees.

What we like

  • Supports local control without mandatory cloud services via local REST API, MQTT, and Modbus/TCP, according to IAMMETER.
  • Features bidirectional monitoring with Class 1 active energy measurement accuracy and includes three 150A split-core current transformers.
  • Includes native Home Assistant integration alongside Amazon Alexa cloud support, according to the manufacturer.
  • Compact two-pole DIN-rail mounting form factor designed for switchboard enclosures.

Worth knowing

  • Requires a neutral wire connection and cannot be installed on three-phase Delta wiring configurations, according to IAMMETER.
  • Operates strictly on 2.4 GHz Wi-Fi with no RJ45 Ethernet port provided.
  • Monitoring both three-phase grid consumption and three-phase solar generation simultaneously requires purchasing two separate meters.
  • Lacks support for Apple Home, Google Home, Matter, and SmartThings.

According to IAMMETER's product page, the WEM3050T is a three-phase meter that also covers single-phase and split-phase installs. It measures import and export separately, and publishes locally over Modbus/TCP, MQTT or an HTTP API, with Home Assistant support. That's exactly what a local Home Assistant install wants. IAMMETER lists the WEM3080 as its single-phase model and the WEM3080T as another three-phase option.

Electrical warning, plainly stated: fitting CT clamps around the main conductors means working inside your switchboard. Treat it as a job for a licensed electrician, not a DIY project, regardless of what an overseas YouTube video shows. Licensing and certification rules are set state by state, so check with your state or territory's electrical safety regulator (in Victoria, for example, Energy Safe Victoria covers switchboard work and certificates of electrical safety). Budget for a sparky call-out on top of the hardware cost.

A no-touch alternative may exist, depending on where you live. Some Victorian distributors let you connect an in-home display to your smart meter (Jemena's smart meter page mentions this option), and some retailers and metering providers offer usage-data portals. Whether you can get a live local feed at all depends on your meter, your metering provider and your distributor, so ask them before you buy a meter-reading gadget.

Splitting import from export correctly

This is where most first attempts go wrong. Bidirectional meters often publish a single signed power value — positive when importing, negative when exporting. The Energy dashboard needs two separate, always-increasing sensors.

Create two template sensors that split the signal:

template:
  - sensor:
      - name: "Grid import power"
        unit_of_measurement: "W"
        device_class: power
        state: >
          {{ [states('sensor.grid_power') | float(0), 0] | max }}
      - name: "Grid export power"
        unit_of_measurement: "W"
        device_class: power
        state: >
          {{ [states('sensor.grid_power') | float(0), 0] | min | abs }}

Then run each through its own Riemann sum integration helper to get sensor.grid_import_energy and sensor.grid_export_energy. Those are the two entities you point the Energy dashboard at.

If your meter already gives you separate lifetime import and export registers, skip all of this and use them directly — they'll be more accurate.

Layering time-of-use tariffs on top

Home Assistant supports two costing approaches per source: a fixed price, or an entity that tracks the current price per kWh. For time-of-use billing you want the second.

Build a template sensor that returns the right rate for the current time. As one example, at the time of writing Ausgrid's residential time-of-use network tariff has a peak from 3pm to 9pm every day in June–August and November–March, and off-peak at all other times. Ausgrid itself notes that retailers can apply different periods, and Energy Made Easy points out that some plans add shoulder periods or more. So your windows and rates are set by your distributor and retailer and will differ. Read your own bill or your plan's Basic Plan Information Document rather than copying mine. The times in the example below are illustrative only.

template:
  - sensor:
      - name: "Electricity import price"
        unit_of_measurement: "AUD/kWh"
        state: >
          {% set h = now().hour %}
          {% set weekday = now().weekday() < 5 %}
          {% if weekday and 14 <= h < 20 %}
            0.5400
          {% elif 7 <= h < 22 %}
            0.3100
          {% else %}
            0.2200
          {% endif %}

Those rates and times are illustrative examples, not real prices — replace them with the figures from your own bill or plan. Rates vary widely by state, distributor and plan; you can look up and compare plans on Energy Made Easy, or on Victorian Energy Compare in Victoria.

Do the same for your feed-in tariff and attach it to the "Return to grid" source. According to energy.gov.au, most feed-in tariffs pay a single rate, but some retailers in some areas offer variable ones. These include time-of-use feed-in tariffs, typically lower in the middle of the day and higher in the evening. Check which type your plan has. If you're on a wholesale-linked plan whose price moves through the day, an integration that pulls live pricing is a better fit than a hardcoded template.

For per-period totals rather than just costs, add a utility_meter with tariffs:

utility_meter:
  daily_grid_import:
    source: sensor.grid_import_energy
    cycle: daily
    tariffs:
      - peak
      - shoulder
      - offpeak

Then write a simple time-triggered automation calling select.select_option on the generated select.daily_grid_import entity to switch tariffs at each boundary. Now you can see exactly how many kilowatt-hours you burn in the expensive window — which is the number that actually moves your bill.

Adding device-level monitoring and load shifting

Once the whole-house picture is right, individual circuits tell you where to act. The Energy dashboard has a separate "Individual devices" section for exactly this.

Zigbee smart plugs with energy metering are the cheapest way in, and running them through a local coordinator keeps everything off the cloud and off your WiFi.

Zigbee 3.0 USB Dongle
#2

SONOFF Zigbee 3.0 USB Dongle

Best for: Home Assistant, Zigbee2MQTT or openHAB users who want one local Zigbee coordinator for mixed-brand devices instead of a brand-specific hub

What we like

  • Home Assistant's ZHA documentation lists the ZBDongle-E (EFR32MG21 variant) among its recommended EZSP adapters, and Zigbee2MQTT lists it under its EmberZNet adapters
  • ITEAD says it works with ZHA, Zigbee2MQTT, openHAB, ioBroker, Domoticz and Jeedom, so Zigbee devices can be controlled locally without a vendor cloud
  • Powered from a USB port (ITEAD lists DC 5V, 100mA max), so there is no extra power adapter or mains plug to find a spot for
  • ITEAD says it can be reflashed as a Zigbee router, and Sonoff's dongle guide says Thread (OpenThread RCP) firmware is another option

Worth knowing

  • Not a standalone hub - it needs a computer or single-board machine running Home Assistant, Zigbee2MQTT or similar software
  • ITEAD quotes 30 direct child devices in coordinator mode, so larger networks lean on mains-powered Zigbee routers
  • Windows and macOS need a USB serial driver, according to ITEAD
  • Several similarly named Sonoff dongles exist, so it is easy to buy a different variant from the one a guide assumes

Paired with ZHA or Zigbee2MQTT, a USB coordinator gives you a local Zigbee network for metering plugs, and Zigbee devices generally report energy as a cumulative total already — no integration helper required.

WiFi plugs are the simpler option if you'd rather not run a mesh. Just check the model number before you buy: within the Tapo range, some variants meter energy and some don't.

Tapo P100 Mini Smart Wi-Fi Socket Plug
#3

TP-Link Tapo P100 Mini Smart Wi-Fi Socket Plug

Best for: Renters and first-time smart home buyers who want simple app, Alexa or Google Assistant control of a lamp or fan without buying a hub

What we like

  • Connects straight to home Wi-Fi, so no hub or bridge is needed (TP-Link AU, The Good Guys)
  • Compact 76.5 x 43.5 x 42 mm body that TP-Link says is sized to avoid blocking the neighbouring socket
  • Schedules, countdown timers and an Away Mode that switches devices on and off to simulate someone being home
  • Works with Alexa, Google Assistant and Samsung SmartThings, per TP-Link Australia
  • Listed as supported by Home Assistant's local TP-Link integration

Worth knowing

  • 2.4 GHz Wi-Fi only; The Good Guys notes it does not support 5 GHz
  • No energy monitoring listed, unlike TP-Link's P110-series plugs
  • No Matter or Apple Home support mentioned on TP-Link's AU product page
  • Home Assistant setup still asks for your TP-Link cloud account credentials

The P100 is a switching-only plug — useful for shifting a load into your solar window or off-peak period via automation, but it won't contribute a kWh figure to the dashboard. If you need the measurement as well, look for the energy-monitoring variants in the same family: TP-Link Australia lists the Tapo P110 and P110M as energy-monitoring plugs. Home Assistant's TP-Link integration controls them locally and creates consumption sensors that can feed the Energy dashboard. Check current stock and pricing with your retailer.

The highest-value automation here is usually the dumbest one: trigger the pool pump, dishwasher or hot water element when solar export exceeds a threshold for a sustained period, and stop when it drops. Every kilowatt-hour you self-consume is worth the difference between your import rate and your feed-in rate. For most newer solar owners the feed-in tariff is much lower than the retail rate, as energy.gov.au notes, so the gap is usually worth chasing — work out your own figure from the rates on your bill. (Early adopters on gross-metering arrangements are the exception: self-consumption doesn't carry the same benefit there.)

Sanity-checking against your actual bill

Don't trust the dashboard until you've reconciled it once. Wait for a full billing period, then compare Home Assistant's total import, total export and total cost against the retailer's statement.

A few percent variance is normal — Riemann sum approximation, CT accuracy tolerance and clock drift all contribute. A twenty percent gap means something structural is wrong: usually a missed tariff boundary, daylight saving not being handled, or an inverter reporting AC output where you assumed DC.

Also check your supply charge. The Energy dashboard costs energy only; the daily fixed charge sits outside it. If you want a true bill estimate, add it as a separate template sensor and combine the two in your own Lovelace card.

Get those three things right — clean bidirectional data, correct tariff windows, one reconciliation against a real bill — and you'll have a dashboard that tells you something your inverter app never will.

FAQs

My inverter integration only gives me watts. Why won't the Energy dashboard accept it?

The Energy dashboard needs cumulative kilowatt-hour sensors with `state_class: total_increasing`, not instantaneous power readings. Convert a watts sensor using a Riemann sum integral helper (Settings → Devices & Services → Helpers → Integration) set to the trapezoidal method with kWh output. Treat the result as an approximation — expect a percent or two of drift versus your retailer's meter.

Can I fit CT clamps around my main tails myself if I'm careful?

It's not a DIY job. Fitting CT clamps around the main conductors means working inside your switchboard, which is a job for a licensed electrician, regardless of what overseas DIY videos show. Licensing and certification rules differ by state and territory, so check with your local electrical safety regulator. Budget for a sparky call-out on top of the hardware cost.

My inverter reports generation and house consumption but the export figure looks wrong. What's missing?

Many inverters can't produce clean bidirectional grid data unless a consumption CT has been fitted at the switchboard. Without it, Home Assistant can't distinguish exporting 3 kW from self-consuming 3 kW. A dedicated bidirectional CT-clamp meter on the main tails solves this independently of your inverter brand.

Will a TP-Link Tapo P100 show up in the Energy dashboard's individual devices section?

No — the P100 is a switching-only plug, so it won't contribute a kWh figure. It's still useful for shifting a load such as a pool pump or dishwasher into your solar window or off-peak period via automation. If you want measurement too, look for an energy-monitoring model in the same family, such as the Tapo P110 or P110M, which Home Assistant's TP-Link integration can feed into the Energy dashboard. Check current stock and pricing with your retailer.

Home Assistant's cost total doesn't match my electricity bill. Should I be worried?

A few percent variance is expected from Riemann sum approximation, CT accuracy tolerance and clock drift. A gap of around twenty percent usually points to something structural — a missed tariff boundary, daylight saving not handled, or an inverter reporting AC output where you assumed DC. Also remember the dashboard costs energy only, so your daily supply charge sits outside it entirely.

Some of the links in this article are affiliate links. If you buy through one we may earn a commission, at no extra cost to you. It never changes what we recommend — see our affiliate disclosure.

Comments

Leave a comment

Your email address will not be published. Required fields are marked *