NRGISE Open is a Python framework for simulating local energy systems over time.
It uses sequential time-step simulation to model the interaction between electrical components of the energy system and control strategies under realistic operating conditions. NRGISE provides ready-to-use components and controllers while remaining extensible, allowing researchers and engineers to implement custom models and controllers. Unlike optimization-focused frameworks, NRGISE is built around explicit controllers and rolling-horizon simulation, making it well suited for techno-economic assessments under realistic operating conditions.
What you can do with NRGISE Open
- Simulate common use cases out of the box: Plug your PV and load data into our predefined examples to simulate use cases such as self-consumption maximization and peak shaving without writing custom code.
- Techno-economic assessments: Evaluate how storage sizing, control strategies and system configurations affect technical and economic performance.
- Develop and benchmark controllers: Use NRGISE as a simulation environment for developing, testing, and benchmarking custom controllers, from simple rule-based strategies to model predictive control, reinforcement learning, and other advanced approaches.
- Study impact of forecasting: Integrate custom forecasting models into rolling-horizon simulations and investigate how forecast errors affect system operation and economic performance.
- Run simulation studies at scale: Execute parameter sweeps and batch simulations to compare hundreds or thousands of scenarios for sizing studies, sensitivity analyses, or scientific experiments.
- Extend the framework: Implement your own components, storage models, controllers, forecasters, aging models, or economic models using our well-defined interfaces.
When another tool may be a better fit
- When you just want to see the mathematically optimal system layout without explicitly considering control strategies: Use an optimization-based tool like oemof, ETHOS.FINE or PyPSA
- When you want to model sector coupling (electricity, heat and mobility): Use oemof or ETHOS.FINE
- When you need to model a large power grid: Use a spatially resolved tool like PyPSA
- When you want a deep dive into battery aging: Use SimSES
- When you want to deploy your controller in real-time: Use a deployment tool like OpenEMS (however, NRGISE controllers can be coupled with it)
If none of these tools fit your list, see OpenMod for a broader tool comparison
Installation
pip install nrgise
Note that it is recommended to pin the version of the nrgise (e.g. nrgise==0.X.Y) to be safe from breaking changes of future versions
Some of the controllers used in nrgise require a solver. You can install a solver e.g. by:
conda install conda-forge/label/cf202003::ipopt -y --override-channels -c conda-forge
Documentation
Documentation can be found here, and includes:
- User guides, including how to extend NRGISE for your use cases
- API documentation
Example Usage
Basically, running a simulation with NRGISE is as easy as:
from nrgise import EnergySystem, Simulation
from nrgise.components import AgingLinearCapacityWrapper, Battery, Grid, Load, Pv
from nrgise.controllers import SelfConsumptionController
# Create an energy system
es = EnergySystem(time_index=data.index)
grid = Grid(label='grid')
load = Load(label='load', power_profile=load_profile)
pv = Pv(label='pv', power_profile=generation_profile)
battery = Battery(
label='battery',
time_delta_seconds=es.time_delta_seconds,
nom_power=200,
capacity=800
)
# Wrap the storage with an aging wrapper if you want to consider aging
aging_battery = AgingLinearCapacityWrapper(storage=battery, lifetime_in_years=10, max_cycles=10000, eol=0.7)
es.add_components(grid, load, aging_battery, pv)
# Define a controller
controller = SelfConsumptionController(storage_label='battery')
# Run the simulation
simulation = Simulation(energy_system=es, controller=controller)
results = simulation.run()
Yet, Before You Start: You Should Know
- All units concerning "electricity" are in kW or kWh
- All units concerning money are in €
- We follow the principle that: Power that "goes into" the local simulated energy
system has positive values. Power that is "taken from" it has negative values. Examples:
- The load profile usually contains negative values
- The solar generation profile contains usually positive values.
- When charging a storage, we use negative values as (from the perspective of the energy system) the power "goes out".
- Power flowing from a
GridBuilder(e.g. a "normal" grid connection pointGrid) into the energy system is positive, power flowing in the other direction is negative.
To give you an introduction to NRGISE, we have provided you with some examples.
Contributing and Support
We welcome contributions from the community. If you have ideas for improvements, feature requests, or encounter a bug, feel free to open an issue or submit a pull request.
- To discuss with other users, share insights, or to just get in touch with others within the community, you can use our forum (will be added soon)
- For bugs and feature requests please open an issue
Detailed guidelines for contributions can be found in Contributing.
Team
Organisational: nils.reiners@ise.fraunhofer.de
Technical: tobias.rohrer@ise.fraunhofer.de; ricarda.hogl@ise.fraunhofer.de
Cite As
We don't have a proper "nrgise centric" publication yet. Until then, cite as (BibTeX):
@article{nrgise,
title = {Exploring the profitability of single and multi-use energy storage systems mirroring real-world conditions},
journal = {Applied Energy},
volume = {383},
pages = {125353},
year = {2025},
issn = {0306-2619},
doi = {https://doi.org/10.1016/j.apenergy.2025.125353},
author = {Tobias Rohrer and Nils Reiners and Ricarda Hogl},
}
A list of publications using NRGISE Open can be found here
License
Our primary goal in making NRGISE Open available is to support academia, research, education, and other non-commercial use. For this reason, NRGISE Open is licensed under CC BY-NC-SA 4.0.
If you would like to use NRGISE Open for commercial purposes, we offer separate commercial licensing options. Please get in touch with us to discuss the appropriate license for your use case.
Release files for nrgise 1.0.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 | |
|---|---|---|---|
| nrgise-1.0.0.tar.gz | 27.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nrgise-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.9 kB
Release files / nrgise-1.0.0.tar.gz
| Download URL | nrgise-1.0.0.tar.gz |
|---|---|
| Size | 27.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b494692eff1ad3a7982ba7286dfda444e3f0bb85b04352b44057f336e4508e4e
|
|
BLAKE2b-256 checksum How to use checksums |
11f2bd1daf4ad7680e1d3e1df4087a44bf14d651bdfbe388aa947c2bb952e7cf
|
| 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 18, 2026.
Transparency logRelease files / nrgise-1.0.0-py3-none-any.whl
| Download URL | nrgise-1.0.0-py3-none-any.whl |
|---|---|
| Size | 16.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bb94da83ebb98c2dc74c7e3e05fb48c3b37394f3ca78e9249a8d79119153aced
|
|
BLAKE2b-256 checksum How to use checksums |
a64324b9fff6a61b858e7db3bf7416092888c6ce4c0cbf55ce6fd8ccbbd5eb82
|
| 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 18, 2026.
Transparency log