octopus_exporter/README.md
Rasmus "Pez" Wejlgaard dbcf50eb13
Some checks failed
Release / release (push) Has been cancelled
feat: solar export metrics (#16)
2026-05-25 11:56:21 +01:00

5.2 KiB

octopus_exporter

A Prometheus exporter for Octopus Energy smart meter data, using the Kraken GraphQL API.

Metrics

Electricity

Metric Source Description
octopus_electricity_demand_watts GraphQL Live electricity demand in watts
octopus_electricity_last_read_timestamp GraphQL Unix timestamp of last electricity reading
octopus_electricity_consumption_kwh REST Latest half-hourly consumption in kWh
octopus_electricity_consumption_interval_timestamp REST Unix timestamp of the start of the latest consumption interval
octopus_electricity_unit_rate_pence GraphQL / REST Current unit rate in pence per kWh (Agile customers get the live half-hourly rate from the REST API)
octopus_electricity_standing_charge_pence GraphQL Current standing charge in pence per day

Gas

Gas metrics are only exposed if a smart gas meter is found on the account.

Metric Source Description
octopus_gas_demand_watts GraphQL Live gas demand in watts
octopus_gas_last_read_timestamp GraphQL Unix timestamp of last gas reading
octopus_gas_consumption_kwh REST Latest half-hourly consumption in kWh
octopus_gas_consumption_interval_timestamp REST Unix timestamp of the start of the latest gas consumption interval
octopus_gas_unit_rate_pence GraphQL Current unit rate in pence per kWh
octopus_gas_standing_charge_pence GraphQL Current standing charge in pence per day

Solar / export

Solar metrics are only exposed if an electricity export meter point (direction EXPORT) is found on the account. Solar export usually shares the physical meter and smart device with the import meter, so live export watts come from the same telemetry call as electricity demand (no extra API request).

Metric Source Description
octopus_solar_export_watts GraphQL Live electricity export to the grid in watts
octopus_solar_last_read_timestamp GraphQL Unix timestamp of last solar export reading
octopus_solar_export_kwh REST Latest half-hourly energy exported to the grid in kWh
octopus_solar_export_interval_timestamp REST Unix timestamp of the start of the latest export interval
octopus_solar_export_rate_pence GraphQL Current export (outgoing) unit rate in pence per kWh

Account

Metric Source Description
octopus_account_balance_pence GraphQL Account balance in pence (positive = credit, negative = debit)

Exporter health

Metric Description
octopus_up 1 if the last poll cycle completed without errors, 0 otherwise
octopus_last_poll_timestamp Unix timestamp of the last completed poll cycle
octopus_poll_errors_total Total number of collector errors across all poll cycles
octopus_token_refreshes_total Total number of successful JWT token refreshes
octopus_rate_limit_retries_total Total number of 429 rate-limit retries
octopus_build_info{version,commit} Build metadata (always 1)

Metrics are refreshed every POLL_INTERVAL (default 60 seconds).

Configuration

Variable Required Description
OCTOPUS_API_KEY Yes Your Octopus Energy API key
OCTOPUS_MPAN No Filter electricity meter by MPAN
OCTOPUS_SERIAL No Filter electricity meter by serial number
OCTOPUS_DEVICE_ID No Use a specific electricity smart device ID directly
OCTOPUS_GAS_MPRN No Filter gas meter by MPRN
OCTOPUS_GAS_SERIAL No Filter gas meter by serial number
OCTOPUS_GAS_DEVICE_ID No Use a specific gas smart device ID directly
OCTOPUS_SOLAR_MPAN No Filter solar export meter by MPAN
OCTOPUS_SOLAR_SERIAL No Filter solar export meter by serial number
OCTOPUS_SOLAR_DEVICE_ID No Use a specific solar export smart device ID directly
PORT No Port to expose metrics on (default: 9359)
POLL_INTERVAL No How often to poll Octopus APIs (Go duration, default: 60s)

If no filter variables are set, the exporter auto-discovers the first smart meter of each type found on the account. Use OCTOPUS_MPAN / OCTOPUS_MPRN to pin to a specific meter on accounts with multiple meters.

Your API key can be found in the Octopus Energy developer dashboard.

Docker

docker run -d \
  -e OCTOPUS_API_KEY=sk_live_... \
  -e OCTOPUS_MPAN=1234567890123 \
  -p 9359:9359 \
  rwejlgaard/octopus_exporter

Docker Compose

services:
  octopus-exporter:
    image: rwejlgaard/octopus_exporter:latest
    restart: unless-stopped
    environment:
      OCTOPUS_API_KEY: sk_live_...
      OCTOPUS_MPAN: "1234567890123"   # optional, auto-discovered if omitted
    ports:
      - "9359:9359"

Running from source

Requires Go 1.24+.

git clone https://github.com/rwejlgaard/octopus_exporter
cd octopus_exporter
OCTOPUS_API_KEY=sk_live_... go run ./cmd/octopus_exporter

Prometheus configuration

scrape_configs:
  - job_name: octopus
    static_configs:
      - targets: ['localhost:9359']

Building

go build ./cmd/octopus_exporter
docker build -t rwejlgaard/octopus_exporter .