Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Provides diagnostics for TotalConnect."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from homeassistant.components.diagnostics import async_redact_data
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant
10 
11 from .const import DOMAIN
12 
13 TO_REDACT = [
14  "username",
15  "Password",
16  "Usercode",
17  "UserID",
18  "Serial Number",
19  "serial_number",
20  "sensor_serial_number",
21 ]
22 
23 # Private variable access needed for diagnostics
24 
25 
27  hass: HomeAssistant, config_entry: ConfigEntry
28 ) -> dict[str, Any]:
29  """Return diagnostics for a config entry."""
30  client = hass.data[DOMAIN][config_entry.entry_id].client
31 
32  data: dict[str, Any] = {}
33  data["client"] = {
34  "auto_bypass_low_battery": client.auto_bypass_low_battery,
35  "module_flags": client._module_flags, # noqa: SLF001
36  "retry_delay": client.retry_delay,
37  "invalid_credentials": client._invalid_credentials, # noqa: SLF001
38  }
39 
40  data["user"] = {
41  "master": client._user._master_user, # noqa: SLF001
42  "user_admin": client._user._user_admin, # noqa: SLF001
43  "config_admin": client._user._config_admin, # noqa: SLF001
44  "security_problem": client._user.security_problem(), # noqa: SLF001
45  "features": client._user._features, # noqa: SLF001
46  }
47 
48  data["locations"] = []
49  for location in client.locations.values():
50  new_location = {
51  "location_id": location.location_id,
52  "name": location.location_name,
53  "module_flags": location._module_flags, # noqa: SLF001
54  "security_device_id": location.security_device_id,
55  "ac_loss": location.ac_loss,
56  "low_battery": location.low_battery,
57  "auto_bypass_low_battery": location.auto_bypass_low_battery,
58  "cover_tampered": location.cover_tampered,
59  "arming_state": location.arming_state,
60  }
61 
62  new_location["devices"] = []
63  for device in location.devices.values():
64  new_device = {
65  "device_id": device.deviceid,
66  "name": device.name,
67  "class_id": device.class_id,
68  "serial_number": device.serial_number,
69  "security_panel_type_id": device.security_panel_type_id,
70  "serial_text": device.serial_text,
71  "flags": device.flags,
72  }
73  new_location["devices"].append(new_device)
74 
75  new_location["partitions"] = []
76  for partition in location.partitions.values():
77  new_partition = {
78  "partition_id": partition.partitionid,
79  "name": partition.name,
80  "is_stay_armed": partition.is_stay_armed,
81  "is_fire_enabled": partition.is_fire_enabled,
82  "is_common_enabled": partition.is_common_enabled,
83  "is_locked": partition.is_locked,
84  "is_new_partition": partition.is_new_partition,
85  "is_night_stay_enabled": partition.is_night_stay_enabled,
86  "exit_delay_timer": partition.exit_delay_timer,
87  }
88  new_location["partitions"].append(new_partition)
89 
90  new_location["zones"] = []
91  for zone in location.zones.values():
92  new_zone = {
93  "zone_id": zone.zoneid,
94  "description": zone.description,
95  "partition": zone.partition,
96  "status": zone.status,
97  "zone_type_id": zone.zone_type_id,
98  "can_be_bypassed": zone.can_be_bypassed,
99  "battery_level": zone.battery_level,
100  "signal_strength": zone.signal_strength,
101  "sensor_serial_number": zone.sensor_serial_number,
102  "loop_number": zone.loop_number,
103  "response_type": zone.response_type,
104  "alarm_report_state": zone.alarm_report_state,
105  "supervision_type": zone.supervision_type,
106  "chime_state": zone.chime_state,
107  "device_type": zone.device_type,
108  }
109  new_location["zones"].append(new_zone)
110 
111  data["locations"].append(new_location)
112 
113  return async_redact_data(data, TO_REDACT)
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:28