diff --git a/homeassistant/components/alarm_control_panel/significant_change.py b/homeassistant/components/alarm_control_panel/significant_change.py index d33347a67f1..bde6d151393 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 01d3ef98558..7198153f9af 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 8762af496c8..ca822c5e9e1 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 19c43522f35..b8038b93f79 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 7acc1033d3f..cc279a9fa41 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 b2a2e57d84f..3e11cbdb9cd 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 3031d60305a..5699050c7cb 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 903c80bb714..bacb0232ee3 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 4bb67c54e19..87e1246ce85 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