Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Diagnostics support for Withings."""
2 
3 from __future__ import annotations
4 
5 from typing import Any
6 
7 from yarl import URL
8 
9 from homeassistant.components.webhook import async_generate_url as webhook_generate_url
10 from homeassistant.const import CONF_WEBHOOK_ID
11 from homeassistant.core import HomeAssistant
12 
13 from . import CONF_CLOUDHOOK_URL, WithingsConfigEntry
14 
15 
17  hass: HomeAssistant, entry: WithingsConfigEntry
18 ) -> dict[str, Any]:
19  """Return diagnostics for a config entry."""
20 
21  webhook_url = webhook_generate_url(hass, entry.data[CONF_WEBHOOK_ID])
22  url = URL(webhook_url)
23  has_valid_external_webhook_url = url.scheme == "https" and url.port == 443
24 
25  has_cloudhooks = CONF_CLOUDHOOK_URL in entry.data
26 
27  withings_data = entry.runtime_data
28 
29  positional_measurements: dict[str, list[str]] = {}
30  measurements: list[str] = []
31 
32  for measurement in withings_data.measurement_coordinator.data:
33  measurement_type, measurement_position = measurement
34  measurement_type_name = measurement_type.name.lower()
35  if measurement_position is not None:
36  measurement_position_name = measurement_position.name.lower()
37  if measurement_type_name not in positional_measurements:
38  positional_measurements[measurement_type_name] = []
39  positional_measurements[measurement_type_name].append(
40  measurement_position_name
41  )
42  else:
43  measurements.append(measurement_type_name)
44 
45  return {
46  "has_valid_external_webhook_url": has_valid_external_webhook_url,
47  "has_cloudhooks": has_cloudhooks,
48  "webhooks_connected": withings_data.measurement_coordinator.webhooks_connected,
49  "received_measurements": {
50  "positional": positional_measurements,
51  "non_positional": measurements,
52  },
53  "received_sleep_data": withings_data.sleep_coordinator.data is not None,
54  "received_workout_data": withings_data.workout_coordinator.data is not None,
55  "received_activity_data": withings_data.activity_coordinator.data is not None,
56  }
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, WithingsConfigEntry entry)
Definition: diagnostics.py:18