mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Add camera diagnostics to Synology DSM (#73391)
This commit is contained in:
parent
a0ed54465f
commit
3bbb4c052c
@ -1,8 +1,11 @@
|
|||||||
"""Diagnostics support for Synology DSM."""
|
"""Diagnostics support for Synology DSM."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from synology_dsm.api.surveillance_station.camera import SynoCamera
|
from synology_dsm.api.surveillance_station.camera import SynoCamera
|
||||||
|
|
||||||
|
from homeassistant.components.camera import diagnostics as camera_diagnostics
|
||||||
from homeassistant.components.diagnostics import async_redact_data
|
from homeassistant.components.diagnostics import async_redact_data
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
||||||
@ -16,13 +19,13 @@ TO_REDACT = {CONF_USERNAME, CONF_PASSWORD, CONF_DEVICE_TOKEN}
|
|||||||
|
|
||||||
async def async_get_config_entry_diagnostics(
|
async def async_get_config_entry_diagnostics(
|
||||||
hass: HomeAssistant, entry: ConfigEntry
|
hass: HomeAssistant, entry: ConfigEntry
|
||||||
) -> dict:
|
) -> dict[str, Any]:
|
||||||
"""Return diagnostics for a config entry."""
|
"""Return diagnostics for a config entry."""
|
||||||
data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
|
data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
|
||||||
syno_api = data.api
|
syno_api = data.api
|
||||||
dsm_info = syno_api.dsm.information
|
dsm_info = syno_api.dsm.information
|
||||||
|
|
||||||
diag_data = {
|
diag_data: dict[str, Any] = {
|
||||||
"entry": async_redact_data(entry.as_dict(), TO_REDACT),
|
"entry": async_redact_data(entry.as_dict(), TO_REDACT),
|
||||||
"device_info": {
|
"device_info": {
|
||||||
"model": dsm_info.model,
|
"model": dsm_info.model,
|
||||||
@ -33,7 +36,7 @@ async def async_get_config_entry_diagnostics(
|
|||||||
},
|
},
|
||||||
"network": {"interfaces": {}},
|
"network": {"interfaces": {}},
|
||||||
"storage": {"disks": {}, "volumes": {}},
|
"storage": {"disks": {}, "volumes": {}},
|
||||||
"surveillance_station": {"cameras": {}},
|
"surveillance_station": {"cameras": {}, "camera_diagnostics": {}},
|
||||||
"upgrade": {},
|
"upgrade": {},
|
||||||
"utilisation": {},
|
"utilisation": {},
|
||||||
"is_system_loaded": True,
|
"is_system_loaded": True,
|
||||||
@ -45,7 +48,7 @@ async def async_get_config_entry_diagnostics(
|
|||||||
if syno_api.network is not None:
|
if syno_api.network is not None:
|
||||||
intf: dict
|
intf: dict
|
||||||
for intf in syno_api.network.interfaces:
|
for intf in syno_api.network.interfaces:
|
||||||
diag_data["network"]["interfaces"][intf["id"]] = { # type: ignore[index]
|
diag_data["network"]["interfaces"][intf["id"]] = {
|
||||||
"type": intf["type"],
|
"type": intf["type"],
|
||||||
"ip": intf["ip"],
|
"ip": intf["ip"],
|
||||||
}
|
}
|
||||||
@ -53,7 +56,7 @@ async def async_get_config_entry_diagnostics(
|
|||||||
if syno_api.storage is not None:
|
if syno_api.storage is not None:
|
||||||
disk: dict
|
disk: dict
|
||||||
for disk in syno_api.storage.disks:
|
for disk in syno_api.storage.disks:
|
||||||
diag_data["storage"]["disks"][disk["id"]] = { # type: ignore[index]
|
diag_data["storage"]["disks"][disk["id"]] = {
|
||||||
"name": disk["name"],
|
"name": disk["name"],
|
||||||
"vendor": disk["vendor"],
|
"vendor": disk["vendor"],
|
||||||
"model": disk["model"],
|
"model": disk["model"],
|
||||||
@ -64,7 +67,7 @@ async def async_get_config_entry_diagnostics(
|
|||||||
|
|
||||||
volume: dict
|
volume: dict
|
||||||
for volume in syno_api.storage.volumes:
|
for volume in syno_api.storage.volumes:
|
||||||
diag_data["storage"]["volumes"][volume["id"]] = { # type: ignore[index]
|
diag_data["storage"]["volumes"][volume["id"]] = {
|
||||||
"name": volume["fs_type"],
|
"name": volume["fs_type"],
|
||||||
"size": volume["size"],
|
"size": volume["size"],
|
||||||
}
|
}
|
||||||
@ -72,13 +75,17 @@ async def async_get_config_entry_diagnostics(
|
|||||||
if syno_api.surveillance_station is not None:
|
if syno_api.surveillance_station is not None:
|
||||||
camera: SynoCamera
|
camera: SynoCamera
|
||||||
for camera in syno_api.surveillance_station.get_all_cameras():
|
for camera in syno_api.surveillance_station.get_all_cameras():
|
||||||
diag_data["surveillance_station"]["cameras"][camera.id] = { # type: ignore[index]
|
diag_data["surveillance_station"]["cameras"][camera.id] = {
|
||||||
"name": camera.name,
|
"name": camera.name,
|
||||||
"is_enabled": camera.is_enabled,
|
"is_enabled": camera.is_enabled,
|
||||||
"is_motion_detection_enabled": camera.is_motion_detection_enabled,
|
"is_motion_detection_enabled": camera.is_motion_detection_enabled,
|
||||||
"model": camera.model,
|
"model": camera.model,
|
||||||
"resolution": camera.resolution,
|
"resolution": camera.resolution,
|
||||||
}
|
}
|
||||||
|
if camera_data := await camera_diagnostics.async_get_config_entry_diagnostics(
|
||||||
|
hass, entry
|
||||||
|
):
|
||||||
|
diag_data["surveillance_station"]["camera_diagnostics"] = camera_data
|
||||||
|
|
||||||
if syno_api.upgrade is not None:
|
if syno_api.upgrade is not None:
|
||||||
diag_data["upgrade"] = {
|
diag_data["upgrade"] = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user