1 """Support for Synology DSM binary sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
7 from synology_dsm.api.core.security
import SynoCoreSecurity
8 from synology_dsm.api.storage.storage
import SynoStorage
11 BinarySensorDeviceClass,
13 BinarySensorEntityDescription,
21 from .const
import DOMAIN
22 from .coordinator
import SynologyDSMCentralUpdateCoordinator
24 SynologyDSMBaseEntity,
25 SynologyDSMDeviceEntity,
26 SynologyDSMEntityDescription,
28 from .models
import SynologyDSMData
31 @dataclass(frozen=True, kw_only=True)
33 BinarySensorEntityDescription, SynologyDSMEntityDescription
35 """Describes Synology DSM binary sensor entity."""
38 SECURITY_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = (
40 api_key=SynoCoreSecurity.API_KEY,
42 translation_key=
"status",
43 device_class=BinarySensorDeviceClass.SAFETY,
47 STORAGE_DISK_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = (
49 api_key=SynoStorage.API_KEY,
50 key=
"disk_exceed_bad_sector_thr",
51 translation_key=
"disk_exceed_bad_sector_thr",
52 device_class=BinarySensorDeviceClass.SAFETY,
53 entity_category=EntityCategory.DIAGNOSTIC,
56 api_key=SynoStorage.API_KEY,
57 key=
"disk_below_remain_life_thr",
58 translation_key=
"disk_below_remain_life_thr",
59 device_class=BinarySensorDeviceClass.SAFETY,
60 entity_category=EntityCategory.DIAGNOSTIC,
66 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
68 """Set up the Synology NAS binary sensor."""
69 data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
71 coordinator = data.coordinator_central
72 assert api.storage
is not None
74 entities: list[SynoDSMSecurityBinarySensor | SynoDSMStorageBinarySensor] = [
76 for description
in SECURITY_BINARY_SENSORS
80 if api.storage.disks_ids:
84 for disk
in entry.data.get(CONF_DISKS, api.storage.disks_ids)
85 for description
in STORAGE_DISK_BINARY_SENSORS
93 SynologyDSMBaseEntity[SynologyDSMCentralUpdateCoordinator], BinarySensorEntity
95 """Mixin for binary sensor specific attributes."""
97 entity_description: SynologyDSMBinarySensorEntityDescription
102 coordinator: SynologyDSMCentralUpdateCoordinator,
103 description: SynologyDSMBinarySensorEntityDescription,
105 """Initialize the Synology DSM binary_sensor entity."""
106 super().
__init__(api, coordinator, description)
110 """Representation a Synology Security binary sensor."""
114 """Return the state."""
115 return getattr(self._api.security, self.entity_description.key) !=
"safe"
119 """Return True if entity is available."""
120 return bool(self._api.security)
and super().available
124 """Return security checks details."""
125 assert self._api.security
is not None
126 return self._api.security.status_by_check
130 """Representation a Synology Storage binary sensor."""
132 entity_description: SynologyDSMBinarySensorEntityDescription
137 coordinator: SynologyDSMCentralUpdateCoordinator,
138 description: SynologyDSMBinarySensorEntityDescription,
139 device_id: str |
None =
None,
141 """Initialize the Synology DSM storage binary_sensor entity."""
142 super().
__init__(api, coordinator, description, device_id)
146 """Return the state."""
148 getattr(self._api.storage, self.entity_description.key)(self.
_device_id_device_id)
None __init__(self, SynoApi api, SynologyDSMCentralUpdateCoordinator coordinator, SynologyDSMBinarySensorEntityDescription description)
dict[str, str] extra_state_attributes(self)
None __init__(self, SynoApi api, SynologyDSMCentralUpdateCoordinator coordinator, SynologyDSMBinarySensorEntityDescription description, str|None device_id=None)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)