1 """Provide diagnostics for Matter."""
3 from __future__
import annotations
5 from copy
import deepcopy
8 from chip.clusters
import Objects
9 from matter_server.common.helpers.util
import dataclass_to_dict, parse_attribute_path
16 from .helpers
import get_matter, get_node_from_device_entry
18 ATTRIBUTES_TO_REDACT = {Objects.BasicInformation.Attributes.Location}
22 """Redact Matter cluster attribute."""
23 redacted = deepcopy(node_data)
24 for attribute_to_redact
in ATTRIBUTES_TO_REDACT:
25 for attribute_path
in redacted[
"attributes"]:
26 _, cluster_id, attribute_id = parse_attribute_path(attribute_path)
27 if cluster_id != attribute_to_redact.cluster_id:
29 if attribute_id != attribute_to_redact.attribute_id:
31 redacted[
"attributes"][attribute_path] = REDACTED
37 """Remove serialization type from data."""
44 hass: HomeAssistant, config_entry: ConfigEntry
46 """Return diagnostics for a config entry."""
48 server_diagnostics = await matter.matter_client.get_diagnostics()
49 data = dataclass_to_dict(server_diagnostics)
53 return {
"server": data}
57 hass: HomeAssistant, config_entry: ConfigEntry, device: dr.DeviceEntry
59 """Return diagnostics for a device."""
61 server_diagnostics = await matter.matter_client.get_diagnostics()
65 "server_info": dataclass_to_dict(server_diagnostics.info),
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry config_entry)
dict[str, Any] remove_serialization_type(dict[str, Any] data)
dict[str, Any] redact_matter_attributes(dict[str, Any] node_data)
dict[str, Any] async_get_device_diagnostics(HomeAssistant hass, ConfigEntry config_entry, dr.DeviceEntry device)
MatterAdapter get_matter(HomeAssistant hass)
MatterNode|None get_node_from_device_entry(HomeAssistant hass, dr.DeviceEntry device)