1 """Support for the QNAP QSW binary sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass, replace
6 from typing
import Final
8 from aioqsw.const
import (
10 QSD_FIRMWARE_CONDITION,
19 BinarySensorDeviceClass,
21 BinarySensorEntityDescription,
29 from .const
import ATTR_MESSAGE, DOMAIN, QSW_COORD_DATA
30 from .coordinator
import QswDataCoordinator
31 from .entity
import QswEntityDescription, QswEntityType, QswSensorEntity
34 @dataclass(frozen=True)
36 BinarySensorEntityDescription, QswEntityDescription
38 """A class that describes QNAP QSW binary sensor entities."""
40 attributes: dict[str, list[str]] |
None =
None
41 qsw_type: QswEntityType |
None =
None
45 BINARY_SENSOR_TYPES: Final[tuple[QswBinarySensorEntityDescription, ...]] = (
48 ATTR_MESSAGE: [QSD_FIRMWARE_CONDITION, QSD_MESSAGE],
50 device_class=BinarySensorDeviceClass.PROBLEM,
51 entity_category=EntityCategory.DIAGNOSTIC,
52 key=QSD_FIRMWARE_CONDITION,
57 LACP_PORT_BINARY_SENSOR_TYPES: Final[tuple[QswBinarySensorEntityDescription, ...]] = (
59 device_class=BinarySensorDeviceClass.CONNECTIVITY,
60 entity_registry_enabled_default=
False,
62 qsw_type=QswEntityType.LACP_PORT,
68 PORT_BINARY_SENSOR_TYPES: Final[tuple[QswBinarySensorEntityDescription, ...]] = (
70 device_class=BinarySensorDeviceClass.CONNECTIVITY,
71 entity_registry_enabled_default=
False,
73 qsw_type=QswEntityType.PORT,
81 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
83 """Add QNAP QSW binary sensors from a config_entry."""
84 coordinator: QswDataCoordinator = hass.data[DOMAIN][entry.entry_id][QSW_COORD_DATA]
86 entities: list[QswBinarySensor] = [
88 for description
in BINARY_SENSOR_TYPES
90 description.key
in coordinator.data
91 and description.subkey
in coordinator.data[description.key]
95 for description
in LACP_PORT_BINARY_SENSOR_TYPES:
97 description.key
in coordinator.data
98 and QSD_LACP_PORTS
in coordinator.data[description.key]
100 for port_id, port_values
in coordinator.data[description.key][
103 if description.subkey
in port_values:
106 sep_key=f
"_lacp_port_{port_id}_",
107 name=f
"LACP Port {port_id} {description.name}",
111 for description
in PORT_BINARY_SENSOR_TYPES:
113 description.key
in coordinator.data
114 and QSD_PORTS
in coordinator.data[description.key]
116 for port_id, port_values
in coordinator.data[description.key][
119 if description.subkey
in port_values:
122 sep_key=f
"_port_{port_id}_",
123 name=f
"Port {port_id} {description.name}",
131 """Define a QNAP QSW binary sensor."""
133 entity_description: QswBinarySensorEntityDescription
137 coordinator: QswDataCoordinator,
138 description: QswBinarySensorEntityDescription,
140 type_id: int |
None =
None,
143 super().
__init__(coordinator, entry, type_id)
144 if description.name == UNDEFINED:
147 self.
_attr_name_attr_name = f
"{self.product} {description.name}"
149 f
"{entry.unique_id}_{description.key}"
150 f
"{description.sep_key}{description.subkey}"
157 """Update binary sensor attributes."""
None __init__(self, QswDataCoordinator coordinator, QswBinarySensorEntityDescription description, ConfigEntry entry, int|None type_id=None)
None _async_update_attrs(self)
Any get_device_value(self, str key, str subkey, QswEntityType|None qsw_type=None)
None _async_update_attrs(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)