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.2.tar.gz (78.8 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.2-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: oomi_influx-0.4.2.tar.gz
  • Upload date:
  • Size: 78.8 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.2.tar.gz
Algorithm Hash digest
SHA256 e32d501042eae2e73b970d4a211a57cb9e57c7b62e6e23d4b6d4005253b5768d
MD5 46cb6259223d4312d80a3d43e66a42be
BLAKE2b-256 fc14fc09d20aaeeea627a43be97defe8758d4a85bb848118044a46c806f7b196

See more details on using hashes here.

Provenance

The following attestation bundles were made for oomi_influx-0.4.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: oomi_influx-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 12.8 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f15facc4e82f16b0b729ab08da1517548d4e27ae6a15176c13b442d29caf189a
MD5 c255d66d8b8b531e9042db63a91f8aeb
BLAKE2b-256 57bb238eadd80ea97c959d3b43b6a6a99f02f74e7f6e1d96a59e376731ad1a19

See more details on using hashes here.

Provenance

The following attestation bundles were made for oomi_influx-0.4.2-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