Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Common classes and elements for Omnilogic Integration."""
2 
3 from typing import Any
4 
5 from homeassistant.helpers.device_registry import DeviceInfo
6 from homeassistant.helpers.update_coordinator import CoordinatorEntity
7 
8 from .const import DOMAIN
9 from .coordinator import OmniLogicUpdateCoordinator
10 
11 
12 class OmniLogicEntity(CoordinatorEntity[OmniLogicUpdateCoordinator]):
13  """Defines the base OmniLogic entity."""
14 
15  def __init__(
16  self,
17  coordinator: OmniLogicUpdateCoordinator,
18  kind: str,
19  name: str,
20  item_id: tuple,
21  icon: str,
22  ) -> None:
23  """Initialize the OmniLogic Entity."""
24  super().__init__(coordinator)
25 
26  bow_id = None
27  entity_data = coordinator.data[item_id]
28 
29  backyard_id = item_id[:2]
30  if len(item_id) == 6:
31  bow_id = item_id[:4]
32 
33  msp_system_id = coordinator.data[backyard_id]["systemId"]
34  entity_friendly_name = f"{coordinator.data[backyard_id]['BackyardName']} "
35  unique_id = f"{msp_system_id}"
36 
37  if bow_id is not None:
38  unique_id = f"{unique_id}_{coordinator.data[bow_id]['systemId']}"
39 
40  if kind != "Heaters":
41  entity_friendly_name = (
42  f"{entity_friendly_name}{coordinator.data[bow_id]['Name']} "
43  )
44  else:
45  entity_friendly_name = f"{entity_friendly_name}{coordinator.data[bow_id]['Operation']['VirtualHeater']['Name']} "
46 
47  unique_id = f"{unique_id}_{coordinator.data[item_id]['systemId']}_{kind}"
48 
49  if entity_data.get("Name") is not None:
50  entity_friendly_name = f"{entity_friendly_name} {entity_data['Name']}"
51 
52  entity_friendly_name = f"{entity_friendly_name} {name}"
53 
54  unique_id = unique_id.replace(" ", "_")
55 
56  self._kind_kind = kind
57  self._name_name = entity_friendly_name
58  self._unique_id_unique_id = unique_id
59  self._item_id_item_id = item_id
60  self._icon_icon = icon
61  self._attrs: dict[str, Any] = {}
62  self._msp_system_id_msp_system_id = msp_system_id
63  self._backyard_name_backyard_name = coordinator.data[backyard_id]["BackyardName"]
64 
65  @property
66  def unique_id(self) -> str:
67  """Return a unique, Home Assistant friendly identifier for this entity."""
68  return self._unique_id_unique_id
69 
70  @property
71  def name(self) -> str:
72  """Return the name of the entity."""
73  return self._name_name
74 
75  @property
76  def icon(self):
77  """Return the icon for the entity."""
78  return self._icon_icon
79 
80  @property
82  """Return the attributes."""
83  return self._attrs
84 
85  @property
86  def device_info(self) -> DeviceInfo:
87  """Define the device as back yard/MSP System."""
88  return DeviceInfo(
89  identifiers={(DOMAIN, self._msp_system_id_msp_system_id)},
90  manufacturer="Hayward",
91  model="OmniLogic",
92  name=self._backyard_name_backyard_name,
93  )
None __init__(self, OmniLogicUpdateCoordinator coordinator, str kind, str name, tuple item_id, str icon)
Definition: entity.py:22