From 8e1a04dc8249c76a5f480176f5c19b45f1bd96f3 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 17 May 2026 22:41:26 +0200 Subject: [PATCH] Fix Verisure alarm crash when cloud rejects arm/disarm command (#171024) --- homeassistant/components/verisure/alarm_control_panel.py | 9 +++++++++ homeassistant/components/verisure/strings.json | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/homeassistant/components/verisure/alarm_control_panel.py b/homeassistant/components/verisure/alarm_control_panel.py index a01f608bc42c..33410ca1a301 100644 --- a/homeassistant/components/verisure/alarm_control_panel.py +++ b/homeassistant/components/verisure/alarm_control_panel.py @@ -11,6 +11,7 @@ from homeassistant.components.alarm_control_panel import ( 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 @@ -65,6 +66,12 @@ class VerisureAlarm( 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: @@ -79,6 +86,8 @@ class VerisureAlarm( 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 364f2690e787..797a455d69f6 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": {