@@ -173,21 +173,21 @@ def __init__(
173173 self .max_power_asymmetry : Optional [float ] = max_power_asymmetry
174174
175175 # Optional in 15118-2 CPD
176- self .current_regulation_tolerance : Optional [
177- float
178- ] = current_regulation_tolerance
176+ self .current_regulation_tolerance : Optional [float ] = (
177+ current_regulation_tolerance
178+ )
179179 self .peak_current_ripple : Optional [float ] = peak_current_ripple
180180 self .energy_to_be_delivered : Optional [float ] = energy_to_be_delivered
181181 # Metering
182- self .present_active_power : Optional [
183- float
184- ] = present_active_power # Optional in AC Scheduled CL
185- self .present_active_power_l2 : Optional [
186- float
187- ] = present_active_power_l2 # Optional in AC Scheduled CL
188- self .present_active_power_l3 : Optional [
189- float
190- ] = present_active_power_l3 # Optional in AC Scheduled CL
182+ self .present_active_power : Optional [float ] = (
183+ present_active_power # Optional in AC Scheduled CL
184+ )
185+ self .present_active_power_l2 : Optional [float ] = (
186+ present_active_power_l2 # Optional in AC Scheduled CL
187+ )
188+ self .present_active_power_l3 : Optional [float ] = (
189+ present_active_power_l3 # Optional in AC Scheduled CL
190+ )
191191
192192 # Required for -2 DC CurrentDemand, -20 DC CL
193193 self .present_current : Union [float , int ] = present_current
@@ -218,34 +218,56 @@ def update_ac_charge_parameters_v2(
218218 ) -> None :
219219 """Update the EVSE data context with the AC charge parameters."""
220220 self .current_type = CurrentType .AC
221- rated_limits = self .rated_limits .ac_limits = EVSEACCPDLimits ()
222- self .session_limits .ac_limits = EVSEACCLLimits ()
221+ if self .rated_limits .ac_limits is None :
222+ self .rated_limits .ac_limits = EVSEACCPDLimits ()
223+ rated_limits = self .rated_limits .ac_limits
224+ if self .session_limits .ac_limits is None :
225+ self .session_limits .ac_limits = EVSEACCLLimits ()
226+ session_limits = self .session_limits .ac_limits
223227 self .nominal_voltage = (
224228 ac_charge_parameter .evse_nominal_voltage .get_decimal_value ()
225229 ) # noqa: E501
226230 rated_limits .max_current = (
227231 ac_charge_parameter .evse_max_current .get_decimal_value ()
228232 )
233+
229234 rated_limits .max_charge_power = rated_limits .max_current * self .nominal_voltage
235+ rated_limits .max_charge_power_l2 = rated_limits .max_charge_power
236+ rated_limits .max_charge_power_l3 = rated_limits .max_charge_power
230237 rated_limits .max_discharge_power = 0
231238 rated_limits .min_charge_power = 0
232239 rated_limits .min_discharge_power = 0
233240 # Create the session limits based on the rated limits
234- self .session_limits .ac_limits .update (rated_limits .as_dict ())
241+ # without exceeding the rated limits
242+ for value in vars (rated_limits ):
243+ if hasattr (session_limits , value ):
244+ rated_value = getattr (rated_limits , value )
245+ session_value = getattr (session_limits , value )
246+ try :
247+ if not session_value or (session_value > rated_value ):
248+ setattr (session_limits , value , rated_value )
249+ except TypeError :
250+ pass
235251
236252 def update_dc_charge_parameters (
237253 self , dc_charge_parameter : DCEVSEChargeParameter
238254 ) -> None :
239255 """Update the EVSE data context with the DC charge parameters."""
240256 self .current_type = CurrentType .DC
241- rated_limits = self .rated_limits .dc_limits = EVSEDCCPDLimits ()
242- self .session_limits .dc_limits = EVSEDCCLLimits ()
257+ if not self .rated_limits .dc_limits :
258+ self .rated_limits .dc_limits = EVSEDCCPDLimits ()
259+ rated_limits = self .rated_limits .dc_limits
260+ if not self .session_limits .dc_limits :
261+ self .session_limits .dc_limits = EVSEDCCLLimits ()
243262 rated_limits .max_charge_power = (
244263 dc_charge_parameter .evse_maximum_power_limit .get_decimal_value ()
245264 )
246265 rated_limits .max_charge_current = (
247266 dc_charge_parameter .evse_maximum_current_limit .get_decimal_value ()
248267 )
268+ rated_limits .min_charge_current = (
269+ dc_charge_parameter .evse_minimum_current_limit .get_decimal_value ()
270+ )
249271 rated_limits .max_voltage = (
250272 dc_charge_parameter .evse_maximum_voltage_limit .get_decimal_value ()
251273 )
@@ -264,8 +286,17 @@ def update_dc_charge_parameters(
264286 self .energy_to_be_delivered = (
265287 dc_charge_parameter .evse_energy_to_be_delivered .get_decimal_value ()
266288 )
267- # Create the session limits based on the rated limits
268- self .session_limits .dc_limits .update (rated_limits .as_dict ())
289+ # Create the session limits based on the rated limits
290+ # without exceeding the rated limits
291+ for value in vars (rated_limits ):
292+ if hasattr (self .session_limits .dc_limits , value ):
293+ rated_value = getattr (rated_limits , value )
294+ session_value = getattr (self .session_limits .dc_limits , value )
295+ try :
296+ if not session_value or (session_value > rated_value ):
297+ setattr (self .session_limits .dc_limits , value , rated_value )
298+ except TypeError :
299+ pass
269300
270301 def update_ac_charge_parameters_v20 (
271302 self ,
0 commit comments