diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 4f3388c863..8c22d84e44 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -282,8 +282,10 @@ def _set_values_at_start(self): self.data.set.plug_time) def remember_previous_values(self): + self.data.set.charge_state_prev = self.data.get.charge_state self.data.set.plug_state_prev = self.data.get.plug_state self.data.set.current_prev = self.data.set.current + Pub().pub("openWB/set/chargepoint/"+str(self.num)+"/set/charge_state_prev", self.data.set.charge_state_prev) Pub().pub("openWB/set/chargepoint/"+str(self.num)+"/set/plug_state_prev", self.data.set.plug_state_prev) Pub().pub("openWB/set/chargepoint/"+str(self.num)+"/set/current_prev", self.data.set.current_prev) @@ -703,6 +705,14 @@ def update(self, ev_list: Dict[str, Ev]) -> None: self._pub_connected_vehicle(ev_list[f"ev{vehicle}"]) else: self._pub_configured_ev(ev_list) + try: + # check für charging stop or charging interruption, if so force a soc query for the ev + if self.data.set.charge_state_prev and self.data.get.charge_state is False: + Pub().pub(f"openWB/set/vehicle/{self.data.config.ev}/get/force_soc_update", True) + log.info(f"SoC-Abfrage nach Ladeunterbrechung, cp{self.num}, ev{self.data.config.ev}") + except Exception: + log.exception(f"Fehler bei Ladestop,cp{self.num}") + # OCPP Start Transaction nach Anstecken if ((self.data.get.plug_state and self.data.set.plug_state_prev is False) or (self.data.set.ocpp_transaction_id is None and self.data.get.charge_state)): diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index cef98805cc..da051d88fb 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -146,6 +146,7 @@ class Set: target_current: float = 0 # Soll-Strom aus fest vorgegebener Stromstärke charging_ev_data: Ev = field(default_factory=ev_factory) ocpp_transaction_id: Optional[int] = None + charge_state_prev: bool = False @dataclass diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 6b31c19f9e..ff0217348a 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -546,6 +546,7 @@ def process_chargepoint_topic(self, msg: mqtt.MQTTMessage): "/set/perform_control_pilot_interruption" in msg.topic or "/set/perform_phase_switch" in msg.topic or "/set/ocpp_transaction_active" in msg.topic or + "/set/charge_state_prev" in msg.topic or "/set/plug_state_prev" in msg.topic): self._validate_value(msg, bool) elif "/set/autolock_state" in msg.topic: diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 992ad9c80b..c6bfea2df3 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -134,6 +134,7 @@ class UpdateConfig: "^openWB/chargepoint/[0-9]+/set/current$", "^openWB/chargepoint/[0-9]+/set/energy_to_charge$", "^openWB/chargepoint/[0-9]+/set/manual_lock$", + "^openWB/chargepoint/[0-9]+/set/charge_state_prev$", "^openWB/chargepoint/[0-9]+/set/plug_state_prev$", "^openWB/chargepoint/[0-9]+/set/plug_time$", "^openWB/chargepoint/[0-9]+/set/rfid$",