Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Provides diagnostics for Overkiz."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from pyoverkiz.enums import APIType
8 from pyoverkiz.obfuscate import obfuscate_id
9 
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.device_registry import DeviceEntry
13 
14 from . import HomeAssistantOverkizData
15 from .const import CONF_API_TYPE, CONF_HUB, DOMAIN
16 
17 
19  hass: HomeAssistant, entry: ConfigEntry
20 ) -> dict[str, Any]:
21  """Return diagnostics for a config entry."""
22  entry_data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
23  client = entry_data.coordinator.client
24 
25  data = {
26  "setup": await client.get_diagnostic_data(),
27  "server": entry.data[CONF_HUB],
28  "api_type": entry.data.get(CONF_API_TYPE, APIType.CLOUD),
29  }
30 
31  # Only Overkiz cloud servers expose an endpoint with execution history
32  if client.api_type == APIType.CLOUD:
33  execution_history = [
34  repr(execution) for execution in await client.get_execution_history()
35  ]
36  data["execution_history"] = execution_history
37 
38  return data
39 
40 
42  hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry
43 ) -> dict[str, Any]:
44  """Return diagnostics for a device entry."""
45  entry_data: HomeAssistantOverkizData = hass.data[DOMAIN][entry.entry_id]
46  client = entry_data.coordinator.client
47 
48  device_url = min(device.identifiers)[1]
49 
50  data = {
51  "device": {
52  "controllable_name": device.hw_version,
53  "firmware": device.sw_version,
54  "device_url": obfuscate_id(device_url),
55  "model": device.model,
56  },
57  "setup": await client.get_diagnostic_data(),
58  "server": entry.data[CONF_HUB],
59  "api_type": entry.data.get(CONF_API_TYPE, APIType.CLOUD),
60  }
61 
62  # Only Overkiz cloud servers expose an endpoint with execution history
63  if client.api_type == APIType.CLOUD:
64  data["execution_history"] = [
65  repr(execution)
66  for execution in await client.get_execution_history()
67  if any(command.device_url == device_url for command in execution.commands)
68  ]
69 
70  return data
dict[str, Any] async_get_device_diagnostics(HomeAssistant hass, ConfigEntry entry, DeviceEntry device)
Definition: diagnostics.py:43
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry entry)
Definition: diagnostics.py:20