From 48a5858c7acc7906b5782db7efc2c490ef8c392e Mon Sep 17 00:00:00 2001 From: pszafer Date: Thu, 14 Nov 2024 22:49:40 +0100 Subject: [PATCH] fix filter run twice for energy meters --- boneio/helper/filter.py | 9 ++++++--- boneio/modbus/single_sensor.py | 6 +----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/boneio/helper/filter.py b/boneio/helper/filter.py index 7b6c18b..313b0fc 100644 --- a/boneio/helper/filter.py +++ b/boneio/helper/filter.py @@ -1,6 +1,7 @@ """Filter class to adjust sensor values.""" from __future__ import annotations +from typing import Optional import logging _LOGGER = logging.getLogger(__name__) @@ -9,7 +10,7 @@ FILTERS = { "offset": lambda x, y: x + y, "round": lambda x, y: round(x, y), - "multiply": lambda x, y: x * y, + "multiply": lambda x, y: x * y if x else x, "filter_out": lambda x, y: None if x == y else x, "filter_out_greater": lambda x, y: None if x > y else x, "filter_out_lower": lambda x, y: None if x < y else x, @@ -19,8 +20,10 @@ class Filter: _filters = [] - def _apply_filters(self, value: float, filters: list = []) -> float | None: - filters = filters if filters else self._filters + def _apply_filters( + self, value: float | None, filters: Optional[list] = None + ) -> float | None: + filters = filters if filters is not None else self._filters for filter in filters: for k, v in filter.items(): if k not in FILTERS: diff --git a/boneio/modbus/single_sensor.py b/boneio/modbus/single_sensor.py index f0d6fa2..719a9a7 100644 --- a/boneio/modbus/single_sensor.py +++ b/boneio/modbus/single_sensor.py @@ -71,11 +71,7 @@ def set_user_filters(self, user_filters: list) -> None: self._user_filters = user_filters def set_value(self, value): - for filter in self._filters: - for key, _v in filter.items(): - if key in allowed_operations: - lamda_function = allowed_operations[key] - value = lamda_function(value, _v) + value = self._apply_filters(value=value) value = self._apply_filters( value=value, filters=self._user_filters,