1 """Diagnostics support for Synology DSM."""
3 from __future__
import annotations
13 from .const
import CONF_DEVICE_TOKEN, DOMAIN
14 from .models
import SynologyDSMData
16 TO_REDACT = {CONF_USERNAME, CONF_PASSWORD, CONF_DEVICE_TOKEN}
20 hass: HomeAssistant, entry: ConfigEntry
22 """Return diagnostics for a config entry."""
23 data: SynologyDSMData = hass.data[DOMAIN][entry.unique_id]
25 dsm_info = syno_api.dsm.information
27 diag_data: dict[str, Any] = {
30 "model": dsm_info.model,
31 "version": dsm_info.version_string,
33 "uptime": dsm_info.uptime,
34 "temperature": dsm_info.temperature,
36 "network": {
"interfaces": {}},
37 "storage": {
"disks": {},
"volumes": {}},
38 "surveillance_station": {
"cameras": {},
"camera_diagnostics": {}},
41 "is_system_loaded":
True,
43 "fetching_entities": syno_api._fetching_entities,
47 if syno_api.network
is not None:
48 for intf
in syno_api.network.interfaces:
49 diag_data[
"network"][
"interfaces"][intf[
"id"]] = {
54 if syno_api.storage
is not None:
55 for disk
in syno_api.storage.disks:
56 diag_data[
"storage"][
"disks"][disk[
"id"]] = {
58 "vendor": disk[
"vendor"],
59 "model": disk[
"model"],
60 "device": disk[
"device"],
62 "size_total": disk[
"size_total"],
65 for volume
in syno_api.storage.volumes:
66 diag_data[
"storage"][
"volumes"][volume[
"id"]] = {
67 "name": volume[
"fs_type"],
68 "size": volume[
"size"],
71 if syno_api.surveillance_station
is not None:
72 for camera
in syno_api.surveillance_station.get_all_cameras():
73 diag_data[
"surveillance_station"][
"cameras"][camera.id] = {
75 "is_enabled": camera.is_enabled,
76 "is_motion_detection_enabled": camera.is_motion_detection_enabled,
77 "model": camera.model,
78 "resolution": camera.resolution,
80 if camera_data := await camera_diagnostics.async_get_config_entry_diagnostics(
83 diag_data[
"surveillance_station"][
"camera_diagnostics"] = camera_data
85 if syno_api.upgrade
is not None:
86 diag_data[
"upgrade"] = {
87 "update_available": syno_api.upgrade.update_available,
88 "available_version": syno_api.upgrade.available_version,
89 "reboot_needed": syno_api.upgrade.reboot_needed,
90 "service_restarts": syno_api.upgrade.service_restarts,
93 if syno_api.utilisation
is not None:
94 diag_data[
"utilisation"] = {
95 "cpu": syno_api.utilisation.cpu,
96 "memory": syno_api.utilisation.memory,
97 "network": syno_api.utilisation.network,
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry entry)