Home Assistant Unofficial Reference 2024.12.1
entity.py
Go to the documentation of this file.
1 """Base classes for Renault entities."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 from typing import cast
7 
8 from homeassistant.helpers.entity import Entity, EntityDescription
9 from homeassistant.helpers.typing import StateType
10 from homeassistant.helpers.update_coordinator import CoordinatorEntity
11 
12 from .coordinator import RenaultDataUpdateCoordinator, T
13 from .renault_vehicle import RenaultVehicleProxy
14 
15 
16 @dataclass(frozen=True)
18  """Mixin for required keys."""
19 
20  coordinator: str
21 
22 
23 @dataclass(frozen=True)
25  """Class describing Renault data entities."""
26 
27 
28 class RenaultEntity(Entity):
29  """Implementation of a Renault entity with a data coordinator."""
30 
31  _attr_has_entity_name = True
32  entity_description: EntityDescription
33 
34  def __init__(
35  self,
36  vehicle: RenaultVehicleProxy,
37  description: EntityDescription,
38  ) -> None:
39  """Initialise entity."""
40  self.vehiclevehicle = vehicle
41  self.entity_descriptionentity_description = description
42  self._attr_device_info_attr_device_info = self.vehiclevehicle.device_info
43  self._attr_unique_id_attr_unique_id = f"{self.vehicle.details.vin}_{description.key}".lower()
44 
45 
47  CoordinatorEntity[RenaultDataUpdateCoordinator[T]], RenaultEntity
48 ):
49  """Implementation of a Renault entity with a data coordinator."""
50 
51  def __init__(
52  self,
53  vehicle: RenaultVehicleProxy,
54  description: RenaultDataEntityDescription,
55  ) -> None:
56  """Initialise entity."""
57  super().__init__(vehicle.coordinators[description.coordinator])
58  RenaultEntity.__init__(self, vehicle, description)
59 
60  def _get_data_attr(self, key: str) -> StateType:
61  """Return the attribute value from the coordinator data."""
62  if self.coordinator.data is None:
63  return None # type: ignore[unreachable]
64  return cast(StateType, getattr(self.coordinator.data, key))
None __init__(self, RenaultVehicleProxy vehicle, RenaultDataEntityDescription description)
Definition: entity.py:55
None __init__(self, RenaultVehicleProxy vehicle, EntityDescription description)
Definition: entity.py:38