Home Assistant Unofficial Reference 2024.12.1
select.py
Go to the documentation of this file.
1 """Support for Renault sensors."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 from typing import cast
7 
8 from renault_api.kamereon.models import KamereonVehicleBatteryStatusData
9 
10 from homeassistant.components.select import SelectEntity, SelectEntityDescription
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 from homeassistant.helpers.typing import StateType
14 
15 from . import RenaultConfigEntry
16 from .entity import RenaultDataEntity, RenaultDataEntityDescription
17 
18 
19 @dataclass(frozen=True, kw_only=True)
21  SelectEntityDescription, RenaultDataEntityDescription
22 ):
23  """Class describing Renault select entities."""
24 
25  data_key: str
26 
27 
29  hass: HomeAssistant,
30  config_entry: RenaultConfigEntry,
31  async_add_entities: AddEntitiesCallback,
32 ) -> None:
33  """Set up the Renault entities from config entry."""
34  entities: list[RenaultSelectEntity] = [
35  RenaultSelectEntity(vehicle, description)
36  for vehicle in config_entry.runtime_data.vehicles.values()
37  for description in SENSOR_TYPES
38  if description.coordinator in vehicle.coordinators
39  ]
40  async_add_entities(entities)
41 
42 
44  RenaultDataEntity[KamereonVehicleBatteryStatusData], SelectEntity
45 ):
46  """Mixin for sensor specific attributes."""
47 
48  entity_description: RenaultSelectEntityDescription
49 
50  @property
51  def current_option(self) -> str | None:
52  """Return the selected entity option to represent the entity state."""
53  return cast(str, self.datadatadata)
54 
55  @property
56  def data(self) -> StateType:
57  """Return the state of this entity."""
58  return self._get_data_attr_get_data_attr(self.entity_descriptionentity_description.data_key)
59 
60  async def async_select_option(self, option: str) -> None:
61  """Change the selected option."""
62  await self.vehiclevehicle.set_charge_mode(option)
63 
64 
65 SENSOR_TYPES: tuple[RenaultSelectEntityDescription, ...] = (
67  key="charge_mode",
68  coordinator="charge_mode",
69  data_key="chargeMode",
70  translation_key="charge_mode",
71  options=["always", "always_charging", "schedule_mode", "scheduled"],
72  ),
73 )
None async_setup_entry(HomeAssistant hass, RenaultConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: select.py:32