Skip to content

Commit df1262e

Browse files
fix: roborock enum
1 parent 115dad2 commit df1262e

File tree

4 files changed

+38
-19
lines changed

4 files changed

+38
-19
lines changed

roborock/api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ async def get_smart_wash_params(self, device_id: str) -> SmartWashParams:
262262
async def get_dock_summary(self, device_id: str, dock_type: RoborockDockTypeCode) -> RoborockDockSummary:
263263
try:
264264
commands = [self.get_dust_collection_mode(device_id)]
265-
if dock_type == RoborockDockTypeCode.EMPTY_WASH_FILL_DOCK:
265+
if dock_type == RoborockDockTypeCode['3']:
266266
commands += [self.get_wash_towel_mode(device_id), self.get_smart_wash_params(device_id)]
267267
[
268268
dust_collection_mode,
@@ -292,7 +292,7 @@ async def get_prop(self, device_id: str) -> RoborockDeviceProp | None:
292292
device_id, clean_summary.records[0]
293293
)
294294
dock_summary = None
295-
if status and status.dock_type != RoborockDockTypeCode.NO_DOCK:
295+
if status and status.dock_type != RoborockDockTypeCode['0']:
296296
dock_summary = await self.get_dock_summary(device_id, status.dock_type)
297297
if any([status, dnd_timer, clean_summary, consumable]):
298298
return RoborockDeviceProp(

roborock/code_mappings.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,29 @@
55

66
class RoborockEnum(str, Enum):
77

8+
def __str__(self):
9+
return str(self.value)
10+
811
@classmethod
912
def _missing_(cls, code: int):
1013
return cls._member_map_.get(str(code))
1114

15+
@classmethod
16+
def as_dict(cls):
17+
return {i.name: i.value for i in cls}
18+
19+
@classmethod
20+
def values(cls):
21+
return list(cls.as_dict().values())
22+
23+
@classmethod
24+
def keys(cls):
25+
return list(cls.as_dict().keys())
26+
27+
@classmethod
28+
def items(cls):
29+
return cls.as_dict().items()
30+
1231

1332
class RoborockCode:
1433

roborock/containers.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
from dacite import from_dict, Config
77

8-
from roborock.code_mappings import RoborockDockWashTowelModeCode, RoborockDockTypeCode
8+
from roborock.code_mappings import RoborockDockWashTowelModeCode, RoborockDockTypeCode, RoborockMopIntensityCode, \
9+
RoborockStateCode
910
from .code_mappings import RoborockMopModeCode, RoborockDockErrorCode, \
1011
RoborockErrorCode, RoborockDockDustCollectionModeCode, RoborockFanPowerCode
1112

@@ -21,11 +22,7 @@ def decamelize(d):
2122

2223

2324
@dataclass
24-
class RoborockBase(dict):
25-
def __init__(self, data: dict[str, any]) -> None:
26-
super().__init__()
27-
if isinstance(data, dict):
28-
self.update(data)
25+
class RoborockBase:
2926

3027
@classmethod
3128
def from_dict(cls, data: dict[str, any]):
@@ -164,7 +161,7 @@ class Status(RoborockBase):
164161
msg_ver: Optional[int] = None
165162
msg_seq: Optional[int] = None
166163
status: Optional[str] = None
167-
state: Optional[int] = None
164+
state: Optional[RoborockStateCode] = None
168165
battery: Optional[int] = None
169166
clean_time: Optional[int] = None
170167
clean_area: Optional[int] = None
@@ -183,7 +180,7 @@ class Status(RoborockBase):
183180
map_status: Optional[int] = None
184181
is_locating: Optional[int] = None
185182
lock_status: Optional[int] = None
186-
water_box_mode: Optional[int] = None
183+
water_box_mode: Optional[RoborockMopIntensityCode] = None
187184
mop_intensity: Optional[str] = None
188185
water_box_carriage_status: Optional[int] = None
189186
mop_forbidden_enable: Optional[int] = None
@@ -285,12 +282,12 @@ class SmartWashParams(RoborockBase):
285282

286283
@dataclass
287284
class DustCollectionMode(RoborockBase):
288-
mode: RoborockDockDustCollectionModeCode
285+
mode: Optional[RoborockDockDustCollectionModeCode] = None
289286

290287

291288
@dataclass
292289
class WashTowelMode(RoborockBase):
293-
wash_mode: RoborockDockWashTowelModeCode
290+
wash_mode: Optional[RoborockDockWashTowelModeCode] = None
294291

295292

296293
@dataclass

tests/test_containers.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from roborock.code_mappings import RoborockStateCode, RoborockErrorCode, RoborockFanPowerCode, RoborockMopIntensityCode, \
2+
RoborockDockTypeCode, RoborockMopModeCode, RoborockDockErrorCode
3+
14
from roborock import UserData, HomeData, Consumable, Status, DNDTimer, CleanSummary, CleanRecord
25
from .mock_data import USER_DATA, HOME_DATA_RAW, CONSUMABLE, STATUS, DND_TIMER, CLEAN_SUMMARY, CLEAN_RECORD
36

@@ -95,11 +98,11 @@ def test_status():
9598
s = Status.from_dict(STATUS)
9699
assert s.msg_ver == 2
97100
assert s.msg_seq == 458
98-
assert s.state == 8
101+
assert s.state == RoborockStateCode['8']
99102
assert s.battery == 100
100103
assert s.clean_time == 1176
101104
assert s.clean_area == 20965000
102-
assert s.error_code == 'none'
105+
assert s.error_code == RoborockErrorCode['0']
103106
assert s.map_present == 1
104107
assert s.in_cleaning == 0
105108
assert s.in_returning == 0
@@ -109,12 +112,12 @@ def test_status():
109112
assert s.back_type == -1
110113
assert s.wash_phase == 0
111114
assert s.wash_ready == 0
112-
assert s.fan_power == 'balanced'
115+
assert s.fan_power == RoborockFanPowerCode['102']
113116
assert s.dnd_enabled == 0
114117
assert s.map_status == 3
115118
assert s.is_locating == 0
116119
assert s.lock_status == 0
117-
assert s.water_box_mode == 203
120+
assert s.water_box_mode == RoborockMopIntensityCode['203']
118121
assert s.water_box_carriage_status == 1
119122
assert s.mop_forbidden_enable == 1
120123
assert s.camera_status == 3457
@@ -123,15 +126,15 @@ def test_status():
123126
assert s.home_sec_enable_password == 0
124127
assert s.adbumper_status == [0, 0, 0]
125128
assert s.water_shortage_status == 0
126-
assert s.dock_type == 'empty_wash_fill_dock'
129+
assert s.dock_type == RoborockDockTypeCode['3']
127130
assert s.dust_collection_status == 0
128131
assert s.auto_dust_collection == 1
129132
assert s.avoid_count == 19
130-
assert s.mop_mode == 'standard'
133+
assert s.mop_mode == RoborockMopModeCode['300']
131134
assert s.debug_mode == 0
132135
assert s.collision_avoid_status == 1
133136
assert s.switch_map_mode == 0
134-
assert s.dock_error_status == "ok"
137+
assert s.dock_error_status == RoborockDockErrorCode['0']
135138
assert s.charge_status == 1
136139
assert s.unsave_map_reason == 0
137140
assert s.unsave_map_flag == 0

0 commit comments

Comments
 (0)