Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for Renault button entities."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable, Coroutine
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from . import RenaultConfigEntry
14 from .entity import RenaultEntity
15 
16 
17 @dataclass(frozen=True, kw_only=True)
19  """Class describing Renault button entities."""
20 
21  async_press: Callable[[RenaultButtonEntity], Coroutine[Any, Any, Any]]
22  requires_electricity: bool = False
23 
24 
26  hass: HomeAssistant,
27  config_entry: RenaultConfigEntry,
28  async_add_entities: AddEntitiesCallback,
29 ) -> None:
30  """Set up the Renault entities from config entry."""
31  entities: list[RenaultButtonEntity] = [
32  RenaultButtonEntity(vehicle, description)
33  for vehicle in config_entry.runtime_data.vehicles.values()
34  for description in BUTTON_TYPES
35  if not description.requires_electricity or vehicle.details.uses_electricity()
36  ]
37  async_add_entities(entities)
38 
39 
41  """Mixin for button specific attributes."""
42 
43  entity_description: RenaultButtonEntityDescription
44 
45  async def async_press(self) -> None:
46  """Process the button press."""
47  await self.entity_descriptionentity_description.async_press(self)
48 
49 
50 BUTTON_TYPES: tuple[RenaultButtonEntityDescription, ...] = (
52  async_press=lambda x: x.vehicle.set_ac_start(21, None),
53  key="start_air_conditioner",
54  translation_key="start_air_conditioner",
55  ),
57  async_press=lambda x: x.vehicle.set_charge_start(),
58  key="start_charge",
59  requires_electricity=True,
60  translation_key="start_charge",
61  ),
63  async_press=lambda x: x.vehicle.set_charge_stop(),
64  key="stop_charge",
65  requires_electricity=True,
66  translation_key="stop_charge",
67  ),
68 )
None async_setup_entry(HomeAssistant hass, RenaultConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: button.py:29