Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Vodafone Station buttons."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import Any, Final
8 
10  ButtonDeviceClass,
11  ButtonEntity,
12  ButtonEntityDescription,
13 )
14 from homeassistant.config_entries import ConfigEntry
15 from homeassistant.const import EntityCategory
16 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 from homeassistant.helpers.update_coordinator import CoordinatorEntity
19 
20 from .const import _LOGGER, DOMAIN
21 from .coordinator import VodafoneStationRouter
22 
23 
24 @dataclass(frozen=True, kw_only=True)
26  """Vodafone Station entity description."""
27 
28  press_action: Callable[[VodafoneStationRouter], Any]
29  is_suitable: Callable[[dict], bool]
30 
31 
32 BUTTON_TYPES: Final = (
34  key="reboot",
35  device_class=ButtonDeviceClass.RESTART,
36  entity_category=EntityCategory.CONFIG,
37  press_action=lambda coordinator: coordinator.api.restart_router(),
38  is_suitable=lambda _: True,
39  ),
41  key="dsl_ready",
42  translation_key="dsl_reconnect",
43  device_class=ButtonDeviceClass.RESTART,
44  entity_category=EntityCategory.DIAGNOSTIC,
45  press_action=lambda coordinator: coordinator.api.restart_connection("dsl"),
46  is_suitable=lambda info: info.get("dsl_ready") == "1",
47  ),
49  key="fiber_ready",
50  translation_key="fiber_reconnect",
51  device_class=ButtonDeviceClass.RESTART,
52  entity_category=EntityCategory.DIAGNOSTIC,
53  press_action=lambda coordinator: coordinator.api.restart_connection("fiber"),
54  is_suitable=lambda info: info.get("fiber_ready") == "1",
55  ),
57  key="vf_internet_key_online_since",
58  translation_key="internet_key_reconnect",
59  device_class=ButtonDeviceClass.RESTART,
60  entity_category=EntityCategory.DIAGNOSTIC,
61  press_action=lambda coordinator: coordinator.api.restart_connection(
62  "internet_key"
63  ),
64  is_suitable=lambda info: info.get("vf_internet_key_online_since") != "",
65  ),
66 )
67 
68 
70  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
71 ) -> None:
72  """Set up entry."""
73  _LOGGER.debug("Setting up Vodafone Station buttons")
74 
75  coordinator: VodafoneStationRouter = hass.data[DOMAIN][entry.entry_id]
76 
77  sensors_data = coordinator.data.sensors
78 
80  VodafoneStationSensorEntity(coordinator, sensor_descr)
81  for sensor_descr in BUTTON_TYPES
82  if sensor_descr.is_suitable(sensors_data)
83  )
84 
85 
87  CoordinatorEntity[VodafoneStationRouter], ButtonEntity
88 ):
89  """Representation of a Vodafone Station button."""
90 
91  _attr_has_entity_name = True
92  entity_description: VodafoneStationEntityDescription
93 
94  def __init__(
95  self,
96  coordinator: VodafoneStationRouter,
97  description: VodafoneStationEntityDescription,
98  ) -> None:
99  """Initialize a Vodafone Station sensor."""
100  super().__init__(coordinator)
101  self.entity_descriptionentity_description = description
102  self._attr_device_info_attr_device_info = coordinator.device_info
103  self._attr_unique_id_attr_unique_id = f"{coordinator.serial_number}_{description.key}"
104 
105  async def async_press(self) -> None:
106  """Triggers the Shelly button press service."""
107  await self.entity_descriptionentity_description.press_action(self.coordinator)
None __init__(self, VodafoneStationRouter coordinator, VodafoneStationEntityDescription description)
Definition: button.py:98
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:71