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
# Reconciliation pass: re-fetch a wider window to pick up slots the DSO
# backfilled after the fact (writes are idempotent, so this is safe to repeat)
oomi-influx write consumption --lookback-days 60
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.
Metadata
Release files for oomi-influx 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| oomi_influx-0.5.0.tar.gz | 83.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| oomi_influx-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 96.6 kB
Release files / oomi_influx-0.5.0.tar.gz
| Download URL | oomi_influx-0.5.0.tar.gz |
|---|---|
| Size | 83.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ff5d7e10fa4a998c9267ff39e9d7e71b43a217f64402c836902fb353acf576f
|
|
BLAKE2b-256 checksum How to use checksums |
ea8cff44539650107baa6f08e510c911cee54620aa4ddca3f3bd4c6f20211fdf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.
Transparency logRelease files / oomi_influx-0.5.0-py3-none-any.whl
| Download URL | oomi_influx-0.5.0-py3-none-any.whl |
|---|---|
| Size | 13.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a25a9612a0d70652454ca53769af6c1f4a1c1da530f1e332b8a1d050508ed17b
|
|
BLAKE2b-256 checksum How to use checksums |
d5522fa9b0a5ca2b7f67aef9d8304daa84a675ed7a957923d13997f22f0bcb4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 12, 2026.
Transparency log