1 """Diagnostics support for Withings."""
3 from __future__
import annotations
13 from .
import CONF_CLOUDHOOK_URL, WithingsConfigEntry
17 hass: HomeAssistant, entry: WithingsConfigEntry
19 """Return diagnostics for a config entry."""
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
25 has_cloudhooks = CONF_CLOUDHOOK_URL
in entry.data
27 withings_data = entry.runtime_data
29 positional_measurements: dict[str, list[str]] = {}
30 measurements: list[str] = []
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
43 measurements.append(measurement_type_name)
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,
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,
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, WithingsConfigEntry entry)