1 """Support for locks on Ubiquiti's UniFi Protect NVR."""
3 from __future__
import annotations
6 from typing
import Any, cast
8 from uiprotect.data
import (
12 ProtectAdoptableDeviceModel,
19 from .data
import ProtectDeviceType, UFPConfigEntry
20 from .entity
import ProtectDeviceEntity
22 _LOGGER = logging.getLogger(__name__)
27 entry: UFPConfigEntry,
28 async_add_entities: AddEntitiesCallback,
30 """Set up locks on a UniFi Protect NVR."""
31 data = entry.runtime_data
34 def _add_new_device(device: ProtectAdoptableDeviceModel) ->
None:
35 if isinstance(device, Doorlock):
38 data.async_subscribe_adopt(_add_new_device)
44 for device
in data.get_by_types({ModelType.DOORLOCK})
49 """A Ubiquiti UniFi Protect Speaker."""
52 entity_description: LockEntityDescription
64 lock_status = self.
devicedevice.lock_status
70 if lock_status
is LockStatusType.CLOSED:
72 elif lock_status
is LockStatusType.CLOSING:
74 elif lock_status
is LockStatusType.OPENING:
77 LockStatusType.FAILED_WHILE_CLOSING,
78 LockStatusType.FAILED_WHILE_OPENING,
79 LockStatusType.JAMMED_WHILE_CLOSING,
80 LockStatusType.JAMMED_WHILE_OPENING,
84 elif lock_status != LockStatusType.OPEN:
88 """Unlock the lock."""
89 _LOGGER.debug(
"Unlocking %s", self.
devicedevice.display_name)
90 return await self.
devicedevice.open_lock()
94 _LOGGER.debug(
"Locking %s", self.
devicedevice.display_name)
95 return await self.
devicedevice.close_lock()
None _async_update_device_from_protect(self, ProtectDeviceType device)
None async_lock(self, **Any kwargs)
None async_unlock(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, UFPConfigEntry entry, AddEntitiesCallback async_add_entities)