Home Assistant Unofficial Reference 2024.12.1
lock.py
Go to the documentation of this file.
1 """Support for Sesame, by CANDY HOUSE."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import pysesame2
8 import voluptuous as vol
9 
11  PLATFORM_SCHEMA as LOCK_PLATFORM_SCHEMA,
12  LockEntity,
13 )
14 from homeassistant.const import ATTR_BATTERY_LEVEL, ATTR_DEVICE_ID, CONF_API_KEY
15 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
19 
20 ATTR_SERIAL_NO = "serial"
21 
22 PLATFORM_SCHEMA = LOCK_PLATFORM_SCHEMA.extend({vol.Required(CONF_API_KEY): cv.string})
23 
24 
26  hass: HomeAssistant,
27  config: ConfigType,
28  add_entities: AddEntitiesCallback,
29  discovery_info: DiscoveryInfoType | None = None,
30 ) -> None:
31  """Set up the Sesame platform."""
32  api_key = config.get(CONF_API_KEY)
33 
35  [SesameDevice(sesame) for sesame in pysesame2.get_sesames(api_key)],
36  update_before_add=True,
37  )
38 
39 
41  """Representation of a Sesame device."""
42 
43  def __init__(self, sesame: pysesame2.Sesame) -> None:
44  """Initialize the Sesame device."""
45  self._sesame: pysesame2.Sesame = sesame
46 
47  # Cached properties from pysesame object.
48  self._device_id_device_id: str | None = None
49  self._serial_serial = None
50  self._nickname_nickname: str | None = None
51  self._is_locked_is_locked = False
52  self._responsive_responsive = False
53  self._battery_battery = -1
54 
55  @property
56  def name(self) -> str | None:
57  """Return the name of the device."""
58  return self._nickname_nickname
59 
60  @property
61  def available(self) -> bool:
62  """Return True if entity is available."""
63  return self._responsive_responsive
64 
65  @property
66  def is_locked(self) -> bool:
67  """Return True if the device is currently locked, else False."""
68  return self._is_locked_is_locked
69 
70  def lock(self, **kwargs: Any) -> None:
71  """Lock the device."""
72  self._sesame.lock()
73 
74  def unlock(self, **kwargs: Any) -> None:
75  """Unlock the device."""
76  self._sesame.unlock()
77 
78  def update(self) -> None:
79  """Update the internal state of the device."""
80  status = self._sesame.get_status()
81  self._nickname_nickname = self._sesame.nickname
82  self._device_id_device_id = str(self._sesame.id)
83  self._serial_serial = self._sesame.serial
84  self._battery_battery = status["battery"]
85  self._is_locked_is_locked = status["locked"]
86  self._responsive_responsive = status["responsive"]
87 
88  @property
89  def extra_state_attributes(self) -> dict[str, Any]:
90  """Return the state attributes."""
91  return {
92  ATTR_DEVICE_ID: self._device_id_device_id,
93  ATTR_SERIAL_NO: self._serial_serial,
94  ATTR_BATTERY_LEVEL: self._battery_battery,
95  }
dict[str, Any] extra_state_attributes(self)
Definition: lock.py:89
None __init__(self, pysesame2.Sesame sesame)
Definition: lock.py:43
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
def get_status(hass, host, port)
Definition: panel.py:387
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: lock.py:30