mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Move constants into corresponding platforms in Synology DSM (#69752)
* move sensor related constants * move switch related constants * move binary sensor related constants
This commit is contained in:
parent
e44d34018e
commit
4853ce208f
@ -2,24 +2,72 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Mapping
|
from collections.abc import Mapping
|
||||||
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
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.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_DISKS
|
from homeassistant.const import CONF_DISKS
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.entity import EntityCategory
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||||
|
|
||||||
from . import SynoApi, SynologyDSMBaseEntity, SynologyDSMDeviceEntity
|
from . import SynoApi, SynologyDSMBaseEntity, SynologyDSMDeviceEntity
|
||||||
from .const import (
|
from .const import COORDINATOR_CENTRAL, DOMAIN, SYNO_API, SynologyDSMEntityDescription
|
||||||
COORDINATOR_CENTRAL,
|
|
||||||
DOMAIN,
|
|
||||||
SECURITY_BINARY_SENSORS,
|
@dataclass
|
||||||
STORAGE_DISK_BINARY_SENSORS,
|
class SynologyDSMBinarySensorEntityDescription(
|
||||||
SYNO_API,
|
BinarySensorEntityDescription, SynologyDSMEntityDescription
|
||||||
UPGRADE_BINARY_SENSORS,
|
):
|
||||||
SynologyDSMBinarySensorEntityDescription,
|
"""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,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,33 +3,10 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from dataclasses import dataclass
|
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 synology_dsm.api.surveillance_station.const import SNAPSHOT_PROFILE_BALANCED
|
||||||
|
|
||||||
from homeassistant.components.binary_sensor import (
|
from homeassistant.const import Platform
|
||||||
BinarySensorDeviceClass,
|
from homeassistant.helpers.entity import EntityDescription
|
||||||
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
|
|
||||||
|
|
||||||
DOMAIN = "synology_dsm"
|
DOMAIN = "synology_dsm"
|
||||||
PLATFORMS = [
|
PLATFORMS = [
|
||||||
@ -87,303 +64,3 @@ class SynologyDSMRequiredKeysMixin:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class SynologyDSMEntityDescription(EntityDescription, SynologyDSMRequiredKeysMixin):
|
class SynologyDSMEntityDescription(EntityDescription, SynologyDSMRequiredKeysMixin):
|
||||||
"""Generic Synology DSM entity description."""
|
"""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",
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
@ -1,18 +1,31 @@
|
|||||||
"""Support for Synology DSM sensors."""
|
"""Support for Synology DSM sensors."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Any
|
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.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_DISKS,
|
CONF_DISKS,
|
||||||
DATA_MEGABYTES,
|
DATA_MEGABYTES,
|
||||||
DATA_RATE_KILOBYTES_PER_SECOND,
|
DATA_RATE_KILOBYTES_PER_SECOND,
|
||||||
DATA_TERABYTES,
|
DATA_TERABYTES,
|
||||||
|
PERCENTAGE,
|
||||||
|
TEMP_CELSIUS,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.entity import EntityCategory
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||||
from homeassistant.util.dt import utcnow
|
from homeassistant.util.dt import utcnow
|
||||||
@ -23,12 +36,244 @@ from .const import (
|
|||||||
COORDINATOR_CENTRAL,
|
COORDINATOR_CENTRAL,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
ENTITY_UNIT_LOAD,
|
ENTITY_UNIT_LOAD,
|
||||||
INFORMATION_SENSORS,
|
|
||||||
STORAGE_DISK_SENSORS,
|
|
||||||
STORAGE_VOL_SENSORS,
|
|
||||||
SYNO_API,
|
SYNO_API,
|
||||||
UTILISATION_SENSORS,
|
SynologyDSMEntityDescription,
|
||||||
SynologyDSMSensorEntityDescription,
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@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,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
"""Support for Synology DSM switch."""
|
"""Support for Synology DSM switch."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
import logging
|
import logging
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from synology_dsm.api.surveillance_station import SynoSurveillanceStation
|
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.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity import DeviceInfo
|
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 homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||||
|
|
||||||
from . import SynoApi, SynologyDSMBaseEntity
|
from . import SynoApi, SynologyDSMBaseEntity
|
||||||
from .const import (
|
from .const import COORDINATOR_SWITCHES, DOMAIN, SYNO_API, SynologyDSMEntityDescription
|
||||||
COORDINATOR_SWITCHES,
|
|
||||||
DOMAIN,
|
|
||||||
SURVEILLANCE_SWITCH,
|
|
||||||
SYNO_API,
|
|
||||||
SynologyDSMSwitchEntityDescription,
|
|
||||||
)
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_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(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
||||||
) -> None:
|
) -> None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user