From c682c23b2d084c5220ff21a7e7eb2fbdaf99e1a8 Mon Sep 17 00:00:00 2001 From: Tom Matheussen <13683094+Tommatheussen@users.noreply.github.com> Date: Mon, 7 Sep 2026 15:09:24 +0200 Subject: [PATCH] Handle monitoring failure for Satel Integra (#181548) Co-authored-by: Erwin Douna --- .../components/satel_integra/client.py | 9 ++++++++- .../components/satel_integra/strings.json | 3 +++ tests/components/satel_integra/test_init.py | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) 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 6534aab20a3f..1ca18ad1d6d4 100644 --- a/homeassistant/components/satel_integra/strings.json +++ b/homeassistant/components/satel_integra/strings.json @@ -206,6 +206,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 8fcd61b5db7e..9aac8b1a92ff 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, ) from syrupy.assertion import SnapshotAssertion @@ -243,3 +244,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()