Source code for energym.envs.env_fmu_eplus

import os

import energym
from energym.envs.env_fmu import EnvFMU
from energym.envs.utils.weather import EPW
from energym.envs.weather_names import WEATHERNAMES


[docs]class EnvEPlusFMU(EnvFMU): """Base class for EnergyPlus based FMU simulation models. Subclasses EnvFMU and inherits its behavior. Defines EnergyPlus specific simulation details. """ def __init__( self, model_path, start_time, stop_time, step_size, # ep_version, weather, input_specs, output_specs, kpi_options, default_path=True, generate_forecasts=True, generate_forecast_method='perfect', generate_forecast_keys=None ): """ Parameters ---------- model_path : str Specifies the path to the FMU start_time : int Begin of the simulation time in seconds in relation to the beginning of the year stop_time : int End of the simulation time in seconds in relation to the beginning of the year step_size : float Length of a simulation timestep in seconds weather : str Specifies the used weather file input_specs : dict Contains the inputs of the model output_specs : dict Contains the outputs of the model kpi_options : dict Dict to specify the tracked KPIs. default_path : bool Whether to use the default path or an absolute path in model_path and weather Raises ------ Exception If the passed weather file is not contained in the list of available weather files """ weather_epw = EPW() if default_path: if weather in WEATHERNAMES: path = os.path.abspath(energym.__file__) path = os.path.abspath(os.path.join(path, "..", "..")) fmu_file = os.path.join( path, "simulation", "energyplus", model_path + ".fmu", ) weather_file = os.path.join( path, "simulation", "energyplus", model_path.split(os.sep)[0], "wf", WEATHERNAMES[weather] + ".epw", ) weather_epw.read(weather_file, generate_forecasts, generate_forecast_method, generate_forecast_keys) else: raise Exception("Unknown weather file") else: weather_file = weather weather_epw.read(weather, generate_forecasts, generate_forecast_method, generate_forecast_keys) fmu_file = model_path super().__init__( fmu_file, start_time, stop_time, step_size, weather_epw, input_specs, output_specs, kpi_options, default_path, weather_file )
[docs] def initialize(self): """Initializes simulation object. Instantiates FMPy FMUSalve1 or FMUSlave2 object based on FMI version detected. For E+, by default, an empty stepp is made at the beginning and default step parameters are done. """ super().initialize() self._last_output = {} _ = self.step({})
[docs] def step(self, inputs=None): if inputs is None: inputs = {} output = super().step(inputs) self._last_output = output return output
[docs] def get_output(self): return self._last_output