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 Config[source]

Bases: object

allow_population_by_field_name = True
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]
bulk: Bulk | None
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:
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_input.open_json(filename)[source]

Open and load JSON data from a file.

Parameters:

filename – The name of the JSON file to open.

Returns:

Loaded JSON data as a Python dictionary or list.

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.

pymfm.control.utils.mode_logic_handler module

pymfm.control.utils.mode_logic_handler.mode_logic_handler(data: InputData)[source]

Handle different control logic modes and operation modes.

Parameters:

data – InputData object containing input data.

Returns:

Tuple containing mode logic information, output DataFrame, and solver status.

Module contents