Skip to main content

OpenEnergyID

Open Source Python library for energy data analytics and simulations.

OpenEnergyID is a powerful Python library that provides a wide range of tools for energy data analysis and simulation. Whether you are a data scientist, researcher, or developer working in the energy sector, OpenEnergyID can help you gain valuable insights from your data and build sophisticated models.

more info for developers

Getting Started

To get started with OpenEnergyID, you can install it using pip:

pip install openenergyid

Analyses

OpenEnergyID provides a variety of analysis modules to help you work with your energy data.

Baseload Analysis

The baseload analysis module helps you determine the baseload consumption of a building or a portfolio of buildings.

  • Use BaseloadAnalyzer(timezone="Europe/Brussels"), prepare data with prepare_power_series(energy_lf) and then call analyze(power_lf, "1h").
  • Accepts either energy (timestamp/total in kWh per 15 min) or precomputed power (timestamp/power watts); gapped or zero-valued intervals are kept and handled safely.
  • For homes with unmeasured PV, use nighttime_only=True to filter to nighttime readings only (uses pvlib for solar position).
  • Outputs energy splits (baseload vs total) and baseload ratios per chosen reporting granularity, keeping computations lazy via Polars LazyFrame.

Capacity Analysis

The capacity analysis module helps you identify peaks in your power data.

from openenergyid.capacity import CapacityAnalysis

analyzer = CapacityAnalysis(data=power_series, threshold=2.5)
peaks = analyzer.find_peaks()

Dynamic Tariff Analysis

The dynamic tariff analysis module helps you analyze the impact of dynamic tariffs on your energy costs.

from openenergyid.dyntar import calculate_dyntar_columns

df_with_dyntar = calculate_dyntar_columns(df)

Energy Sharing

The energy sharing module helps you simulate energy sharing scenarios.

from openenergyid.energysharing import calculate

result = calculate(df, method=CalculationMethod.OPTIMAL)

Evening Peak Avoidance

The evening peak avoidance module ("Avondpiek mijden") measures how much of a connection's consumption falls inside a fixed evening window, for peak-shifting campaigns.

from openenergyid.evening_peak import EveningPeakAnalyzer

analyzer = EveningPeakAnalyzer(timezone="Europe/Amsterdam")
net_offtake = analyzer.prepare_net_offtake(gross_offtake_lf, gross_injection_lf)
result = analyzer.analyze(net_offtake)
moments = analyzer.peak_moments(net_offtake, num_peaks=10)
  • Takes the two gross meter registers in kWh per quarter-hour; injection is clipped to zero per quarter-hour, before summation, so the share stays in 0–100% and stays comparable between households with and without PV.
  • Reports per day the highest quarter-hour power inside the window (kW) and the share of net daily offtake falling inside it (%), plus Monday-aligned weekly medians as a reference line.
  • The window (default 16:00–21:00) and the threshold for counting good days (default 37%) are configurable.
  • Summarises the threshold two ways: how many measured days fell below it, and how far below they got in total, as percentage points clipped at zero per day.
  • Day boundaries and coverage are DST-aware: a 25-hour October day is expected to have 100 quarter-hours, not 96. Days that are only partly measured report no share rather than one computed against an incomplete denominator, and unmeasured days stay in the index as nulls so a gap in the data reads as a gap.

See docs/specs/evening-peak-avoidance.md and demo_evening_peak.ipynb.

Multivariate Linear Regression (MVLR)

The MVLR module helps you build multivariate linear regression models to predict energy consumption.

from openenergyid.mvlr import find_best_mvlr

model = find_best_mvlr(data)
if not model.is_valid:
    print(model.validation_message)  # e.g. "Best adjusted R²: 0.63 (need ≥0.75)."

find_best_mvlr returns the best fit it can produce across the configured granularities. A fit that misses the caller's thresholds is returned with is_valid=False so callers can render it with a warning; only a structurally degenerate fit (typically df_resid == 0 after resampling) raises DegenerateModelError, which subclasses ValueError and carries nobs / df_model / df_resid. See docs/specs/mvlr-degenerate-models.md.

PV Simulation

The PV simulation module helps you simulate the output of a photovoltaic system.

from openenergyid.pvsim import get_simulator, apply_simulation

simulator = get_simulator(input)
simulation_results = simulator.simulate()
df_with_pv = apply_simulation(df, simulation_results)

Simulation Evaluation

The simulation evaluation module helps you evaluate the results of your energy simulations.

from openenergyid.simeval import evaluate

evaluation = evaluate(df)

Download files

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

Source Distribution

openenergyid-0.3.2.tar.gz (81.6 kB view details)

Uploaded Source

Built Distribution

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

openenergyid-0.3.2-py3-none-any.whl (101.0 kB view details)

Uploaded Python 3

File details

Details for the file openenergyid-0.3.2.tar.gz.

File metadata

  • Download URL: openenergyid-0.3.2.tar.gz
  • Upload date:
  • Size: 81.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.12 {"installer":{"name":"uv","version":"0.12.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for openenergyid-0.3.2.tar.gz
Algorithm Hash digest
SHA256 c43eec7014a3a77405e8368f27e4958dffdcdc5f71c6612ab3c32b5282fb19d8
MD5 5af5282f11427f9392ed660ffd2191c3
BLAKE2b-256 a341843d06de0e530e838ef384add4b0f3d19f255f3b94ce78f92570f551de2b

See more details on using hashes here.

File details

Details for the file openenergyid-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: openenergyid-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 101.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.12 {"installer":{"name":"uv","version":"0.12.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for openenergyid-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d6223b342f2535e251a561db3d238bb73c88e4d0c17efcbd7c17114034e65251
MD5 1b0f45ec9a5a5ec878ef07b09c27caed
BLAKE2b-256 550d4fc10fe0154c1aec5d79fa595498276f097331534be30b15bcee063e4692

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.42

2 files

0.1.41

2 files

0.1.40

2 files

0.1.38

2 files

0.1.37

2 files

0.1.36

2 files

0.1.35

2 files

0.1.34

2 files

0.1.33

2 files

0.1.32

2 files

0.1.31

2 files

0.1.30

2 files

0.1.29

2 files

0.1.28

2 files

0.1.21

3 files

0.1.20

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.1

2 files

0.1.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page