Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Diagnostics platform for Traccar Server."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from homeassistant.components.diagnostics import REDACTED, async_redact_data
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.const import CONF_ADDRESS, CONF_LATITUDE, CONF_LONGITUDE
10 from homeassistant.core import HomeAssistant
11 from homeassistant.helpers import device_registry as dr, entity_registry as er
12 
13 from .const import DOMAIN
14 from .coordinator import TraccarServerCoordinator
15 
16 KEYS_TO_REDACT = {
17  "area", # This is the polygon area of a geofence
18  CONF_ADDRESS,
19  CONF_LATITUDE,
20  CONF_LONGITUDE,
21 }
22 
23 
25  hass: HomeAssistant,
26  entity: er.RegistryEntry,
27  coordinator: TraccarServerCoordinator,
28 ) -> dict[str, Any] | None:
29  states_to_redact = {x["position"]["address"] for x in coordinator.data.values()}
30  return (
31  {
32  "state": state.state if state.state not in states_to_redact else REDACTED,
33  "attributes": state.attributes,
34  }
35  if (state := hass.states.get(entity.entity_id))
36  else None
37  )
38 
39 
41  hass: HomeAssistant,
42  config_entry: ConfigEntry,
43 ) -> dict[str, Any]:
44  """Return diagnostics for a config entry."""
45  coordinator: TraccarServerCoordinator = hass.data[DOMAIN][config_entry.entry_id]
46  entity_registry = er.async_get(hass)
47 
48  entities = er.async_entries_for_config_entry(
49  entity_registry,
50  config_entry_id=config_entry.entry_id,
51  )
52 
53  return async_redact_data(
54  {
55  "subscription_status": coordinator.client.subscription_status,
56  "config_entry_options": dict(config_entry.options),
57  "coordinator_data": coordinator.data,
58  "entities": [
59  {
60  "entity_id": entity.entity_id,
61  "disabled": entity.disabled,
62  "unit_of_measurement": entity.unit_of_measurement,
63  "state": _entity_state(hass, entity, coordinator),
64  }
65  for entity in entities
66  ],
67  },
68  KEYS_TO_REDACT,
69  )
70 
71 
73  hass: HomeAssistant,
74  entry: ConfigEntry,
75  device: dr.DeviceEntry,
76 ) -> dict[str, Any]:
77  """Return device diagnostics."""
78  coordinator: TraccarServerCoordinator = hass.data[DOMAIN][entry.entry_id]
79  entity_registry = er.async_get(hass)
80 
81  entities = er.async_entries_for_device(
82  entity_registry,
83  device_id=device.id,
84  include_disabled_entities=True,
85  )
86 
87  await hass.config_entries.async_reload(entry.entry_id)
88  return async_redact_data(
89  {
90  "subscription_status": coordinator.client.subscription_status,
91  "config_entry_options": dict(entry.options),
92  "coordinator_data": coordinator.data,
93  "entities": [
94  {
95  "entity_id": entity.entity_id,
96  "disabled": entity.disabled,
97  "unit_of_measurement": entity.unit_of_measurement,
98  "state": _entity_state(hass, entity, coordinator),
99  }
100  for entity in entities
101  ],
102  },
103  KEYS_TO_REDACT,
104  )
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
Definition: util.py:14
dict[str, Any]|None _entity_state(HomeAssistant hass, er.RegistryEntry entity, TraccarServerCoordinator coordinator)
Definition: diagnostics.py:28
dict[str, Any] async_get_device_diagnostics(HomeAssistant hass, ConfigEntry entry, dr.DeviceEntry device)
Definition: diagnostics.py:76
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry config_entry)
Definition: diagnostics.py:43