Skip to main content

ETL ingestion of Oomi energy data into InfluxDB

Project description

oomi-influx

Headless ETL tool that pulls 15-minute electricity consumption data from the Oomi customer portal and writes it directly to InfluxDB 2.x.

No browser. No GUI. Designed to run unattended on a Raspberry Pi or any Linux server.

How it works

Oomi's portal runs on Salesforce Experience Cloud and exposes no public API. oomi-influx replays the same HTTP calls the browser makes:

  1. Form-POST login → Salesforce session ID
  2. Frontdoor handshake → community session cookie + Aura token
  3. POST to the Aura API (oomi_ConsumptionController.getConsumption) → NDJSON

Each consumption slot is a 15-minute UTC-timestamped record written to InfluxDB as:

InfluxDB concept Value
Measurement electricity_consumption (configurable)
Tag metering_point=<value> (configurable)
Fields consumption_kwh, consumption_wh, resolution (configurable)

Requirements

  • uv
  • An Oomi customer account with smart meter access
  • InfluxDB 2.x instance

Installation

Install as a persistent uv tool (puts oomi-influx on your PATH):

uv tool install oomi-influx

To try it without installing:

uvx oomi-influx --help

Configuration

Create a directory to hold the configuration, then run the interactive setup wizard from it. The wizard logs in, fetches your meter details automatically, and writes .env to the current directory:

mkdir ~/oomi-config && cd ~/oomi-config
oomi-influx configure

The wizard uses any existing .env values as defaults, so re-running it only asks you to confirm or change individual values.

.env is read from the working directory. Always run oomi-influx from the directory that contains your .env, or set the variables in your environment directly.

Environment variables

oomi-influx configure writes all required variables to .env for you. If you prefer to set them manually, create .env in your config directory with the following variables:

Oomi

Variable Description
OOMI_USERNAME Your Oomi login email
OOMI_PASSWORD Your Oomi password
OOMI_GSRN Your meter EAN (18-digit; fetched automatically by configure)
OOMI_CUSTOMER_ID Salesforce customer identifier (fetched automatically by configure)

InfluxDB

Variable Description Default
INFLUX_URL InfluxDB base URL
INFLUX_TOKEN API token with write access to the bucket
INFLUX_ORG Organisation name
INFLUX_BUCKET Destination bucket
INFLUX_MEASUREMENT Measurement name electricity_consumption
INFLUX_TAG_KEY Tag key metering_point
INFLUX_TAG_VALUE Tag value (your meter identifier)
INFLUX_FIELD_KWH Field name for kWh value consumption_kwh
INFLUX_FIELD_WH Field name for Wh value consumption_wh
INFLUX_FIELD_RESOLUTION Field name for slot resolution resolution

Never commit .env — it is git-ignored. The repository is public.

Usage

Fetch consumption data (stdout)

# Last 7 days (default)
oomi-influx fetch consumption

# Specific range
oomi-influx fetch consumption --start 2026-05-01T00:00:00Z --end 2026-05-14T00:00:00Z

Output is NDJSON on stdout, one record per line:

{"timestamp": "2026-05-14T06:00:00+00:00", "kwh": 0.662}

Write consumption data to InfluxDB

# Last 7 days (default)
oomi-influx write consumption

# Specific range
oomi-influx write consumption --start 2026-05-01T00:00:00Z --end 2026-05-14T00:00:00Z

Fetches from Oomi and writes directly to the configured InfluxDB bucket in one step.

Running on a schedule

systemd timer (recommended for servers)

Create /etc/systemd/system/oomi-influx.service:

[Unit]
Description=Fetch and write Oomi consumption data to InfluxDB

[Service]
Type=oneshot
User=<your-user>
WorkingDirectory=/home/<your-user>/oomi-config
ExecStart=oomi-influx write consumption

Create /etc/systemd/system/oomi-influx.timer:

[Unit]
Description=Run oomi-influx every hour

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl enable --now oomi-influx.timer

WorkingDirectory should point to the directory that contains your .env. oomi-influx is the binary installed by uv tool install — confirm its path with which oomi-influx and use the full path if systemd cannot find it.

cron

# ┌─ minute (0 = top of the hour)
# │  ┌─ hour (every hour)
# │  │  ┌─ day of month (every day)
# │  │  │  ┌─ month (every month)
# │  │  │  │  ┌─ day of week (every day)
# │  │  │  │  │
  0  *  *  *  *  cd ~/oomi-config && oomi-influx write consumption

Contributing

See CONTRIBUTING.md for development setup, testing, and how to work with Claude Code AI skills used in this project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oomi_influx-0.4.4.tar.gz (79.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oomi_influx-0.4.4-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file oomi_influx-0.4.4.tar.gz.

File metadata

  • Download URL: oomi_influx-0.4.4.tar.gz
  • Upload date:
  • Size: 79.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oomi_influx-0.4.4.tar.gz
Algorithm Hash digest
SHA256 2003689209b74e48988cead1e127bb1ca63b49f00d34e2dc0dbf26ee0edfb5c2
MD5 7269bbf8a02a1a461238120b971eca45
BLAKE2b-256 5e8327ca92bcd96727f1288f678b5d63588ef83b439f8de1542015101343a06e

See more details on using hashes here.

Provenance

The following attestation bundles were made for oomi_influx-0.4.4.tar.gz:

Publisher: publish.yml on jvuori/oomi-influx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file oomi_influx-0.4.4-py3-none-any.whl.

File metadata

  • Download URL: oomi_influx-0.4.4-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for oomi_influx-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4a048675a9cdd51f9c4c8be3ad1eac5a4f61564380440d3fde332b913635ba1d
MD5 7f007fa4d38364e22f81dd025bb67922
BLAKE2b-256 cb43a4f80bfbf4b7118535e601fc9203bd82819c4af72f9dc840f5f6eedf5ea5

See more details on using hashes here.

Provenance

The following attestation bundles were made for oomi_influx-0.4.4-py3-none-any.whl:

Publisher: publish.yml on jvuori/oomi-influx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page