Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for Netgear Button."""
2 
3 from collections.abc import Callable, Coroutine
4 from dataclasses import dataclass
5 from typing import Any
6 
8  ButtonDeviceClass,
9  ButtonEntity,
10  ButtonEntityDescription,
11 )
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.const import EntityCategory
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
17 
18 from .const import DOMAIN, KEY_COORDINATOR, KEY_ROUTER
19 from .entity import NetgearRouterCoordinatorEntity
20 from .router import NetgearRouter
21 
22 
23 @dataclass(frozen=True, kw_only=True)
25  """Class describing Netgear button entities."""
26 
27  action: Callable[[NetgearRouter], Callable[[], Coroutine[Any, Any, None]]]
28 
29 
30 BUTTONS = [
32  key="reboot",
33  device_class=ButtonDeviceClass.RESTART,
34  entity_category=EntityCategory.CONFIG,
35  action=lambda router: router.async_reboot,
36  )
37 ]
38 
39 
41  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
42 ) -> None:
43  """Set up button for Netgear component."""
44  router = hass.data[DOMAIN][entry.entry_id][KEY_ROUTER]
45  coordinator = hass.data[DOMAIN][entry.entry_id][KEY_COORDINATOR]
47  NetgearRouterButtonEntity(coordinator, router, entity_description)
48  for entity_description in BUTTONS
49  )
50 
51 
53  """Netgear Router button entity."""
54 
55  entity_description: NetgearButtonEntityDescription
56 
57  def __init__(
58  self,
59  coordinator: DataUpdateCoordinator,
60  router: NetgearRouter,
61  entity_description: NetgearButtonEntityDescription,
62  ) -> None:
63  """Initialize a Netgear device."""
64  super().__init__(coordinator, router)
65  self.entity_descriptionentity_description = entity_description
66  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{router.serial_number}-{entity_description.key}"
67 
68  async def async_press(self) -> None:
69  """Triggers the button press service."""
70  async_action = self.entity_descriptionentity_description.action(self._router_router)
71  await async_action()
72 
73  @callback
74  def async_update_device(self) -> None:
75  """Update the Netgear device."""
None __init__(self, DataUpdateCoordinator coordinator, NetgearRouter router, NetgearButtonEntityDescription entity_description)
Definition: button.py:62
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:42