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:
- Form-POST login → Salesforce session ID
- Frontdoor handshake → community session cookie + Aura token
- 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.
.envis read from the working directory. Always runoomi-influxfrom 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oomi_influx-0.4.0.tar.gz.
File metadata
- Download URL: oomi_influx-0.4.0.tar.gz
- Upload date:
- Size: 78.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04e8cacec4cd210bab2a3567b7c483ef5f7b9c7308b83107a934c9adf8392eae
|
|
| MD5 |
840f5ce5d3fdedbfa9310201fe203503
|
|
| BLAKE2b-256 |
38282eaea52be437fc45e29a8e39cd0d5bb56ca18703c544584d5ba5861876c2
|
Provenance
The following attestation bundles were made for oomi_influx-0.4.0.tar.gz:
Publisher:
publish.yml on jvuori/oomi-influx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oomi_influx-0.4.0.tar.gz -
Subject digest:
04e8cacec4cd210bab2a3567b7c483ef5f7b9c7308b83107a934c9adf8392eae - Sigstore transparency entry: 1548330460
- Sigstore integration time:
-
Permalink:
jvuori/oomi-influx@3960c93278ae97aa77523f27f03cd23f8a348e18 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/jvuori
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3960c93278ae97aa77523f27f03cd23f8a348e18 -
Trigger Event:
release
-
Statement type:
File details
Details for the file oomi_influx-0.4.0-py3-none-any.whl.
File metadata
- Download URL: oomi_influx-0.4.0-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb46f41328b7be9f89d8b8d39380155fdc98fbe8b910fd94b247f388b8dd996d
|
|
| MD5 |
a6ae9c4a11dd63de1bcded6d5441c5c2
|
|
| BLAKE2b-256 |
b527b9badaa3683798270836c348a885f44dac3deea9bcc6183394ce4d893205
|
Provenance
The following attestation bundles were made for oomi_influx-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on jvuori/oomi-influx
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oomi_influx-0.4.0-py3-none-any.whl -
Subject digest:
fb46f41328b7be9f89d8b8d39380155fdc98fbe8b910fd94b247f388b8dd996d - Sigstore transparency entry: 1548330600
- Sigstore integration time:
-
Permalink:
jvuori/oomi-influx@3960c93278ae97aa77523f27f03cd23f8a348e18 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/jvuori
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3960c93278ae97aa77523f27f03cd23f8a348e18 -
Trigger Event:
release
-
Statement type: