diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 6fe83c3caf..214eac0240 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -58,7 +58,7 @@ class UpdateConfig: - DATASTORE_VERSION = 135 + DATASTORE_VERSION = 136 valid_topic = [ "^openWB/bat/config/bat_control_activated$", @@ -3448,3 +3448,24 @@ 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: + 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) 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]): diff --git a/packages/modules/devices/generic/json/counter.py b/packages/modules/devices/generic/json/counter.py index 16e138ce68..5b255bb64f 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,11 @@ 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_frequency is not None else None + ) + 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 +85,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)