diff --git a/homeassistant/components/matter/water_heater.py b/homeassistant/components/matter/water_heater.py index fc67d663a6e6..5f3c0ce3a95e 100644 --- a/homeassistant/components/matter/water_heater.py +++ b/homeassistant/components/matter/water_heater.py @@ -168,10 +168,15 @@ class MatterWaterHeater(MatterEntity, WaterHeaterEntity): self._attr_target_temperature = self._get_temperature_in_degrees( clusters.Thermostat.Attributes.OccupiedHeatingSetpoint ) + system_mode = self.get_matter_attribute_value( + clusters.Thermostat.Attributes.SystemMode + ) boost_state = self.get_matter_attribute_value( clusters.WaterHeaterManagement.Attributes.BoostState ) - if boost_state == clusters.WaterHeaterManagement.Enums.BoostStateEnum.kActive: + if system_mode == clusters.Thermostat.Enums.SystemModeEnum.kOff: + self._attr_current_operation = STATE_OFF + elif boost_state == clusters.WaterHeaterManagement.Enums.BoostStateEnum.kActive: self._attr_current_operation = STATE_HIGH_DEMAND else: self._attr_current_operation = STATE_ECO @@ -218,6 +223,7 @@ DISCOVERY_SCHEMAS = [ clusters.Thermostat.Attributes.AbsMinHeatSetpointLimit, clusters.Thermostat.Attributes.AbsMaxHeatSetpointLimit, clusters.Thermostat.Attributes.LocalTemperature, + clusters.Thermostat.Attributes.SystemMode, clusters.WaterHeaterManagement.Attributes.FeatureMap, ), optional_attributes=( diff --git a/tests/components/matter/test_water_heater.py b/tests/components/matter/test_water_heater.py index 9c2def1d08a8..9311425689f2 100644 --- a/tests/components/matter/test_water_heater.py +++ b/tests/components/matter/test_water_heater.py @@ -226,6 +226,20 @@ async def test_update_from_water_heater( assert state assert state.state == STATE_ECO + # confirm water heater state is 'off' when SystemMode is set to 0 (kOff) + set_node_attribute(matter_node, 2, 513, 28, 0) + await trigger_subscription_callback(hass, matter_client) + state = hass.states.get(entity_id) + assert state + assert state.state == STATE_OFF + + # confirm water heater state returns to 'eco' when SystemMode is set back to 4 (kHeat) + set_node_attribute(matter_node, 2, 513, 28, 4) + await trigger_subscription_callback(hass, matter_client) + state = hass.states.get(entity_id) + assert state + assert state.state == STATE_ECO + @pytest.mark.parametrize("node_fixture", ["silabs_water_heater"]) async def test_water_heater_turn_on_off(