Home Assistant Unofficial Reference 2024.12.1
cover.py
Go to the documentation of this file.
1 """Support for Acmeda Roller Blinds."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
8  ATTR_POSITION,
9  CoverEntity,
10  CoverEntityFeature,
11 )
12 from homeassistant.core import HomeAssistant, callback
13 from homeassistant.helpers.dispatcher import async_dispatcher_connect
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from . import AcmedaConfigEntry
17 from .const import ACMEDA_HUB_UPDATE
18 from .entity import AcmedaEntity
19 from .helpers import async_add_acmeda_entities
20 
21 
23  hass: HomeAssistant,
24  config_entry: AcmedaConfigEntry,
25  async_add_entities: AddEntitiesCallback,
26 ) -> None:
27  """Set up the Acmeda Rollers from a config entry."""
28  hub = config_entry.runtime_data
29 
30  current: set[int] = set()
31 
32  @callback
33  def async_add_acmeda_covers() -> None:
35  hass, AcmedaCover, config_entry, current, async_add_entities
36  )
37 
38  hub.cleanup_callbacks.append(
40  hass,
41  ACMEDA_HUB_UPDATE.format(config_entry.entry_id),
42  async_add_acmeda_covers,
43  )
44  )
45 
46 
48  """Representation of an Acmeda cover device."""
49 
50  _attr_name = None
51 
52  @property
53  def current_cover_position(self) -> int | None:
54  """Return the current position of the roller blind.
55 
56  None is unknown, 0 is closed, 100 is fully open.
57  """
58  position = None
59  if self.rollerroller.type != 7:
60  position = 100 - self.rollerroller.closed_percent
61  return position
62 
63  @property
64  def current_cover_tilt_position(self) -> int | None:
65  """Return the current tilt of the roller blind.
66 
67  None is unknown, 0 is closed, 100 is fully open.
68  """
69  position = None
70  if self.rollerroller.type in (7, 10):
71  position = 100 - self.rollerroller.closed_percent
72  return position
73 
74  @property
75  def supported_features(self) -> CoverEntityFeature:
76  """Flag supported features."""
77  supported_features = CoverEntityFeature(0)
78  if self.current_cover_positioncurrent_cover_positioncurrent_cover_positioncurrent_cover_position is not None:
79  supported_features |= (
80  CoverEntityFeature.OPEN
81  | CoverEntityFeature.CLOSE
82  | CoverEntityFeature.STOP
83  | CoverEntityFeature.SET_POSITION
84  )
85  if self.current_cover_tilt_positioncurrent_cover_tilt_positioncurrent_cover_tilt_positioncurrent_cover_tilt_position is not None:
86  supported_features |= (
87  CoverEntityFeature.OPEN_TILT
88  | CoverEntityFeature.CLOSE_TILT
89  | CoverEntityFeature.STOP_TILT
90  | CoverEntityFeature.SET_TILT_POSITION
91  )
92 
93  return supported_features
94 
95  @property
96  def is_closed(self) -> bool:
97  """Return if the cover is closed."""
98  return self.rollerroller.closed_percent == 100 # type: ignore[no-any-return]
99 
100  async def async_close_cover(self, **kwargs: Any) -> None:
101  """Close the roller."""
102  await self.rollerroller.move_down()
103 
104  async def async_open_cover(self, **kwargs: Any) -> None:
105  """Open the roller."""
106  await self.rollerroller.move_up()
107 
108  async def async_stop_cover(self, **kwargs: Any) -> None:
109  """Stop the roller."""
110  await self.rollerroller.move_stop()
111 
112  async def async_set_cover_position(self, **kwargs: Any) -> None:
113  """Move the roller shutter to a specific position."""
114  await self.rollerroller.move_to(100 - kwargs[ATTR_POSITION])
115 
116  async def async_close_cover_tilt(self, **kwargs: Any) -> None:
117  """Close the roller."""
118  await self.rollerroller.move_down()
119 
120  async def async_open_cover_tilt(self, **kwargs: Any) -> None:
121  """Open the roller."""
122  await self.rollerroller.move_up()
123 
124  async def async_stop_cover_tilt(self, **kwargs: Any) -> None:
125  """Stop the roller."""
126  await self.rollerroller.move_stop()
127 
128  async def async_set_cover_tilt_position(self, **kwargs: Any) -> None:
129  """Tilt the roller shutter to a specific position."""
130  await self.rollerroller.move_to(100 - kwargs[ATTR_POSITION])
None async_close_cover(self, **Any kwargs)
Definition: cover.py:100
None async_close_cover_tilt(self, **Any kwargs)
Definition: cover.py:116
None async_stop_cover(self, **Any kwargs)
Definition: cover.py:108
CoverEntityFeature supported_features(self)
Definition: cover.py:75
None async_open_cover(self, **Any kwargs)
Definition: cover.py:104
None async_set_cover_tilt_position(self, **Any kwargs)
Definition: cover.py:128
None async_stop_cover_tilt(self, **Any kwargs)
Definition: cover.py:124
None async_set_cover_position(self, **Any kwargs)
Definition: cover.py:112
None async_open_cover_tilt(self, **Any kwargs)
Definition: cover.py:120
None async_setup_entry(HomeAssistant hass, AcmedaConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: cover.py:26
None async_add_acmeda_entities(HomeAssistant hass, type entity_class, AcmedaConfigEntry config_entry, set[int] current, AddEntitiesCallback async_add_entities)
Definition: helpers.py:27
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103