Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Button platform for Tessie integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from tessie_api import (
9  boombox,
10  enable_keyless_driving,
11  flash_lights,
12  honk,
13  trigger_homelink,
14  wake,
15 )
16 
17 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
18 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.entity_platform import AddEntitiesCallback
20 
21 from . import TessieConfigEntry
22 from .entity import TessieEntity
23 from .models import TessieVehicleData
24 
25 PARALLEL_UPDATES = 0
26 
27 
28 @dataclass(frozen=True, kw_only=True)
30  """Describes a Tessie Button entity."""
31 
32  func: Callable
33 
34 
35 DESCRIPTIONS: tuple[TessieButtonEntityDescription, ...] = (
36  TessieButtonEntityDescription(key="wake", func=lambda: wake),
37  TessieButtonEntityDescription(key="flash_lights", func=lambda: flash_lights),
38  TessieButtonEntityDescription(key="honk", func=lambda: honk),
40  key="trigger_homelink", func=lambda: trigger_homelink
41  ),
43  key="enable_keyless_driving",
44  func=lambda: enable_keyless_driving,
45  ),
46  TessieButtonEntityDescription(key="boombox", func=lambda: boombox),
47 )
48 
49 
51  hass: HomeAssistant,
52  entry: TessieConfigEntry,
53  async_add_entities: AddEntitiesCallback,
54 ) -> None:
55  """Set up the Tessie Button platform from a config entry."""
56  data = entry.runtime_data
57 
59  TessieButtonEntity(vehicle, description)
60  for vehicle in data.vehicles
61  for description in DESCRIPTIONS
62  )
63 
64 
66  """Base class for Tessie Buttons."""
67 
68  entity_description: TessieButtonEntityDescription
69 
70  def __init__(
71  self,
72  vehicle: TessieVehicleData,
73  description: TessieButtonEntityDescription,
74  ) -> None:
75  """Initialize the Button."""
76  super().__init__(vehicle, description.key)
77  self.entity_descriptionentity_description = description
78 
79  async def async_press(self) -> None:
80  """Press the button."""
81  await self.runrun(self.entity_descriptionentity_description.func())
None __init__(self, TessieVehicleData vehicle, TessieButtonEntityDescription description)
Definition: button.py:74
None run(self, Callable[..., Awaitable[dict[str, Any]]] func, **Any kargs)
Definition: entity.py:96
None async_setup_entry(HomeAssistant hass, TessieConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:54