44import enum
55import logging
66from collections.abc import Callable, Mapping
7- from dataclasses import dataclass
7+ from dataclasses import dataclass, asdict
88from typing import Any
99
1010import aiohttp
1616 UserData,
1717)
1818from roborock.devices.device import DeviceReadyCallback, RoborockDevice
19- from roborock .diagnostics import Diagnostics
19+ from roborock.diagnostics import Diagnostics, redact_device_data
2020from roborock.exceptions import RoborockException
2121from roborock.map.map_parser import MapParserConfig
2222from roborock.mqtt.roborock_session import create_lazy_mqtt_session
@@ -76,6 +76,7 @@ def __init__(
7676 self._devices: dict[str, RoborockDevice] = {}
7777 self._mqtt_session = mqtt_session
7878 self._diagnostics = diagnostics
79+ self._home_data: HomeData | None = None
7980
8081 async def discover_devices(self, prefer_cache: bool = True) -> list[RoborockDevice]:
8182 """Discover all devices for the logged-in user."""
@@ -91,9 +92,9 @@ async def discover_devices(self, prefer_cache: bool = True) -> list[RoborockDevi
9192 raise
9293 _LOGGER.debug("Failed to fetch home data, using cached data: %s", ex)
9394 await self._cache.set(cache_data)
94- home_data = cache_data .home_data
95+ self._home_data = cache_data.home_data
9596
96- device_products = home_data .device_products
97+ device_products = self._home_data .device_products
9798 _LOGGER.debug("Discovered %d devices", len(device_products))
9899
99100 # These are connected serially to avoid overwhelming the MQTT broker
@@ -106,7 +107,7 @@ async def discover_devices(self, prefer_cache: bool = True) -> list[RoborockDevi
106107 if duid in self._devices:
107108 continue
108109 try:
109- new_device = self ._device_creator (home_data , device , product )
110+ new_device = self._device_creator(self._home_data , device, product)
110111 except UnsupportedDeviceError:
111112 _LOGGER.info("Skipping unsupported device %s %s", product.summary_info(), device.summary_info())
112113 unsupported_devices_counter.increment(device.pv or "unknown")
@@ -136,7 +137,11 @@ async def close(self) -> None:
136137
137138 def diagnostic_data(self) -> Mapping[str, Any]:
138139 """Return diagnostics information about the device manager."""
139- return self ._diagnostics .as_dict ()
140+ return {
141+ **self._diagnostics.as_dict(),
142+ "home_data": redact_device_data(asdict(self._home_data or {})),
143+ "devices": [device.diagnostic_data() for device in self._devices.values()],
144+ }
140145
141146
142147@dataclass
0 commit comments