Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Contains buttons exposed by the Starlink integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Awaitable, Callable
6 from dataclasses import dataclass
7 
9  ButtonDeviceClass,
10  ButtonEntity,
11  ButtonEntityDescription,
12 )
13 from homeassistant.config_entries import ConfigEntry
14 from homeassistant.const import EntityCategory
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from .const import DOMAIN
19 from .coordinator import StarlinkUpdateCoordinator
20 from .entity import StarlinkEntity
21 
22 
24  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
25 ) -> None:
26  """Set up all binary sensors for this entry."""
27  coordinator = hass.data[DOMAIN][entry.entry_id]
28 
30  StarlinkButtonEntity(coordinator, description) for description in BUTTONS
31  )
32 
33 
34 @dataclass(frozen=True, kw_only=True)
36  """Describes a Starlink button entity."""
37 
38  press_fn: Callable[[StarlinkUpdateCoordinator], Awaitable[None]]
39 
40 
42  """A ButtonEntity for Starlink devices. Handles creating unique IDs."""
43 
44  entity_description: StarlinkButtonEntityDescription
45 
46  async def async_press(self) -> None:
47  """Press the button."""
48  return await self.entity_descriptionentity_description.press_fn(self.coordinator)
49 
50 
51 BUTTONS = [
53  key="reboot",
54  device_class=ButtonDeviceClass.RESTART,
55  entity_category=EntityCategory.DIAGNOSTIC,
56  press_fn=lambda coordinator: coordinator.async_reboot_starlink(),
57  )
58 ]