diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index f06e68960a..38cfe05fdc 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -36,7 +36,6 @@ from control import phase_switch from control.chargepoint.chargepoint_state import CHARGING_STATES, ChargepointState from control.text import BidiState -from helpermodules.broker import BrokerClient from helpermodules.phase_mapping import convert_single_evu_phase_to_cp_phase from helpermodules.pub import Pub from helpermodules import timecheck @@ -843,20 +842,11 @@ def _get_charging_ev(self, vehicle: int, ev_list: Dict[str, Ev]) -> Ev: Pub().pub("openWB/set/chargepoint/"+str(self.num)+"/set/charging_ev_prev", vehicle) return charging_ev - def _clear_template_topics(self, topic: str) -> None: - def on_connect(client, userdata, flags, rc): - client.subscribe(topic, 2) - - def __get_payload(client, userdata, msg): - received_topics.append(msg.topic) - received_topics = [] - BrokerClient("processBrokerBranch", on_connect, __get_payload).start_finite_loop() - for topic in received_topics: - Pub().pub(topic, "") - def update_charge_template(self, charge_template: ChargeTemplate) -> None: - Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template", - dataclasses.asdict(charge_template.data)) + if data.data.general_data.data.temporary_charge_templates_active: + # Prüfen, ob ein temporäres Ladeprofil aktiv ist und dieses übernehmen + Pub().pub(f"openWB/set/chargepoint/{self.num}/set/charge_template", + dataclasses.asdict(charge_template.data)) def _pub_connected_vehicle(self, vehicle: Ev): """ published die Daten, die zur Anzeige auf der Hauptseite benötigt werden. diff --git a/packages/control/general.py b/packages/control/general.py index cb862a0d05..95253b3b2f 100644 --- a/packages/control/general.py +++ b/packages/control/general.py @@ -100,6 +100,7 @@ class GeneralData: http_api: bool = field( default=False, metadata={"topic": "http_api"}) mqtt_bridge: bool = False + temporary_charge_templates_active: bool = False prices: Prices = field(default_factory=prices_factory) range_unit: str = "km" diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index a18eaebb9d..1fdbecf030 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -10,6 +10,7 @@ import paho.mqtt.client as mqtt import logging +from control import data from helpermodules import hardware_configuration, subdata from helpermodules.broker import BrokerClient from helpermodules.pub import Pub, pub_single @@ -407,6 +408,26 @@ def process_vehicle_charge_template_topic(self, msg: mqtt.MQTTMessage): try: if "charge_template" in msg.topic: self._validate_value(msg, "json") + if data.data.general_data.data.temporary_charge_templates_active is False: + if "openWB/set/chargepoint/" in msg.topic and "/set/charge_template" in msg.topic: + payload = decode_payload(msg.payload) + Pub().pub(f"openWB/vehicle/template/charge_template/{payload['id']}", payload) + else: + get_index(msg.topic) + + for vehicle in data.data.ev_data.values(): + if vehicle.data.charge_template == int(get_index(msg.topic)): + for cp in data.data.cp_data.values(): + if ((cp.data.set.charging_ev != -1 and + cp.data.set.charging_ev == vehicle.num) or + cp.data.config.ev == vehicle.num): + if decode_payload(msg.payload) == "": + Pub().pub( + f"openWB/chargepoint/{cp.num}/set/charge_template", "") + else: + Pub().pub( + f"openWB/chargepoint/{cp.num}/set/charge_template", + decode_payload(msg.payload)) else: self.__unknown_topic(msg) except Exception: @@ -551,7 +572,7 @@ def process_chargepoint_get_topics(self, msg): elif ("/get/evse_current" in msg.topic or "/get/max_evse_current" in msg.topic): # AC-EVSE: 0, 6-32, 600-3200, DC-EVSE 0-500 - self._validate_value(msg, float, [(0, 3200)]) + self._validate_value(msg, float, [(-3200, 3200)]) elif ("/get/version" in msg.topic or "/get/current_branch" in msg.topic or "/get/current_commit" in msg.topic): @@ -610,7 +631,8 @@ def process_pv_topic(self, msg: mqtt.MQTTMessage): "/get/yearly_exported" in msg.topic or "/get/energy" in msg.topic): self._validate_value(msg, float, [(0, float("inf"))]) - elif "/get/exported" in msg.topic: + elif ("/get/exported" in msg.topic or + "/get/imported" in msg.topic): self._validate_value(msg, float, [(0, float("inf"))]) elif "/get/power" in msg.topic: self._validate_value(msg, float) @@ -754,6 +776,8 @@ def process_general_topic(self, msg: mqtt.MQTTMessage): self._validate_value(msg, float, [(0, 99.99)]) elif "openWB/set/general/range_unit" in msg.topic: self._validate_value(msg, str) + elif "openWB/set/general/temporary_charge_templates_active" in msg.topic: + self._validate_value(msg, bool) elif "openWB/set/general/web_theme" in msg.topic: self._validate_value(msg, "json") elif ("openWB/set/general/charge_log_data_config" in msg.topic): diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index 64833a3b95..8a8a34ea58 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -338,18 +338,7 @@ def process_vehicle_charge_template_topic(self, var: Dict[str, ChargeTemplate], if "ct"+index not in var: var["ct"+index] = ChargeTemplate() var["ct"+index].data = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload)) - # 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 != -1 and - cp.chargepoint.data.set.charging_ev == vehicle.num) or - cp.chargepoint.data.config.ev == vehicle.num) and - cp.chargepoint.data.get.plug_state is False): - 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 0d2cb26096..d0e70655b1 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -57,7 +57,7 @@ class UpdateConfig: - DATASTORE_VERSION = 96 + DATASTORE_VERSION = 97 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -215,6 +215,7 @@ class UpdateConfig: "^openWB/general/grid_protection_timestamp$", "^openWB/general/grid_protection_random_stop$", "^openWB/general/range_unit$", + "^openWB/general/temporary_charge_templates_active$", "^openWB/general/notifications/selected$", "^openWB/general/notifications/configuration$", "^openWB/general/notifications/start_charging$", @@ -565,6 +566,7 @@ class UpdateConfig: ("openWB/general/prices/grid", Prices().grid), ("openWB/general/prices/pv", Prices().pv), ("openWB/general/range_unit", "km"), + ("openWB/general/temporary_charge_templates_active", False), ("openWB/general/web_theme", dataclass_utils.asdict(StandardLegacyWebTheme())), ("openWB/graph/config/duration", 120), ("openWB/internal_chargepoint/0/data/parent_cp", None), @@ -2350,9 +2352,6 @@ def upgrade(topic: str, payload) -> None: self.__update_topic("openWB/system/datastore_version", 88) def upgrade_datastore_88(self) -> None: - pub_system_message({}, "Änderungen, die du auf der Hauptseite vornimmst, gelten nur vorübergehend, bis das " - "Fahrzeug abgesteckt wird. \nDie dauerhaften Einstellungen aus dem Einstellungsmenü werden " - "danach automatisch wieder aktiviert.", MessageType.INFO) pub_system_message({}, "Es gibt ein neues Theme: das Koala-Theme! Smarthpone-optimiert und mit " "Energiefluss-Diagramm & Karten-Ansicht der Ladepunkte", MessageType.INFO) self.__update_topic("openWB/system/datastore_version", 89) @@ -2560,3 +2559,16 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {topic: payload} 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)