battery_optimizer.de.ev.request#

Classes

EVBatteryAvailability(*, start, availability)

EVBatteryParameters(*, min_soe, max_soe[, ...])

EVDEAsset(*[, asset_id, price_buckets, ...])

EVDERequest(*, request_id[, country, ...])

MinChargingPowerKW(*, start, ...)

class battery_optimizer.de.ev.request.EVBatteryAvailability(*, start, availability, discharge_availability=0)#

Bases: BatteryAvailability

Parameters:
discharge_availability: Annotated[bool, FieldInfo(annotation=NoneType, required=True, description='Set to 1 if discharging is available, 0 if not available during this period.')]#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class battery_optimizer.de.ev.request.EVBatteryParameters(*, min_soe, max_soe, min_soe_kwh=None, max_soe_kwh=None, charging_efficiency, discharging_efficiency, max_charging_power_kw, max_discharging_power_kw, capacity_kwh, capacity_nominal_kwh=None, max_daily_cycle, daily_cycle_limit_applies=True, daily_cycle_limit_penalty=False, grid_connection_export_kw, grid_connection_import_kw, ramp_rates=RampRates(type=<RampingLogicName.performance_related: 'performance_related'>, charging_perf_related_kw_per_second=None, discharging_perf_related_kw_per_second=None, charging_tech_limited_kw_per_second=None, discharging_tech_limited_kw_per_second=None), min_charging_power_kw=0.0)#

Bases: BatteryParameters

Parameters:
ensure_capacity_nominal_is_passed_when_capacity_passed_as_schedule()#
min_charging_power_kw: Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])] | list[MinChargingPowerKW] | Series#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

classmethod validate_min_charging_power_kw(value)#

Ensure min_charging_power_kw is either a float, a list of MinChargingPowerKW, or a pd.Series. Convert lists to pd.Series for internal consistency.

class battery_optimizer.de.ev.request.EVDEAsset(*, asset_id='Unique ID of the asset', battery_parameters, battery_initial_conditions, battery_marketed, battery_availabilities, price_forecast, price_buckets=None, strategy_optimization, asset_states=[], skipped_validations={'ensure_battery_marketed_respects_battery_parameters'}, battery_commercials=Empty DataFrame Columns: [] Index: [], flex_markets_energy_throughput=Empty DataFrame Columns: [] Index: [])#

Bases: DEAsset

Parameters:
battery_availabilities: list[EVBatteryAvailability] | DataFrame#
battery_parameters: EVBatteryParameters#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class battery_optimizer.de.ev.request.EVDERequest(*, request_id, country=Country.DE, user_id, request_creation_time, elastic_filter=False, already_auctioned_as_constants=True, asset, verbose=False, epsilon=1e-06, commercial_objective=CommercialObjective(commercial_columns=['commodity_revenue', 'commodity_cost']), multiplier_buy_sell_exceed_limit=10.0, upper_bound_risk_increment=None, imbalance=Imbalance(imbalance_cost_per_MWh=1000000.0, min_imbalance_cost_per_MWh=100000.0, imbalance_cost_shaping=True), solve_optimization_problem_max_seconds=90.0, intraday_strategy=IntradayStrategy(name=<IntradayStrategyName.vwap: 'vwap'>, delivery_length=<IntradayDeliveryLength.quarter_hour: 'QuarterHour'>, tradeable_time_window_minutes=NaT), intraday_result_aggregation=IntradayResultAggregation(name=<IntradayResultAggregationName.minmax: 'minmax'>, no_buckets=1), objective=Objective(name=<ObjectiveName.pnl: 'pnl'>), solver_settings=SolverSettings(gapRel=0.01), do_input_for_intraday_bucketing_correct_bucket=True, elastic_soe_constraints=False, global_max_charging_power_kw=None, global_max_discharging_power_kw=None, feature_flags=FeatureFlags(return_pickled_optimizer=False), use_case=UseCase.BESS)#

Bases: DERequest

Parameters:
asset: EVDEAsset#
model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': True, 'extra': 'ignore', 'frozen': False, 'json_encoders': {<class 'datetime.datetime'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timedeltas.Timedelta'>: <function BaseModel.<lambda>>, <class 'pandas._libs.tslibs.timestamps.Timestamp'>: <function BaseModel.<lambda>>, <class 'pandas.core.frame.DataFrame'>: <function BaseModel.<lambda>>, <class 'pandas.core.series.Series'>: <function BaseModel.<lambda>>}, 'validate_default': True}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class battery_optimizer.de.ev.request.MinChargingPowerKW(*, start, min_charging_power_kw)#

Bases: BaseModel

Parameters:
min_charging_power_kw: Annotated[float, FieldInfo(annotation=NoneType, required=True, metadata=[Ge(ge=0.0)])]#
model_config: ClassVar[ConfigDict] = {}#

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

start: datetime#