Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Advantage Air parent entity class."""
2 
3 from typing import Any
4 
5 from advantage_air import ApiError
6 
7 from homeassistant.exceptions import HomeAssistantError
8 from homeassistant.helpers.device_registry import DeviceInfo
9 from homeassistant.helpers.update_coordinator import CoordinatorEntity
10 
11 from .const import DOMAIN
12 from .models import AdvantageAirData
13 
14 
16  """Parent class for Advantage Air Entities."""
17 
18  _attr_has_entity_name = True
19 
20  def __init__(self, instance: AdvantageAirData) -> None:
21  """Initialize common aspects of an Advantage Air entity."""
22  super().__init__(instance.coordinator)
23  self._attr_unique_id: str = self.coordinator.data["system"]["rid"]
24 
25  def update_handle_factory(self, func, *keys):
26  """Return the provided API function wrapped.
27 
28  Adds an error handler and coordinator refresh, and presets keys.
29  """
30 
31  async def update_handle(*values):
32  try:
33  if await func(*keys, *values):
34  await self.coordinator.async_request_refresh()
35  except ApiError as err:
36  raise HomeAssistantError(err) from err
37 
38  return update_handle
39 
40 
42  """Parent class for Advantage Air AC Entities."""
43 
44  def __init__(self, instance: AdvantageAirData, ac_key: str) -> None:
45  """Initialize common aspects of an Advantage Air ac entity."""
46  super().__init__(instance)
47 
48  self.ac_key: str = ac_key
49  self._attr_unique_id += f"-{ac_key}"
50 
51  self._attr_device_info_attr_device_info = DeviceInfo(
52  via_device=(DOMAIN, self.coordinator.data["system"]["rid"]),
53  identifiers={(DOMAIN, self._attr_unique_id)},
54  manufacturer="Advantage Air",
55  model=self.coordinator.data["system"]["sysType"],
56  name=self.coordinator.data["aircons"][self.ac_key]["info"]["name"],
57  )
58  self.async_update_acasync_update_ac = self.update_handle_factoryupdate_handle_factory(
59  instance.api.aircon.async_update_ac, self.ac_key
60  )
61 
62  @property
63  def _ac(self) -> dict[str, Any]:
64  return self.coordinator.data["aircons"][self.ac_key]["info"]
65 
66  @property
67  def _myzone(self) -> dict[str, Any] | None:
68  return self.coordinator.data["aircons"][self.ac_key]["zones"].get(
69  f"z{self._ac['myZone']:02}"
70  )
71 
72 
74  """Parent class for Advantage Air Zone Entities."""
75 
76  def __init__(self, instance: AdvantageAirData, ac_key: str, zone_key: str) -> None:
77  """Initialize common aspects of an Advantage Air zone entity."""
78  super().__init__(instance, ac_key)
79 
80  self.zone_key: str = zone_key
81  self._attr_unique_id += f"-{zone_key}"
82  self.async_update_zoneasync_update_zone = self.update_handle_factoryupdate_handle_factory(
83  instance.api.aircon.async_update_zone, self.ac_key, self.zone_key
84  )
85 
86  @property
87  def _zone(self) -> dict[str, Any]:
88  return self.coordinator.data["aircons"][self.ac_key]["zones"][self.zone_key]
89 
90 
92  """Parent class for Advantage Air Things Entities."""
93 
94  _attr_name = None
95 
96  def __init__(self, instance: AdvantageAirData, thing: dict[str, Any]) -> None:
97  """Initialize common aspects of an Advantage Air Things entity."""
98  super().__init__(instance)
99 
100  self._id_id = thing["id"]
101  self._attr_unique_id += f"-{self._id}"
102 
103  self._attr_device_info_attr_device_info = DeviceInfo(
104  via_device=(DOMAIN, self.coordinator.data["system"]["rid"]),
105  identifiers={(DOMAIN, self._attr_unique_id)},
106  manufacturer="Advantage Air",
107  model="MyPlace",
108  name=thing["name"],
109  )
110  self.async_update_valueasync_update_value = self.update_handle_factoryupdate_handle_factory(
111  instance.api.things.async_update_value, self._id_id
112  )
113 
114  @property
115  def _data(self) -> dict:
116  """Return the thing data."""
117  return self.coordinator.data["myThings"]["things"][self._id_id]
118 
119  @property
120  def is_on(self):
121  """Return if the thing is considered on."""
122  return self._data_data["value"] > 0
123 
124  async def async_turn_on(self, **kwargs: Any) -> None:
125  """Turn the thing on."""
126  await self.async_update_valueasync_update_value(True)
127 
128  async def async_turn_off(self, **kwargs: Any) -> None:
129  """Turn the thing off."""
130  await self.async_update_valueasync_update_value(False)
None __init__(self, AdvantageAirData instance, str ac_key)
Definition: entity.py:44
None __init__(self, AdvantageAirData instance)
Definition: entity.py:20
None __init__(self, AdvantageAirData instance, dict[str, Any] thing)
Definition: entity.py:96
None __init__(self, AdvantageAirData instance, str ac_key, str zone_key)
Definition: entity.py:76
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88