1 """Support for Balboa Spa binary sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
8 from pybalboa
import SpaClient
11 BinarySensorDeviceClass,
13 BinarySensorEntityDescription,
18 from .
import BalboaConfigEntry
19 from .entity
import BalboaEntity
24 entry: BalboaConfigEntry,
25 async_add_entities: AddEntitiesCallback,
27 """Set up the spa's binary sensors."""
28 spa = entry.runtime_data
31 for description
in BINARY_SENSOR_DESCRIPTIONS
33 if spa.circulation_pump
is not None:
38 @dataclass(frozen=True, kw_only=True)
40 """A class that describes Balboa binary sensor entities."""
42 is_on_fn: Callable[[SpaClient], bool]
45 BINARY_SENSOR_DESCRIPTIONS = (
48 translation_key=
"filter_1",
49 device_class=BinarySensorDeviceClass.RUNNING,
50 is_on_fn=
lambda spa: spa.filter_cycle_1_running,
54 translation_key=
"filter_2",
55 device_class=BinarySensorDeviceClass.RUNNING,
56 is_on_fn=
lambda spa: spa.filter_cycle_2_running,
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,
68 """Representation of a Balboa Spa binary sensor entity."""
70 entity_description: BalboaBinarySensorEntityDescription
73 self, spa: SpaClient, description: BalboaBinarySensorEntityDescription
75 """Initialize a Balboa binary sensor entity."""
76 super().
__init__(spa, description.key)
81 """Return true if the binary sensor is on."""
None __init__(self, SpaClient spa, BalboaBinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, BalboaConfigEntry entry, AddEntitiesCallback async_add_entities)