Skip to content

Commit f1bf28d

Browse files
virtualbitzzepenet
andauthored
Add Matter climate running state heat fan and cool fan (home-assistant#151535)
Co-authored-by: epenet <[email protected]>
1 parent 99fb64a commit f1bf28d

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

homeassistant/components/matter/climate.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -296,24 +296,22 @@ def _update_from_device(self) -> None:
296296
if running_state_value := self.get_matter_attribute_value(
297297
clusters.Thermostat.Attributes.ThermostatRunningState
298298
):
299-
match running_state_value:
300-
case (
301-
ThermostatRunningState.Heat | ThermostatRunningState.HeatStage2
302-
):
303-
self._attr_hvac_action = HVACAction.HEATING
304-
case (
305-
ThermostatRunningState.Cool | ThermostatRunningState.CoolStage2
306-
):
307-
self._attr_hvac_action = HVACAction.COOLING
308-
case (
309-
ThermostatRunningState.Fan
310-
| ThermostatRunningState.FanStage2
311-
| ThermostatRunningState.FanStage3
312-
):
313-
self._attr_hvac_action = HVACAction.FAN
314-
case _:
315-
self._attr_hvac_action = HVACAction.OFF
316-
299+
if running_state_value & (
300+
ThermostatRunningState.Heat | ThermostatRunningState.HeatStage2
301+
):
302+
self._attr_hvac_action = HVACAction.HEATING
303+
elif running_state_value & (
304+
ThermostatRunningState.Cool | ThermostatRunningState.CoolStage2
305+
):
306+
self._attr_hvac_action = HVACAction.COOLING
307+
elif running_state_value & (
308+
ThermostatRunningState.Fan
309+
| ThermostatRunningState.FanStage2
310+
| ThermostatRunningState.FanStage3
311+
):
312+
self._attr_hvac_action = HVACAction.FAN
313+
else:
314+
self._attr_hvac_action = HVACAction.OFF
317315
# update target temperature high/low
318316
supports_range = (
319317
self._attr_supported_features

tests/components/matter/test_climate.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ async def test_thermostat_base(
8585
assert state
8686
assert state.attributes["hvac_action"] == HVACAction.HEATING
8787

88+
set_node_attribute(matter_node, 1, 513, 41, 5)
89+
await trigger_subscription_callback(hass, matter_client)
90+
state = hass.states.get("climate.longan_link_hvac")
91+
assert state
92+
assert state.attributes["hvac_action"] == HVACAction.HEATING
93+
8894
set_node_attribute(matter_node, 1, 513, 41, 8)
8995
await trigger_subscription_callback(hass, matter_client)
9096
state = hass.states.get("climate.longan_link_hvac")
@@ -97,12 +103,24 @@ async def test_thermostat_base(
97103
assert state
98104
assert state.attributes["hvac_action"] == HVACAction.COOLING
99105

106+
set_node_attribute(matter_node, 1, 513, 41, 6)
107+
await trigger_subscription_callback(hass, matter_client)
108+
state = hass.states.get("climate.longan_link_hvac")
109+
assert state
110+
assert state.attributes["hvac_action"] == HVACAction.COOLING
111+
100112
set_node_attribute(matter_node, 1, 513, 41, 16)
101113
await trigger_subscription_callback(hass, matter_client)
102114
state = hass.states.get("climate.longan_link_hvac")
103115
assert state
104116
assert state.attributes["hvac_action"] == HVACAction.COOLING
105117

118+
set_node_attribute(matter_node, 1, 513, 41, 66)
119+
await trigger_subscription_callback(hass, matter_client)
120+
state = hass.states.get("climate.longan_link_hvac")
121+
assert state
122+
assert state.attributes["hvac_action"] == HVACAction.COOLING
123+
106124
set_node_attribute(matter_node, 1, 513, 41, 4)
107125
await trigger_subscription_callback(hass, matter_client)
108126
state = hass.states.get("climate.longan_link_hvac")
@@ -121,7 +139,7 @@ async def test_thermostat_base(
121139
assert state
122140
assert state.attributes["hvac_action"] == HVACAction.FAN
123141

124-
set_node_attribute(matter_node, 1, 513, 41, 66)
142+
set_node_attribute(matter_node, 1, 513, 41, 128)
125143
await trigger_subscription_callback(hass, matter_client)
126144
state = hass.states.get("climate.longan_link_hvac")
127145
assert state

0 commit comments

Comments
 (0)