Home Assistant Unofficial Reference 2024.12.1
cover.py
Go to the documentation of this file.
1 """Idasen Desk integration cover platform."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from bleak.exc import BleakError
8 
10  ATTR_POSITION,
11  CoverDeviceClass,
12  CoverEntity,
13  CoverEntityFeature,
14 )
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.core import HomeAssistant, callback
17 from homeassistant.exceptions import HomeAssistantError
18 from homeassistant.helpers.device_registry import DeviceInfo
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 from homeassistant.helpers.update_coordinator import CoordinatorEntity
21 
22 from . import DeskData, IdasenDeskCoordinator
23 from .const import DOMAIN
24 
25 
27  hass: HomeAssistant,
28  entry: ConfigEntry,
29  async_add_entities: AddEntitiesCallback,
30 ) -> None:
31  """Set up the cover platform for Idasen Desk."""
32  data: DeskData = hass.data[DOMAIN][entry.entry_id]
34  [IdasenDeskCover(data.address, data.device_info, data.coordinator)]
35  )
36 
37 
38 class IdasenDeskCover(CoordinatorEntity[IdasenDeskCoordinator], CoverEntity):
39  """Representation of Idasen Desk device."""
40 
41  _attr_device_class = CoverDeviceClass.DAMPER
42  _attr_supported_features = (
43  CoverEntityFeature.OPEN
44  | CoverEntityFeature.CLOSE
45  | CoverEntityFeature.STOP
46  | CoverEntityFeature.SET_POSITION
47  )
48  _attr_has_entity_name = True
49  _attr_name = None
50  _attr_translation_key = "desk"
51 
52  def __init__(
53  self,
54  address: str,
55  device_info: DeviceInfo,
56  coordinator: IdasenDeskCoordinator,
57  ) -> None:
58  """Initialize an Idasen Desk cover."""
59  super().__init__(coordinator)
60  self._desk_desk = coordinator.desk
61  self._attr_unique_id_attr_unique_id = address
62  self._attr_device_info_attr_device_info = device_info
63 
64  self._attr_current_cover_position_attr_current_cover_position = self._desk_desk.height_percent
65 
66  @property
67  def available(self) -> bool:
68  """Return True if entity is available."""
69  return super().available and self._desk_desk.is_connected is True
70 
71  @property
72  def is_closed(self) -> bool:
73  """Return if the cover is closed."""
75 
76  async def async_close_cover(self, **kwargs: Any) -> None:
77  """Close the cover."""
78  try:
79  await self._desk_desk.move_down()
80  except BleakError as err:
81  raise HomeAssistantError("Failed to move down: Bluetooth error") from err
82 
83  async def async_open_cover(self, **kwargs: Any) -> None:
84  """Open the cover."""
85  try:
86  await self._desk_desk.move_up()
87  except BleakError as err:
88  raise HomeAssistantError("Failed to move up: Bluetooth error") from err
89 
90  async def async_stop_cover(self, **kwargs: Any) -> None:
91  """Stop the cover."""
92  try:
93  await self._desk_desk.stop()
94  except BleakError as err:
95  raise HomeAssistantError("Failed to stop moving: Bluetooth error") from err
96 
97  async def async_set_cover_position(self, **kwargs: Any) -> None:
98  """Move the cover shutter to a specific position."""
99  try:
100  await self._desk_desk.move_to(int(kwargs[ATTR_POSITION]))
101  except BleakError as err:
102  raise HomeAssistantError(
103  "Failed to move to specified position: Bluetooth error"
104  ) from err
105 
106  @callback
107  def _handle_coordinator_update(self, *args: Any) -> None:
108  """Handle data update."""
109  self._attr_current_cover_position_attr_current_cover_position = self._desk_desk.height_percent
110  self.async_write_ha_stateasync_write_ha_state()
None __init__(self, str address, DeviceInfo device_info, IdasenDeskCoordinator coordinator)
Definition: cover.py:57
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: cover.py:30