Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Diagnostics support for Comelit integration."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from aiocomelit import (
8  ComelitSerialBridgeObject,
9  ComelitVedoAreaObject,
10  ComelitVedoZoneObject,
11 )
12 from aiocomelit.const import BRIDGE
13 
14 from homeassistant.components.diagnostics import async_redact_data
15 from homeassistant.config_entries import ConfigEntry
16 from homeassistant.const import CONF_PIN, CONF_TYPE
17 from homeassistant.core import HomeAssistant
18 
19 from .const import DOMAIN
20 from .coordinator import ComelitBaseCoordinator
21 
22 TO_REDACT = {CONF_PIN}
23 
24 
26  hass: HomeAssistant, entry: ConfigEntry
27 ) -> dict[str, Any]:
28  """Return diagnostics for a config entry."""
29 
30  coordinator: ComelitBaseCoordinator = hass.data[DOMAIN][entry.entry_id]
31 
32  dev_list: list[dict[str, Any]] = []
33  dev_type_list: list[dict[int, Any]] = []
34 
35  for dev_type in coordinator.data:
36  dev_type_list = []
37  for sensor_data in coordinator.data[dev_type].values():
38  if isinstance(sensor_data, ComelitSerialBridgeObject):
39  dev_type_list.append(
40  {
41  sensor_data.index: {
42  "name": sensor_data.name,
43  "status": sensor_data.status,
44  "human_status": sensor_data.human_status,
45  "protected": sensor_data.protected,
46  "val": sensor_data.val,
47  "zone": sensor_data.zone,
48  "power": sensor_data.power,
49  "power_unit": sensor_data.power_unit,
50  }
51  }
52  )
53  if isinstance(sensor_data, ComelitVedoAreaObject):
54  dev_type_list.append(
55  {
56  sensor_data.index: {
57  "name": sensor_data.name,
58  "human_status": sensor_data.human_status.value,
59  "p1": sensor_data.p1,
60  "p2": sensor_data.p2,
61  "ready": sensor_data.ready,
62  "armed": sensor_data.armed,
63  "alarm": sensor_data.alarm,
64  "alarm_memory": sensor_data.alarm_memory,
65  "sabotage": sensor_data.sabotage,
66  "anomaly": sensor_data.anomaly,
67  "in_time": sensor_data.in_time,
68  "out_time": sensor_data.out_time,
69  }
70  }
71  )
72  if isinstance(sensor_data, ComelitVedoZoneObject):
73  dev_type_list.append(
74  {
75  sensor_data.index: {
76  "name": sensor_data.name,
77  "human_status": sensor_data.human_status.value,
78  "status": sensor_data.status,
79  "status_api": sensor_data.status_api,
80  }
81  }
82  )
83  dev_list.append({dev_type: dev_type_list})
84 
85  return {
86  "entry": async_redact_data(entry.as_dict(), TO_REDACT),
87  "type": entry.data.get(CONF_TYPE, BRIDGE),
88  "device_info": {
89  "last_update success": coordinator.last_update_success,
90  "last_exception": repr(coordinator.last_exception),
91  "devices": dev_list,
92  },
93  }
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry entry)
Definition: diagnostics.py:27
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
Definition: util.py:14