Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for SleepIQ buttons."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from asyncsleepiq import SleepIQBed
10 
11 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from .const import DOMAIN
17 from .coordinator import SleepIQData
18 from .entity import SleepIQEntity
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """Class to describe a Button entity."""
24 
25  press_action: Callable[[SleepIQBed], Any]
26 
27 
28 ENTITY_DESCRIPTIONS = [
30  key="calibrate",
31  name="Calibrate",
32  press_action=lambda client: client.calibrate(),
33  icon="mdi:target",
34  ),
36  key="stop-pump",
37  name="Stop Pump",
38  press_action=lambda client: client.stop_pump(),
39  icon="mdi:stop",
40  ),
41 ]
42 
43 
45  hass: HomeAssistant,
46  entry: ConfigEntry,
47  async_add_entities: AddEntitiesCallback,
48 ) -> None:
49  """Set up the sleep number buttons."""
50  data: SleepIQData = hass.data[DOMAIN][entry.entry_id]
51 
53  SleepNumberButton(bed, ed)
54  for bed in data.client.beds.values()
55  for ed in ENTITY_DESCRIPTIONS
56  )
57 
58 
60  """Representation of an SleepIQ button."""
61 
62  entity_description: SleepIQButtonEntityDescription
63 
64  def __init__(
65  self, bed: SleepIQBed, entity_description: SleepIQButtonEntityDescription
66  ) -> None:
67  """Initialize the Button."""
68  super().__init__(bed)
69  self._attr_name_attr_name = f"SleepNumber {bed.name} {entity_description.name}"
70  self._attr_unique_id_attr_unique_id = f"{bed.id}-{entity_description.key}"
71  self.entity_descriptionentity_description = entity_description
72 
73  async def async_press(self) -> None:
74  """Press the button."""
75  await self.entity_descriptionentity_description.press_action(self.bedbed)
None __init__(self, SleepIQBed bed, SleepIQButtonEntityDescription entity_description)
Definition: button.py:66
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:48