Home Assistant Unofficial Reference 2024.12.1
cover.py
Go to the documentation of this file.
1 """Cover platform for Tessie integration."""
2 
3 from __future__ import annotations
4 
5 from itertools import chain
6 from typing import Any
7 
8 from tessie_api import (
9  close_charge_port,
10  close_sunroof,
11  close_windows,
12  open_close_rear_trunk,
13  open_front_trunk,
14  open_unlock_charge_port,
15  vent_sunroof,
16  vent_windows,
17 )
18 
20  CoverDeviceClass,
21  CoverEntity,
22  CoverEntityFeature,
23 )
24 from homeassistant.core import HomeAssistant
25 from homeassistant.helpers.entity_platform import AddEntitiesCallback
26 
27 from . import TessieConfigEntry
28 from .const import TessieCoverStates
29 from .entity import TessieEntity
30 from .models import TessieVehicleData
31 
32 PARALLEL_UPDATES = 0
33 
34 
36  hass: HomeAssistant,
37  entry: TessieConfigEntry,
38  async_add_entities: AddEntitiesCallback,
39 ) -> None:
40  """Set up the Tessie sensor platform from a config entry."""
41  data = entry.runtime_data
42 
44  chain(
45  (
46  klass(vehicle)
47  for klass in (
48  TessieWindowEntity,
49  TessieChargePortEntity,
50  TessieFrontTrunkEntity,
51  TessieRearTrunkEntity,
52  )
53  for vehicle in data.vehicles
54  ),
55  (
56  TessieSunroofEntity(vehicle)
57  for vehicle in data.vehicles
58  if vehicle.data_coordinator.data.get(
59  "vehicle_config_sun_roof_installed"
60  )
61  ),
62  )
63  )
64 
65 
67  """Cover entity for current charge."""
68 
69  _attr_device_class = CoverDeviceClass.WINDOW
70  _attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
71 
72  def __init__(self, vehicle: TessieVehicleData) -> None:
73  """Initialize the sensor."""
74  super().__init__(vehicle, "windows")
75 
76  @property
77  def is_closed(self) -> bool | None:
78  """Return if the cover is closed or not."""
79  return (
80  self.getget("vehicle_state_fd_window") == TessieCoverStates.CLOSED
81  and self.getget("vehicle_state_fp_window") == TessieCoverStates.CLOSED
82  and self.getget("vehicle_state_rd_window") == TessieCoverStates.CLOSED
83  and self.getget("vehicle_state_rp_window") == TessieCoverStates.CLOSED
84  )
85 
86  async def async_open_cover(self, **kwargs: Any) -> None:
87  """Open windows."""
88  await self.runrun(vent_windows)
89  self.setset(
90  ("vehicle_state_fd_window", TessieCoverStates.OPEN),
91  ("vehicle_state_fp_window", TessieCoverStates.OPEN),
92  ("vehicle_state_rd_window", TessieCoverStates.OPEN),
93  ("vehicle_state_rp_window", TessieCoverStates.OPEN),
94  )
95 
96  async def async_close_cover(self, **kwargs: Any) -> None:
97  """Close windows."""
98  await self.runrun(close_windows)
99  self.setset(
100  ("vehicle_state_fd_window", TessieCoverStates.CLOSED),
101  ("vehicle_state_fp_window", TessieCoverStates.CLOSED),
102  ("vehicle_state_rd_window", TessieCoverStates.CLOSED),
103  ("vehicle_state_rp_window", TessieCoverStates.CLOSED),
104  )
105 
106 
108  """Cover entity for the charge port."""
109 
110  _attr_device_class = CoverDeviceClass.DOOR
111  _attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
112 
113  def __init__(self, vehicle: TessieVehicleData) -> None:
114  """Initialize the sensor."""
115  super().__init__(vehicle, "charge_state_charge_port_door_open")
116 
117  @property
118  def is_closed(self) -> bool | None:
119  """Return if the cover is closed or not."""
120  return not self._value_value_value
121 
122  async def async_open_cover(self, **kwargs: Any) -> None:
123  """Open windows."""
124  await self.runrun(open_unlock_charge_port)
125  self.setset((self.keykey, True))
126 
127  async def async_close_cover(self, **kwargs: Any) -> None:
128  """Close windows."""
129  await self.runrun(close_charge_port)
130  self.setset((self.keykey, False))
131 
132 
134  """Cover entity for the charge port."""
135 
136  _attr_device_class = CoverDeviceClass.DOOR
137  _attr_supported_features = CoverEntityFeature.OPEN
138 
139  def __init__(self, vehicle: TessieVehicleData) -> None:
140  """Initialize the sensor."""
141  super().__init__(vehicle, "vehicle_state_ft")
142 
143  @property
144  def is_closed(self) -> bool | None:
145  """Return if the cover is closed or not."""
146  return self._value_value_value_value == TessieCoverStates.CLOSED
147 
148  async def async_open_cover(self, **kwargs: Any) -> None:
149  """Open front trunk."""
150  await self.runrun(open_front_trunk)
151  self.setset((self.keykey, TessieCoverStates.OPEN))
152 
153 
155  """Cover entity for the charge port."""
156 
157  _attr_device_class = CoverDeviceClass.DOOR
158  _attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
159 
160  def __init__(self, vehicle: TessieVehicleData) -> None:
161  """Initialize the sensor."""
162  super().__init__(vehicle, "vehicle_state_rt")
163 
164  @property
165  def is_closed(self) -> bool | None:
166  """Return if the cover is closed or not."""
167  return self._value_value_value_value == TessieCoverStates.CLOSED
168 
169  async def async_open_cover(self, **kwargs: Any) -> None:
170  """Open rear trunk."""
171  if self.is_closedis_closedis_closed:
172  await self.runrun(open_close_rear_trunk)
173  self.setset((self.keykey, TessieCoverStates.OPEN))
174 
175  async def async_close_cover(self, **kwargs: Any) -> None:
176  """Close rear trunk."""
177  if not self.is_closedis_closedis_closed:
178  await self.runrun(open_close_rear_trunk)
179  self.setset((self.keykey, TessieCoverStates.CLOSED))
180 
181 
183  """Cover entity for the sunroof."""
184 
185  _attr_device_class = CoverDeviceClass.WINDOW
186  _attr_supported_features = CoverEntityFeature.OPEN | CoverEntityFeature.CLOSE
187 
188  def __init__(self, vehicle: TessieVehicleData) -> None:
189  """Initialize the sensor."""
190  super().__init__(vehicle, "vehicle_state_sun_roof_state")
191 
192  @property
193  def is_closed(self) -> bool | None:
194  """Return if the cover is closed or not."""
195  return self._value_value_value_value == TessieCoverStates.CLOSED
196 
197  @property
198  def current_cover_position(self) -> bool | None:
199  """Return the percentage open."""
200  return self.getget("vehicle_state_sun_roof_percent_open")
201 
202  async def async_open_cover(self, **kwargs: Any) -> None:
203  """Open sunroof."""
204  await self.runrun(vent_sunroof)
205  self.setset((self.keykey, TessieCoverStates.OPEN))
206 
207  async def async_close_cover(self, **kwargs: Any) -> None:
208  """Close sunroof."""
209  await self.runrun(close_sunroof)
210  self.setset((self.keykey, TessieCoverStates.CLOSED))
None __init__(self, TessieVehicleData vehicle)
Definition: cover.py:113
None __init__(self, TessieVehicleData vehicle)
Definition: cover.py:139
None __init__(self, TessieVehicleData vehicle)
Definition: cover.py:160
None __init__(self, TessieVehicleData vehicle)
Definition: cover.py:188
None __init__(self, TessieVehicleData vehicle)
Definition: cover.py:72
Any get(self, str|None key=None, Any|None default=None)
Definition: entity.py:52
None run(self, Callable[..., Awaitable[dict[str, Any]]] func, **Any kargs)
Definition: entity.py:96
None async_setup_entry(HomeAssistant hass, TessieConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: cover.py:39