diff --git a/custom_components/xiaomi_miot/__init__.py b/custom_components/xiaomi_miot/__init__.py index 08ad325c9..42e498c1e 100644 --- a/custom_components/xiaomi_miot/__init__.py +++ b/custom_components/xiaomi_miot/__init__.py @@ -2519,7 +2519,7 @@ def update_with_properties(self): if not prop: continue val = prop.from_dict(self.parent_attributes) - if prop.value_range and not (prop.range_min() <= val <= prop.range_max()): + if not prop.range_valid(val): val = None self._extra_attrs[prop.name] = val diff --git a/custom_components/xiaomi_miot/core/miot_spec.py b/custom_components/xiaomi_miot/core/miot_spec.py index d06a0a92f..555719cd6 100644 --- a/custom_components/xiaomi_miot/core/miot_spec.py +++ b/custom_components/xiaomi_miot/core/miot_spec.py @@ -739,6 +739,17 @@ def range_step(self): return self.value_range[2] return None + def range_valid(self, val): + if not self.value_range: + return True + range_min = self.range_min() + range_max = self.range_max() + if None in [range_min, range_max]: + return True + if val == None: + return False + return range_min <= val <= range_max + @property def is_bool(self): return self.format == 'bool' diff --git a/custom_components/xiaomi_miot/sensor.py b/custom_components/xiaomi_miot/sensor.py index 3e970d165..04d8eac4b 100644 --- a/custom_components/xiaomi_miot/sensor.py +++ b/custom_components/xiaomi_miot/sensor.py @@ -318,9 +318,8 @@ def native_value(self): if key in self._state_attrs: return f'{self._state_attrs[key]}'.lower() val = prop.from_dict(self._state_attrs) - if prop.value_range: - if not prop.range_min() <= val <= prop.range_max(): - val = None + if not prop.range_valid(val): + val = None return val def before_select_modes(self, prop, option, **kwargs): @@ -517,9 +516,8 @@ def native_value(self): if key in self._state_attrs: return f'{self._state_attrs[key]}'.lower() val = prop.from_dict(self._state_attrs) - if prop.value_range: - if not prop.range_min() <= val <= prop.range_max(): - val = None + if not prop.range_valid(val): + val = None if val is not None: svd = self.custom_config_number('value_ratio') or 0 if svd: