Home Assistant Unofficial Reference 2024.12.1
alarm_control_panel.py
Go to the documentation of this file.
1 """Support for Agent DVR Alarm Control Panels."""
2 
3 from __future__ import annotations
4 
6  AlarmControlPanelEntity,
7  AlarmControlPanelEntityFeature,
8  AlarmControlPanelState,
9 )
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.device_registry import DeviceInfo
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from . import AgentDVRConfigEntry
15 from .const import DOMAIN as AGENT_DOMAIN
16 
17 CONF_HOME_MODE_NAME = "home"
18 CONF_AWAY_MODE_NAME = "away"
19 CONF_NIGHT_MODE_NAME = "night"
20 
21 CONST_ALARM_CONTROL_PANEL_NAME = "Alarm Panel"
22 
23 
25  hass: HomeAssistant,
26  config_entry: AgentDVRConfigEntry,
27  async_add_entities: AddEntitiesCallback,
28 ) -> None:
29  """Set up the Agent DVR Alarm Control Panels."""
30  async_add_entities([AgentBaseStation(config_entry.runtime_data)])
31 
32 
34  """Representation of an Agent DVR Alarm Control Panel."""
35 
36  _attr_supported_features = (
37  AlarmControlPanelEntityFeature.ARM_HOME
38  | AlarmControlPanelEntityFeature.ARM_AWAY
39  | AlarmControlPanelEntityFeature.ARM_NIGHT
40  )
41  _attr_code_arm_required = False
42  _attr_has_entity_name = True
43  _attr_name = None
44 
45  def __init__(self, client):
46  """Initialize the alarm control panel."""
47  self._client_client = client
48  self._attr_unique_id_attr_unique_id = f"{client.unique}_CP"
49  self._attr_device_info_attr_device_info = DeviceInfo(
50  identifiers={(AGENT_DOMAIN, client.unique)},
51  name=f"{client.name} {CONST_ALARM_CONTROL_PANEL_NAME}",
52  manufacturer="Agent",
53  model=CONST_ALARM_CONTROL_PANEL_NAME,
54  sw_version=client.version,
55  )
56 
57  async def async_update(self) -> None:
58  """Update the state of the device."""
59  await self._client_client.update()
60  self._attr_available_attr_available = self._client_client.is_available
61  armed = self._client_client.is_armed
62  if armed is None:
63  self._attr_alarm_state_attr_alarm_state = None
64  return
65  if armed:
66  prof = (await self._client_client.get_active_profile()).lower()
67  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.ARMED_AWAY
68  if prof == CONF_HOME_MODE_NAME:
69  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.ARMED_HOME
70  elif prof == CONF_NIGHT_MODE_NAME:
71  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.ARMED_NIGHT
72  else:
73  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.DISARMED
74 
75  async def async_alarm_disarm(self, code: str | None = None) -> None:
76  """Send disarm command."""
77  await self._client_client.disarm()
78  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.DISARMED
79 
80  async def async_alarm_arm_away(self, code: str | None = None) -> None:
81  """Send arm away command. Uses custom mode."""
82  await self._client_client.arm()
83  await self._client_client.set_active_profile(CONF_AWAY_MODE_NAME)
84  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.ARMED_AWAY
85 
86  async def async_alarm_arm_home(self, code: str | None = None) -> None:
87  """Send arm home command. Uses custom mode."""
88  await self._client_client.arm()
89  await self._client_client.set_active_profile(CONF_HOME_MODE_NAME)
90  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.ARMED_HOME
91 
92  async def async_alarm_arm_night(self, code: str | None = None) -> None:
93  """Send arm night command. Uses custom mode."""
94  await self._client_client.arm()
95  await self._client_client.set_active_profile(CONF_NIGHT_MODE_NAME)
96  self._attr_alarm_state_attr_alarm_state = AlarmControlPanelState.ARMED_NIGHT
None async_setup_entry(HomeAssistant hass, AgentDVRConfigEntry config_entry, AddEntitiesCallback async_add_entities)
IssData update(pyiss.ISS iss)
Definition: __init__.py:33