akkudoktoreos.devices.genetic.battery.Battery

class akkudoktoreos.devices.genetic.battery.Battery(parameters: BaseBatteryParameters, prediction_hours: int)

Bases: object

Represents a battery device with methods to simulate energy charging and discharging.

__init__(parameters: BaseBatteryParameters, prediction_hours: int)

Methods

__init__(parameters, prediction_hours)

charge_energy(wh, hour[, charge_factor])

Charge energy into the battery.

current_energy_content()

Returns the current usable energy in the battery.

current_soc_percentage()

Calculates the current state of charge in percentage.

discharge_energy(wh, hour)

Discharge energy from the battery.

reset()

Resets the battery state to its initial values.

set_charge_per_hour(charge_array)

Sets the charge values for each hour.

set_discharge_per_hour(discharge_array)

Sets the discharge values for each hour.

to_dict()

Converts the object to a dictionary representation.

__init__(parameters: BaseBatteryParameters, prediction_hours: int)
to_dict() dict[str, Any]

Converts the object to a dictionary representation.

reset() None

Resets the battery state to its initial values.

set_discharge_per_hour(discharge_array: ndarray) None

Sets the discharge values for each hour.

set_charge_per_hour(charge_array: ndarray) None

Sets the charge values for each hour.

current_soc_percentage() float

Calculates the current state of charge in percentage.

discharge_energy(wh: float, hour: int) tuple[float, float]

Discharge energy from the battery.

Discharge is limited by: * Requested delivered energy * Remaining energy above minimum SoC * Maximum discharge power * Discharge efficiency

Parameters:
  • wh (float) – Requested delivered energy in watt-hours.

  • hour (int) – Time index. If self.discharge_array[hour] == 0, no discharge occurs.

Returns:

delivered_wh (float): Actual delivered energy [Wh]. losses_wh (float): Conversion losses [Wh].

Return type:

tuple[float, float]

charge_energy(wh: float | None, hour: int, charge_factor: float = 0.0) tuple[float, float]

Charge energy into the battery.

Two exclusive modes:

Mode 1:
  • wh is not None and charge_factor == 0

→ The raw requested charge energy is wh (pre-efficiency). → If remaining capacity is insufficient, charging is automatically limited. → No exception is raised due to capacity limits.

Mode 2:
  • wh is None and charge_factor > 0

→ The raw requested energy is max_charge_power_w * charge_factor. → If the request exceeds remaining capacity, the algorithm tries to

find a lower charge_factor that is compatible. If such a charge factor exists, this hour’s charge_factor is replaced.

→ If no charge factor can accommodate charging, the request is ignored

((0.0, 0.0) is returned) and a penalty is applied elsewhere.

Charging is constrained by:
  • Available SoC headroom (max_soc_wh − soc_wh)

  • max_charge_power_w

  • charging_efficiency

Parameters:
  • wh (float | None) – Requested raw energy [Wh] before efficiency. Must be provided only for Mode 1 (charge_factor must be 0).

  • hour (int) – Time index. If charging is disabled at this hour (charge_array[hour] == 0), returns (0.0, 0.0).

  • charge_factor (float) – Fraction (0–1) of max charge power. Must be >0 only in Mode 2 (wh is None).

Returns:

stored_whfloat

Energy stored after efficiency [Wh].

losses_whfloat

Conversion losses [Wh].

Return type:

tuple[float, float]

Raises:

ValueError

  • If the mode is ambiguous (neither Mode 1 nor Mode 2). - If the final new SoC would exceed capacity_wh.

Notes

stored_wh = raw_input_wh * charging_efficiency losses_wh = raw_input_wh − stored_wh

current_energy_content() float

Returns the current usable energy in the battery.