Home Assistant Unofficial Reference 2024.12.1
cover.py
Go to the documentation of this file.
1 """Cover entity platform for Tailwind."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from gotailwind import (
8  TailwindDoorAlreadyInStateError,
9  TailwindDoorDisabledError,
10  TailwindDoorLockedOutError,
11  TailwindDoorOperationCommand,
12  TailwindDoorState,
13  TailwindError,
14 )
15 
17  CoverDeviceClass,
18  CoverEntity,
19  CoverEntityFeature,
20 )
21 from homeassistant.core import HomeAssistant
22 from homeassistant.exceptions import HomeAssistantError
23 from homeassistant.helpers.entity_platform import AddEntitiesCallback
24 
25 from .const import DOMAIN, LOGGER
26 from .entity import TailwindDoorEntity
27 from .typing import TailwindConfigEntry
28 
29 
31  hass: HomeAssistant,
32  entry: TailwindConfigEntry,
33  async_add_entities: AddEntitiesCallback,
34 ) -> None:
35  """Set up Tailwind cover based on a config entry."""
37  TailwindDoorCoverEntity(entry.runtime_data, door_id)
38  for door_id in entry.runtime_data.data.doors
39  )
40 
41 
43  """Representation of a Tailwind door binary sensor entity."""
44 
45  _attr_device_class = CoverDeviceClass.GARAGE
46  _attr_is_closing = False
47  _attr_is_opening = False
48  _attr_name = None
49  _attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
50 
51  @property
52  def is_closed(self) -> bool:
53  """Return if the cover is closed or not."""
54  return (
55  self.coordinator.data.doors[self.door_iddoor_id].state == TailwindDoorState.CLOSED
56  )
57 
58  async def async_open_cover(self, **kwargs: Any) -> None:
59  """Open the garage door.
60 
61  The Tailwind operating command will await the confirmation of the
62  door being opened before returning.
63  """
64  self._attr_is_opening_attr_is_opening_attr_is_opening = True
65  self.async_write_ha_stateasync_write_ha_state()
66  try:
67  await self.coordinator.tailwind.operate(
68  door=self.coordinator.data.doors[self.door_iddoor_id],
69  operation=TailwindDoorOperationCommand.OPEN,
70  )
71  except TailwindDoorDisabledError as exc:
72  raise HomeAssistantError(
73  translation_domain=DOMAIN,
74  translation_key="door_disabled",
75  ) from exc
76  except TailwindDoorLockedOutError as exc:
77  raise HomeAssistantError(
78  translation_domain=DOMAIN,
79  translation_key="door_locked_out",
80  ) from exc
81  except TailwindDoorAlreadyInStateError:
82  LOGGER.debug("Already in the requested state: %s", self.entity_identity_id)
83  except TailwindError as exc:
84  raise HomeAssistantError(
85  translation_domain=DOMAIN,
86  translation_key="communication_error",
87  ) from exc
88  finally:
89  self._attr_is_opening_attr_is_opening_attr_is_opening = False
90  await self.coordinator.async_request_refresh()
91 
92  async def async_close_cover(self, **kwargs: Any) -> None:
93  """Close the garage door.
94 
95  The Tailwind operating command will await the confirmation of the
96  door being closed before returning.
97  """
98  self._attr_is_closing_attr_is_closing_attr_is_closing = True
99  self.async_write_ha_stateasync_write_ha_state()
100  try:
101  await self.coordinator.tailwind.operate(
102  door=self.coordinator.data.doors[self.door_iddoor_id],
103  operation=TailwindDoorOperationCommand.CLOSE,
104  )
105  except TailwindDoorDisabledError as exc:
106  raise HomeAssistantError(
107  translation_domain=DOMAIN,
108  translation_key="door_disabled",
109  ) from exc
110  except TailwindDoorLockedOutError as exc:
111  raise HomeAssistantError(
112  translation_domain=DOMAIN,
113  translation_key="door_locked_out",
114  ) from exc
115  except TailwindDoorAlreadyInStateError:
116  LOGGER.debug("Already in the requested state: %s", self.entity_identity_id)
117  except TailwindError as exc:
118  raise HomeAssistantError(
119  translation_domain=DOMAIN,
120  translation_key="communication_error",
121  ) from exc
122  finally:
123  self._attr_is_closing_attr_is_closing_attr_is_closing = False
124  await self.coordinator.async_request_refresh()
None async_setup_entry(HomeAssistant hass, TailwindConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: cover.py:34