1 """Diagnostics support for MQTT."""
3 from __future__
import annotations
5 from typing
import TYPE_CHECKING, Any
20 from .
import debug_info, is_connected
21 from .models
import DATA_MQTT
23 REDACT_CONFIG = {CONF_PASSWORD, CONF_USERNAME}
24 REDACT_STATE_DEVICE_TRACKER = {ATTR_LATITUDE, ATTR_LONGITUDE}
28 hass: HomeAssistant, entry: ConfigEntry
30 """Return diagnostics for a config entry."""
35 hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
37 """Return diagnostics for a device entry."""
45 device: DeviceEntry |
None =
None,
47 """Return diagnostics for a config entry."""
48 mqtt_instance = hass.data[DATA_MQTT].client
50 assert mqtt_instance
is not None
56 "mqtt_config": redacted_config,
61 data[
"mqtt_debug_info"] = debug_info.info_for_device(hass, device.id)
63 device_registry = dr.async_get(hass)
67 for device
in dr.async_entries_for_config_entry(
68 device_registry, entry.entry_id
71 mqtt_debug_info=debug_info.info_for_config_entry(hass),
79 """Represent an MQTT device as a dictionary."""
82 entity_registry = er.async_get(hass)
83 data: dict[str, Any] = {
86 "name_by_user": device.name_by_user,
87 "disabled": device.disabled,
88 "disabled_by": device.disabled_by,
92 entities = er.async_entries_for_device(
95 include_disabled_entities=
True,
98 def _state_dict(entity_entry: er.RegistryEntry) -> dict[str, Any] |
None:
99 state = hass.states.get(entity_entry.entity_id)
103 state_dict =
dict(state.as_dict())
106 state_dict.pop(
"context",
None)
111 if entity_domain == device_tracker.DOMAIN:
113 state_dict[
"attributes"], REDACT_STATE_DEVICE_TRACKER
117 data[
"entities"].extend(
119 "device_class": entity_entry.device_class,
120 "disabled_by": entity_entry.disabled_by,
121 "disabled": entity_entry.disabled,
122 "entity_category": entity_entry.entity_category,
123 "entity_id": entity_entry.entity_id,
124 "icon": entity_entry.icon,
125 "original_device_class": entity_entry.original_device_class,
126 "original_icon": entity_entry.original_icon,
128 "unit_of_measurement": entity_entry.unit_of_measurement,
130 for entity_entry
in entities
131 if (state_dict := _state_dict(entity_entry))
is not None
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
dict[str, Any] async_get_device_diagnostics(HomeAssistant hass, ConfigEntry entry, DeviceEntry device)
dict[str, Any] _async_get_diagnostics(HomeAssistant hass, ConfigEntry entry, DeviceEntry|None device=None)
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry entry)
dict[str, Any] _async_device_as_dict(HomeAssistant hass, DeviceEntry device)
bool is_connected(HomeAssistant hass)
tuple[str, str] split_entity_id(str entity_id)