79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
"""Diagnostics support for Shelly."""
|
|
from __future__ import annotations
|
|
|
|
from homeassistant.components.diagnostics import async_redact_data
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from . import BlockDeviceWrapper, RpcDeviceWrapper
|
|
from .const import BLOCK, DATA_CONFIG_ENTRY, DOMAIN, RPC
|
|
|
|
TO_REDACT = {CONF_USERNAME, CONF_PASSWORD}
|
|
|
|
|
|
async def async_get_config_entry_diagnostics(
|
|
hass: HomeAssistant, entry: ConfigEntry
|
|
) -> dict:
|
|
"""Return diagnostics for a config entry."""
|
|
data: dict = hass.data[DOMAIN][DATA_CONFIG_ENTRY][entry.entry_id]
|
|
|
|
device_settings: str | dict = "not initialized"
|
|
device_status: str | dict = "not initialized"
|
|
if BLOCK in data:
|
|
block_wrapper: BlockDeviceWrapper = data[BLOCK]
|
|
device_info = {
|
|
"name": block_wrapper.name,
|
|
"model": block_wrapper.model,
|
|
"sw_version": block_wrapper.sw_version,
|
|
}
|
|
if block_wrapper.device.initialized:
|
|
device_settings = {
|
|
k: v
|
|
for k, v in block_wrapper.device.settings.items()
|
|
if k in ["cloud", "coiot"]
|
|
}
|
|
device_status = {
|
|
k: v
|
|
for k, v in block_wrapper.device.status.items()
|
|
if k
|
|
in [
|
|
"update",
|
|
"wifi_sta",
|
|
"time",
|
|
"has_update",
|
|
"ram_total",
|
|
"ram_free",
|
|
"ram_lwm",
|
|
"fs_size",
|
|
"fs_free",
|
|
"uptime",
|
|
]
|
|
}
|
|
else:
|
|
rpc_wrapper: RpcDeviceWrapper = data[RPC]
|
|
device_info = {
|
|
"name": rpc_wrapper.name,
|
|
"model": rpc_wrapper.model,
|
|
"sw_version": rpc_wrapper.sw_version,
|
|
}
|
|
if rpc_wrapper.device.initialized:
|
|
device_settings = {
|
|
k: v for k, v in rpc_wrapper.device.config.items() if k in ["cloud"]
|
|
}
|
|
device_status = {
|
|
k: v
|
|
for k, v in rpc_wrapper.device.status.items()
|
|
if k in ["sys", "wifi"]
|
|
}
|
|
|
|
if isinstance(device_status, dict):
|
|
device_status = async_redact_data(device_status, ["ssid"])
|
|
|
|
return {
|
|
"entry": async_redact_data(entry.as_dict(), TO_REDACT),
|
|
"device_info": device_info,
|
|
"device_settings": device_settings,
|
|
"device_status": device_status,
|
|
}
|