mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 22:07:10 +00:00
Add state class measurement to sensors where suitable for Synology DSM (#53468)
This commit is contained in:
parent
01c8114e93
commit
ebfdfd172b
@ -26,9 +26,14 @@ from synology_dsm.exceptions import (
|
||||
SynologyDSMRequestException,
|
||||
)
|
||||
|
||||
from homeassistant.components.sensor import ATTR_STATE_CLASS
|
||||
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry
|
||||
from homeassistant.const import (
|
||||
ATTR_ATTRIBUTION,
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_ICON,
|
||||
ATTR_NAME,
|
||||
ATTR_UNIT_OF_MEASUREMENT,
|
||||
CONF_HOST,
|
||||
CONF_MAC,
|
||||
CONF_PASSWORD,
|
||||
@ -63,11 +68,7 @@ from .const import (
|
||||
DEFAULT_SCAN_INTERVAL,
|
||||
DEFAULT_VERIFY_SSL,
|
||||
DOMAIN,
|
||||
ENTITY_CLASS,
|
||||
ENTITY_ENABLE,
|
||||
ENTITY_ICON,
|
||||
ENTITY_NAME,
|
||||
ENTITY_UNIT,
|
||||
EXCEPTION_DETAILS,
|
||||
EXCEPTION_UNKNOWN,
|
||||
PLATFORMS,
|
||||
@ -131,7 +132,7 @@ async def async_setup_entry( # noqa: C901
|
||||
for entity_key, entity_attrs in entries.items():
|
||||
if (
|
||||
device_id
|
||||
and entity_attrs[ENTITY_NAME] == "Status"
|
||||
and entity_attrs[ATTR_NAME] == "Status"
|
||||
and "Status" in entity_entry.unique_id
|
||||
and "(Smart)" not in entity_entry.unique_id
|
||||
):
|
||||
@ -142,7 +143,7 @@ async def async_setup_entry( # noqa: C901
|
||||
entity_type = entity_key
|
||||
continue
|
||||
|
||||
if entity_attrs[ENTITY_NAME] == label:
|
||||
if entity_attrs[ATTR_NAME] == label:
|
||||
entity_type = entity_key
|
||||
|
||||
if entity_type is None:
|
||||
@ -616,12 +617,13 @@ class SynologyDSMBaseEntity(CoordinatorEntity):
|
||||
self._api = api
|
||||
self._api_key = entity_type.split(":")[0]
|
||||
self.entity_type = entity_type.split(":")[-1]
|
||||
self._name = f"{api.network.hostname} {entity_info[ENTITY_NAME]}"
|
||||
self._class = entity_info[ENTITY_CLASS]
|
||||
self._name = f"{api.network.hostname} {entity_info[ATTR_NAME]}"
|
||||
self._class = entity_info[ATTR_DEVICE_CLASS]
|
||||
self._enable_default = entity_info[ENTITY_ENABLE]
|
||||
self._icon = entity_info[ENTITY_ICON]
|
||||
self._unit = entity_info[ENTITY_UNIT]
|
||||
self._icon = entity_info[ATTR_ICON]
|
||||
self._unit = entity_info[ATTR_UNIT_OF_MEASUREMENT]
|
||||
self._unique_id = f"{self._api.information.serial}_{entity_type}"
|
||||
self._attr_state_class = entity_info[ATTR_STATE_CLASS]
|
||||
|
||||
@property
|
||||
def unique_id(self) -> str:
|
||||
@ -710,7 +712,9 @@ class SynologyDSMDeviceEntity(SynologyDSMBaseEntity):
|
||||
self._device_model = disk["model"].strip()
|
||||
self._device_firmware = disk["firm"]
|
||||
self._device_type = disk["diskType"]
|
||||
self._name = f"{self._api.network.hostname} {self._device_name} {entity_info[ENTITY_NAME]}"
|
||||
self._name = (
|
||||
f"{self._api.network.hostname} {self._device_name} {entity_info[ATTR_NAME]}"
|
||||
)
|
||||
self._unique_id += f"_{self._device_id}"
|
||||
|
||||
@property
|
||||
|
@ -10,23 +10,21 @@ from synology_dsm.exceptions import (
|
||||
)
|
||||
|
||||
from homeassistant.components.camera import SUPPORT_STREAM, Camera
|
||||
from homeassistant.components.sensor import ATTR_STATE_CLASS
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_ICON,
|
||||
ATTR_NAME,
|
||||
ATTR_UNIT_OF_MEASUREMENT,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity import DeviceInfo
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
||||
|
||||
from . import SynoApi, SynologyDSMBaseEntity
|
||||
from .const import (
|
||||
COORDINATOR_CAMERAS,
|
||||
DOMAIN,
|
||||
ENTITY_CLASS,
|
||||
ENTITY_ENABLE,
|
||||
ENTITY_ICON,
|
||||
ENTITY_NAME,
|
||||
ENTITY_UNIT,
|
||||
SYNO_API,
|
||||
)
|
||||
from .const import COORDINATOR_CAMERAS, DOMAIN, ENTITY_ENABLE, SYNO_API
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -70,11 +68,12 @@ class SynoDSMCamera(SynologyDSMBaseEntity, Camera):
|
||||
api,
|
||||
f"{SynoSurveillanceStation.CAMERA_API_KEY}:{camera_id}",
|
||||
{
|
||||
ENTITY_NAME: coordinator.data["cameras"][camera_id].name,
|
||||
ATTR_NAME: coordinator.data["cameras"][camera_id].name,
|
||||
ENTITY_ENABLE: coordinator.data["cameras"][camera_id].is_enabled,
|
||||
ENTITY_CLASS: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_UNIT: None,
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
coordinator,
|
||||
)
|
||||
|
@ -11,7 +11,12 @@ from synology_dsm.api.storage.storage import SynoStorage
|
||||
from synology_dsm.api.surveillance_station import SynoSurveillanceStation
|
||||
|
||||
from homeassistant.components.binary_sensor import DEVICE_CLASS_SAFETY
|
||||
from homeassistant.components.sensor import ATTR_STATE_CLASS, STATE_CLASS_MEASUREMENT
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_ICON,
|
||||
ATTR_NAME,
|
||||
ATTR_UNIT_OF_MEASUREMENT,
|
||||
DATA_MEGABYTES,
|
||||
DATA_RATE_KILOBYTES_PER_SECOND,
|
||||
DATA_TERABYTES,
|
||||
@ -25,9 +30,10 @@ class EntityInfo(TypedDict):
|
||||
"""TypedDict for EntityInfo."""
|
||||
|
||||
name: str
|
||||
unit: str | None
|
||||
unit_of_measurement: str | None
|
||||
icon: str | None
|
||||
device_class: str | None
|
||||
state_class: str | None
|
||||
enable: bool
|
||||
|
||||
|
||||
@ -58,11 +64,6 @@ DEFAULT_SCAN_INTERVAL = 15 # min
|
||||
DEFAULT_TIMEOUT = 10 # sec
|
||||
|
||||
ENTITY_UNIT_LOAD = "load"
|
||||
|
||||
ENTITY_NAME: Final = "name"
|
||||
ENTITY_UNIT: Final = "unit"
|
||||
ENTITY_ICON: Final = "icon"
|
||||
ENTITY_CLASS: Final = "device_class"
|
||||
ENTITY_ENABLE: Final = "enable"
|
||||
|
||||
# Services
|
||||
@ -78,249 +79,281 @@ SERVICES = [
|
||||
# Binary sensors
|
||||
UPGRADE_BINARY_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoCoreUpgrade.API_KEY}:update_available": {
|
||||
ENTITY_NAME: "Update available",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: "mdi:update",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Update available",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: "mdi:update",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
|
||||
SECURITY_BINARY_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoCoreSecurity.API_KEY}:status": {
|
||||
ENTITY_NAME: "Security status",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_SAFETY,
|
||||
ATTR_NAME: "Security status",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_SAFETY,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
|
||||
STORAGE_DISK_BINARY_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoStorage.API_KEY}:disk_exceed_bad_sector_thr": {
|
||||
ENTITY_NAME: "Exceeded Max Bad Sectors",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_SAFETY,
|
||||
ATTR_NAME: "Exceeded Max Bad Sectors",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_SAFETY,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:disk_below_remain_life_thr": {
|
||||
ENTITY_NAME: "Below Min Remaining Life",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_SAFETY,
|
||||
ATTR_NAME: "Below Min Remaining Life",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_SAFETY,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
|
||||
# Sensors
|
||||
UTILISATION_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_other_load": {
|
||||
ENTITY_NAME: "CPU Utilization (Other)",
|
||||
ENTITY_UNIT: PERCENTAGE,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Utilization (Other)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_user_load": {
|
||||
ENTITY_NAME: "CPU Utilization (User)",
|
||||
ENTITY_UNIT: PERCENTAGE,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Utilization (User)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_system_load": {
|
||||
ENTITY_NAME: "CPU Utilization (System)",
|
||||
ENTITY_UNIT: PERCENTAGE,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Utilization (System)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_total_load": {
|
||||
ENTITY_NAME: "CPU Utilization (Total)",
|
||||
ENTITY_UNIT: PERCENTAGE,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Utilization (Total)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_1min_load": {
|
||||
ENTITY_NAME: "CPU Load Average (1 min)",
|
||||
ENTITY_UNIT: ENTITY_UNIT_LOAD,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Load Average (1 min)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: ENTITY_UNIT_LOAD,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_5min_load": {
|
||||
ENTITY_NAME: "CPU Load Average (5 min)",
|
||||
ENTITY_UNIT: ENTITY_UNIT_LOAD,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Load Average (5 min)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: ENTITY_UNIT_LOAD,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:cpu_15min_load": {
|
||||
ENTITY_NAME: "CPU Load Average (15 min)",
|
||||
ENTITY_UNIT: ENTITY_UNIT_LOAD,
|
||||
ENTITY_ICON: "mdi:chip",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "CPU Load Average (15 min)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: ENTITY_UNIT_LOAD,
|
||||
ATTR_ICON: "mdi:chip",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_real_usage": {
|
||||
ENTITY_NAME: "Memory Usage (Real)",
|
||||
ENTITY_UNIT: PERCENTAGE,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Usage (Real)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_size": {
|
||||
ENTITY_NAME: "Memory Size",
|
||||
ENTITY_UNIT: DATA_MEGABYTES,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Size",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_MEGABYTES,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_cached": {
|
||||
ENTITY_NAME: "Memory Cached",
|
||||
ENTITY_UNIT: DATA_MEGABYTES,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Cached",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_MEGABYTES,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_available_swap": {
|
||||
ENTITY_NAME: "Memory Available (Swap)",
|
||||
ENTITY_UNIT: DATA_MEGABYTES,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Available (Swap)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_MEGABYTES,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_available_real": {
|
||||
ENTITY_NAME: "Memory Available (Real)",
|
||||
ENTITY_UNIT: DATA_MEGABYTES,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Available (Real)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_MEGABYTES,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_total_swap": {
|
||||
ENTITY_NAME: "Memory Total (Swap)",
|
||||
ENTITY_UNIT: DATA_MEGABYTES,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Total (Swap)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_MEGABYTES,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:memory_total_real": {
|
||||
ENTITY_NAME: "Memory Total (Real)",
|
||||
ENTITY_UNIT: DATA_MEGABYTES,
|
||||
ENTITY_ICON: "mdi:memory",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Memory Total (Real)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_MEGABYTES,
|
||||
ATTR_ICON: "mdi:memory",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:network_up": {
|
||||
ENTITY_NAME: "Network Up",
|
||||
ENTITY_UNIT: DATA_RATE_KILOBYTES_PER_SECOND,
|
||||
ENTITY_ICON: "mdi:upload",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Network Up",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_RATE_KILOBYTES_PER_SECOND,
|
||||
ATTR_ICON: "mdi:upload",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoCoreUtilization.API_KEY}:network_down": {
|
||||
ENTITY_NAME: "Network Down",
|
||||
ENTITY_UNIT: DATA_RATE_KILOBYTES_PER_SECOND,
|
||||
ENTITY_ICON: "mdi:download",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Network Down",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_RATE_KILOBYTES_PER_SECOND,
|
||||
ATTR_ICON: "mdi:download",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
}
|
||||
STORAGE_VOL_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoStorage.API_KEY}:volume_status": {
|
||||
ENTITY_NAME: "Status",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: "mdi:checkbox-marked-circle-outline",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Status",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: "mdi:checkbox-marked-circle-outline",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:volume_size_total": {
|
||||
ENTITY_NAME: "Total Size",
|
||||
ENTITY_UNIT: DATA_TERABYTES,
|
||||
ENTITY_ICON: "mdi:chart-pie",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Total Size",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_TERABYTES,
|
||||
ATTR_ICON: "mdi:chart-pie",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:volume_size_used": {
|
||||
ENTITY_NAME: "Used Space",
|
||||
ENTITY_UNIT: DATA_TERABYTES,
|
||||
ENTITY_ICON: "mdi:chart-pie",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Used Space",
|
||||
ATTR_UNIT_OF_MEASUREMENT: DATA_TERABYTES,
|
||||
ATTR_ICON: "mdi:chart-pie",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:volume_percentage_used": {
|
||||
ENTITY_NAME: "Volume Used",
|
||||
ENTITY_UNIT: PERCENTAGE,
|
||||
ENTITY_ICON: "mdi:chart-pie",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Volume Used",
|
||||
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||
ATTR_ICON: "mdi:chart-pie",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:volume_disk_temp_avg": {
|
||||
ENTITY_NAME: "Average Disk Temp",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_NAME: "Average Disk Temp",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:volume_disk_temp_max": {
|
||||
ENTITY_NAME: "Maximum Disk Temp",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_NAME: "Maximum Disk Temp",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
STORAGE_DISK_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoStorage.API_KEY}:disk_smart_status": {
|
||||
ENTITY_NAME: "Status (Smart)",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: "mdi:checkbox-marked-circle-outline",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Status (Smart)",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: "mdi:checkbox-marked-circle-outline",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:disk_status": {
|
||||
ENTITY_NAME: "Status",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: "mdi:checkbox-marked-circle-outline",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "Status",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: "mdi:checkbox-marked-circle-outline",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
f"{SynoStorage.API_KEY}:disk_temp": {
|
||||
ENTITY_NAME: "Temperature",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_NAME: "Temperature",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
}
|
||||
|
||||
INFORMATION_SENSORS: dict[str, EntityInfo] = {
|
||||
f"{SynoDSMInformation.API_KEY}:temperature": {
|
||||
ENTITY_NAME: "temperature",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ATTR_NAME: "temperature",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
||||
},
|
||||
f"{SynoDSMInformation.API_KEY}:uptime": {
|
||||
ENTITY_NAME: "last boot",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: None,
|
||||
ENTITY_CLASS: DEVICE_CLASS_TIMESTAMP,
|
||||
ATTR_NAME: "last boot",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: None,
|
||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_TIMESTAMP,
|
||||
ENTITY_ENABLE: False,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
|
||||
# Switch
|
||||
SURVEILLANCE_SWITCH: dict[str, EntityInfo] = {
|
||||
f"{SynoSurveillanceStation.HOME_MODE_API_KEY}:home_mode": {
|
||||
ENTITY_NAME: "home mode",
|
||||
ENTITY_UNIT: None,
|
||||
ENTITY_ICON: "mdi:home-account",
|
||||
ENTITY_CLASS: None,
|
||||
ATTR_NAME: "home mode",
|
||||
ATTR_UNIT_OF_MEASUREMENT: None,
|
||||
ATTR_ICON: "mdi:home-account",
|
||||
ATTR_DEVICE_CLASS: None,
|
||||
ENTITY_ENABLE: True,
|
||||
ATTR_STATE_CLASS: None,
|
||||
},
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user