Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """The yalexs_ble integration entities."""
2 
3 from __future__ import annotations
4 
5 from yalexs_ble import ConnectionInfo, LockInfo, LockState
6 
7 from homeassistant.components import bluetooth
8 from homeassistant.core import callback
9 from homeassistant.helpers import device_registry as dr
10 from homeassistant.helpers.device_registry import DeviceInfo
11 from homeassistant.helpers.entity import Entity
12 
13 from .const import DOMAIN
14 from .models import YaleXSBLEData
15 
16 
18  """Base class for yale xs ble entities."""
19 
20  _attr_has_entity_name = True
21  _attr_should_poll = False
22 
23  def __init__(self, data: YaleXSBLEData) -> None:
24  """Initialize the entity."""
25  self._data_data = data
26  self._device_device = device = data.lock
27  self._attr_available_attr_available = False
28  lock_state = device.lock_state
29  lock_info = device.lock_info
30  connection_info = device.connection_info
31  assert lock_state is not None
32  assert connection_info is not None
33  assert lock_info is not None
34  self._attr_unique_id_attr_unique_id = device.address
35  self._attr_device_info_attr_device_info = DeviceInfo(
36  name=data.title,
37  manufacturer=lock_info.manufacturer,
38  model=lock_info.model,
39  connections={(dr.CONNECTION_BLUETOOTH, device.address)},
40  identifiers={(DOMAIN, lock_info.serial)},
41  sw_version=lock_info.firmware,
42  )
43  if device.lock_state:
44  self._async_update_state_async_update_state(lock_state, lock_info, connection_info)
45 
46  @callback
48  self, new_state: LockState, lock_info: LockInfo, connection_info: ConnectionInfo
49  ) -> None:
50  """Update the state."""
51  self._attr_available_attr_available = bool(not new_state.auth or new_state.auth.successful)
52 
53  @callback
55  self, new_state: LockState, lock_info: LockInfo, connection_info: ConnectionInfo
56  ) -> None:
57  """Handle state changed."""
58  self._async_update_state_async_update_state(new_state, lock_info, connection_info)
59  self.async_write_ha_stateasync_write_ha_state()
60 
61  @callback
63  self, _service_info: bluetooth.BluetoothServiceInfoBleak
64  ) -> None:
65  """Handle device not longer being seen by the bluetooth stack."""
66  self._attr_available_attr_available = False
67  self.async_write_ha_stateasync_write_ha_state()
68 
69  async def async_added_to_hass(self) -> None:
70  """Register callbacks."""
71  self.async_on_removeasync_on_remove(
72  bluetooth.async_track_unavailable(
73  self.hasshass, self._async_device_unavailable_async_device_unavailable, self._device_device.address
74  )
75  )
76  self.async_on_removeasync_on_remove(self._device_device.register_callback(self._async_state_changed_async_state_changed))
77  return await super().async_added_to_hass()
78 
79  async def async_update(self) -> None:
80  """Request a manual update."""
81  await self._device_device.update()
None _async_update_state(self, LockState new_state, LockInfo lock_info, ConnectionInfo connection_info)
Definition: entity.py:49
None _async_device_unavailable(self, bluetooth.BluetoothServiceInfoBleak _service_info)
Definition: entity.py:64
None _async_state_changed(self, LockState new_state, LockInfo lock_info, ConnectionInfo connection_info)
Definition: entity.py:56
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331