1 """Flume binary sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
8 BinarySensorDeviceClass,
10 BinarySensorEntityDescription,
20 FLUME_NOTIFICATIONS_COORDINATOR,
25 KEY_DEVICE_LOCATION_NAME,
27 NOTIFICATION_HIGH_FLOW,
28 NOTIFICATION_LEAK_DETECTED,
29 NOTIFICATION_LOW_BATTERY,
31 from .coordinator
import (
32 FlumeDeviceConnectionUpdateCoordinator,
33 FlumeNotificationDataUpdateCoordinator,
35 from .entity
import FlumeEntity
36 from .util
import get_valid_flume_devices
39 key=
"connected", device_class=BinarySensorDeviceClass.CONNECTIVITY
43 @dataclass(frozen=True, kw_only=True)
45 """Describes a binary sensor entity."""
50 FLUME_BINARY_NOTIFICATION_SENSORS: tuple[FlumeBinarySensorEntityDescription, ...] = (
53 translation_key=
"leak",
54 entity_category=EntityCategory.DIAGNOSTIC,
55 event_rule=NOTIFICATION_LEAK_DETECTED,
59 translation_key=
"flow",
60 entity_category=EntityCategory.DIAGNOSTIC,
61 event_rule=NOTIFICATION_HIGH_FLOW,
65 entity_category=EntityCategory.DIAGNOSTIC,
66 device_class=BinarySensorDeviceClass.BATTERY,
67 event_rule=NOTIFICATION_LOW_BATTERY,
74 config_entry: ConfigEntry,
75 async_add_entities: AddEntitiesCallback,
77 """Set up a Flume binary sensor.."""
78 flume_domain_data = hass.data[DOMAIN][config_entry.entry_id]
79 flume_devices = flume_domain_data[FLUME_DEVICES]
81 flume_entity_list: list[
82 FlumeNotificationBinarySensor | FlumeConnectionBinarySensor
86 hass=hass, flume_devices=flume_devices
88 notification_coordinator = flume_domain_data[FLUME_NOTIFICATIONS_COORDINATOR]
90 for device
in flume_devices:
91 device_id = device[KEY_DEVICE_ID]
92 device_location_name = device[KEY_DEVICE_LOCATION][KEY_DEVICE_LOCATION_NAME]
95 coordinator=connection_coordinator,
96 description=BINARY_SENSOR_DESCRIPTION_CONNECTED,
98 location_name=device_location_name,
99 is_bridge=(device[KEY_DEVICE_TYPE]
is FLUME_TYPE_BRIDGE),
102 flume_entity_list.append(connection_sensor)
104 if device[KEY_DEVICE_TYPE] != FLUME_TYPE_SENSOR:
108 flume_entity_list.extend(
111 coordinator=notification_coordinator,
112 description=description,
114 location_name=device_location_name,
116 for description
in FLUME_BINARY_NOTIFICATION_SENSORS
124 FlumeEntity[FlumeNotificationDataUpdateCoordinator], BinarySensorEntity
126 """Binary sensor class."""
128 entity_description: FlumeBinarySensorEntityDescription
132 """Return on state."""
135 notifications := self.coordinator.active_notifications_by_device.get(
139 and self.entity_description.event_rule
in notifications
144 FlumeEntity[FlumeDeviceConnectionUpdateCoordinator], BinarySensorEntity
146 """Binary Sensor class for WIFI Connection status."""
148 entity_description: FlumeBinarySensorEntityDescription
149 _attr_entity_category = EntityCategory.DIAGNOSTIC
150 _attr_device_class = BinarySensorDeviceClass.CONNECTIVITY
154 """Return connection status."""
156 (connected := self.coordinator.connected)
and connected[self.device_id]
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
list[dict[str, Any]] get_valid_flume_devices(FlumeDeviceList flume_devices)