pymfm.control.utils package
Submodules
pymfm.control.utils.data_input module
- class pymfm.control.utils.data_input.BaseModel[source]
Bases:
BaseModel
Base Pydantic model with configuration settings to allow population by field name.
- class pymfm.control.utils.data_input.BatterySpecs(*, id: str | None = None, bat_type: str, initial_SoC: float, final_SoC: float | None = None, P_dis_max_kW: float, P_ch_max_kW: float, min_SoC: float, max_SoC: float, bat_capacity_kWh: float, ch_efficiency: float = 1.0, dis_efficiency: float = 1.0, bat_capacity_kWs: float = 0.0)[source]
Bases:
BaseModel
Pydantic model representing battery specifications consisting of: String values of battery “type” and “id” and Float values of initital SoC in %, maximum charging and discharging powers in kW, min and max SoC in %, battery capacity in kWh, and (dis)charging efficiency (0<efficiency<=1)
- P_ch_max_kW: float
- P_dis_max_kW: float
- bat_capacity_kWh: float
- bat_capacity_kWs: float
- bat_type: str
- ch_efficiency: float
- dis_efficiency: float
- final_SoC: float | None
- id: str | None
- initial_SoC: float
- max_SoC: float
- min_SoC: float
- class pymfm.control.utils.data_input.Bulk(*, bulk_start: datetime, bulk_end: datetime, bulk_energy_kWh: float)[source]
Bases:
BaseModel
Pydantic model representing bulk energy data.
- bulk_end: datetime
- bulk_energy_kWh: float
- bulk_start: datetime
- class pymfm.control.utils.data_input.ControlLogic(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
StrEnum
An enumeration class representing control logic options.
- OPTIMIZATION_BASED = 'optimization_based'
- RULE_BASED = 'rule_based'
- class pymfm.control.utils.data_input.GenerationAndLoad(*, bulk: float | None = None, values: List[GenerationAndLoadValues])[source]
Bases:
BaseModel
Pydantic model representing a collection of generation and load data.
- pv_curtailment: float | None
- values: List[GenerationAndLoadValues]
- class pymfm.control.utils.data_input.GenerationAndLoadValues(*, timestamp: datetime, P_gen_kW: float, P_load_kW: float)[source]
Bases:
BaseModel
Pydantic model representing generation and load forecast data at a specific timestamp.
- P_gen_kW: float
- P_load_kW: float
- timestamp: datetime
- class pymfm.control.utils.data_input.InputData(*, id: str, application: str, control_logic: ControlLogic, operation_mode: OperationMode, uc_start: datetime, uc_end: datetime, generation_and_load: GenerationAndLoad | None = None, day_end: datetime | None = None, bulk: Bulk | None = None, P_net_after_kW_limitation: List[P_net_after_kWLimitation] | None = None, measurements_request: MeasurementsRequest | None = None, battery_specs: BatterySpecs | List[BatterySpecs])[source]
Bases:
BaseModel
Pydantic model representing input data for each use case including control logic, operation mode, use case start and end time, load and generation forecast, day end time, bulk window, power boundaries, measurement and requested powers, and battery specifications.
- P_net_after_kW_limitation: List[P_net_after_kWLimitation] | None
- application: str
- battery_specs: BatterySpecs | List[BatterySpecs]
- control_logic: ControlLogic
- day_end: datetime | None
- generation_and_load: GenerationAndLoad | None
- classmethod generation_and_load_end_after_timewindow(meas: dict, values: dict) dict [source]
Validator to ensure generation_and_load ends after or at uc_end.
- Parameters:
meas – The value of generation_and_load.
values – The values dictionary.
- Returns:
The validated value
- classmethod generation_and_load_start_before_timewindow(meas, values)[source]
Validator to ensure generation_and_load starts before or at uc_start.
- Parameters:
meas – The value of generation_and_load.
values – The values dictionary.
- Returns:
The validated value.
- id: str
- measurements_request: MeasurementsRequest | None
- operation_mode: OperationMode
- classmethod set_day_end(v, values)[source]
Validator to set day_end if not provided, based on sunset time in Berlin.
- Parameters:
v – The value of day_end.
values – The values dictionary.
- Returns:
The validated value.
- uc_end: datetime
- uc_start: datetime
- class pymfm.control.utils.data_input.MeasurementsRequest(*, timestamp: datetime, P_req_kW: float | None, delta_T_h: float, P_net_meas_kW: float)[source]
Bases:
BaseModel
Pydantic model representing near (real) time measurement and request.
- P_net_meas_kW: float
- P_req_kW: float | None
- delta_T_h: float
- timestamp: datetime
- class pymfm.control.utils.data_input.OperationMode(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
StrEnum
An enumeration class representing operation mode options.
- NEAR_REAL_TIME = 'near_real_time'
- SCHEDULING = 'scheduling'
- class pymfm.control.utils.data_input.P_net_after_kWLimitation(*, timestamp: datetime, upper_bound: float | None = None, lower_bound: float | None = None)[source]
Bases:
BaseModel
Pydantic model representing P_net_after limitations.
- lower_bound: float | None
- timestamp: datetime
- upper_bound: float | None
- pymfm.control.utils.data_input.P_net_after_kW_lim_to_df(P_net_after_kW_limits: List[P_net_after_kWLimitation], gen_load_data: List[GenerationAndLoad]) DataFrame [source]
Convert P_net_after_kWLimitation data (upper and lower bouns of microgrid power) to a DataFrame.
- Parameters:
P_net_after_kW_limits (List[P_net_after_kWLimitation]) – List of P_net_after_kWLimitation objects.
gen_load_data (List[GenerationAndLoad]) – List of GenerationAndLoad objects.
- Returns:
containing P_net_after_kWLimitation data
- Return type:
pd.DataFrame
- class pymfm.control.utils.data_input.StrEnum(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
str
,Enum
An enumeration class for representing string-based enums.
- pymfm.control.utils.data_input.battery_to_df(battery_specs: BatterySpecs | List[BatterySpecs]) DataFrame [source]
Convert battery specifications to a DataFrame.
- Parameters:
battery_specs – Battery specifications.
- Returns:
DataFrame containing battery specifications.
- pymfm.control.utils.data_input.generation_and_load_to_df(meas: GenerationAndLoad, start: datetime = None, end: datetime = None) DataFrame [source]
Convert generation and load data to a DataFrame within a specified time range.
- Parameters:
meas (GenerationAndLoad) – Generation and load data.
start (datetime, optional) – Start timestamp for filtering data, by default None
end (datetime, optional) – End timestamp for filtering data, by default None
- Returns:
containing filtered generation and load data.
- Return type:
pd.DataFrame
- pymfm.control.utils.data_input.input_prep(battery_specs: BatterySpecs | List[BatterySpecs])[source]
Prepare battery specifications by transforming battery percentages to absolute values and saving battery capacity also in kWs.
- Parameters:
battery_specs – Battery specifications.
- Returns:
Updated battery specifications.
- pymfm.control.utils.data_input.measurements_request_to_dict(measurements_request: MeasurementsRequest)[source]
Convert measurements request to a dictionary.
- Parameters:
measurements_request – Measurements and request.
- Returns:
Dictionary containing measurements and request data.
- pymfm.control.utils.data_input.minutes_horizon(starttime: datetime, endtime: datetime) float [source]
Calculate the time horizon in minutes between two timestamps.
- Parameters:
starttime (datetime) – The start timestamp
endtime (datetime) – The end timestamp.
- Returns:
The time horizon in minutes.
- Return type:
float
pymfm.control.utils.data_output module
- pymfm.control.utils.data_output.prepare_json(mode_logic: dict, output_df: DataFrame, output_directory: str)[source]
Prepare and save output control data as JSON files based on control logic and operation mode.
- Parameters:
mode_logic (dict) – containing control logic and operation mode information.
output_df (pd.DataFrame) – containing data to be saved as JSON.
output_directory (str) – Directory where the JSON files will be saved.
- pymfm.control.utils.data_output.visualize_and_save_plots(mode_logic: dict, dataframe: DataFrame, output_directory: str)[source]
Visualize control output data from a DataFrame and save plots as SVG files based on control logic and operation mode.
- Parameters:
mode_logic (dict) – containing control logic and operation mode information.
dataframe (pd.DataFrame) – containing data to be visualized.
output_directory (str) – Directory where the SVG plots will be saved.