hass-core/homeassistant/components/knx/diagnostics.py
Matthias Alphart 4517af509c
Add support for KNX IP-Secure routing (#82765)
* always use instance variable for new entry data

- change `self._tunneling_config` to non-optional `self.new_entry_data`
- always use self.new_entry_data in `finish_flow()`

* support secure routing

* amend current tests

* use sync latency tolerance

* test secure routing config flow

* diagnostics redact backbone_key

* test xknx library setup

* check length of backbone_key

* better readable key validation
2022-11-27 23:33:12 +01:00

52 lines
1.4 KiB
Python

"""Diagnostics support for KNX."""
from __future__ import annotations
from typing import Any
import voluptuous as vol
from homeassistant import config as conf_util
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from . import CONFIG_SCHEMA
from .const import (
CONF_KNX_KNXKEY_PASSWORD,
CONF_KNX_ROUTING_BACKBONE_KEY,
CONF_KNX_SECURE_DEVICE_AUTHENTICATION,
CONF_KNX_SECURE_USER_PASSWORD,
DOMAIN,
)
TO_REDACT = {
CONF_KNX_ROUTING_BACKBONE_KEY,
CONF_KNX_KNXKEY_PASSWORD,
CONF_KNX_SECURE_USER_PASSWORD,
CONF_KNX_SECURE_DEVICE_AUTHENTICATION,
}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, config_entry: ConfigEntry
) -> dict:
"""Return diagnostics for a config entry."""
diag: dict[str, Any] = {}
knx_module = hass.data[DOMAIN]
diag["xknx"] = {
"version": knx_module.xknx.version,
"current_address": str(knx_module.xknx.current_address),
}
diag["config_entry_data"] = async_redact_data(dict(config_entry.data), TO_REDACT)
raw_config = await conf_util.async_hass_config_yaml(hass)
diag["configuration_yaml"] = raw_config.get(DOMAIN)
try:
CONFIG_SCHEMA(raw_config)
except vol.Invalid as ex:
diag["configuration_error"] = str(ex)
else:
diag["configuration_error"] = None
return diag