diff --git a/homeassistant/components/verisure/alarm_control_panel.py b/homeassistant/components/verisure/alarm_control_panel.py index cb61e67e5d124f..82e955f0c3a59e 100644 --- a/homeassistant/components/verisure/alarm_control_panel.py +++ b/homeassistant/components/verisure/alarm_control_panel.py @@ -9,6 +9,7 @@ CodeFormat, ) from homeassistant.core import HomeAssistant, callback +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity @@ -63,6 +64,12 @@ async def _async_set_arm_state( self.coordinator.verisure.request, command_data ) LOGGER.debug("Verisure set arm state %s", state) + if arm_state is None or "data" not in arm_state: + await self.coordinator.async_refresh() + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="arm_state_failed", + ) result = None attempts = 0 while result is None: @@ -77,6 +84,8 @@ async def _async_set_arm_state( list(arm_state["data"].values())[0], state ), ) + if transaction is None: + continue result = ( transaction.get("data", {}) .get("installation", {}) diff --git a/homeassistant/components/verisure/strings.json b/homeassistant/components/verisure/strings.json index 364f2690e78738..797a455d69f629 100644 --- a/homeassistant/components/verisure/strings.json +++ b/homeassistant/components/verisure/strings.json @@ -51,6 +51,11 @@ } } }, + "exceptions": { + "arm_state_failed": { + "message": "Failed to change alarm state. Verify your code is correct and that your account is not temporarily locked." + } + }, "options": { "step": { "init": {