diff --git a/homeassistant/components/synology_dsm/binary_sensor.py b/homeassistant/components/synology_dsm/binary_sensor.py index 7f0704790e1..db41b49970d 100644 --- a/homeassistant/components/synology_dsm/binary_sensor.py +++ b/homeassistant/components/synology_dsm/binary_sensor.py @@ -2,24 +2,72 @@ from __future__ import annotations from collections.abc import Mapping +from dataclasses import dataclass from typing import Any -from homeassistant.components.binary_sensor import BinarySensorEntity +from synology_dsm.api.core.security import SynoCoreSecurity +from synology_dsm.api.core.upgrade import SynoCoreUpgrade +from synology_dsm.api.storage.storage import SynoStorage + +from homeassistant.components.binary_sensor import ( + BinarySensorDeviceClass, + BinarySensorEntity, + BinarySensorEntityDescription, +) from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_DISKS from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from . import SynoApi, SynologyDSMBaseEntity, SynologyDSMDeviceEntity -from .const import ( - COORDINATOR_CENTRAL, - DOMAIN, - SECURITY_BINARY_SENSORS, - STORAGE_DISK_BINARY_SENSORS, - SYNO_API, - UPGRADE_BINARY_SENSORS, - SynologyDSMBinarySensorEntityDescription, +from .const import COORDINATOR_CENTRAL, DOMAIN, SYNO_API, SynologyDSMEntityDescription + + +@dataclass +class SynologyDSMBinarySensorEntityDescription( + BinarySensorEntityDescription, SynologyDSMEntityDescription +): + """Describes Synology DSM binary sensor entity.""" + + +UPGRADE_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = ( + SynologyDSMBinarySensorEntityDescription( + # Deprecated, scheduled to be removed in 2022.6 (#68664) + api_key=SynoCoreUpgrade.API_KEY, + key="update_available", + name="Update Available", + entity_registry_enabled_default=False, + device_class=BinarySensorDeviceClass.UPDATE, + entity_category=EntityCategory.DIAGNOSTIC, + ), +) + +SECURITY_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = ( + SynologyDSMBinarySensorEntityDescription( + api_key=SynoCoreSecurity.API_KEY, + key="status", + name="Security Status", + device_class=BinarySensorDeviceClass.SAFETY, + ), +) + +STORAGE_DISK_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = ( + SynologyDSMBinarySensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="disk_exceed_bad_sector_thr", + name="Exceeded Max Bad Sectors", + device_class=BinarySensorDeviceClass.SAFETY, + entity_category=EntityCategory.DIAGNOSTIC, + ), + SynologyDSMBinarySensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="disk_below_remain_life_thr", + name="Below Min Remaining Life", + device_class=BinarySensorDeviceClass.SAFETY, + entity_category=EntityCategory.DIAGNOSTIC, + ), ) diff --git a/homeassistant/components/synology_dsm/const.py b/homeassistant/components/synology_dsm/const.py index 78f1a1b916d..e83cae41a2e 100644 --- a/homeassistant/components/synology_dsm/const.py +++ b/homeassistant/components/synology_dsm/const.py @@ -3,33 +3,10 @@ from __future__ import annotations from dataclasses import dataclass -from synology_dsm.api.core.security import SynoCoreSecurity -from synology_dsm.api.core.upgrade import SynoCoreUpgrade -from synology_dsm.api.core.utilization import SynoCoreUtilization -from synology_dsm.api.dsm.information import SynoDSMInformation -from synology_dsm.api.storage.storage import SynoStorage -from synology_dsm.api.surveillance_station import SynoSurveillanceStation from synology_dsm.api.surveillance_station.const import SNAPSHOT_PROFILE_BALANCED -from homeassistant.components.binary_sensor import ( - BinarySensorDeviceClass, - BinarySensorEntityDescription, -) -from homeassistant.components.sensor import ( - SensorDeviceClass, - SensorEntityDescription, - SensorStateClass, -) -from homeassistant.components.switch import SwitchEntityDescription -from homeassistant.const import ( - DATA_MEGABYTES, - DATA_RATE_KILOBYTES_PER_SECOND, - DATA_TERABYTES, - PERCENTAGE, - TEMP_CELSIUS, - Platform, -) -from homeassistant.helpers.entity import EntityCategory, EntityDescription +from homeassistant.const import Platform +from homeassistant.helpers.entity import EntityDescription DOMAIN = "synology_dsm" PLATFORMS = [ @@ -87,303 +64,3 @@ class SynologyDSMRequiredKeysMixin: @dataclass class SynologyDSMEntityDescription(EntityDescription, SynologyDSMRequiredKeysMixin): """Generic Synology DSM entity description.""" - - -@dataclass -class SynologyDSMBinarySensorEntityDescription( - BinarySensorEntityDescription, SynologyDSMEntityDescription -): - """Describes Synology DSM binary sensor entity.""" - - -@dataclass -class SynologyDSMSensorEntityDescription( - SensorEntityDescription, SynologyDSMEntityDescription -): - """Describes Synology DSM sensor entity.""" - - -@dataclass -class SynologyDSMSwitchEntityDescription( - SwitchEntityDescription, SynologyDSMEntityDescription -): - """Describes Synology DSM switch entity.""" - - -# Binary sensors -UPGRADE_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = ( - SynologyDSMBinarySensorEntityDescription( - # Deprecated, scheduled to be removed in 2022.6 (#68664) - api_key=SynoCoreUpgrade.API_KEY, - key="update_available", - name="Update Available", - entity_registry_enabled_default=False, - device_class=BinarySensorDeviceClass.UPDATE, - entity_category=EntityCategory.DIAGNOSTIC, - ), -) - -SECURITY_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = ( - SynologyDSMBinarySensorEntityDescription( - api_key=SynoCoreSecurity.API_KEY, - key="status", - name="Security Status", - device_class=BinarySensorDeviceClass.SAFETY, - ), -) - -STORAGE_DISK_BINARY_SENSORS: tuple[SynologyDSMBinarySensorEntityDescription, ...] = ( - SynologyDSMBinarySensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="disk_exceed_bad_sector_thr", - name="Exceeded Max Bad Sectors", - device_class=BinarySensorDeviceClass.SAFETY, - entity_category=EntityCategory.DIAGNOSTIC, - ), - SynologyDSMBinarySensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="disk_below_remain_life_thr", - name="Below Min Remaining Life", - device_class=BinarySensorDeviceClass.SAFETY, - entity_category=EntityCategory.DIAGNOSTIC, - ), -) - -# Sensors -UTILISATION_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_other_load", - name="CPU Utilization (Other)", - native_unit_of_measurement=PERCENTAGE, - icon="mdi:chip", - entity_registry_enabled_default=False, - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_user_load", - name="CPU Utilization (User)", - native_unit_of_measurement=PERCENTAGE, - icon="mdi:chip", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_system_load", - name="CPU Utilization (System)", - native_unit_of_measurement=PERCENTAGE, - icon="mdi:chip", - entity_registry_enabled_default=False, - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_total_load", - name="CPU Utilization (Total)", - native_unit_of_measurement=PERCENTAGE, - icon="mdi:chip", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_1min_load", - name="CPU Load Average (1 min)", - native_unit_of_measurement=ENTITY_UNIT_LOAD, - icon="mdi:chip", - entity_registry_enabled_default=False, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_5min_load", - name="CPU Load Average (5 min)", - native_unit_of_measurement=ENTITY_UNIT_LOAD, - icon="mdi:chip", - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="cpu_15min_load", - name="CPU Load Average (15 min)", - native_unit_of_measurement=ENTITY_UNIT_LOAD, - icon="mdi:chip", - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_real_usage", - name="Memory Usage (Real)", - native_unit_of_measurement=PERCENTAGE, - icon="mdi:memory", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_size", - name="Memory Size", - native_unit_of_measurement=DATA_MEGABYTES, - icon="mdi:memory", - entity_registry_enabled_default=False, - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_cached", - name="Memory Cached", - native_unit_of_measurement=DATA_MEGABYTES, - icon="mdi:memory", - entity_registry_enabled_default=False, - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_available_swap", - name="Memory Available (Swap)", - native_unit_of_measurement=DATA_MEGABYTES, - icon="mdi:memory", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_available_real", - name="Memory Available (Real)", - native_unit_of_measurement=DATA_MEGABYTES, - icon="mdi:memory", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_total_swap", - name="Memory Total (Swap)", - native_unit_of_measurement=DATA_MEGABYTES, - icon="mdi:memory", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="memory_total_real", - name="Memory Total (Real)", - native_unit_of_measurement=DATA_MEGABYTES, - icon="mdi:memory", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="network_up", - name="Upload Throughput", - native_unit_of_measurement=DATA_RATE_KILOBYTES_PER_SECOND, - icon="mdi:upload", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoCoreUtilization.API_KEY, - key="network_down", - name="Download Throughput", - native_unit_of_measurement=DATA_RATE_KILOBYTES_PER_SECOND, - icon="mdi:download", - state_class=SensorStateClass.MEASUREMENT, - ), -) -STORAGE_VOL_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="volume_status", - name="Status", - icon="mdi:checkbox-marked-circle-outline", - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="volume_size_total", - name="Total Size", - native_unit_of_measurement=DATA_TERABYTES, - icon="mdi:chart-pie", - entity_registry_enabled_default=False, - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="volume_size_used", - name="Used Space", - native_unit_of_measurement=DATA_TERABYTES, - icon="mdi:chart-pie", - state_class=SensorStateClass.MEASUREMENT, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="volume_percentage_used", - name="Volume Used", - native_unit_of_measurement=PERCENTAGE, - icon="mdi:chart-pie", - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="volume_disk_temp_avg", - name="Average Disk Temp", - native_unit_of_measurement=TEMP_CELSIUS, - device_class=SensorDeviceClass.TEMPERATURE, - entity_category=EntityCategory.DIAGNOSTIC, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="volume_disk_temp_max", - name="Maximum Disk Temp", - native_unit_of_measurement=TEMP_CELSIUS, - device_class=SensorDeviceClass.TEMPERATURE, - entity_registry_enabled_default=False, - entity_category=EntityCategory.DIAGNOSTIC, - ), -) -STORAGE_DISK_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="disk_smart_status", - name="Status (Smart)", - icon="mdi:checkbox-marked-circle-outline", - entity_registry_enabled_default=False, - entity_category=EntityCategory.DIAGNOSTIC, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="disk_status", - name="Status", - icon="mdi:checkbox-marked-circle-outline", - entity_category=EntityCategory.DIAGNOSTIC, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoStorage.API_KEY, - key="disk_temp", - name="Temperature", - native_unit_of_measurement=TEMP_CELSIUS, - device_class=SensorDeviceClass.TEMPERATURE, - state_class=SensorStateClass.MEASUREMENT, - entity_category=EntityCategory.DIAGNOSTIC, - ), -) - -INFORMATION_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( - SynologyDSMSensorEntityDescription( - api_key=SynoDSMInformation.API_KEY, - key="temperature", - name="Temperature", - native_unit_of_measurement=TEMP_CELSIUS, - device_class=SensorDeviceClass.TEMPERATURE, - state_class=SensorStateClass.MEASUREMENT, - entity_category=EntityCategory.DIAGNOSTIC, - ), - SynologyDSMSensorEntityDescription( - api_key=SynoDSMInformation.API_KEY, - key="uptime", - name="Last Boot", - device_class=SensorDeviceClass.TIMESTAMP, - entity_registry_enabled_default=False, - entity_category=EntityCategory.DIAGNOSTIC, - ), -) - -# Switch -SURVEILLANCE_SWITCH: tuple[SynologyDSMSwitchEntityDescription, ...] = ( - SynologyDSMSwitchEntityDescription( - api_key=SynoSurveillanceStation.HOME_MODE_API_KEY, - key="home_mode", - name="Home Mode", - icon="mdi:home-account", - ), -) diff --git a/homeassistant/components/synology_dsm/sensor.py b/homeassistant/components/synology_dsm/sensor.py index 18014de8c7a..4dec3b8b67c 100644 --- a/homeassistant/components/synology_dsm/sensor.py +++ b/homeassistant/components/synology_dsm/sensor.py @@ -1,18 +1,31 @@ """Support for Synology DSM sensors.""" from __future__ import annotations +from dataclasses import dataclass from datetime import datetime, timedelta from typing import Any -from homeassistant.components.sensor import SensorEntity +from synology_dsm.api.core.utilization import SynoCoreUtilization +from synology_dsm.api.dsm.information import SynoDSMInformation +from synology_dsm.api.storage.storage import SynoStorage + +from homeassistant.components.sensor import ( + SensorDeviceClass, + SensorEntity, + SensorEntityDescription, + SensorStateClass, +) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( CONF_DISKS, DATA_MEGABYTES, DATA_RATE_KILOBYTES_PER_SECOND, DATA_TERABYTES, + PERCENTAGE, + TEMP_CELSIUS, ) from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from homeassistant.util.dt import utcnow @@ -23,12 +36,244 @@ from .const import ( COORDINATOR_CENTRAL, DOMAIN, ENTITY_UNIT_LOAD, - INFORMATION_SENSORS, - STORAGE_DISK_SENSORS, - STORAGE_VOL_SENSORS, SYNO_API, - UTILISATION_SENSORS, - SynologyDSMSensorEntityDescription, + SynologyDSMEntityDescription, +) + + +@dataclass +class SynologyDSMSensorEntityDescription( + SensorEntityDescription, SynologyDSMEntityDescription +): + """Describes Synology DSM sensor entity.""" + + +UTILISATION_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_other_load", + name="CPU Utilization (Other)", + native_unit_of_measurement=PERCENTAGE, + icon="mdi:chip", + entity_registry_enabled_default=False, + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_user_load", + name="CPU Utilization (User)", + native_unit_of_measurement=PERCENTAGE, + icon="mdi:chip", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_system_load", + name="CPU Utilization (System)", + native_unit_of_measurement=PERCENTAGE, + icon="mdi:chip", + entity_registry_enabled_default=False, + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_total_load", + name="CPU Utilization (Total)", + native_unit_of_measurement=PERCENTAGE, + icon="mdi:chip", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_1min_load", + name="CPU Load Average (1 min)", + native_unit_of_measurement=ENTITY_UNIT_LOAD, + icon="mdi:chip", + entity_registry_enabled_default=False, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_5min_load", + name="CPU Load Average (5 min)", + native_unit_of_measurement=ENTITY_UNIT_LOAD, + icon="mdi:chip", + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="cpu_15min_load", + name="CPU Load Average (15 min)", + native_unit_of_measurement=ENTITY_UNIT_LOAD, + icon="mdi:chip", + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_real_usage", + name="Memory Usage (Real)", + native_unit_of_measurement=PERCENTAGE, + icon="mdi:memory", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_size", + name="Memory Size", + native_unit_of_measurement=DATA_MEGABYTES, + icon="mdi:memory", + entity_registry_enabled_default=False, + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_cached", + name="Memory Cached", + native_unit_of_measurement=DATA_MEGABYTES, + icon="mdi:memory", + entity_registry_enabled_default=False, + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_available_swap", + name="Memory Available (Swap)", + native_unit_of_measurement=DATA_MEGABYTES, + icon="mdi:memory", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_available_real", + name="Memory Available (Real)", + native_unit_of_measurement=DATA_MEGABYTES, + icon="mdi:memory", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_total_swap", + name="Memory Total (Swap)", + native_unit_of_measurement=DATA_MEGABYTES, + icon="mdi:memory", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="memory_total_real", + name="Memory Total (Real)", + native_unit_of_measurement=DATA_MEGABYTES, + icon="mdi:memory", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="network_up", + name="Upload Throughput", + native_unit_of_measurement=DATA_RATE_KILOBYTES_PER_SECOND, + icon="mdi:upload", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoCoreUtilization.API_KEY, + key="network_down", + name="Download Throughput", + native_unit_of_measurement=DATA_RATE_KILOBYTES_PER_SECOND, + icon="mdi:download", + state_class=SensorStateClass.MEASUREMENT, + ), +) +STORAGE_VOL_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="volume_status", + name="Status", + icon="mdi:checkbox-marked-circle-outline", + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="volume_size_total", + name="Total Size", + native_unit_of_measurement=DATA_TERABYTES, + icon="mdi:chart-pie", + entity_registry_enabled_default=False, + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="volume_size_used", + name="Used Space", + native_unit_of_measurement=DATA_TERABYTES, + icon="mdi:chart-pie", + state_class=SensorStateClass.MEASUREMENT, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="volume_percentage_used", + name="Volume Used", + native_unit_of_measurement=PERCENTAGE, + icon="mdi:chart-pie", + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="volume_disk_temp_avg", + name="Average Disk Temp", + native_unit_of_measurement=TEMP_CELSIUS, + device_class=SensorDeviceClass.TEMPERATURE, + entity_category=EntityCategory.DIAGNOSTIC, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="volume_disk_temp_max", + name="Maximum Disk Temp", + native_unit_of_measurement=TEMP_CELSIUS, + device_class=SensorDeviceClass.TEMPERATURE, + entity_registry_enabled_default=False, + entity_category=EntityCategory.DIAGNOSTIC, + ), +) +STORAGE_DISK_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="disk_smart_status", + name="Status (Smart)", + icon="mdi:checkbox-marked-circle-outline", + entity_registry_enabled_default=False, + entity_category=EntityCategory.DIAGNOSTIC, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="disk_status", + name="Status", + icon="mdi:checkbox-marked-circle-outline", + entity_category=EntityCategory.DIAGNOSTIC, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoStorage.API_KEY, + key="disk_temp", + name="Temperature", + native_unit_of_measurement=TEMP_CELSIUS, + device_class=SensorDeviceClass.TEMPERATURE, + state_class=SensorStateClass.MEASUREMENT, + entity_category=EntityCategory.DIAGNOSTIC, + ), +) + +INFORMATION_SENSORS: tuple[SynologyDSMSensorEntityDescription, ...] = ( + SynologyDSMSensorEntityDescription( + api_key=SynoDSMInformation.API_KEY, + key="temperature", + name="Temperature", + native_unit_of_measurement=TEMP_CELSIUS, + device_class=SensorDeviceClass.TEMPERATURE, + state_class=SensorStateClass.MEASUREMENT, + entity_category=EntityCategory.DIAGNOSTIC, + ), + SynologyDSMSensorEntityDescription( + api_key=SynoDSMInformation.API_KEY, + key="uptime", + name="Last Boot", + device_class=SensorDeviceClass.TIMESTAMP, + entity_registry_enabled_default=False, + entity_category=EntityCategory.DIAGNOSTIC, + ), ) diff --git a/homeassistant/components/synology_dsm/switch.py b/homeassistant/components/synology_dsm/switch.py index 3b3b801fcf7..fc3e6c04dcf 100644 --- a/homeassistant/components/synology_dsm/switch.py +++ b/homeassistant/components/synology_dsm/switch.py @@ -1,12 +1,13 @@ """Support for Synology DSM switch.""" from __future__ import annotations +from dataclasses import dataclass import logging from typing import Any from synology_dsm.api.surveillance_station import SynoSurveillanceStation -from homeassistant.components.switch import SwitchEntity +from homeassistant.components.switch import SwitchEntity, SwitchEntityDescription from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity import DeviceInfo @@ -14,17 +15,28 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from . import SynoApi, SynologyDSMBaseEntity -from .const import ( - COORDINATOR_SWITCHES, - DOMAIN, - SURVEILLANCE_SWITCH, - SYNO_API, - SynologyDSMSwitchEntityDescription, -) +from .const import COORDINATOR_SWITCHES, DOMAIN, SYNO_API, SynologyDSMEntityDescription _LOGGER = logging.getLogger(__name__) +@dataclass +class SynologyDSMSwitchEntityDescription( + SwitchEntityDescription, SynologyDSMEntityDescription +): + """Describes Synology DSM switch entity.""" + + +SURVEILLANCE_SWITCH: tuple[SynologyDSMSwitchEntityDescription, ...] = ( + SynologyDSMSwitchEntityDescription( + api_key=SynoSurveillanceStation.HOME_MODE_API_KEY, + key="home_mode", + name="Home Mode", + icon="mdi:home-account", + ), +) + + async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback ) -> None: