1 """Base classes for Renault entities."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from typing
import cast
12 from .coordinator
import RenaultDataUpdateCoordinator, T
13 from .renault_vehicle
import RenaultVehicleProxy
16 @dataclass(frozen=True)
18 """Mixin for required keys."""
23 @dataclass(frozen=True)
25 """Class describing Renault data entities."""
28 class RenaultEntity(Entity):
29 """Implementation of a Renault entity with a data coordinator."""
31 _attr_has_entity_name =
True
32 entity_description: EntityDescription
36 vehicle: RenaultVehicleProxy,
37 description: EntityDescription,
39 """Initialise entity."""
43 self.
_attr_unique_id_attr_unique_id = f
"{self.vehicle.details.vin}_{description.key}".lower()
47 CoordinatorEntity[RenaultDataUpdateCoordinator[T]], RenaultEntity
49 """Implementation of a Renault entity with a data coordinator."""
53 vehicle: RenaultVehicleProxy,
54 description: RenaultDataEntityDescription,
56 """Initialise entity."""
57 super().
__init__(vehicle.coordinators[description.coordinator])
58 RenaultEntity.__init__(self, vehicle, description)
61 """Return the attribute value from the coordinator data."""
62 if self.coordinator.data
is None:
64 return cast(StateType, getattr(self.coordinator.data, key))
None __init__(self, RenaultVehicleProxy vehicle, RenaultDataEntityDescription description)
StateType _get_data_attr(self, str key)
None __init__(self, RenaultVehicleProxy vehicle, EntityDescription description)