diff --git a/.coveragerc b/.coveragerc index 2a6ffdf22bd..7d6b5fcd944 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1426,6 +1426,7 @@ omit = homeassistant/components/xiaomi_miio/button.py homeassistant/components/xiaomi_miio/device.py homeassistant/components/xiaomi_miio/device_tracker.py + homeassistant/components/xiaomi_miio/diagnostics.py homeassistant/components/xiaomi_miio/fan.py homeassistant/components/xiaomi_miio/gateway.py homeassistant/components/xiaomi_miio/humidifier.py diff --git a/homeassistant/components/xiaomi_miio/diagnostics.py b/homeassistant/components/xiaomi_miio/diagnostics.py new file mode 100644 index 00000000000..ece6c0524b5 --- /dev/null +++ b/homeassistant/components/xiaomi_miio/diagnostics.py @@ -0,0 +1,35 @@ +"""Diagnostics support for Xiaomi Miio.""" +from __future__ import annotations + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_MAC, CONF_TOKEN, CONF_UNIQUE_ID +from homeassistant.core import HomeAssistant + +from .const import CONF_CLOUD_PASSWORD, CONF_CLOUD_USERNAME, DOMAIN, KEY_COORDINATOR + +TO_REDACT = { + CONF_CLOUD_PASSWORD, + CONF_CLOUD_USERNAME, + CONF_MAC, + CONF_TOKEN, + CONF_UNIQUE_ID, +} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry +) -> dict: + """Return diagnostics for a config entry.""" + diagnostics_data = { + "config_entry": async_redact_data(config_entry.as_dict(), TO_REDACT) + } + + # not every device uses DataUpdateCoordinator + if coordinator := hass.data[DOMAIN][config_entry.entry_id].get(KEY_COORDINATOR): + if isinstance(coordinator.data, dict): + diagnostics_data["coordinator_data"] = coordinator.data + else: + diagnostics_data["coordinator_data"] = coordinator.data.__repr__() + + return diagnostics_data