"""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, }