Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """TOLO Sauna switch controls."""
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 tololib import ToloClient, ToloStatus
10 
11 from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription
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 ToloSaunaUpdateCoordinator
18 from .entity import ToloSaunaCoordinatorEntity
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """Class describing TOLO switch entities."""
24 
25  getter: Callable[[ToloStatus], bool]
26  setter: Callable[[ToloClient, bool], bool]
27 
28 
29 SWITCHES = (
31  key="aroma_therapy_on",
32  translation_key="aroma_therapy_on",
33  getter=lambda status: status.aroma_therapy_on,
34  setter=lambda client, value: client.set_aroma_therapy_on(value),
35  ),
37  key="salt_bath_on",
38  translation_key="salt_bath_on",
39  getter=lambda status: status.salt_bath_on,
40  setter=lambda client, value: client.set_salt_bath_on(value),
41  ),
42 )
43 
44 
46  hass: HomeAssistant,
47  entry: ConfigEntry,
48  async_add_entities: AddEntitiesCallback,
49 ) -> None:
50  """Set up switch controls for TOLO Sauna."""
51  coordinator = hass.data[DOMAIN][entry.entry_id]
53  ToloSwitchEntity(coordinator, entry, description) for description in SWITCHES
54  )
55 
56 
58  """TOLO switch entity."""
59 
60  entity_description: ToloSwitchEntityDescription
61 
62  def __init__(
63  self,
64  coordinator: ToloSaunaUpdateCoordinator,
65  entry: ConfigEntry,
66  entity_description: ToloSwitchEntityDescription,
67  ) -> None:
68  """Initialize TOLO switch entity."""
69  super().__init__(coordinator, entry)
70  self.entity_descriptionentity_description = entity_description
71  self._attr_unique_id_attr_unique_id = f"{entry.entry_id}_{entity_description.key}"
72 
73  @property
74  def is_on(self) -> bool:
75  """Return if the switch is currently on."""
76  return self.entity_descriptionentity_description.getter(self.coordinator.data.status)
77 
78  def turn_on(self, **kwargs: Any) -> None:
79  """Turn the switch on."""
80  self.entity_descriptionentity_description.setter(self.coordinator.client, True)
81 
82  def turn_off(self, **kwargs: Any) -> None:
83  """Turn the switch off."""
84  self.entity_descriptionentity_description.setter(self.coordinator.client, False)
None __init__(self, ToloSaunaUpdateCoordinator coordinator, ConfigEntry entry, ToloSwitchEntityDescription entity_description)
Definition: switch.py:67
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: switch.py:49