Package: eta-utility
While there are many tools which are useful in the area of energy optimized factory operations, at theETA-Fabrikat Technical University of Darmstadt we have recognized a lack of
comprehensive frameworks which combine functionality for optimization, simulation and communication with
devices in the factory.Therefore, we developed theeta_utilityframework, which provides a standardized interface for the development
of digital twins of factories or machines in a factory. The framework is based on the Gymnasium environment
and follows a rolling horizon optimization approach. It provides standardized connectors for multiple
communication protocols, including OPC UA and Modbus TCP. These facilities can be utilized to easily implement
rolling horizon optimizations for factory systems and to directly control devices in the factory with the
optimization results.Full Documentation can be found on theDocumentation Page.You can find thesource code on github. If you would like to contribute, please
check ourworking repository.WarningThis is beta software. APIs and functionality might change without prior notice. Please fix the version you
are using in your requirements to ensure your software will not be broken by changes ineta_utility.The packageeta_utilityconsists of five main modules and some additional functionality:eta_xis the rolling horizon optimization module which combines the functionality of the
other modules. It is based on thegymnasiumframework and utilizes
algorithms and functions from thestable_baselines3package.eta_xalso contains extended base classes for
environments and additional agents (or algorithms).Theconnectorsmodule provides a standardized way to connect to machines and devices in a
factory or other factory systems (such as energy management systems). Theconnectorscan also
handle subscriptions, for example to regularly store values in a database.Theserversmodule can be used to easily instantiate servers, for example to publish optimization
results.simulatorsare interfaces based on thefmpypackage which provide a way to simulate FMU
(Functional Mockup Unit) models.
Thesimulatorscan be used to perform quick complete simulations or to step through simulation
models, as would be the case in rolling horizons optimization.timeseriesis an interface based on thepandaspackage to load and manipulate timeseries data
from CSV files. It can for example rename columns, resample data in more complex ways such as
multiple different resampling intervals or select random time slices from data. Thescenario_from_csvfunction combines much of this functionality.Other functionality includes some general utilities which are available on the top level of the
package.Some particularitiesIf you want to have logging output from eta utility, call:from eta_utility import get_logger
get_logger()eta_utilityuses dataframes to pass timeseries data and the dataframes are ensured to
contain timezone information where sensible.Citing this projectPlease cite this project using our publication:Grosch, B., Ranzau, H., Dietrich, B., Kohne, T., Fuhrländer-Völker, D., Sossenheimer, J., Lindner, M., Weigold, M.
A framework for researching energy optimization of factory operations.
Energy Inform 5 (Suppl 1), 29 (2022). https://doi.org/10.1186/s42162-022-00207-6We would like to thank the many contributors who developed functionality for the package, helped with
documentation or provided insights which helped to create the framework architecture.Niklas Pantenfor the first implementation of the rolling horizon optimization now available ineta_x,Nina Strobelfor the first implementation of the connectors,Thomas Weberfor contributions to the rolling horizon optimization with MPC algorithms,Guilherme Fernandes,Tobias Koch,Tobias Lademann,Saahil Nayyer,Magdalena Patyna,Jerome Stock,and all others who made small and large contributions.ContributionsIf you would like to contribute, please create an issue in the repository to discuss you suggestions.
Once the general idea has been agreed upon, you can create a merge request from the issue and
implement your changes there.