From 659281aab67bb810428bcf47726570572fd05476 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 5 Jul 2023 01:35:40 -0500 Subject: [PATCH] Fix ESPHome alarm_control_panel when state is missing (#95871) --- .../components/esphome/alarm_control_panel.py | 2 ++ .../esphome/test_alarm_control_panel.py | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/homeassistant/components/esphome/alarm_control_panel.py b/homeassistant/components/esphome/alarm_control_panel.py index 669241b05aa..639f47272d9 100644 --- a/homeassistant/components/esphome/alarm_control_panel.py +++ b/homeassistant/components/esphome/alarm_control_panel.py @@ -33,6 +33,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from .entity import ( EsphomeEntity, + esphome_state_property, platform_async_setup_entry, ) from .enum_mapper import EsphomeEnumMapper @@ -111,6 +112,7 @@ class EsphomeAlarmControlPanel( self._attr_code_arm_required = bool(static_info.requires_code_to_arm) @property + @esphome_state_property def state(self) -> str | None: """Return the state of the device.""" return _ESPHOME_ACP_STATE_TO_HASS_STATE.from_esphome(self._state.state) diff --git a/tests/components/esphome/test_alarm_control_panel.py b/tests/components/esphome/test_alarm_control_panel.py index ddca7bf60ac..90d7bde5215 100644 --- a/tests/components/esphome/test_alarm_control_panel.py +++ b/tests/components/esphome/test_alarm_control_panel.py @@ -24,6 +24,7 @@ from homeassistant.components.esphome.alarm_control_panel import EspHomeACPFeatu from homeassistant.const import ( ATTR_ENTITY_ID, STATE_ALARM_ARMED_AWAY, + STATE_UNKNOWN, ) from homeassistant.core import HomeAssistant @@ -209,3 +210,38 @@ async def test_generic_alarm_control_panel_no_code( [call(1, AlarmControlPanelCommand.DISARM, None)] ) mock_client.alarm_control_panel_command.reset_mock() + + +async def test_generic_alarm_control_panel_missing_state( + hass: HomeAssistant, + mock_client: APIClient, + mock_generic_device_entry, +) -> None: + """Test a generic alarm_control_panel entity that is missing state.""" + entity_info = [ + AlarmControlPanelInfo( + object_id="myalarm_control_panel", + key=1, + name="my alarm_control_panel", + unique_id="my_alarm_control_panel", + supported_features=EspHomeACPFeatures.ARM_AWAY + | EspHomeACPFeatures.ARM_CUSTOM_BYPASS + | EspHomeACPFeatures.ARM_HOME + | EspHomeACPFeatures.ARM_NIGHT + | EspHomeACPFeatures.ARM_VACATION + | EspHomeACPFeatures.TRIGGER, + requires_code=False, + requires_code_to_arm=False, + ) + ] + states = [] + user_service = [] + await mock_generic_device_entry( + mock_client=mock_client, + entity_info=entity_info, + user_service=user_service, + states=states, + ) + state = hass.states.get("alarm_control_panel.test_my_alarm_control_panel") + assert state is not None + assert state.state == STATE_UNKNOWN