Use pydeconz interface controls for alarm control panel (#72317)

This commit is contained in:
Robert Svensson 2022-05-23 12:00:01 +02:00 committed by GitHub
parent 19781d285c
commit c770a81160
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,7 @@
"""Support for deCONZ alarm control panel devices.""" """Support for deCONZ alarm control panel devices."""
from __future__ import annotations from __future__ import annotations
from pydeconz.models.alarm_system import AlarmSystem from pydeconz.interfaces.alarm_systems import ArmAction
from pydeconz.models.event import EventType from pydeconz.models.event import EventType
from pydeconz.models.sensor.ancillary_control import ( from pydeconz.models.sensor.ancillary_control import (
ANCILLARY_CONTROL_ARMED_AWAY, ANCILLARY_CONTROL_ARMED_AWAY,
@ -53,13 +53,13 @@ DECONZ_TO_ALARM_STATE = {
} }
def get_alarm_system_for_unique_id( def get_alarm_system_id_for_unique_id(
gateway: DeconzGateway, unique_id: str gateway: DeconzGateway, unique_id: str
) -> AlarmSystem | None: ) -> str | None:
"""Retrieve alarm system unique ID is registered to.""" """Retrieve alarm system ID the unique ID is registered to."""
for alarm_system in gateway.api.alarmsystems.values(): for alarm_system in gateway.api.alarmsystems.values():
if unique_id in alarm_system.devices: if unique_id in alarm_system.devices:
return alarm_system return alarm_system.resource_id
return None return None
@ -76,8 +76,12 @@ async def async_setup_entry(
def async_add_sensor(_: EventType, sensor_id: str) -> None: def async_add_sensor(_: EventType, sensor_id: str) -> None:
"""Add alarm control panel devices from deCONZ.""" """Add alarm control panel devices from deCONZ."""
sensor = gateway.api.sensors.ancillary_control[sensor_id] sensor = gateway.api.sensors.ancillary_control[sensor_id]
if alarm_system := get_alarm_system_for_unique_id(gateway, sensor.unique_id): if alarm_system_id := get_alarm_system_id_for_unique_id(
async_add_entities([DeconzAlarmControlPanel(sensor, gateway, alarm_system)]) gateway, sensor.unique_id
):
async_add_entities(
[DeconzAlarmControlPanel(sensor, gateway, alarm_system_id)]
)
config_entry.async_on_unload( config_entry.async_on_unload(
gateway.api.sensors.ancillary_control.subscribe( gateway.api.sensors.ancillary_control.subscribe(
@ -107,11 +111,11 @@ class DeconzAlarmControlPanel(DeconzDevice, AlarmControlPanelEntity):
self, self,
device: AncillaryControl, device: AncillaryControl,
gateway: DeconzGateway, gateway: DeconzGateway,
alarm_system: AlarmSystem, alarm_system_id: str,
) -> None: ) -> None:
"""Set up alarm control panel device.""" """Set up alarm control panel device."""
super().__init__(device, gateway) super().__init__(device, gateway)
self.alarm_system = alarm_system self.alarm_system_id = alarm_system_id
@callback @callback
def async_update_callback(self) -> None: def async_update_callback(self) -> None:
@ -133,19 +137,27 @@ class DeconzAlarmControlPanel(DeconzDevice, AlarmControlPanelEntity):
async def async_alarm_arm_away(self, code: str | None = None) -> None: async def async_alarm_arm_away(self, code: str | None = None) -> None:
"""Send arm away command.""" """Send arm away command."""
if code: if code:
await self.alarm_system.arm_away(code) await self.gateway.api.alarmsystems.arm(
self.alarm_system_id, ArmAction.AWAY, code
)
async def async_alarm_arm_home(self, code: str | None = None) -> None: async def async_alarm_arm_home(self, code: str | None = None) -> None:
"""Send arm home command.""" """Send arm home command."""
if code: if code:
await self.alarm_system.arm_stay(code) await self.gateway.api.alarmsystems.arm(
self.alarm_system_id, ArmAction.STAY, code
)
async def async_alarm_arm_night(self, code: str | None = None) -> None: async def async_alarm_arm_night(self, code: str | None = None) -> None:
"""Send arm night command.""" """Send arm night command."""
if code: if code:
await self.alarm_system.arm_night(code) await self.gateway.api.alarmsystems.arm(
self.alarm_system_id, ArmAction.NIGHT, code
)
async def async_alarm_disarm(self, code: str | None = None) -> None: async def async_alarm_disarm(self, code: str | None = None) -> None:
"""Send disarm command.""" """Send disarm command."""
if code: if code:
await self.alarm_system.disarm(code) await self.gateway.api.alarmsystems.arm(
self.alarm_system_id, ArmAction.DISARM, code
)