diff --git a/homeassistant/components/homee/entity.py b/homeassistant/components/homee/entity.py index 5f215d7ea57..5a7f34b1c37 100644 --- a/homeassistant/components/homee/entity.py +++ b/homeassistant/components/homee/entity.py @@ -57,7 +57,13 @@ class HomeeEntity(Entity): async def async_set_value(self, value: float) -> None: """Set an attribute value on the homee node.""" homee = self._entry.runtime_data - await homee.set_value(self._attribute.node_id, self._attribute.id, value) + try: + await homee.set_value(self._attribute.node_id, self._attribute.id, value) + except ConnectionClosed as exception: + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="connection_closed", + ) from exception async def async_update(self) -> None: """Update entity from homee.""" diff --git a/tests/components/homee/test_switch.py b/tests/components/homee/test_switch.py index 3b8ffca8662..a1b30d97714 100644 --- a/tests/components/homee/test_switch.py +++ b/tests/components/homee/test_switch.py @@ -2,8 +2,12 @@ from unittest.mock import MagicMock, patch +import pytest from syrupy.assertion import SnapshotAssertion +from websockets import frames +from websockets.exceptions import ConnectionClosed +from homeassistant.components.homee.const import DOMAIN from homeassistant.components.switch import ( DOMAIN as SWITCH_DOMAIN, SERVICE_TURN_OFF, @@ -13,6 +17,7 @@ from homeassistant.components.switch import ( ) from homeassistant.const import ATTR_ENTITY_ID, Platform from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import entity_registry as er from . import build_mock_node, setup_integration @@ -116,6 +121,31 @@ async def test_switch_device_class_no_outlet( ) +async def test_send_error( + hass: HomeAssistant, + mock_homee: MagicMock, + mock_config_entry: MockConfigEntry, +) -> None: + """Test failed set_value command.""" + mock_homee.nodes = [build_mock_node("switches.json")] + mock_homee.get_node_by_id.return_value = mock_homee.nodes[0] + await setup_integration(hass, mock_config_entry) + + mock_homee.set_value.side_effect = ConnectionClosed( + rcvd=frames.Close(1002, "Protocol Error"), sent=None + ) + with pytest.raises(HomeAssistantError) as exc_info: + await hass.services.async_call( + SWITCH_DOMAIN, + SERVICE_TURN_ON, + {ATTR_ENTITY_ID: "switch.test_switch_switch_1"}, + blocking=True, + ) + + assert exc_info.value.translation_domain == DOMAIN + assert exc_info.value.translation_key == "connection_closed" + + async def test_switch_snapshot( hass: HomeAssistant, mock_homee: MagicMock,