diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index a8aed69958..833a43592f 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -184,6 +184,8 @@ def _process_charge_stop(self) -> None: self.data.set.ocpp_transaction_id, self.data.set.rfid) self.data.set.ocpp_transaction_id = None + # muss vor dem Zurücksetzen der control parameter aufgerufen werden + self.data.set.charging_ev_data.reset_phase_switch(self.data.control_parameter) self.reset_control_parameter_at_charge_stop() data.data.counter_all_data.get_evu_counter().reset_switch_on_off(self) if self.data.get.plug_state is False and self.data.set.plug_state_prev is True: @@ -665,7 +667,7 @@ def update(self, ev_list: Dict[str, Ev]) -> None: if self.chargemode_changed or self.submode_changed: data.data.counter_all_data.get_evu_counter().reset_switch_on_off(self) - charging_ev.reset_phase_switch(self.data.control_parameter) + charging_ev.reset_phase_switch_delay(self.data.control_parameter) if self.chargemode_changed: self.data.control_parameter.failed_phase_switches = 0 message = message_ev if message_ev else message diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index fa5071806b..eb09470f6b 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -429,21 +429,28 @@ def _remaining_phase_switch_time(self, control_parameter: ControlParameter, control_parameter.timestamp_phase_switch_buffer_start = None return True, None - def reset_phase_switch(self, control_parameter: ControlParameter): + def reset_phase_switch_delay(self, control_parameter: ControlParameter): """ Zurücksetzen der Zeitstempel und reservierten Leistung. Die Phasenumschaltung kann nicht abgebrochen werden! """ - if control_parameter.state == ChargepointState.PHASE_SWITCH_DELAY: + if control_parameter.state == ChargepointState.PHASE_SWITCH_DELAY and control_parameter.phases == 1: # Wenn der Timer läuft, ist den Control-Parametern die alte Phasenzahl hinterlegt. - if control_parameter.phases == 1: - reserved = control_parameter.required_current * \ - 3 * 230 - self.ev_template.data.max_current_single_phase * 230 - data.data.counter_all_data.get_evu_counter().data.set.reserved_surplus -= reserved - log.debug( - "Zurücksetzen der reservierten Leistung für die Phasenumschaltung. reservierte Leistung: " + - str(data.data.counter_all_data.get_evu_counter().data.set.reserved_surplus)) # bei der Umschaltung 3p1p wird keine Leistung reserviert + evu_counter = data.data.counter_all_data.get_evu_counter() + reserved = control_parameter.required_current * \ + 3 * 230 - self.ev_template.data.max_current_single_phase * 230 + evu_counter.data.set.reserved_surplus -= reserved + log.debug(f"Zurücksetzen von {reserved}W reservierter Leistung für die Phasenumschaltung. " + f"reservierte Leistung: {evu_counter.data.set.reserved_surplus} W") + + def reset_phase_switch(self, control_parameter: ControlParameter): + if control_parameter.state == ChargepointState.PERFORMING_PHASE_SWITCH: + evu_counter = data.data.counter_all_data.get_evu_counter() + if control_parameter.phases == 1: + evu_counter.data.set.reserved_surplus -= self.ev_template.data.max_current_single_phase * 230 + else: + evu_counter.data.set.reserved_surplus -= self.ev_template.data.max_current_single_phase * 3 * 230 def get_ev_to_rfid(rfid: Optional[str] = None, vehicle_id: Optional[str] = None) -> Optional[int]: