Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Support for AVM FRITZ!SmartHome devices."""
2 
3 from __future__ import annotations
4 
5 from abc import ABC, abstractmethod
6 
7 from pyfritzhome import FritzhomeDevice
8 from pyfritzhome.devicetypes.fritzhomeentitybase import FritzhomeEntityBase
9 
10 from homeassistant.helpers.device_registry import DeviceInfo
11 from homeassistant.helpers.entity import EntityDescription
12 from homeassistant.helpers.update_coordinator import CoordinatorEntity
13 
14 from .const import DOMAIN
15 from .coordinator import FritzboxDataUpdateCoordinator
16 
17 
18 class FritzBoxEntity(CoordinatorEntity[FritzboxDataUpdateCoordinator], ABC):
19  """Basis FritzBox entity."""
20 
21  def __init__(
22  self,
23  coordinator: FritzboxDataUpdateCoordinator,
24  ain: str,
25  entity_description: EntityDescription | None = None,
26  ) -> None:
27  """Initialize the FritzBox entity."""
28  super().__init__(coordinator)
29 
30  self.ainain = ain
31  if entity_description is not None:
32  self._attr_has_entity_name_attr_has_entity_name = True
33  self.entity_descriptionentity_description = entity_description
34  self._attr_unique_id_attr_unique_id = f"{ain}_{entity_description.key}"
35  else:
36  self._attr_name_attr_name = self.datadatadatadata.name
37  self._attr_unique_id_attr_unique_id = ain
38 
39  @property
40  @abstractmethod
41  def data(self) -> FritzhomeEntityBase:
42  """Return data object from coordinator."""
43 
44 
46  """Reflects FritzhomeDevice and uses its attributes to construct FritzBoxDeviceEntity."""
47 
48  @property
49  def available(self) -> bool:
50  """Return if entity is available."""
51  return super().available and self.datadatadatadatadata.present
52 
53  @property
54  def data(self) -> FritzhomeDevice:
55  """Return device data object from coordinator."""
56  return self.coordinator.data.devices[self.ainain]
57 
58  @property
59  def device_info(self) -> DeviceInfo:
60  """Return device specific attributes."""
61  return DeviceInfo(
62  name=self.datadatadatadatadata.name,
63  identifiers={(DOMAIN, self.ainain)},
64  manufacturer=self.datadatadatadatadata.manufacturer,
65  model=self.datadatadatadatadata.productname,
66  sw_version=self.datadatadatadatadata.fw_version,
67  configuration_url=self.coordinator.configuration_url,
68  )
None __init__(self, FritzboxDataUpdateCoordinator coordinator, str ain, EntityDescription|None entity_description=None)
Definition: entity.py:26