1 """Support for Homekit Alarm Control Panel."""
3 from __future__
import annotations
7 from aiohomekit.model.characteristics
import CharacteristicsTypes
8 from aiohomekit.model.services
import Service, ServicesTypes
11 AlarmControlPanelEntity,
12 AlarmControlPanelEntityFeature,
13 AlarmControlPanelState,
20 from .
import KNOWN_DEVICES
21 from .connection
import HKDevice
22 from .entity
import HomeKitEntity
25 0: AlarmControlPanelState.ARMED_HOME,
26 1: AlarmControlPanelState.ARMED_AWAY,
27 2: AlarmControlPanelState.ARMED_NIGHT,
28 3: AlarmControlPanelState.DISARMED,
29 4: AlarmControlPanelState.TRIGGERED,
33 AlarmControlPanelState.ARMED_HOME: 0,
34 AlarmControlPanelState.ARMED_AWAY: 1,
35 AlarmControlPanelState.ARMED_NIGHT: 2,
36 AlarmControlPanelState.DISARMED: 3,
42 config_entry: ConfigEntry,
43 async_add_entities: AddEntitiesCallback,
45 """Set up Homekit alarm control panel."""
46 hkid: str = config_entry.data[
"AccessoryPairingID"]
47 conn: HKDevice = hass.data[KNOWN_DEVICES][hkid]
50 def async_add_service(service: Service) -> bool:
51 if service.type != ServicesTypes.SECURITY_SYSTEM:
53 info = {
"aid": service.accessory.aid,
"iid": service.iid}
55 conn.async_migrate_unique_id(
56 entity.old_unique_id, entity.unique_id, Platform.ALARM_CONTROL_PANEL
61 conn.add_listener(async_add_service)
65 """Representation of a Homekit Alarm Control Panel."""
67 _attr_supported_features = (
68 AlarmControlPanelEntityFeature.ARM_HOME
69 | AlarmControlPanelEntityFeature.ARM_AWAY
70 | AlarmControlPanelEntityFeature.ARM_NIGHT
74 """Define the homekit characteristics the entity cares about."""
76 CharacteristicsTypes.SECURITY_SYSTEM_STATE_CURRENT,
77 CharacteristicsTypes.SECURITY_SYSTEM_STATE_TARGET,
78 CharacteristicsTypes.BATTERY_LEVEL,
83 """Return the state of the device."""
84 return CURRENT_STATE_MAP[
85 self.
serviceservice.value(CharacteristicsTypes.SECURITY_SYSTEM_STATE_CURRENT)
89 """Send disarm command."""
90 await self.
set_alarm_stateset_alarm_state(AlarmControlPanelState.DISARMED, code)
93 """Send arm command."""
94 await self.
set_alarm_stateset_alarm_state(AlarmControlPanelState.ARMED_AWAY, code)
97 """Send stay command."""
98 await self.
set_alarm_stateset_alarm_state(AlarmControlPanelState.ARMED_HOME, code)
101 """Send night command."""
102 await self.
set_alarm_stateset_alarm_state(AlarmControlPanelState.ARMED_NIGHT, code)
105 self, state: AlarmControlPanelState, code: str |
None =
None
107 """Send state command."""
109 {CharacteristicsTypes.SECURITY_SYSTEM_STATE_TARGET: TARGET_STATE_MAP[state]}
114 """Return the optional state attributes."""
115 battery_level = self.
serviceservice.value(CharacteristicsTypes.BATTERY_LEVEL)
117 if not battery_level:
119 return {ATTR_BATTERY_LEVEL: battery_level}
None set_alarm_state(self, AlarmControlPanelState state, str|None code=None)
AlarmControlPanelState alarm_state(self)
dict[str, Any]|None extra_state_attributes(self)
None async_alarm_arm_night(self, str|None code=None)
None async_alarm_disarm(self, str|None code=None)
list[str] get_characteristic_types(self)
None async_alarm_arm_away(self, str|None code=None)
None async_alarm_arm_home(self, str|None code=None)
None async_put_characteristics(self, dict[str, Any] characteristics)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)