diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 70f6928fe3..e3fc3d9dd7 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -390,13 +390,14 @@ def _is_phase_switch_required(self) -> bool: self.data.control_parameter.failed_phase_switches += 1 else: # Umschaltung vor Ladestart zulassen - if self.data.set.log.imported_since_plugged != 0: + if (self.data.set.log.imported_since_plugged != 0 and + self.data.control_parameter.failed_phase_switches > 0): phase_switch_required = False self.set_state_and_log( "Keine Phasenumschaltung, da wiederholtes Anstoßen der Umschaltung in den übergreifenden " "Ladeeinstellungen deaktiviert wurde. Die aktuelle " "Phasenzahl wird bis zum Abstecken beibehalten.") - self.data.control_parameter.failed_phase_switches += 1 + self.data.control_parameter.failed_phase_switches += 1 return phase_switch_required STOP_CHARGING = ", dafür wird die Ladung unterbrochen." @@ -825,8 +826,9 @@ def _get_charging_ev(self, vehicle: int, ev_list: Dict[str, Ev]) -> Ev: if self.data.set.charging_ev_prev != vehicle: Pub().pub(f"openWB/set/vehicle/{charging_ev.num}/get/force_soc_update", True) log.debug("SoC nach EV-Wechsel") - self.update_charge_template(charging_ev.charge_template) - if self.data.set.charge_template.data.id != charging_ev.charge_template.data.id: + # wenn vorher kein anderes Fahrzeug zugeordnet war, Ladeprofil nicht zurücksetzen + if ((self.data.set.charging_ev_prev != vehicle and self.data.set.charging_ev_prev != -1) or + (self.data.set.charge_template.data.id != charging_ev.charge_template.data.id)): self.update_charge_template(charging_ev.charge_template) self.data.set.charging_ev_data = charging_ev self.data.set.charging_ev = vehicle diff --git a/packages/control/phase_switch.py b/packages/control/phase_switch.py index 89d0edd407..ca4b3bc84b 100644 --- a/packages/control/phase_switch.py +++ b/packages/control/phase_switch.py @@ -38,8 +38,6 @@ def _perform_phase_switch(chargepoint_module: AbstractChargepoint, phases: int, time.sleep(5) # Phasenumschaltung entsprechend Modul chargepoint_module.switch_phases(phases, ev.ev_template.data.phase_switch_pause) - # Die Ladung wird in start_charging wieder gestartet, wenn phase_switch_timestamp wieder auf None gesetzt wird. - time.sleep(ev.ev_template.data.keep_charge_active_duration) except Exception: log.exception("Fehler im Phasenumschaltungs-Modul") diff --git a/packages/modules/common/store/_chargepoint_internal.py b/packages/modules/common/store/_chargepoint_internal.py index d16e821742..b4f3cc5560 100644 --- a/packages/modules/common/store/_chargepoint_internal.py +++ b/packages/modules/common/store/_chargepoint_internal.py @@ -24,7 +24,7 @@ def update(self): pub_to_broker(f"{topic_prefix}/phases_in_use", self.state.phases_in_use, 2) pub_to_broker(f"{topic_prefix}/charge_state", self.state.charge_state, 2) pub_to_broker(f"{topic_prefix}/plug_state", self.state.plug_state, 2) - pub_to_broker(f"{topic_prefix}/rfid", self.state.rfid) + pub_to_broker(f"{topic_prefix}/vehicle_id", self.state.vehicle_id) pub_to_broker(f"{topic_prefix}/serial_number", self.state.serial_number) pub_to_broker(f"{topic_prefix}/evse_current", self.state.evse_current, 2) pub_to_broker(f"{topic_prefix}/max_evse_current", self.state.max_evse_current, 2) @@ -32,11 +32,11 @@ def update(self): pub_to_broker(f"{topic_prefix}/current_branch", self.state.current_branch) pub_to_broker(f"{topic_prefix}/current_commit", self.state.current_commit) if self.state.soc is not None: - pub_to_broker(f"{topic_prefix}/get/soc", self.state.soc) + pub_to_broker(f"{topic_prefix}/soc", self.state.soc) if self.state.soc_timestamp is not None: pub_to_broker(f"{topic_prefix}/soc_timestamp", self.state.soc_timestamp) if self.state.rfid_timestamp is not None: - pub_to_broker(f"{topic_prefix}/vehicle_id", self.state.vehicle_id) + pub_to_broker(f"{topic_prefix}/rfid", self.state.rfid) pub_to_broker(f"{topic_prefix}/rfid_timestamp", self.state.rfid_timestamp) diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index 74eaf00d46..949d28ee72 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -1,9 +1,11 @@ import logging import time +from helpermodules.broker import BrokerClient from helpermodules.logger import ModifyLoglevelContext from helpermodules.utils.error_handling import CP_ERROR, ErrorTimerContext +from helpermodules.utils.topic_parser import decode_payload from modules.common.abstract_chargepoint import AbstractChargepoint from modules.common.component_context import SingleComponentUpdateContext from modules.common.component_state import ChargepointState @@ -42,7 +44,6 @@ def __init__(self, local_charge_point_num: int, hide_exception=True) self.client_error_context.error_timestamp = internal_cp.get.error_timestamp self.old_plug_state = False - self.old_phases_in_use = 0 self.old_chargepoint_state = ChargepointState(plug_state=False, charge_state=False, imported=None, @@ -65,6 +66,19 @@ def __init__(self, local_charge_point_num: int, self.current_branch = SubData.system_data["system"].data["current_branch"] self.current_commit = SubData.system_data["system"].data["current_commit"] + def on_connect(client, userdata, flags, rc): + client.subscribe(f"openWB/internal_chargepoint/{self.local_charge_point_num}/get/phases_in_use") + + def on_message(client, userdata, message): + self.old_phases_in_use = decode_payload(message.payload) + + self.old_phases_in_use = None + BrokerClient(f"subscribeInternalCp{self.local_charge_point_num}", on_connect, on_message).start_finite_loop() + + if self.old_phases_in_use == 0 or self.old_phases_in_use is None: + self.perform_phase_switch(1, 4) + self.old_phases_in_use = 1 + def set_current(self, current: float) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): formatted_current = round(current*100) if self._precise_current else round(current)