Home Assistant Unofficial Reference 2024.12.1
lock.py
Go to the documentation of this file.
1 """Platform for Schlage lock integration."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from homeassistant.components.lock import LockEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant, callback
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 
12 from .const import DOMAIN
13 from .coordinator import LockData, SchlageDataUpdateCoordinator
14 from .entity import SchlageEntity
15 
16 
18  hass: HomeAssistant,
19  config_entry: ConfigEntry,
20  async_add_entities: AddEntitiesCallback,
21 ) -> None:
22  """Set up Schlage WiFi locks based on a config entry."""
23  coordinator: SchlageDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
24 
25  def _add_new_locks(locks: dict[str, LockData]) -> None:
27  SchlageLockEntity(coordinator=coordinator, device_id=device_id)
28  for device_id in locks
29  )
30 
31  _add_new_locks(coordinator.data.locks)
32  coordinator.new_locks_callbacks.append(_add_new_locks)
33 
34 
36  """Schlage lock entity."""
37 
38  _attr_name = None
39 
40  def __init__(
41  self, coordinator: SchlageDataUpdateCoordinator, device_id: str
42  ) -> None:
43  """Initialize a Schlage Lock."""
44  super().__init__(coordinator=coordinator, device_id=device_id)
45  self._update_attrs_update_attrs()
46 
47  @callback
48  def _handle_coordinator_update(self) -> None:
49  """Handle updated data from the coordinator."""
50  if self.device_iddevice_id in self.coordinator.data.locks:
51  self._update_attrs_update_attrs()
53 
54  def _update_attrs(self) -> None:
55  """Update our internal state attributes."""
56  self._attr_is_locked_attr_is_locked = self._lock_lock.is_locked
57  self._attr_is_jammed_attr_is_jammed = self._lock_lock.is_jammed
58  self._attr_changed_by_attr_changed_by = self._lock_lock.last_changed_by()
59 
60  async def async_lock(self, **kwargs: Any) -> None:
61  """Lock the device."""
62  await self.hasshasshass.async_add_executor_job(self._lock_lock.lock)
63  await self.coordinator.async_request_refresh()
64 
65  async def async_unlock(self, **kwargs: Any) -> None:
66  """Unlock the device."""
67  await self.hasshasshass.async_add_executor_job(self._lock_lock.unlock)
68  await self.coordinator.async_request_refresh()
None __init__(self, SchlageDataUpdateCoordinator coordinator, str device_id)
Definition: lock.py:42
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: lock.py:21
None _add_new_locks(dict[str, LockData] locks)
Definition: sensor.py:39