Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Diagnostics support for KNX."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 import voluptuous as vol
8 
9 from homeassistant import config as conf_util
10 from homeassistant.components.diagnostics import async_redact_data
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.core import HomeAssistant
13 
14 from . import CONFIG_SCHEMA
15 from .const import (
16  CONF_KNX_KNXKEY_PASSWORD,
17  CONF_KNX_ROUTING_BACKBONE_KEY,
18  CONF_KNX_SECURE_DEVICE_AUTHENTICATION,
19  CONF_KNX_SECURE_USER_PASSWORD,
20  DOMAIN,
21  KNX_MODULE_KEY,
22 )
23 
24 TO_REDACT = {
25  CONF_KNX_ROUTING_BACKBONE_KEY,
26  CONF_KNX_KNXKEY_PASSWORD,
27  CONF_KNX_SECURE_USER_PASSWORD,
28  CONF_KNX_SECURE_DEVICE_AUTHENTICATION,
29 }
30 
31 
33  hass: HomeAssistant, config_entry: ConfigEntry
34 ) -> dict[str, Any]:
35  """Return diagnostics for a config entry."""
36  diag: dict[str, Any] = {}
37  knx_module = hass.data[KNX_MODULE_KEY]
38  diag["xknx"] = {
39  "version": knx_module.xknx.version,
40  "current_address": str(knx_module.xknx.current_address),
41  }
42 
43  diag["config_entry_data"] = async_redact_data(dict(config_entry.data), TO_REDACT)
44 
45  if proj_info := knx_module.project.info:
46  diag["project_info"] = async_redact_data(proj_info, "name")
47  else:
48  diag["project_info"] = None
49 
50  raw_config = await conf_util.async_hass_config_yaml(hass)
51  diag["configuration_yaml"] = raw_config.get(DOMAIN)
52  try:
53  CONFIG_SCHEMA(raw_config)
54  except vol.Invalid as ex:
55  diag["configuration_error"] = str(ex)
56  else:
57  diag["configuration_error"] = None
58 
59  return diag
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
Definition: util.py:14
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry config_entry)
Definition: diagnostics.py:34