Home Assistant Unofficial Reference 2024.12.1
cover.py
Go to the documentation of this file.
1 """Support for Slide slides."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from homeassistant.components.cover import ATTR_POSITION, CoverDeviceClass, CoverEntity
9 from homeassistant.const import ATTR_ID
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
13 
14 from .const import API, DEFAULT_OFFSET, DOMAIN, SLIDES
15 
16 _LOGGER = logging.getLogger(__name__)
17 
18 CLOSED = "closed"
19 CLOSING = "closing"
20 OPENING = "opening"
21 
22 
24  hass: HomeAssistant,
25  config: ConfigType,
26  async_add_entities: AddEntitiesCallback,
27  discovery_info: DiscoveryInfoType | None = None,
28 ) -> None:
29  """Set up cover(s) for Slide platform."""
30 
31  if discovery_info is None:
32  return
33 
34  entities = []
35 
36  for slide in hass.data[DOMAIN][SLIDES].values():
37  _LOGGER.debug("Setting up Slide entity: %s", slide)
38  entities.append(SlideCover(hass.data[DOMAIN][API], slide))
39 
40  async_add_entities(entities)
41 
42 
44  """Representation of a Slide cover."""
45 
46  _attr_assumed_state = True
47  _attr_device_class = CoverDeviceClass.CURTAIN
48 
49  def __init__(self, api, slide):
50  """Initialize the cover."""
51  self._api_api = api
52  self._slide_slide = slide
53  self._id_id = slide["id"]
54  self._attr_extra_state_attributes_attr_extra_state_attributes = {ATTR_ID: self._id_id}
55  self._attr_unique_id_attr_unique_id = slide["mac"]
56  self._attr_name_attr_name = slide["name"]
57  self._invert_invert = slide["invert"]
58 
59  @property
60  def is_opening(self) -> bool:
61  """Return if the cover is opening or not."""
62  return self._slide_slide["state"] == OPENING
63 
64  @property
65  def is_closing(self) -> bool:
66  """Return if the cover is closing or not."""
67  return self._slide_slide["state"] == CLOSING
68 
69  @property
70  def is_closed(self) -> bool | None:
71  """Return None if status is unknown, True if closed, else False."""
72  if self._slide_slide["state"] is None:
73  return None
74  return self._slide_slide["state"] == CLOSED
75 
76  @property
77  def available(self) -> bool:
78  """Return False if state is not available."""
79  return self._slide_slide["online"]
80 
81  @property
82  def current_cover_position(self) -> int | None:
83  """Return the current position of cover shutter."""
84  if (pos := self._slide_slide["pos"]) is not None:
85  if (1 - pos) <= DEFAULT_OFFSET or pos <= DEFAULT_OFFSET:
86  pos = round(pos)
87  if not self._invert_invert:
88  pos = 1 - pos
89  pos = int(pos * 100)
90  return pos
91 
92  async def async_open_cover(self, **kwargs: Any) -> None:
93  """Open the cover."""
94  self._slide_slide["state"] = OPENING
95  await self._api_api.slide_open(self._id_id)
96 
97  async def async_close_cover(self, **kwargs: Any) -> None:
98  """Close the cover."""
99  self._slide_slide["state"] = CLOSING
100  await self._api_api.slide_close(self._id_id)
101 
102  async def async_stop_cover(self, **kwargs: Any) -> None:
103  """Stop the cover."""
104  await self._api_api.slide_stop(self._id_id)
105 
106  async def async_set_cover_position(self, **kwargs: Any) -> None:
107  """Move the cover to a specific position."""
108  position = kwargs[ATTR_POSITION] / 100
109  if not self._invert_invert:
110  position = 1 - position
111 
112  if self._slide_slide["pos"] is not None:
113  if position > self._slide_slide["pos"]:
114  self._slide_slide["state"] = CLOSING
115  else:
116  self._slide_slide["state"] = OPENING
117 
118  await self._api_api.slide_set_position(self._id_id, position)
None async_stop_cover(self, **Any kwargs)
Definition: cover.py:102
None async_close_cover(self, **Any kwargs)
Definition: cover.py:97
None async_open_cover(self, **Any kwargs)
Definition: cover.py:92
None async_set_cover_position(self, **Any kwargs)
Definition: cover.py:106
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: cover.py:28