From add35ccb6600e2afa8cba96dc2c3a81b7dc17d8c Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 22 Jan 2025 13:32:59 +0100 Subject: [PATCH 01/13] add simple update functionality --- packages/helpermodules/command.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index c2aa3f9f70..94c0bd895c 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -627,6 +627,12 @@ def chargepointShutdown(self, connection_id: str, payload: dict) -> None: hostname=SubData.cp_data[payload["data"]["chargepoint"] ].chargepoint.chargepoint_module.config.configuration.ip_address) + def chargepointUpdate(self, payload: dict) -> None: + pub.pub_single("openWB/set/command/primary/todo", + {"command": "systemUpdate", "data": {}}, + hostname=SubData.cp_data[payload["data"]["chargepoint"] + ].chargepoint.chargepoint_module.config.configuration.ip_address) + def systemReboot(self, connection_id: str, payload: dict) -> None: pub_user_message(payload, connection_id, "Neustart wird ausgeführt.", MessageType.INFO) parent_file = Path(__file__).resolve().parents[2] @@ -668,6 +674,15 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: run_command([ str(parent_file / "runs" / "update_self.sh"), SubData.system_data["system"].data["current_branch"]]) + try: + if not SubData.general_data.data.extern: + # FIXME: Updatefunktion der Secondaries dauerhaft an. + for cp in SubData.cp_data.values(): + if cp.chargepoint.chargepoint_module.config.configuration.ip_adress != 'localhost': + time.sleep(2) + self.chargepointUpdate({"data": {"chargepoint": cp}}) + except Exception: + log.error("Fehler im command Modul") def systemFetchVersions(self, connection_id: str, payload: dict) -> None: log.info("Fetch versions requested") From 4cb486712e067d19796019687add31be27b360bf Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 30 Jan 2025 11:33:08 +0100 Subject: [PATCH 02/13] update secondaries only if activated --- packages/helpermodules/command.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index 94c0bd895c..474fc8c075 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -675,8 +675,7 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: str(parent_file / "runs" / "update_self.sh"), SubData.system_data["system"].data["current_branch"]]) try: - if not SubData.general_data.data.extern: - # FIXME: Updatefunktion der Secondaries dauerhaft an. + if not SubData.general_data.data.extern and SubData.system_data["system"].data["secondary_auto_update"]: for cp in SubData.cp_data.values(): if cp.chargepoint.chargepoint_module.config.configuration.ip_adress != 'localhost': time.sleep(2) From 102765e8803cbb52d17debd25239fc0b86b8ffbc Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Fri, 31 Jan 2025 10:12:06 +0100 Subject: [PATCH 03/13] better check for secondaries --- packages/helpermodules/command.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index 474fc8c075..80641d0f12 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -677,7 +677,12 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: try: if not SubData.general_data.data.extern and SubData.system_data["system"].data["secondary_auto_update"]: for cp in SubData.cp_data.values(): - if cp.chargepoint.chargepoint_module.config.configuration.ip_adress != 'localhost': + # if chargepoint is external_openwb and not the second CP of duo + if ( + cp.chargepoint.chargepoint_module.config.type == 'external_openwb' and + cp.chargepoint.chargepoint_module.config.configuration.duo_num == 0 + # possible check for software version + ): time.sleep(2) self.chargepointUpdate({"data": {"chargepoint": cp}}) except Exception: From e5768c2ca207c5ec852f5317689ac48a47cbc1a5 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Fri, 31 Jan 2025 11:19:20 +0100 Subject: [PATCH 04/13] add current_version to cp --- packages/control/chargepoint/chargepoint_data.py | 2 ++ packages/modules/common/component_state.py | 6 +++++- packages/modules/common/store/_chargepoint_internal.py | 2 ++ .../internal_chargepoint_handler/chargepoint_module.py | 6 +++++- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index 9d2f9bb02c..677a96444b 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -94,6 +94,8 @@ class Get: charging_power: Optional[float] = 0 charging_voltage: Optional[float] = 0 connected_vehicle: ConnectedVehicle = field(default_factory=connected_vehicle_factory) + current_branch: Optional[str] = None + current_version: Optional[str] = None currents: List[float] = field(default_factory=currents_list_factory) daily_imported: float = 0 daily_exported: float = 0 diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index b2b27c970d..793c63f8d5 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -168,8 +168,12 @@ def __init__(self, soc_timestamp: Optional[int] = None, evse_current: Optional[float] = None, vehicle_id: Optional[str] = None, - max_evse_current: Optional[int] = None): + max_evse_current: Optional[int] = None, + current_branch: Optional[str] = None, + current_version: Optional[str] = None) -> None: self.currents, self.powers, self.voltages = _calculate_powers_and_currents(currents, powers, voltages) + self.current_banch = current_branch + self.current_version = current_version self.frequency = frequency self.imported = imported self.exported = exported diff --git a/packages/modules/common/store/_chargepoint_internal.py b/packages/modules/common/store/_chargepoint_internal.py index e1ab78736d..7fb5d715a1 100644 --- a/packages/modules/common/store/_chargepoint_internal.py +++ b/packages/modules/common/store/_chargepoint_internal.py @@ -33,6 +33,8 @@ def update(self): "/get/evse_current", self.state.evse_current, 2) pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current, 2) + pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + + "/get/current_branch", self.state.current_version) def get_internal_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index f99676a574..16546a9202 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -54,6 +54,8 @@ def __init__(self, local_charge_point_num: int, self._client.evse_client.activate_precise_current() self._precise_current = self._client.evse_client.is_precise_current_active() self.max_evse_current = self._client.evse_client.get_max_current() + self.current_branch = "a" + self.current_version = "b" def set_current(self, current: float) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): @@ -116,7 +118,9 @@ def store_state(chargepoint_state: ChargepointState) -> None: rfid=last_tag, evse_current=self.set_current_evse, serial_number=serial_number, - max_evse_current=self.max_evse_current + max_evse_current=self.max_evse_current, + current_branch=self.current_branch, + current_version=self.current_version ) if self.client_error_context.error_counter_exceeded(): chargepoint_state = ChargepointState() From e8697f73a6ab098bed88cfff99ee5ed893fa3632 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Fri, 31 Jan 2025 12:11:17 +0100 Subject: [PATCH 05/13] add current branch and current version --- packages/helpermodules/update_config.py | 2 ++ packages/modules/common/store/_chargepoint_internal.py | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 0905afefcb..79a97d8450 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -105,6 +105,8 @@ class UpdateConfig: "^openWB/chargepoint/[0-9]+/get/fault_str$", "^openWB/chargepoint/[0-9]+/get/frequency$", "^openWB/chargepoint/[0-9]+/get/max_evse_current$", + "^openWB/chargepoint/[0-9]+/get/current_branch$", + "^openWB/chargepoint/[0-9]+/get/current_version$", "^openWB/chargepoint/[0-9]+/get/plug_state$", "^openWB/chargepoint/[0-9]+/get/phases_in_use$", "^openWB/chargepoint/[0-9]+/get/exported$", diff --git a/packages/modules/common/store/_chargepoint_internal.py b/packages/modules/common/store/_chargepoint_internal.py index 7fb5d715a1..5f2c48d940 100644 --- a/packages/modules/common/store/_chargepoint_internal.py +++ b/packages/modules/common/store/_chargepoint_internal.py @@ -34,7 +34,9 @@ def update(self): pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current, 2) pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + - "/get/current_branch", self.state.current_version) + "/get/current_branch", self.state.current_branch) + pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + + "/get/current_version", self.state.current_version) def get_internal_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: From 7d6dbf3c97fbd13b888f335f56d29f8cea8f33b6 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 11 Feb 2025 12:33:21 +0100 Subject: [PATCH 06/13] fix typo --- packages/modules/common/component_state.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index 793c63f8d5..5592e2e2b2 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -172,7 +172,7 @@ def __init__(self, current_branch: Optional[str] = None, current_version: Optional[str] = None) -> None: self.currents, self.powers, self.voltages = _calculate_powers_and_currents(currents, powers, voltages) - self.current_banch = current_branch + self.current_branch = current_branch self.current_version = current_version self.frequency = frequency self.imported = imported From aec981168024bfea8e04537191ad46f0b438e1ad Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 11 Feb 2025 13:09:46 +0100 Subject: [PATCH 07/13] set values --- packages/helpermodules/setdata.py | 3 +++ packages/modules/common/store/_chargepoint.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index dec04bf379..ac55bb8162 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -628,6 +628,9 @@ def process_chargepoint_get_topics(self, msg): elif ("/get/error_timestamp" in msg.topic or "/get/rfid_timestamp" in msg.topic): self._validate_value(msg, float) + elif ("/get/current_branch" in msg.topic or + "/get/current_version" in msg.topic): + self._validate_value(msg, str) elif ("/get/fault_str" in msg.topic or "/get/state_str" in msg.topic or "/get/heartbeat" in msg.topic or diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index 608408c0fb..8a4247074e 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -52,6 +52,8 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_current", self.state.evse_current) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/vehicle_id", self.state.vehicle_id) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_branch", self.state.current_branch) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_version", self.state.current_version) def get_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: From 0e49fd562e84bfba3b48f87c2a8d11663fdc97ef Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 4 Mar 2025 07:40:16 +0100 Subject: [PATCH 08/13] add possibility to subscribe --- .../control/chargepoint/chargepoint_data.py | 2 -- packages/helpermodules/setdata.py | 3 --- packages/helpermodules/sub.py | 18 ++++++++++++++++++ packages/helpermodules/update_config.py | 2 -- packages/modules/common/component_state.py | 6 +----- packages/modules/common/store/_chargepoint.py | 2 -- .../common/store/_chargepoint_internal.py | 4 ---- .../chargepoint_module.py | 6 +----- 8 files changed, 20 insertions(+), 23 deletions(-) create mode 100644 packages/helpermodules/sub.py diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index 677a96444b..9d2f9bb02c 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -94,8 +94,6 @@ class Get: charging_power: Optional[float] = 0 charging_voltage: Optional[float] = 0 connected_vehicle: ConnectedVehicle = field(default_factory=connected_vehicle_factory) - current_branch: Optional[str] = None - current_version: Optional[str] = None currents: List[float] = field(default_factory=currents_list_factory) daily_imported: float = 0 daily_exported: float = 0 diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index ac55bb8162..dec04bf379 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -628,9 +628,6 @@ def process_chargepoint_get_topics(self, msg): elif ("/get/error_timestamp" in msg.topic or "/get/rfid_timestamp" in msg.topic): self._validate_value(msg, float) - elif ("/get/current_branch" in msg.topic or - "/get/current_version" in msg.topic): - self._validate_value(msg, str) elif ("/get/fault_str" in msg.topic or "/get/state_str" in msg.topic or "/get/heartbeat" in msg.topic or diff --git a/packages/helpermodules/sub.py b/packages/helpermodules/sub.py new file mode 100644 index 0000000000..51f7693156 --- /dev/null +++ b/packages/helpermodules/sub.py @@ -0,0 +1,18 @@ +import logging +import paho.mqtt.subscribe as subscribe + + +log = logging.getLogger(__name__) + + +def sub_single(topic, hostname="localhost", port=1883): + """ subscribed ein einzelnes Topic eines Hosts, der nicht der localhost ist. + + Parameter + --------- + topic : str + Topic, das subscribed werden soll + hostname: str + IP des Hosts + """ + return subscribe.simple(topic, hostname=hostname, port=port) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 79a97d8450..0905afefcb 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -105,8 +105,6 @@ class UpdateConfig: "^openWB/chargepoint/[0-9]+/get/fault_str$", "^openWB/chargepoint/[0-9]+/get/frequency$", "^openWB/chargepoint/[0-9]+/get/max_evse_current$", - "^openWB/chargepoint/[0-9]+/get/current_branch$", - "^openWB/chargepoint/[0-9]+/get/current_version$", "^openWB/chargepoint/[0-9]+/get/plug_state$", "^openWB/chargepoint/[0-9]+/get/phases_in_use$", "^openWB/chargepoint/[0-9]+/get/exported$", diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index 5592e2e2b2..40564c569b 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -168,12 +168,8 @@ def __init__(self, soc_timestamp: Optional[int] = None, evse_current: Optional[float] = None, vehicle_id: Optional[str] = None, - max_evse_current: Optional[int] = None, - current_branch: Optional[str] = None, - current_version: Optional[str] = None) -> None: + max_evse_current: Optional[int] = None) -> None: self.currents, self.powers, self.voltages = _calculate_powers_and_currents(currents, powers, voltages) - self.current_branch = current_branch - self.current_version = current_version self.frequency = frequency self.imported = imported self.exported = exported diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index 8a4247074e..608408c0fb 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -52,8 +52,6 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_current", self.state.evse_current) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/vehicle_id", self.state.vehicle_id) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current) - pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_branch", self.state.current_branch) - pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_version", self.state.current_version) def get_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: diff --git a/packages/modules/common/store/_chargepoint_internal.py b/packages/modules/common/store/_chargepoint_internal.py index 5f2c48d940..e1ab78736d 100644 --- a/packages/modules/common/store/_chargepoint_internal.py +++ b/packages/modules/common/store/_chargepoint_internal.py @@ -33,10 +33,6 @@ def update(self): "/get/evse_current", self.state.evse_current, 2) pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current, 2) - pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + - "/get/current_branch", self.state.current_branch) - pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + - "/get/current_version", self.state.current_version) def get_internal_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index 16546a9202..f99676a574 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -54,8 +54,6 @@ def __init__(self, local_charge_point_num: int, self._client.evse_client.activate_precise_current() self._precise_current = self._client.evse_client.is_precise_current_active() self.max_evse_current = self._client.evse_client.get_max_current() - self.current_branch = "a" - self.current_version = "b" def set_current(self, current: float) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): @@ -118,9 +116,7 @@ def store_state(chargepoint_state: ChargepointState) -> None: rfid=last_tag, evse_current=self.set_current_evse, serial_number=serial_number, - max_evse_current=self.max_evse_current, - current_branch=self.current_branch, - current_version=self.current_version + max_evse_current=self.max_evse_current ) if self.client_error_context.error_counter_exceeded(): chargepoint_state = ChargepointState() From 2f448b4244deb582a1ad4c309eee103c97ebb7ac Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 4 Mar 2025 09:11:17 +0100 Subject: [PATCH 09/13] add check for branch --- packages/helpermodules/command.py | 10 ++++++---- packages/modules/common/component_state.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index 80641d0f12..2a8c5f8297 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -18,7 +18,7 @@ # ToDo: move to module commands if implemented from control.ev.charge_template import get_new_charge_template from control.ev.ev_template import EvTemplateData -from helpermodules import pub +from helpermodules import pub, sub from helpermodules.abstract_plans import ScheduledChargingPlan, TimeChargingPlan from helpermodules.utils.run_command import run_command from modules.backup_clouds.onedrive.api import generateMSALAuthCode, retrieveMSALTokens @@ -677,11 +677,13 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: try: if not SubData.general_data.data.extern and SubData.system_data["system"].data["secondary_auto_update"]: for cp in SubData.cp_data.values(): - # if chargepoint is external_openwb and not the second CP of duo + # if chargepoint is external_openwb and not the second CP of duo and version is Release if ( cp.chargepoint.chargepoint_module.config.type == 'external_openwb' and - cp.chargepoint.chargepoint_module.config.configuration.duo_num == 0 - # possible check for software version + cp.chargepoint.chargepoint_module.config.configuration.duo_num == 0 and + sub.sub_single( + "openWB/system/current_branch", + cp.chargepoint.chargepoint_module.config.configuration.ip_address).payload == "Release" ): time.sleep(2) self.chargepointUpdate({"data": {"chargepoint": cp}}) diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index 40564c569b..b2b27c970d 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -168,7 +168,7 @@ def __init__(self, soc_timestamp: Optional[int] = None, evse_current: Optional[float] = None, vehicle_id: Optional[str] = None, - max_evse_current: Optional[int] = None) -> None: + max_evse_current: Optional[int] = None): self.currents, self.powers, self.voltages = _calculate_powers_and_currents(currents, powers, voltages) self.frequency = frequency self.imported = imported From 9bf29628306b75520ea1a56da301586c5593a64b Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 2 Apr 2025 11:17:24 +0200 Subject: [PATCH 10/13] add CP version to broker --- packages/control/chargepoint/chargepoint_data.py | 3 +++ packages/helpermodules/setdata.py | 4 ++++ packages/helpermodules/update_config.py | 3 +++ packages/modules/common/component_state.py | 8 +++++++- packages/modules/common/store/_chargepoint.py | 3 +++ packages/modules/common/store/_chargepoint_internal.py | 5 +++++ .../internal_chargepoint_handler/chargepoint_module.py | 9 ++++++++- .../internal_chargepoint_handler/update_values_test.py | 2 +- 8 files changed, 34 insertions(+), 3 deletions(-) diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index cef98805cc..e5b2f69e6d 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -94,6 +94,8 @@ class Get: charging_power: Optional[float] = 0 charging_voltage: Optional[float] = 0 connected_vehicle: ConnectedVehicle = field(default_factory=connected_vehicle_factory) + current_branch: Optional[str] = None + current_commit: Optional[str] = None currents: List[float] = field(default_factory=currents_list_factory) daily_imported: float = 0 daily_exported: float = 0 @@ -115,6 +117,7 @@ class Get: soc_timestamp: Optional[int] = None state_str: Optional[str] = None vehicle_id: Optional[str] = None + version: Optional[str] = None voltages: List[float] = field(default_factory=voltages_list_factory) diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index 2f3b090e55..d743f5a376 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -628,6 +628,10 @@ def process_chargepoint_get_topics(self, msg): elif ("/get/evse_current" in msg.topic or "/get/max_evse_current" in msg.topic): self._validate_value(msg, float, [(0, 0), (6, 32), (600, 3200)]) + elif ("/get/version" in msg.topic or + "/get/current_branch" in msg.topic or + "/get/current_commit" in msg.topic): + self._validate_value(msg, str) elif ("/get/error_timestamp" in msg.topic or "/get/rfid_timestamp" in msg.topic): self._validate_value(msg, float) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index fe9eff7894..a7b773b40c 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -105,6 +105,8 @@ class UpdateConfig: "^openWB/chargepoint/[0-9]+/control_parameter/timestamp_switch_on_off$", "^openWB/chargepoint/[0-9]+/get/charge_state$", "^openWB/chargepoint/[0-9]+/get/currents$", + "^openWB/chargepoint/[0-9]+/get/current_branch$", + "^openWB/chargepoint/[0-9]+/get/current_commit$", "^openWB/chargepoint/[0-9]+/get/evse_current$", "^openWB/chargepoint/[0-9]+/get/fault_state$", "^openWB/chargepoint/[0-9]+/get/fault_str$", @@ -120,6 +122,7 @@ class UpdateConfig: "^openWB/chargepoint/[0-9]+/get/powers$", "^openWB/chargepoint/[0-9]+/get/power_factors$", "^openWB/chargepoint/[0-9]+/get/vehicle_id$", + "^openWB/chargepoint/[0-9]+/get/version$", "^openWB/chargepoint/[0-9]+/get/voltages$", "^openWB/chargepoint/[0-9]+/get/serial_number$", "^openWB/chargepoint/[0-9]+/get/soc$", diff --git a/packages/modules/common/component_state.py b/packages/modules/common/component_state.py index b676ecceb6..97dc9f9cf9 100644 --- a/packages/modules/common/component_state.py +++ b/packages/modules/common/component_state.py @@ -174,7 +174,10 @@ def __init__(self, soc_timestamp: Optional[int] = None, evse_current: Optional[float] = None, vehicle_id: Optional[str] = None, - max_evse_current: Optional[int] = None): + max_evse_current: Optional[int] = None, + current_branch: Optional[str] = None, + current_commit: Optional[str] = None, + version: Optional[str] = None): self.currents, self.powers, self.voltages = _calculate_powers_and_currents(currents, powers, voltages) self.frequency = frequency self.imported = imported @@ -200,6 +203,9 @@ def __init__(self, self.evse_current = evse_current self.max_evse_current = max_evse_current self.vehicle_id = vehicle_id + self.current_branch = current_branch + self.current_commit = current_commit + self.version = version @auto_str diff --git a/packages/modules/common/store/_chargepoint.py b/packages/modules/common/store/_chargepoint.py index 608408c0fb..7b818fce0c 100644 --- a/packages/modules/common/store/_chargepoint.py +++ b/packages/modules/common/store/_chargepoint.py @@ -52,6 +52,9 @@ def update(self): pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/evse_current", self.state.evse_current) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/vehicle_id", self.state.vehicle_id) pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/version", self.state.version) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_branch", self.state.current_branch) + pub_to_broker("openWB/set/chargepoint/" + str(self.num) + "/get/current_commit", self.state.current_commit) def get_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: diff --git a/packages/modules/common/store/_chargepoint_internal.py b/packages/modules/common/store/_chargepoint_internal.py index e1ab78736d..339220a1e5 100644 --- a/packages/modules/common/store/_chargepoint_internal.py +++ b/packages/modules/common/store/_chargepoint_internal.py @@ -33,6 +33,11 @@ def update(self): "/get/evse_current", self.state.evse_current, 2) pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + "/get/max_evse_current", self.state.max_evse_current, 2) + pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + "/get/version", self.state.version) + pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + + "/get/current_branch", self.state.current_branch) + pub_to_broker("openWB/set/internal_chargepoint/" + str(self.num) + + "/get/current_commit", self.state.current_commit) def get_internal_chargepoint_value_store(id: int) -> ValueStore[ChargepointState]: diff --git a/packages/modules/internal_chargepoint_handler/chargepoint_module.py b/packages/modules/internal_chargepoint_handler/chargepoint_module.py index 863f03a3b4..e1d9d2a752 100644 --- a/packages/modules/internal_chargepoint_handler/chargepoint_module.py +++ b/packages/modules/internal_chargepoint_handler/chargepoint_module.py @@ -10,6 +10,7 @@ from modules.common.fault_state import ComponentInfo, FaultState from modules.common.store import get_internal_chargepoint_value_store, get_chargepoint_value_store from modules.internal_chargepoint_handler.clients import ClientHandler +from helpermodules.subdata import SubData log = logging.getLogger(__name__) @@ -54,6 +55,9 @@ def __init__(self, local_charge_point_num: int, self._client.evse_client.activate_precise_current() self._precise_current = self._client.evse_client.is_precise_current_active() self.max_evse_current = self._client.evse_client.get_max_current() + self.version = SubData.system_data["system"].data["version"] + self.current_branch = SubData.system_data["system"].data["current_branch"] + self.current_commit = SubData.system_data["system"].data["current_commit"] def set_current(self, current: float) -> None: with SingleComponentUpdateContext(self.fault_state, update_always=False): @@ -116,7 +120,10 @@ def store_state(chargepoint_state: ChargepointState) -> None: rfid=last_tag, evse_current=self.set_current_evse, serial_number=serial_number, - max_evse_current=self.max_evse_current + max_evse_current=self.max_evse_current, + version=self.version, + current_branch=self.current_branch, + current_commit=self.current_commit ) if self.client_error_context.error_counter_exceeded(): chargepoint_state = ChargepointState() diff --git a/packages/modules/internal_chargepoint_handler/update_values_test.py b/packages/modules/internal_chargepoint_handler/update_values_test.py index ff614fd7cb..44e5317532 100644 --- a/packages/modules/internal_chargepoint_handler/update_values_test.py +++ b/packages/modules/internal_chargepoint_handler/update_values_test.py @@ -24,7 +24,7 @@ @pytest.mark.parametrize( "old_chargepoint_state, published_topics", - [(None, 44), + [(None, 50), (OLD_CHARGEPOINT_STATE, 2)] ) From 773122f2b9bf793364ad753f4bfbef2666eec3f3 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 3 Apr 2025 10:39:34 +0200 Subject: [PATCH 11/13] remove sub.py --- packages/helpermodules/command.py | 6 ++---- packages/helpermodules/sub.py | 18 ------------------ 2 files changed, 2 insertions(+), 22 deletions(-) delete mode 100644 packages/helpermodules/sub.py diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index aba5619ef7..d19c9343c0 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -18,7 +18,7 @@ # ToDo: move to module commands if implemented from control.ev.charge_template import get_new_charge_template from control.ev.ev_template import EvTemplateData -from helpermodules import pub, sub +from helpermodules import pub from helpermodules.abstract_plans import ScheduledChargingPlan, TimeChargingPlan from helpermodules.utils.run_command import run_command from modules.backup_clouds.onedrive.api import generateMSALAuthCode, retrieveMSALTokens @@ -741,9 +741,7 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: if ( cp.chargepoint.chargepoint_module.config.type == 'external_openwb' and cp.chargepoint.chargepoint_module.config.configuration.duo_num == 0 and - sub.sub_single( - "openWB/system/current_branch", - cp.chargepoint.chargepoint_module.config.configuration.ip_address).payload == "Release" + cp.chargepoint.chargepoint_module.get.version == "Release" ): time.sleep(2) self.chargepointUpdate({"data": {"chargepoint": cp}}) diff --git a/packages/helpermodules/sub.py b/packages/helpermodules/sub.py deleted file mode 100644 index 51f7693156..0000000000 --- a/packages/helpermodules/sub.py +++ /dev/null @@ -1,18 +0,0 @@ -import logging -import paho.mqtt.subscribe as subscribe - - -log = logging.getLogger(__name__) - - -def sub_single(topic, hostname="localhost", port=1883): - """ subscribed ein einzelnes Topic eines Hosts, der nicht der localhost ist. - - Parameter - --------- - topic : str - Topic, das subscribed werden soll - hostname: str - IP des Hosts - """ - return subscribe.simple(topic, hostname=hostname, port=port) From 42d61ae92a488acd7bf1c31e787cb71cc5e24917 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 9 Apr 2025 15:26:37 +0200 Subject: [PATCH 12/13] add topic in setdata and update_config --- packages/helpermodules/command.py | 4 ++-- packages/helpermodules/setdata.py | 2 ++ packages/helpermodules/update_config.py | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index d19c9343c0..c72a6a19ba 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -687,7 +687,7 @@ def chargepointShutdown(self, connection_id: str, payload: dict) -> None: hostname=SubData.cp_data[payload["data"]["chargepoint"] ].chargepoint.chargepoint_module.config.configuration.ip_address) - def chargepointUpdate(self, payload: dict) -> None: + def secondaryChargepointUpdate(self, payload: dict) -> None: pub.pub_single("openWB/set/command/primary/todo", {"command": "systemUpdate", "data": {}}, hostname=SubData.cp_data[payload["data"]["chargepoint"] @@ -744,7 +744,7 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: cp.chargepoint.chargepoint_module.get.version == "Release" ): time.sleep(2) - self.chargepointUpdate({"data": {"chargepoint": cp}}) + self.secondaryChargepointUpdate({"data": {"chargepoint": cp}}) except Exception: log.error("Fehler im command Modul") diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index d743f5a376..a87cdf3e39 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -1077,6 +1077,8 @@ def process_system_topic(self, msg: mqtt.MQTTMessage): self._validate_value(msg, "json") elif "openWB/set/system/mqtt/valid_partner_ids" == msg.topic: self._validate_value(msg, str, collection=list) + elif "openWB/set/system/secondary_auto_update" == msg.topic: + self._validate_value(msg, bool) elif "configurable" in msg.topic: self._validate_value(msg, None) elif "device" in msg.topic: diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index f531039134..8b3a3b5692 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -447,6 +447,7 @@ class UpdateConfig: "^openWB/system/mqtt/bridge/[0-9]+$", "^openWB/system/mqtt/valid_partner_ids$", "^openWB/system/release_train$", + "^openWB/system/secondary_auto_update$", "^openWB/system/time$", "^openWB/system/update_in_progress$", "^openWB/system/usage_terms_acknowledged$", From 2c7c85761b5397d2aec9e9add3cc38db449fcecc Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 6 May 2025 10:28:46 +0200 Subject: [PATCH 13/13] fix --- packages/helpermodules/command.py | 23 ++++++++++------------- packages/helpermodules/update_config.py | 1 + 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index c72a6a19ba..262bcbc12d 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -734,19 +734,16 @@ def systemUpdate(self, connection_id: str, payload: dict) -> None: run_command([ str(parent_file / "runs" / "update_self.sh"), SubData.system_data["system"].data["current_branch"]]) - try: - if not SubData.general_data.data.extern and SubData.system_data["system"].data["secondary_auto_update"]: - for cp in SubData.cp_data.values(): - # if chargepoint is external_openwb and not the second CP of duo and version is Release - if ( - cp.chargepoint.chargepoint_module.config.type == 'external_openwb' and - cp.chargepoint.chargepoint_module.config.configuration.duo_num == 0 and - cp.chargepoint.chargepoint_module.get.version == "Release" - ): - time.sleep(2) - self.secondaryChargepointUpdate({"data": {"chargepoint": cp}}) - except Exception: - log.error("Fehler im command Modul") + if not SubData.general_data.data.extern and SubData.system_data["system"].data["secondary_auto_update"]: + for cp in SubData.cp_data.values(): + # if chargepoint is external_openwb and not the second CP of duo and version is Release + if ( + cp.chargepoint.chargepoint_module.config.type == 'external_openwb' and + cp.chargepoint.chargepoint_module.config.configuration.duo_num == 0 and + cp.chargepoint.data.get.current_branch == "Release" + ): + time.sleep(2) + self.secondaryChargepointUpdate({"data": {"chargepoint": f"cp{cp.chargepoint.num}"}}) def systemFetchVersions(self, connection_id: str, payload: dict) -> None: log.info("Fetch versions requested") diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 8b3a3b5692..7a2a7e2ebf 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -544,6 +544,7 @@ class UpdateConfig: ("openWB/system/ip_address", "unknown"), ("openWB/system/mqtt/valid_partner_ids", []), ("openWB/system/release_train", "master"), + ("openWB/system/secondary_auto_update", True), ("openWB/system/serial_number", get_serial_number()), ) invalid_topic = (