1 """Helper to test significant sensor state changes."""
3 from __future__
import annotations
9 ATTR_UNIT_OF_MEASUREMENT,
14 check_absolute_change,
15 check_percentage_change,
19 from .
import SensorDeviceClass
23 old_state: float |
None,
24 new_state: float |
None,
25 absolute_change: float,
26 percentage_change: float,
29 old_state, new_state, absolute_change
42 """Test if state significantly changed."""
43 if (device_class := new_attrs.get(ATTR_DEVICE_CLASS))
is None:
46 absolute_change: float |
None =
None
47 percentage_change: float |
None =
None
48 if device_class == SensorDeviceClass.TEMPERATURE:
49 if new_attrs.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfTemperature.FAHRENHEIT:
54 if device_class
in (SensorDeviceClass.BATTERY, SensorDeviceClass.HUMIDITY):
58 SensorDeviceClass.AQI,
60 SensorDeviceClass.CO2,
61 SensorDeviceClass.PM25,
62 SensorDeviceClass.PM10,
63 SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
66 percentage_change = 2.0
76 if absolute_change
is not None and percentage_change
is not None:
78 float(old_state),
float(new_state), absolute_change, percentage_change
80 if absolute_change
is not None:
82 float(old_state),
float(new_state), absolute_change
bool|None async_check_significant_change(HomeAssistant hass, str old_state, dict old_attrs, str new_state, dict new_attrs, **Any kwargs)
bool _absolute_and_relative_change(float|None old_state, float|None new_state, float absolute_change, float percentage_change)
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)