From bb9660269cc77d81dd8f071a878b0331bd3713d1 Mon Sep 17 00:00:00 2001 From: Calvin Walton Date: Thu, 21 Aug 2025 10:19:14 -0400 Subject: [PATCH] Matter valve Open command doesn't support TargetLevel=0 (#150922) --- homeassistant/components/matter/valve.py | 9 ++++++--- tests/components/matter/test_valve.py | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/matter/valve.py b/homeassistant/components/matter/valve.py index bea11468c6b..4cedec74bf2 100644 --- a/homeassistant/components/matter/valve.py +++ b/homeassistant/components/matter/valve.py @@ -52,9 +52,12 @@ class MatterValve(MatterEntity, ValveEntity): async def async_set_valve_position(self, position: int) -> None: """Move the valve to a specific position.""" - await self.send_device_command( - ValveConfigurationAndControl.Commands.Open(targetLevel=position) - ) + if position > 0: + await self.send_device_command( + ValveConfigurationAndControl.Commands.Open(targetLevel=position) + ) + return + await self.send_device_command(ValveConfigurationAndControl.Commands.Close()) @callback def _update_from_device(self) -> None: diff --git a/tests/components/matter/test_valve.py b/tests/components/matter/test_valve.py index 36ab34cb64e..db64a5bacef 100644 --- a/tests/components/matter/test_valve.py +++ b/tests/components/matter/test_valve.py @@ -133,3 +133,22 @@ async def test_valve( command=clusters.ValveConfigurationAndControl.Commands.Open(targetLevel=100), ) matter_client.send_device_command.reset_mock() + + # test using set_position action to close valve + await hass.services.async_call( + "valve", + "set_valve_position", + { + "entity_id": entity_id, + "position": 0, + }, + blocking=True, + ) + + assert matter_client.send_device_command.call_count == 1 + assert matter_client.send_device_command.call_args == call( + node_id=matter_node.node_id, + endpoint_id=1, + command=clusters.ValveConfigurationAndControl.Commands.Close(), + ) + matter_client.send_device_command.reset_mock()