diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index 8a8a34ea58..a9999f1728 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -315,7 +315,18 @@ def process_vehicle_topic(self, client: mqtt.Client, var: Dict[str, ev.Ev], msg: Pub().pub("openWB/system/subdata_initialized", True) self.event_soc.set() else: + # temporäres ChargeTemplate aktualisieren, wenn dem Fahrzeug ein anderes Ladeprofil zugeordnet + # wird self.set_json_payload_class(var["ev"+index].data, msg) + if re.search("/vehicle/[0-9]+/charge_template$", msg.topic) is not None: + charge_template_id = int(decode_payload(msg.payload)) + if var["ev"+index].data.charge_template != charge_template_id: + ev_id = get_index(msg.topic) + for cp in self.cp_data.values(): + if (cp.chargepoint.data.set.charging_ev == ev_id or + cp.chargepoint.data.config.ev == ev_id): + cp.chargepoint.update_charge_template( + self.ev_charge_template_data[f"ct{charge_template_id}"]) except Exception: log.exception("Fehler im subdata-Modul") @@ -337,8 +348,25 @@ def process_vehicle_charge_template_topic(self, var: Dict[str, ChargeTemplate], var.pop("ct"+index) if "ct"+index not in var: var["ct"+index] = ChargeTemplate() - var["ct"+index].data = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload)) - + new_charge_template = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload)) + template_changed = new_charge_template != var["ct"+index].data + var["ct"+index].data = new_charge_template + if template_changed and self.general_data.data.temporary_charge_templates_active: + # Temporäres ChargeTemplate aktualisieren, wenn persistentes geändert wird + for vehicle in self.ev_data.values(): + if vehicle.data.charge_template == int(index): + for cp in self.cp_data.values(): + if (cp.chargepoint.data.set.charging_ev == vehicle.num or + cp.chargepoint.data.config.ev == vehicle.num): + # UI sendet immer alle Topics, auch nicht geänderte. Damit die temporären Topics + # nicht mehrfach gepbulished werden, muss das publishen der temporären Topics 1:1 + # erfolgen. + if re.search("/vehicle/template/charge_template/[0-9]+$", msg.topic) is not None: + if decode_payload(msg.payload) == "": + Pub().pub( + f"openWB/chargepoint/{cp.chargepoint.num}/set/charge_template", "") + else: + cp.chargepoint.update_charge_template(var["ct"+index]) except Exception: log.exception("Fehler im subdata-Modul") diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 017af2dca8..74bd16464b 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -57,7 +57,7 @@ class UpdateConfig: - DATASTORE_VERSION = 98 + DATASTORE_VERSION = 99 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -2560,19 +2560,6 @@ def upgrade(topic: str, payload) -> Optional[dict]: self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 96) - def upgrade_datastore_96(self) -> None: - version = decode_payload(self.all_received_topics.get("openWB/system/version", "2.1.9")).split("-")[0] - major, minor, feature = (int(x) for x in version.split(".")) - if (2, 1, 7) <= (major, minor, feature) <= (2, 1, 8): - self.__update_topic("openWB/general/temporary_charge_templates_active", True) - pub_system_message( - {}, - "Die temporären Ladeeinstellungen können ab jetzt benutzerdefiniert unter Einstellungen -> Allgemein" - " -> Darstellung & Bedienung angewendet werden.", - MessageType.INFO, - ) - self.__update_topic("openWB/system/datastore_version", 97) - def upgrade_datastore_97(self) -> None: def upgrade(topic: str, payload) -> None: if re.search("openWB/system/device/[0-9]+/config$", topic) is not None: @@ -2583,3 +2570,21 @@ def upgrade(topic: str, payload) -> None: Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 98) + + def upgrade_datastore_98(self) -> None: + version_str = decode_payload( + self.all_received_topics.get("openWB/system/version", "2.1.9")) + if '-' in version_str: + version = version_str.split('-', 1)[0] + else: + version = version_str + major, minor, feature = (int(x) for x in version.split(".")) + if (major, minor, feature) == (2, 1, 8): + self.__update_topic("openWB/general/temporary_charge_templates_active", True) + pub_system_message( + {}, + "Die temporären Ladeeinstellungen können ab jetzt benutzerdefiniert unter Einstellungen -> Allgemein" + " -> Darstellung & Bedienung angewendet werden.", + MessageType.INFO, + ) + self.__update_topic("openWB/system/datastore_version", 99)