Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for Balboa Spa binary sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 
8 from pybalboa import SpaClient
9 
11  BinarySensorDeviceClass,
12  BinarySensorEntity,
13  BinarySensorEntityDescription,
14 )
15 from homeassistant.core import HomeAssistant
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from . import BalboaConfigEntry
19 from .entity import BalboaEntity
20 
21 
23  hass: HomeAssistant,
24  entry: BalboaConfigEntry,
25  async_add_entities: AddEntitiesCallback,
26 ) -> None:
27  """Set up the spa's binary sensors."""
28  spa = entry.runtime_data
29  entities = [
30  BalboaBinarySensorEntity(spa, description)
31  for description in BINARY_SENSOR_DESCRIPTIONS
32  ]
33  if spa.circulation_pump is not None:
34  entities.append(BalboaBinarySensorEntity(spa, CIRCULATION_PUMP_DESCRIPTION))
35  async_add_entities(entities)
36 
37 
38 @dataclass(frozen=True, kw_only=True)
40  """A class that describes Balboa binary sensor entities."""
41 
42  is_on_fn: Callable[[SpaClient], bool]
43 
44 
45 BINARY_SENSOR_DESCRIPTIONS = (
47  key="Filter1",
48  translation_key="filter_1",
49  device_class=BinarySensorDeviceClass.RUNNING,
50  is_on_fn=lambda spa: spa.filter_cycle_1_running,
51  ),
53  key="Filter2",
54  translation_key="filter_2",
55  device_class=BinarySensorDeviceClass.RUNNING,
56  is_on_fn=lambda spa: spa.filter_cycle_2_running,
57  ),
58 )
59 CIRCULATION_PUMP_DESCRIPTION = BalboaBinarySensorEntityDescription(
60  key="Circ Pump",
61  translation_key="circ_pump",
62  device_class=BinarySensorDeviceClass.RUNNING,
63  is_on_fn=lambda spa: (pump := spa.circulation_pump) is not None and pump.state > 0,
64 )
65 
66 
68  """Representation of a Balboa Spa binary sensor entity."""
69 
70  entity_description: BalboaBinarySensorEntityDescription
71 
72  def __init__(
73  self, spa: SpaClient, description: BalboaBinarySensorEntityDescription
74  ) -> None:
75  """Initialize a Balboa binary sensor entity."""
76  super().__init__(spa, description.key)
77  self.entity_descriptionentity_description = description
78 
79  @property
80  def is_on(self) -> bool:
81  """Return true if the binary sensor is on."""
82  return self.entity_descriptionentity_description.is_on_fn(self._client_client)
None __init__(self, SpaClient spa, BalboaBinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, BalboaConfigEntry entry, AddEntitiesCallback async_add_entities)