1 """Diagnostics support for VeSync."""
3 from __future__
import annotations
7 from pyvesync
import VeSync
15 from .const
import DOMAIN, VS_MANAGER
16 from .entity
import VeSyncBaseDevice
18 KEYS_TO_REDACT = {
"manager",
"uuid",
"mac_id"}
22 hass: HomeAssistant, entry: ConfigEntry
24 """Return diagnostics for a config entry."""
25 manager: VeSync = hass.data[DOMAIN][VS_MANAGER]
29 "bulb_count": len(manager.bulbs),
30 "fan_count": len(manager.fans),
31 "outlets_count": len(manager.outlets),
32 "switch_count": len(manager.switches),
33 "timezone": manager.time_zone,
45 hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
47 """Return diagnostics for a device entry."""
48 manager: VeSync = hass.data[DOMAIN][VS_MANAGER]
50 vesync_device_id = next(iden[1]
for iden
in device.identifiers
if iden[0] == DOMAIN)
55 data[
"home_assistant"] = {
57 "name_by_user": device.name_by_user,
58 "disabled": device.disabled,
59 "disabled_by": device.disabled_by,
64 entity_registry = er.async_get(hass)
65 hass_entities = er.async_entries_for_device(
68 include_disabled_entities=
True,
71 for entity_entry
in hass_entities:
72 state = hass.states.get(entity_entry.entity_id)
75 state_dict =
dict(state.as_dict())
77 state_dict.pop(
"context",
None)
79 data[
"home_assistant"][
"entities"].append(
81 "domain": entity_entry.domain,
82 "entity_id": entity_entry.entity_id,
83 "entity_category": entity_entry.entity_category,
84 "device_class": entity_entry.device_class,
85 "original_device_class": entity_entry.original_device_class,
86 "name": entity_entry.name,
87 "original_name": entity_entry.original_name,
88 "icon": entity_entry.icon,
89 "original_icon": entity_entry.original_icon,
90 "unit_of_measurement": entity_entry.unit_of_measurement,
92 "disabled": entity_entry.disabled,
93 "disabled_by": entity_entry.disabled_by,
101 """Build a dictionary of ALL VeSync devices."""
102 device_dict = {x.cid: x
for x
in manager.switches}
103 device_dict.update({x.cid: x
for x
in manager.fans})
104 device_dict.update({x.cid: x
for x
in manager.outlets})
105 device_dict.update({x.cid: x
for x
in manager.bulbs})
110 """Rebuild and redact values of a VeSync device."""
112 for key, item
in device.__dict__.items():
113 if key
not in KEYS_TO_REDACT:
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry entry)
dict[str, Any] async_get_device_diagnostics(HomeAssistant hass, ConfigEntry entry, DeviceEntry device)
dict _build_device_dict(VeSync manager)
dict _redact_device_values(VeSyncBaseDevice device)