1 """Diagnostics support for the BMW Connected Drive integration."""
3 from __future__
import annotations
5 from dataclasses
import asdict
7 from typing
import TYPE_CHECKING, Any
9 from bimmer_connected.utils
import MyBMWJSONEncoder
16 from .
import BMWConfigEntry
17 from .const
import CONF_REFRESH_TOKEN
20 from bimmer_connected.vehicle
import MyBMWVehicle
23 TO_REDACT_INFO = [CONF_USERNAME, CONF_PASSWORD, CONF_REFRESH_TOKEN]
43 """Convert a MyBMWVehicle to a dictionary using MyBMWJSONEncoder."""
44 retval: dict = json.loads(json.dumps(vehicle, cls=MyBMWJSONEncoder))
49 hass: HomeAssistant, config_entry: BMWConfigEntry
51 """Return diagnostics for a config entry."""
52 coordinator = config_entry.runtime_data.coordinator
54 coordinator.account.config.log_responses =
True
55 await coordinator.account.get_vehicles(force_init=
True)
61 for vehicle
in coordinator.account.vehicles
64 [asdict(r)
for r
in coordinator.account.get_stored_responses()],
69 coordinator.account.config.log_responses =
False
71 return diagnostics_data
75 hass: HomeAssistant, config_entry: BMWConfigEntry, device: DeviceEntry
77 """Return diagnostics for a device."""
78 coordinator = config_entry.runtime_data.coordinator
80 coordinator.account.config.log_responses =
True
81 await coordinator.account.get_vehicles(force_init=
True)
83 vin = next(iter(device.identifiers))[1]
84 vehicle = coordinator.account.get_vehicle(vin)
91 [asdict(r)
for r
in coordinator.account.get_stored_responses()],
96 coordinator.account.config.log_responses =
False
98 return diagnostics_data
dict[str, Any] async_get_device_diagnostics(HomeAssistant hass, BMWConfigEntry config_entry, DeviceEntry device)
dict vehicle_to_dict(MyBMWVehicle|None vehicle)
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, BMWConfigEntry config_entry)
dict async_redact_data(Mapping data, Iterable[Any] to_redact)