From 4954f137407701454dc125fd183486d5c2acef3d Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Tue, 21 Jul 2026 08:48:07 +0200 Subject: [PATCH 1/5] Add jq_frequency parameter to config.py --- packages/modules/devices/generic/json/config.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/modules/devices/generic/json/config.py b/packages/modules/devices/generic/json/config.py index e079bc1422..b3abc77ea0 100644 --- a/packages/modules/devices/generic/json/config.py +++ b/packages/modules/devices/generic/json/config.py @@ -64,7 +64,8 @@ def __init__(self, jq_current_l3: Optional[str] = None, jq_voltage_l1: Optional[str] = None, jq_voltage_l2: Optional[str] = None, - jq_voltage_l3: Optional[str] = None): + jq_voltage_l3: Optional[str] = None, + jq_frequency: Optional[str] = None): self.jq_power = jq_power self.jq_exported = jq_exported self.jq_imported = jq_imported @@ -72,6 +73,7 @@ def __init__(self, self.jq_power_factors = (jq_power_factor_l1, jq_power_factor_l2, jq_power_factor_l3) self.jq_currents = (jq_current_l1, jq_current_l2, jq_current_l3) self.jq_voltages = (jq_voltage_l1, jq_voltage_l2, jq_voltage_l3) + self.jq_frequency = jq_frequency class JsonCounterSetup(ComponentSetup[JsonCounterConfiguration]): From 94ee7d893ac49d114479b2ac8930e4fb86f8e523 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Tue, 21 Jul 2026 08:52:15 +0200 Subject: [PATCH 2/5] Add frequency processing to counter.py --- packages/modules/devices/generic/json/counter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/modules/devices/generic/json/counter.py b/packages/modules/devices/generic/json/counter.py index 16e138ce68..70e3d8b6a7 100644 --- a/packages/modules/devices/generic/json/counter.py +++ b/packages/modules/devices/generic/json/counter.py @@ -32,6 +32,7 @@ def _compile_jq_filters(self) -> None: self.jq_voltages = [jq.compile(v) for v in config.jq_voltages] if all(config.jq_voltages) else None self.jq_imported = jq.compile(config.jq_imported) if config.jq_imported else None self.jq_exported = jq.compile(config.jq_exported) if config.jq_exported else None + self.jq_frequency = jq.compile(config.jq_frequency) if config.jq_frequency else None def initialize(self) -> None: self.__device_id: int = self.kwargs['device_id'] @@ -64,6 +65,8 @@ def update(self, response) -> None: if self.jq_voltages is not None else None ) + frequency = float(self.jq_frequency.input(response).first()) + if self.jq_imported is None or self.jq_exported is None: self.peak_filter.check_values(power) imported, exported = self.sim_counter.sim_count(power) @@ -79,7 +82,8 @@ def update(self, response) -> None: powers=powers, currents=currents, power_factors=power_factors, - voltages=voltages + voltages=voltages, + frequency=frequency ) self.store.set(counter_state) From 28fabbf7514c5174020a4d720aaadb5786d673d8 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Tue, 21 Jul 2026 08:59:06 +0200 Subject: [PATCH 3/5] Handle None case for jq_frequency input --- packages/modules/devices/generic/json/counter.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/modules/devices/generic/json/counter.py b/packages/modules/devices/generic/json/counter.py index 70e3d8b6a7..5b255bb64f 100644 --- a/packages/modules/devices/generic/json/counter.py +++ b/packages/modules/devices/generic/json/counter.py @@ -65,7 +65,10 @@ def update(self, response) -> None: if self.jq_voltages is not None else None ) - frequency = float(self.jq_frequency.input(response).first()) + frequency = ( + float(self.jq_frequency.input(response).first()) + if self.jq_frequency is not None else None + ) if self.jq_imported is None or self.jq_exported is None: self.peak_filter.check_values(power) From db7a70d20e1cc2601d18e5d68db05fe9ab047ef0 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Thu, 23 Jul 2026 10:26:01 +0200 Subject: [PATCH 4/5] Update datastore version to 136 and add upgrade logic --- packages/helpermodules/update_config.py | 36 ++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 36735ee5be..fa06588834 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -58,7 +58,7 @@ class UpdateConfig: - DATASTORE_VERSION = 134 + DATASTORE_VERSION = 136 valid_topic = [ "^openWB/bat/config/bat_control_activated$", @@ -3435,3 +3435,37 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {topic: config} self._loop_all_received_topics(upgrade) self._append_datastore_version(134) + + def upgrade_datastore_135(self) -> None: + def upgrade(topic: str, payload) -> None: + if re.search("openWB/vehicle/[0-9]+/soc_module/config", topic) is not None: + configuration_payload = decode_payload(payload) + # replace cupra,skoda,vwid by vweuda + if configuration_payload.get("type") in ["cupra", "skoda", "vwid"]: + configuration_payload.update({"type": "vweuda"}) + if configuration_payload['configuration'].get('refreshToken'): + configuration_payload['configuration'].pop('refreshToken') + return {topic: configuration_payload} + self._loop_all_received_topics(upgrade) + self._append_datastore_version(135) + + def upgrade_datastore_136(self) -> None: + def upgrade(topic: str, payload) -> Optional[dict]: + if re.search("^openWB/system/device/[0-9]+/config$", topic) is not None: + payload_device = decode_payload(payload) + if payload_device.get("type") == "json": + index = get_index(topic) + modified_topics = {} + for topic_component, payload_component in self.all_received_topics.items(): + if re.search(f"^openWB/system/device/{index}/component/[0-9]+/config$", + topic_component) is not None: + payload_component = decode_payload(payload_component) + if ( + payload_component["type"] == "counter" and + "jq_frequency" not in payload_component["configuration"] + ): + payload_component["configuration"].update({"jq_frequency": None}) + modified_topics[topic_component] = payload_component + return modified_topics + self._loop_all_received_topics(upgrade) + self._append_datastore_version(136) From b198359ba04542b4ebd560927e2ff338cbf754ed Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Thu, 23 Jul 2026 10:26:29 +0200 Subject: [PATCH 5/5] flake8 --- packages/helpermodules/update_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index fa06588834..214eac0240 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -3448,7 +3448,7 @@ def upgrade(topic: str, payload) -> None: return {topic: configuration_payload} self._loop_all_received_topics(upgrade) self._append_datastore_version(135) - + def upgrade_datastore_136(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: if re.search("^openWB/system/device/[0-9]+/config$", topic) is not None: