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