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.2.4.tar.gz (71.0 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.2.4-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: oomi_influx-0.2.4.tar.gz
  • Upload date:
  • Size: 71.0 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.2.4.tar.gz
Algorithm Hash digest
SHA256 13bd7a7f30dd6d37439457461cb2ef4f65bb20ddd79feaa42b6d36a81e6fd338
MD5 1dbe67198a3ae4fa2503440700b29587
BLAKE2b-256 e24750b9eb8118b7b7ba93151888c36c423bf5748db718ce82978602f8fa7f00

See more details on using hashes here.

Provenance

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

Publisher: ci-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.2.4-py3-none-any.whl.

File metadata

  • Download URL: oomi_influx-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 12.1 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.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 2e747ebfd2b848b6dddb418d53d5d68e6d5917f9f2359aa67900db4826099c6f
MD5 25f2b809a8ade75fa31c6381dc458d0c
BLAKE2b-256 5f79e3c8ce058a26bbc202063e6c63b40b046926f79af0dea4d7c7aa8644a427

See more details on using hashes here.

Provenance

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

Publisher: ci-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