-
Notifications
You must be signed in to change notification settings - Fork 2
Rates and tariffs
Every block EMT records needs a unit rate (and a daily standing charge) to turn kWh into cost. This page explains where those rates come from, how they are stored, an important limitation about historical rates, and how to fix a block whose rate wasn't built correctly.
Each channel takes its rate from one of two sources, set per channel in Settings → Meter Config (see Configuring Meters):
| Source | How it works | Best for |
|---|---|---|
| Sensor | A Home Assistant sensor supplies the current £/kWh, updated at each tariff-period boundary. | Setups already exposing rate sensors (e.g. via an existing Octopus integration). |
| Supplier API | EMT fetches your rates and standing charges from your Octopus/Kraken account on a schedule. | API installs that want rates without maintaining rate sensors. |
You can mix sources across channels — for example, API import rates alongside a sensor-supplied export rate.
When rates come from the API, EMT records them as a schedule — each rate with the period it applies to — and stores it as the rates are observed. Blocks are then costed against the schedule entry covering their timestamp. Standing charges are stored and applied the same way.
This means rate collection is forward-looking: EMT builds the schedule from the moment it starts collecting and keeps it current as tariffs change.
Standard published rates — fixed, Tracker, Cosy, Agile — are retrievable for past dates. They carry validity windows, so EMT can resolve the correct unit rate for any historical half-hour from the rate schedule. Agile, for example, is priced a day ahead and stays queryable.
The one thing that cannot be reconstructed after the fact is the Intelligent Octopus Go dispatch overlay — which out-of-window half-hours were smart-charged at the off-peak rate. The dispatch data is ephemeral: planned dispatch slots are removed from the API (often the same day), and completed dispatches don't reliably distinguish a genuine smart-charge from a manual boost. So the overlay has to be captured live as slots happen (see below), and any period where EMT wasn't running to capture them can't have its dispatch off-peak pricing rebuilt from the API.
ℹ️ Even then, the base rate for those slots is still correct (from the schedule). What's lost is only the off-peak adjustment for smart-charge slots that fall outside the standard cheap window.
Where a smart-charge slot is missing its off-peak price, fix it with the block correction tool (below).
For Intelligent Octopus Go (IOG), your EV often charges in smart-charge dispatch slots at the cheap off-peak rate, at times the standard tariff schedule wouldn't predict. EMT handles this with a dispatch overlay built on top of the normal rate schedule:
- Capture — EMT polls for active dispatch slots on a short (~5-minute) cadence and records each one as it occurs.
- Store — captured slots are persisted, because they cannot be fetched again later.
- Resolve — when a block is costed, a resolver checks whether a dispatch was active during it and, if so, applies the dispatch rate to the affected consumption.
- Validate — a small 0.1 kWh noise floor stops meter jitter from triggering the overlay spuriously.
- Apply twice — the overlay is applied at block finalise (provisional) and re-applied at DCC settlement, so the cheap rate survives reconciliation.
⚠️ Because dispatches are real-time only, they can't be reconstructed for the past. If EMT wasn't running when a dispatch happened, that slot won't be in the overlay and the block may be priced at the standard rate — fixable with a correction.
Full setup, including per-device "use dispatch overlay" rates (so your EV bills at the dispatch rate while the rest of the house stays on the standard tariff), is on the Intelligent Octopus Go page.
EMT meters any EV or EVSE that exposes a usable energy sensor (a charge-session or cumulative kWh sensor), added as a Device in Configuring Meters. There is no fixed charger allowlist.
Whether a charger gets IOG dispatch pricing (the cheap smart-charge off-peak rate) depends on Octopus exposing dispatch data for your setup — this is capability-based, not brand-based:
- Vehicle integrations (Tesla, VW, etc.) and chargers such as Zappi — dispatch data is available, so the overlay applies.
- Ohme — supported, with its own handling; ships conservatively (see Intelligent Octopus Go).
- Hypervolt via the charger route — Octopus does not expose dispatch data through the public API for charger-only setups (a confirmed platform limitation, not an EMT one). EMT can't apply the overlay, so those slots price at the standard rate and are marked "priced without dispatch data." The same car connected via a vehicle integration would work normally.
So a Hypervolt is still fully metered as a Device — only its smart-charge off-peak pricing can't be reconstructed, because the platform withholds that signal.
When a block's rate is wrong or missing — a missed dispatch slot, a pre-collection period, or an outage gap — use the block correction tool to set the correct rate on the affected block(s). See Data Management for how to apply a correction.
⚠️ API billing modes gate corrections until settled. With the Supplier API billing source, a block's rate can't be corrected until it has been DCC-settled (so a manual edit doesn't fight the authoritative figure that's about to arrive). In local-metering (cad) mode, corrections apply immediately. See Supplier Settlement.
- Configuring Meters — per-channel rate source, Devices, EV/EVSE setup
- Supplier Settlement — API rates, billing source, settlement
- Intelligent Octopus Go — dispatch overlay setup and per-device rates
- Managing Billing Periods — tariff changes across billing periods
- Data Management — the block correction tool
Getting Started
Supplier Integration
Using EMT
Data Management
Reference