Skip to content

Commit 026b165

Browse files
committed
Fix Q10 diagnostics display in Home Assistant
1 parent 5712f92 commit 026b165

6 files changed

Lines changed: 556 additions & 2 deletions

File tree

roborock/data/containers.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,14 @@ def convert_dict(types_map: dict[Any, type], data: dict[Any, Any]) -> dict[Any,
143143

144144
return result
145145

146-
def as_dict(self) -> dict:
146+
def as_dict(self, exclude: set[str] | None = None) -> dict:
147+
exclude_set = exclude or set()
147148
return asdict(
148149
self,
149150
dict_factory=lambda _fields: {
150151
_camelize(key): value.value if isinstance(value, Enum) else value
151152
for (key, value) in _fields
152-
if value is not None
153+
if value is not None and key not in exclude_set
153154
},
154155
)
155156

roborock/devices/device.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ def diagnostic_data(self) -> dict[str, Any]:
243243
extra: dict[str, Any] = {}
244244
if self.v1_properties:
245245
extra["traits"] = self.v1_properties.as_dict()
246+
elif self.b01_q10_properties:
247+
extra["traits"] = self.b01_q10_properties.as_dict()
246248
return redact_device_data(
247249
{
248250
"device": self.device_info.as_dict(),

roborock/devices/traits/b01/q10/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import asyncio
44
import logging
5+
from typing import Any
56

67
from roborock.data.b01_q10.b01_q10_code_mappings import B01_Q10_DP
8+
from roborock.data.containers import RoborockBase
79
from roborock.devices.rpc.b01_q10_channel import stream_decoded_messages
810
from roborock.devices.traits import Trait
911
from roborock.devices.transport.mqtt_channel import MqttChannel
@@ -149,6 +151,14 @@ def _handle_message(self, message: Q10Message) -> None:
149151
for trait in self._updatable_traits:
150152
trait.update_from_dps(message.dps)
151153

154+
def as_dict(self) -> dict[str, Any]:
155+
"""Return the trait data as a dictionary."""
156+
result: dict[str, Any] = {}
157+
for name, value in self.__dict__.items():
158+
if isinstance(value, RoborockBase):
159+
result[name] = value.as_dict()
160+
return result
161+
152162

153163
def create(channel: MqttChannel) -> Q10PropertiesApi:
154164
"""Create traits for B01 devices."""

roborock/devices/traits/b01/q10/map.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import logging
2121
from dataclasses import dataclass, field
22+
from typing import Any
2223

2324
from vacuum_map_parser_base.map_data import MapData
2425

@@ -108,3 +109,10 @@ def update_from_trace_packet(self, packet: Q10TracePacket) -> None:
108109
self.path = packet.points
109110
self.robot_position = packet.robot_position
110111
self._notify_update()
112+
113+
def as_dict(self, exclude: set[str] | None = None) -> dict[str, Any]:
114+
"""Return the trait data as a dictionary, excluding large binary data."""
115+
exclude_set = {"image_content", "map_data"}
116+
if exclude:
117+
exclude_set.update(exclude)
118+
return super().as_dict(exclude=exclude_set)

0 commit comments

Comments
 (0)