This proposal has been approved and the Eclipse WattAdvisor project has been created.
Visit the project page for the latest information and development.

Eclipse WattAdvisor

Tuesday, November 21, 2023 - 11:01 by Jonas Pemsel
This proposal is in the Project Proposal Phase (as defined in the Eclipse Development Process) and is written to declare its intent and scope. We solicit additional participation and input from the community. Please login and add your feedback in the comments section.
Parent Project
Proposal State

Eclipse WattAdvisor provides a generic and simulative optimization model in combination with data preprocessing that focuses on the determination of cost-minimal sets of energy components that are able to supply the energy demand in a particular scenario.

From a technical perspective, WattAdvisor provides the formulation of the optimization model, including the energy components, together with data pre- and post-processing functions and necessary data models bundled in a Python library. The library should be ready to be used in a Python environment. Further interfaces are out of scope.

For each component of the set, the optimal dimensioning as well as the expected investment and operational cost are outputs. By simulative balancing of energy flows, the annual amount of energy produced per production component and the resulting amount of energy to be purchased from external sources are quantified.

The analysis performed by the Eclipse WattAdvisor is based on several inputs:

  • annual local energy demands for one representational year
  • maximum installable amount of different renewable energy sources
  • tariffs for the purchase of energy from external sources

Potential energy supply from renewable sources is calculated for one representational year based on historical, location-specific weather data that is automatically acquired in data preprocessing. Furthermore, it is assumed that considered energy demands and prices of energy tariffs do not change, neither quantitatively nor qualitatively.

To reach a high reproducibility and to solve the model fast and repeatedly under different scenario assumptions, the level of detail implemented in the formulation of the optimization model does not equal that of physically exact models. Therefore, the results generated by the project are not intended to be used as a construction plan to realize the components of the identified cost-minimal set. It rather serves as an estimation of the economic potential and a recommendation that is available without much manual effort to be taken into consideration by an energy consultant.


Why Here?

Eclipse WattAdvisor has the potential to provide benefits for multiple economies.

It provides a quick initial insight into the business potential of the transformation of local energy systems for owners of industrial or commercial facilities. This could lead to a lowering of the entry threshold to realize such transformation projects that ultimately result in a faster reduction of greenhouse gas emissions by decreasing dependence on fossil energy carriers.

Moreover, the project simplifies the first steps of energy consultant activities by creating drafts of energy concepts quickly and with low manual effort.

Further technical maturation of the project would be highly beneficial to utilizing this potential. From the publication of the project via the Eclipse Foundation, we expect a faster growth of community collaboration to enhance the validity, reliability and applicability of the project.

Project Scheduling

There is already a working build version of the project which code will be intially contributed as soon as this proposal is accepted. We plan to contribute further improvements during the year 2024.


Eclipse WattAdvisor provides a Python library that consists of several functions and classes to build and solve a linear optimization model based on certain input data and parameters. The optimization model represents a local energy system composed of different energy components to produce, store, or transform energy.

Input data can contain information about the following aspects of the local energy system:

  • geographical location
  • annual energy demands per energy type
  • Installed power and/or capacity per energy component already existing in the system
  • Potential power per energy component that can be added to the system at maximum
  • Custom cost parameters per energy component
  • Prices of tariffs to purchase energy from external sources for the energy system

With this input data, a predefined function to start the automatic processing of the model can be called. At first, it builds a generic optimization model formulated with the Python library Pyomo and parameterizes it according to the input data to create a specific optimization problem. Here, the target function to minimize equals the sum of the total cost of all components to be used for the component composition. The total cost per component consists of at most:

  • Investment costs converted into annual costs by an annuity factor based on the expected lifespan of the component
  • Annual operational cost
  • Annual energy purchase cost

Investment and operational costs are calculated by applying specific cost factors of a component, while annual operational costs are determined using the expected amount of energy purchased by the component and energy tariff prices given as input. It should be mentioned that the total cost of each component is formed by an individual combination of the three possible cost factors, e.g., the total cost of an energy purchase component consists only of the annual energy purchase cost. 

The optimization problem is then passed to an open-source solver to create a solution. This leads to a solution that follows the fundamental target function to find the cost-minimal composition of energy components and remaining energy purchases to supply the parameterized demands.

After a valid solution is found, the relevant result data is exported either in machine-readable (JSON) or human-readable (Excel) format.

Energy balances are formulated in the model for these energy carriers:

  • Electrical energy
  • Thermal energy
  • Natural gas

Currently, classes to implement the following component groups are predefined and available in the project:

  • Combined heat and power plant
    • Transforming natural gas into electrical energy
  • Electrical energy storage
    • Storing electrical energy
  • Energy demand
    • Consuming energy for the system
    • Can be parameterized for all energy carriers
  • Energy feed-in
    • Consuming energy from the system and generating income
    • Can be parameterized only for electrical energy
  • Energy purchase
    • Producing energy for the system
    • Can be parameterized for all energy carriers
  • Gas boiler
    • Transforming natural gas into thermal energy
  • Heat pump
    • Transforming electrical energy into thermal energy
    • Efficiency estimation by the usage of historical air or ground temperature weather data
  • Photovoltaic plant
    • Roof surface
    • Free field
    • Producing electrical energy for the system
    • Energy production estimation by the usage of historical solar radiation weather data
  • Solar thermal energy plant
    • Producing thermal energy for the system
    • Energy production estimation by the usage of historical solar radiation weather data
  • Thermal energy storage
    • Storing thermal energy
  • Wind power plant
    • Producing electrical energy for the system
    • Energy production estimation by the usage of historical wind speed weather data

By adding new component groups, this list can be extended, which in turn contributes to extending the scope and applicability of the model.

Initial Contribution

The code is organized as a Python Library with the following structure:

  • data_models/
    • Content: Contains serveral modules defining pydantic models representing accepted input data, internal data and output result data
  • optimization_model/
    • components/
      • Content: Contains serveral modules defining classes representing energy components to be added to the optimization model. Each component consists of optimization parameters, variables and constraints formulated with Pyomo.
    • data/
      • Content: Contains default weather data and techno-economic parameters of energy components
    • utils/
      • Content: Contains functions useful for loading data from files, logging, preprocessing and postprocessing.

Except for one function, which copyright is held by oemof developing groupthe Fraunhofer IOSB-AST holds copyright for the complete project. 

The following third-party libraries are used in the project:

  • anyio: MIT License
  • appdirs: MIT License
  • attrs: MIT License
  • brotlipy: MIT License
  • certifi: Mozilla Public License 2.0 (MPL 2.0)
  • cffi: MIT License
  • charset-normalizer: MIT License
  • click: BSD License
  • cloudpickle: BSD License
  • colorama: BSD License
  • contourpy: BSD License
  • cryptography: Apache Software License
  • cycler: BSD License
  • dask: BSD License
  • dill: BSD License
  • fonttools: MIT License
  • fsspec: BSD License
  • greenlet: MIT License
  • h11: MIT License
  • h5py: BSD License
  • idna: BSD License
  • importlib-metadata: Apache Software License
  • jaraco.classes: MIT License
  • Jinja2: BSD License
  • joblib: BSD License
  • keyring: MIT License
  • kiwisolver: BSD License
  • llvmlite: BSD License
  • locket: BSD License
  • MarkupSafe: BSD License
  • matplotlib: Python Software Foundation License
  • more-itertools: MIT License
  • munkres: Apache Software License
  • networkx: BSD License
  • numba: BSD License
  • numexpr: MIT License
  • numpy: BSD License
  • packaging: Apache Software License
  • pandas: BSD License
  • partd: BSD License
  • patsy: BSD License
  • Pillow: Historical Permission Notice and Disclaimer (HPND)
  • ply: BSD License
  • pycparser: BSD License
  • py-cpuinfo: MIT License
  • pydantic: MIT License
  • pyOpenSSL: Apache Software License
  • pyparsing: MIT License
  • PySocks: BSD License
  • python-dateutil: Apache Software License
  • pytz: MIT License
  • PyYAML: MIT License
  • requests: Apache Software License
  • Rtree: MIT License
  • scikit-learn: BSD License
  • scipy: BSD License
  • six: MIT License
  • sniffio: Apache Software License
  • SQLAlchemy: MIT License
  • statsmodels: BSD License
  • tables: BSD License
  • tabulate: MIT License
  • threadpoolctl: BSD License
  • toolz: BSD License
  • tqdm: MIT License
  • typing_extensions: Python Software Foundation License
  • urllib3: MIT License
  • xarray: Apache Software License
  • XlsxWriter: BSD License
  • xyzservices: BSD License
  • zipp: MIT License
Source Repository Type