1 """Helper to test significant Number state changes."""
3 from __future__
import annotations
9 ATTR_UNIT_OF_MEASUREMENT,
15 check_absolute_change,
16 check_percentage_change,
20 from .const
import NumberDeviceClass
24 old_state: float |
None,
25 new_state: float |
None,
26 absolute_change: float,
27 percentage_change: float,
30 old_state, new_state, absolute_change
43 """Test if state significantly changed."""
44 if (device_class := new_attrs.get(ATTR_DEVICE_CLASS))
is None:
47 percentage_change: float |
None =
None
50 if device_class == NumberDeviceClass.TEMPERATURE:
51 if new_attrs.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfTemperature.FAHRENHEIT:
57 elif device_class
in (
58 NumberDeviceClass.BATTERY,
59 NumberDeviceClass.HUMIDITY,
60 NumberDeviceClass.MOISTURE,
65 elif device_class == NumberDeviceClass.POWER_FACTOR:
66 if new_attrs.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE:
70 percentage_change = 2.0
75 percentage_change = 2.0
85 if percentage_change
is not None:
87 float(old_state),
float(new_state), absolute_change, percentage_change
bool _absolute_and_relative_change(float|None old_state, float|None new_state, float absolute_change, float percentage_change)
bool|None async_check_significant_change(HomeAssistant hass, str old_state, dict old_attrs, str new_state, dict new_attrs, **Any kwargs)
bool check_absolute_change(float|None val1, float|None val2, float change)
bool check_percentage_change(float|None old_state, float|None new_state, float change)
bool check_valid_float(str|float value)