1 """Support for Canary alarm."""
3 from __future__
import annotations
7 from canary.const
import LOCATION_MODE_AWAY, LOCATION_MODE_HOME, LOCATION_MODE_NIGHT
8 from canary.model
import Location
11 AlarmControlPanelEntity,
12 AlarmControlPanelEntityFeature,
13 AlarmControlPanelState,
20 from .const
import DATA_COORDINATOR, DOMAIN
21 from .coordinator
import CanaryDataUpdateCoordinator
27 async_add_entities: AddEntitiesCallback,
29 """Set up Canary alarm control panels based on a config entry."""
30 coordinator: CanaryDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
35 for location_id, location
in coordinator.data[
"locations"].items()
42 CoordinatorEntity[CanaryDataUpdateCoordinator], AlarmControlPanelEntity
44 """Representation of a Canary alarm control panel."""
46 _attr_supported_features = (
47 AlarmControlPanelEntityFeature.ARM_HOME
48 | AlarmControlPanelEntityFeature.ARM_AWAY
49 | AlarmControlPanelEntityFeature.ARM_NIGHT
51 _attr_code_arm_required =
False
54 self, coordinator: CanaryDataUpdateCoordinator, location: Location
56 """Initialize a Canary security camera."""
58 self._location_id: str = location.location_id
64 """Return information about the location."""
65 return self.coordinator.data[
"locations"][self._location_id]
69 """Return the state of the device."""
71 return AlarmControlPanelState.DISARMED
74 if mode.name == LOCATION_MODE_AWAY:
75 return AlarmControlPanelState.ARMED_AWAY
76 if mode.name == LOCATION_MODE_HOME:
77 return AlarmControlPanelState.ARMED_HOME
78 if mode.name == LOCATION_MODE_NIGHT:
79 return AlarmControlPanelState.ARMED_NIGHT
85 """Return the state attributes."""
86 return {
"private": self.
locationlocation.is_private}
89 """Send disarm command."""
90 self.coordinator.canary.set_location_mode(
91 self._location_id, self.
locationlocation.mode.name,
True
95 """Send arm home command."""
96 self.coordinator.canary.set_location_mode(self._location_id, LOCATION_MODE_HOME)
99 """Send arm away command."""
100 self.coordinator.canary.set_location_mode(self._location_id, LOCATION_MODE_AWAY)
103 """Send arm night command."""
104 self.coordinator.canary.set_location_mode(
105 self._location_id, LOCATION_MODE_NIGHT
None alarm_arm_away(self, str|None code=None)
AlarmControlPanelState|None alarm_state(self)
dict[str, Any] extra_state_attributes(self)
None alarm_arm_night(self, str|None code=None)
None alarm_arm_home(self, str|None code=None)
None __init__(self, CanaryDataUpdateCoordinator coordinator, Location location)
None alarm_disarm(self, str|None code=None)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)