diff --git a/homeassistant/components/matter/climate.py b/homeassistant/components/matter/climate.py index df57da4ded3a..c15dd42d62b6 100644 --- a/homeassistant/components/matter/climate.py +++ b/homeassistant/components/matter/climate.py @@ -296,24 +296,22 @@ class MatterClimate(MatterEntity, ClimateEntity): if running_state_value := self.get_matter_attribute_value( clusters.Thermostat.Attributes.ThermostatRunningState ): - match running_state_value: - case ( - ThermostatRunningState.Heat | ThermostatRunningState.HeatStage2 - ): - self._attr_hvac_action = HVACAction.HEATING - case ( - ThermostatRunningState.Cool | ThermostatRunningState.CoolStage2 - ): - self._attr_hvac_action = HVACAction.COOLING - case ( - ThermostatRunningState.Fan - | ThermostatRunningState.FanStage2 - | ThermostatRunningState.FanStage3 - ): - self._attr_hvac_action = HVACAction.FAN - case _: - self._attr_hvac_action = HVACAction.OFF - + if running_state_value & ( + ThermostatRunningState.Heat | ThermostatRunningState.HeatStage2 + ): + self._attr_hvac_action = HVACAction.HEATING + elif running_state_value & ( + ThermostatRunningState.Cool | ThermostatRunningState.CoolStage2 + ): + self._attr_hvac_action = HVACAction.COOLING + elif running_state_value & ( + ThermostatRunningState.Fan + | ThermostatRunningState.FanStage2 + | ThermostatRunningState.FanStage3 + ): + self._attr_hvac_action = HVACAction.FAN + else: + self._attr_hvac_action = HVACAction.OFF # update target temperature high/low supports_range = ( self._attr_supported_features diff --git a/tests/components/matter/test_climate.py b/tests/components/matter/test_climate.py index 7761d5d27da7..a887ce1b5df6 100644 --- a/tests/components/matter/test_climate.py +++ b/tests/components/matter/test_climate.py @@ -85,6 +85,12 @@ async def test_thermostat_base( assert state assert state.attributes["hvac_action"] == HVACAction.HEATING + set_node_attribute(matter_node, 1, 513, 41, 5) + await trigger_subscription_callback(hass, matter_client) + state = hass.states.get("climate.longan_link_hvac") + assert state + assert state.attributes["hvac_action"] == HVACAction.HEATING + set_node_attribute(matter_node, 1, 513, 41, 8) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("climate.longan_link_hvac") @@ -97,12 +103,24 @@ async def test_thermostat_base( assert state assert state.attributes["hvac_action"] == HVACAction.COOLING + set_node_attribute(matter_node, 1, 513, 41, 6) + await trigger_subscription_callback(hass, matter_client) + state = hass.states.get("climate.longan_link_hvac") + assert state + assert state.attributes["hvac_action"] == HVACAction.COOLING + set_node_attribute(matter_node, 1, 513, 41, 16) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("climate.longan_link_hvac") assert state assert state.attributes["hvac_action"] == HVACAction.COOLING + set_node_attribute(matter_node, 1, 513, 41, 66) + await trigger_subscription_callback(hass, matter_client) + state = hass.states.get("climate.longan_link_hvac") + assert state + assert state.attributes["hvac_action"] == HVACAction.COOLING + set_node_attribute(matter_node, 1, 513, 41, 4) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("climate.longan_link_hvac") @@ -121,7 +139,7 @@ async def test_thermostat_base( assert state assert state.attributes["hvac_action"] == HVACAction.FAN - set_node_attribute(matter_node, 1, 513, 41, 66) + set_node_attribute(matter_node, 1, 513, 41, 128) await trigger_subscription_callback(hass, matter_client) state = hass.states.get("climate.longan_link_hvac") assert state