diff --git a/homeassistant/components/alarm_control_panel/significant_change.py b/homeassistant/components/alarm_control_panel/significant_change.py index d33347a67f1d..bde6d1513934 100644 --- a/homeassistant/components/alarm_control_panel/significant_change.py +++ b/homeassistant/components/alarm_control_panel/significant_change.py @@ -26,13 +26,16 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} - for attr_name in changed_attrs: - if attr_name in SIGNIFICANT_ATTRIBUTES: - return True + if changed_attrs: + return True # no significant attribute change detected return False diff --git a/homeassistant/components/climate/significant_change.py b/homeassistant/components/climate/significant_change.py index 01d3ef98558f..7198153f9af9 100644 --- a/homeassistant/components/climate/significant_change.py +++ b/homeassistant/components/climate/significant_change.py @@ -52,15 +52,17 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} ha_unit = hass.config.units.temperature_unit for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES: - continue - if attr_name in [ ATTR_AUX_HEAT, ATTR_FAN_MODE, diff --git a/homeassistant/components/cover/significant_change.py b/homeassistant/components/cover/significant_change.py index 8762af496c82..ca822c5e9e1c 100644 --- a/homeassistant/components/cover/significant_change.py +++ b/homeassistant/components/cover/significant_change.py @@ -30,14 +30,15 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES: - continue - old_attr_value = old_attrs.get(attr_name) new_attr_value = new_attrs.get(attr_name) if new_attr_value is None or not check_valid_float(new_attr_value): diff --git a/homeassistant/components/fan/significant_change.py b/homeassistant/components/fan/significant_change.py index 19c43522f358..b8038b93f795 100644 --- a/homeassistant/components/fan/significant_change.py +++ b/homeassistant/components/fan/significant_change.py @@ -9,9 +9,14 @@ from homeassistant.helpers.significant_change import ( check_valid_float, ) -from . import ATTR_PERCENTAGE, ATTR_PERCENTAGE_STEP +from . import ATTR_DIRECTION, ATTR_OSCILLATING, ATTR_PERCENTAGE, ATTR_PRESET_MODE -INSIGNIFICANT_ATTRIBUTES: set[str] = {ATTR_PERCENTAGE_STEP} +SIGNIFICANT_ATTRIBUTES: set[str] = { + ATTR_DIRECTION, + ATTR_OSCILLATING, + ATTR_PERCENTAGE, + ATTR_PRESET_MODE, +} @callback @@ -27,14 +32,15 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} for attr_name in changed_attrs: - if attr_name in INSIGNIFICANT_ATTRIBUTES: - continue - if attr_name != ATTR_PERCENTAGE: return True diff --git a/homeassistant/components/humidifier/significant_change.py b/homeassistant/components/humidifier/significant_change.py index 7acc1033d3fb..cc279a9fa410 100644 --- a/homeassistant/components/humidifier/significant_change.py +++ b/homeassistant/components/humidifier/significant_change.py @@ -32,14 +32,15 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES: - continue - if attr_name in [ATTR_ACTION, ATTR_MODE]: return True diff --git a/homeassistant/components/media_player/significant_change.py b/homeassistant/components/media_player/significant_change.py index b2a2e57d84f5..3e11cbdb9cd6 100644 --- a/homeassistant/components/media_player/significant_change.py +++ b/homeassistant/components/media_player/significant_change.py @@ -43,14 +43,23 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + { + k: v + for k, v in old_attrs.items() + if k in SIGNIFICANT_ATTRIBUTES - INSIGNIFICANT_ATTRIBUTES + }.items() + ) + new_attrs_s = set( + { + k: v + for k, v in new_attrs.items() + if k in SIGNIFICANT_ATTRIBUTES - INSIGNIFICANT_ATTRIBUTES + }.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES - INSIGNIFICANT_ATTRIBUTES: - continue - if attr_name != ATTR_MEDIA_VOLUME_LEVEL: return True diff --git a/homeassistant/components/vacuum/significant_change.py b/homeassistant/components/vacuum/significant_change.py index 3031d60305a0..5699050c7cb7 100644 --- a/homeassistant/components/vacuum/significant_change.py +++ b/homeassistant/components/vacuum/significant_change.py @@ -30,14 +30,15 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES: - continue - if attr_name != ATTR_BATTERY_LEVEL: return True diff --git a/homeassistant/components/water_heater/significant_change.py b/homeassistant/components/water_heater/significant_change.py index 903c80bb714c..bacb0232ee3b 100644 --- a/homeassistant/components/water_heater/significant_change.py +++ b/homeassistant/components/water_heater/significant_change.py @@ -42,15 +42,16 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} ha_unit = hass.config.units.temperature_unit for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES: - continue - if attr_name in [ATTR_OPERATION_MODE, ATTR_AWAY_MODE]: return True diff --git a/homeassistant/components/weather/significant_change.py b/homeassistant/components/weather/significant_change.py index 4bb67c54e19b..87e1246ce850 100644 --- a/homeassistant/components/weather/significant_change.py +++ b/homeassistant/components/weather/significant_change.py @@ -88,14 +88,15 @@ def async_check_significant_change( if old_state != new_state: return True - old_attrs_s = set(old_attrs.items()) - new_attrs_s = set(new_attrs.items()) + old_attrs_s = set( + {k: v for k, v in old_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) + new_attrs_s = set( + {k: v for k, v in new_attrs.items() if k in SIGNIFICANT_ATTRIBUTES}.items() + ) changed_attrs: set[str] = {item[0] for item in old_attrs_s ^ new_attrs_s} for attr_name in changed_attrs: - if attr_name not in SIGNIFICANT_ATTRIBUTES: - continue - old_attr_value = old_attrs.get(attr_name) new_attr_value = new_attrs.get(attr_name) absolute_change: float | None = None