Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions gsy_framework/validators/ev_charger_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from gsy_framework.validators.base_validator import BaseValidator
from gsy_framework.enums import GridIntegrationType
from gsy_framework.validators.utils import validate_range_limit
from gsy_framework.read_user_profile import UserProfileReader, InputProfileTypes

EVChargerSettings = ConstSettings.EVChargerSettings

Expand All @@ -14,6 +15,7 @@ class EVChargerValidator(BaseValidator):
def validate(cls, **kwargs):
cls._validate_grid_integration(**kwargs)
cls._validate_max_power(**kwargs)
cls._validate_preferred_charging_power(**kwargs)

@staticmethod
def _validate_grid_integration(**kwargs):
Expand Down Expand Up @@ -49,3 +51,30 @@ def _validate_max_power(cls, **kwargs):
max_limit,
{"misconfiguration": [f"{name} should be between {min_limit} & {max_limit}."]},
)

@classmethod
def _validate_preferred_charging_power(cls, **kwargs):
"""Validate preferred charging power parameter."""
preferred_charging_power = kwargs.get("preferred_charging_power")
maximum_power_rating_kW = kwargs.get("maximum_power_rating_kW")

if preferred_charging_power is None:
return

# Convert to profile if needed
preferred_power_profile = UserProfileReader().read_arbitrary_profile(
InputProfileTypes.IDENTITY, preferred_charging_power
)

# Validate that all absolute values are within maximum power rating
for time_slot, power_value in preferred_power_profile.items():
if maximum_power_rating_kW and abs(power_value) > maximum_power_rating_kW:
raise GSyDeviceException(
{
"misconfiguration": [
f"Absolute value of preferred_charging_power ({abs(power_value)} kW "
f"at {time_slot}) cannot exceed maximum_power_rating_kW "
f"({maximum_power_rating_kW} kW)."
]
}
)