Move constants into corresponding platforms in Synology DSM (#69752)

* move sensor related constants

* move switch related constants

* move binary sensor related constants
pull/69754/head
Michael 2022-04-10 15:45:58 +02:00 committed by GitHub
parent e44d34018e
commit 4853ce208f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 330 additions and 348 deletions

View File

@ -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,
),
)

View File

@ -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",
),
)

View File

@ -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,
),
)

View File

@ -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: