diff --git a/homeassistant/components/satel_integra/client.py b/homeassistant/components/satel_integra/client.py index 1a78e11ee0b4..c4ad59af7b03 100644 --- a/homeassistant/components/satel_integra/client.py +++ b/homeassistant/components/satel_integra/client.py @@ -6,6 +6,7 @@ from satel_integra import AsyncSatel from satel_integra.exceptions import ( SatelConnectFailedError, SatelConnectionInitializationError, + SatelMonitoringStartError, SatelPanelBusyError, ) @@ -107,7 +108,13 @@ class SatelClient: output_changed_callback=outputs_update_callback, ) - await self.controller.start(enable_monitoring=True) + try: + await self.controller.start(enable_monitoring=True) + except SatelMonitoringStartError as ex: + raise ConfigEntryNotReady( + translation_domain=DOMAIN, + translation_key="monitoring_start_failed", + ) from ex async def async_close(self) -> None: """Close the connection.""" diff --git a/homeassistant/components/satel_integra/strings.json b/homeassistant/components/satel_integra/strings.json index 33b834b131fb..fc8e456a4909 100644 --- a/homeassistant/components/satel_integra/strings.json +++ b/homeassistant/components/satel_integra/strings.json @@ -208,6 +208,9 @@ "missing_output_access_code": { "message": "Cannot control switchable outputs because no user code is configured for this Satel Integra entry. Configure a code in the integration options to enable output control." }, + "monitoring_start_failed": { + "message": "Connected to the alarm panel, but the panel did not confirm the request to start sending status updates." + }, "panel_busy": { "message": "[%key:component::satel_integra::config::error::panel_busy%]" } diff --git a/tests/components/satel_integra/test_init.py b/tests/components/satel_integra/test_init.py index 8bb43d342788..97257d256c7e 100644 --- a/tests/components/satel_integra/test_init.py +++ b/tests/components/satel_integra/test_init.py @@ -7,6 +7,7 @@ import pytest from satel_integra import ( SatelConnectFailedError, SatelConnectionInitializationError, + SatelMonitoringStartError, SatelPanelBusyError, SatelUnexpectedResponseError, ) @@ -265,3 +266,21 @@ async def test_setup_exceptions( mock_satel.connect.side_effect = exception await setup_integration(hass, mock_config_entry) assert mock_config_entry.state is expected_state + + +async def test_monitoring_start_error( + hass: HomeAssistant, + mock_satel: AsyncMock, + mock_config_entry: MockConfigEntry, +) -> None: + """Test setup is retried when monitoring fails to start.""" + mock_satel.start.side_effect = SatelMonitoringStartError + + await setup_integration(hass, mock_config_entry) + + assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY + assert mock_config_entry.reason == ( + "Connected to the alarm panel, but the panel did not confirm the request to start sending status updates" + ) + mock_satel.start.assert_awaited_once_with(enable_monitoring=True) + mock_satel.read_panel_info.assert_not_awaited()