Skip to content

Commit 785b34c

Browse files
Merge pull request #21 from Lash-L/dock_cleanup
Dock cleanup
2 parents 76a278c + e589064 commit 785b34c

File tree

4 files changed

+50
-27
lines changed

4 files changed

+50
-27
lines changed

roborock/api.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
from roborock.exceptions import (
2424
RoborockException, RoborockTimeout, VacuumError,
2525
)
26-
from .code_mappings import WASH_MODE_MAP, DUST_COLLECTION_MAP, RoborockDockType, \
27-
RoborockDockDustCollectionType, RoborockDockWashingModeType, STATE_CODE_TO_STATUS
26+
from .code_mappings import RoborockDockType, \
27+
STATE_CODE_TO_STATUS
2828
from .containers import (
2929
UserData,
3030
Status,
@@ -35,7 +35,7 @@
3535
HomeData,
3636
MultiMapsList,
3737
SmartWashParameters,
38-
RoborockDeviceInfo,
38+
RoborockDeviceInfo, WashTowelMode, DustCollectionMode,
3939

4040
)
4141
from .roborock_queue import RoborockQueue
@@ -76,17 +76,17 @@ def __init__(self, base_url: str, base_headers: dict = None) -> None:
7676
self.base_headers = base_headers or {}
7777

7878
async def request(
79-
self, method: str, url: str, params=None, data=None, headers=None
79+
self, method: str, url: str, params=None, data=None, headers=None
8080
) -> dict | list:
8181
_url = "/".join(s.strip("/") for s in [self.base_url, url])
8282
_headers = {**self.base_headers, **(headers or {})}
8383
async with aiohttp.ClientSession() as session:
8484
async with session.request(
85-
method,
86-
_url,
87-
params=params,
88-
data=data,
89-
headers=_headers,
85+
method,
86+
_url,
87+
params=params,
88+
data=data,
89+
headers=_headers,
9090
) as resp:
9191
return await resp.json()
9292

@@ -249,7 +249,7 @@ async def _async_response(self, request_id: int, protocol_id: int = 0) -> tuple[
249249
del self._waiting_queue[request_id]
250250

251251
def _get_payload(
252-
self, method: RoborockCommand, params: list = None, secured=False
252+
self, method: RoborockCommand, params: list = None, secured=False
253253
):
254254
timestamp = math.floor(time.time())
255255
request_id = self._id_counter
@@ -276,7 +276,7 @@ def _get_payload(
276276
return request_id, timestamp, payload
277277

278278
async def send_command(
279-
self, device_id: str, method: RoborockCommand, params: list = None
279+
self, device_id: str, method: RoborockCommand, params: list = None
280280
):
281281
raise NotImplementedError
282282

@@ -323,17 +323,19 @@ async def get_consumable(self, device_id: str) -> Consumable:
323323
except RoborockTimeout as e:
324324
_LOGGER.error(e)
325325

326-
async def get_washing_mode(self, device_id: str) -> RoborockDockWashingModeType:
326+
async def get_washing_mode(self, device_id: str) -> WashTowelMode:
327327
try:
328328
washing_mode = await self.send_command(device_id, RoborockCommand.GET_WASH_TOWEL_MODE)
329-
return WASH_MODE_MAP.get(washing_mode['wash_mode'])
329+
if isinstance(washing_mode, dict):
330+
return WashTowelMode(washing_mode)
330331
except RoborockTimeout as e:
331332
_LOGGER.error(e)
332333

333-
async def get_dust_collection_mode(self, device_id: str) -> RoborockDockDustCollectionType:
334+
async def get_dust_collection_mode(self, device_id: str) -> DustCollectionMode:
334335
try:
335336
dust_collection = await self.send_command(device_id, RoborockCommand.GET_DUST_COLLECTION_MODE)
336-
return DUST_COLLECTION_MAP.get(dust_collection['mode'])
337+
if isinstance(dust_collection, dict):
338+
return DustCollectionMode(dust_collection)
337339
except RoborockTimeout as e:
338340
_LOGGER.error(e)
339341

roborock/containers.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from enum import Enum
22

33
from .code_mappings import STATE_CODE_TO_STATUS, ERROR_CODE_TO_TEXT, FAN_SPEED_CODES, MOP_MODE_CODES, \
4-
MOP_INTENSITY_CODES, DOCK_ERROR_TO_TEXT, DOCK_TYPE_MAP, RoborockDockType
4+
MOP_INTENSITY_CODES, DOCK_ERROR_TO_TEXT, DOCK_TYPE_MAP, RoborockDockType, RoborockDockDustCollectionType, \
5+
DUST_COLLECTION_MAP, WASH_MODE_MAP, RoborockDockWashingModeType
56

67

78
class UserDataRRiotReferenceField(str, Enum):
@@ -225,8 +226,12 @@ class SmartWashField(str, Enum):
225226
WASH_INTERVAL = "wash_interval"
226227

227228

229+
class DustCollectionField(str, Enum):
230+
MODE = "mode"
231+
232+
228233
class WashTowelField(str, Enum):
229-
Wash_MODE = "wash_mode"
234+
WASH_MODE = "wash_mode"
230235

231236

232237
class NetworkInfoField(str, Enum):
@@ -1025,6 +1030,20 @@ def wash_interval(self) -> int:
10251030
return self.get(SmartWashField.WASH_INTERVAL)
10261031

10271032

1033+
class DustCollectionMode(RoborockBase):
1034+
1035+
@property
1036+
def mode(self) -> RoborockDockDustCollectionType:
1037+
return DUST_COLLECTION_MAP.get(self.get(DustCollectionField.MODE))
1038+
1039+
1040+
class WashTowelMode(RoborockBase):
1041+
1042+
@property
1043+
def wash_mode(self) -> RoborockDockWashingModeType:
1044+
return WASH_MODE_MAP.get(self.get(WashTowelField.WASH_MODE))
1045+
1046+
10281047
class NetworkInfo(RoborockBase):
10291048
@property
10301049
def ssid(self) -> str:

roborock/typing.py

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

33
from enum import Enum
44

5-
from .code_mappings import RoborockDockDustCollectionType, RoborockDockWashingModeType
65
from .containers import Status, CleanSummary, Consumable, \
7-
DNDTimer, CleanRecord, SmartWashParameters
6+
DNDTimer, CleanRecord, SmartWashParameters, DustCollectionMode, WashTowelMode
87

98

109
class RoborockDevicePropField(str, Enum):
@@ -90,11 +89,12 @@ class RoborockCommand(str, Enum):
9089

9190

9291
class RoborockDockSummary:
93-
def __init__(self, dust_collection_mode: RoborockDockDustCollectionType,
94-
washing_mode_type: RoborockDockWashingModeType, mop_wash: SmartWashParameters) -> None:
95-
self.dust_collection_mode = dust_collection_mode
96-
self.washing_mode_type = washing_mode_type
97-
self.mop_wash = mop_wash
92+
def __init__(self, dust_collection_mode: DustCollectionMode,
93+
washing_mode_type: WashTowelMode, mop_wash: SmartWashParameters) -> None:
94+
self.dust_collection_mode = dust_collection_mode.mode.value
95+
self.washing_mode_type = washing_mode_type.wash_mode.value
96+
self.mop_wash_interval = mop_wash.wash_interval
97+
self.mop_wash_mode = mop_wash.smart_wash
9898

9999

100100
class RoborockDeviceProp:

tests/test_api.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async def test_request_code():
5252
async def test_get_home_data():
5353
rc = RoborockApiClient("sample@gmail.com")
5454
with patch("roborock.api.RoborockApiClient._get_base_url") as mock_url, patch(
55-
"roborock.api.RoborockApiClient._get_header_client_id") as mock_header_client, patch(
55+
"roborock.api.RoborockApiClient._get_header_client_id") as mock_header_client, patch(
5656
"roborock.api.PreparedRequest.request") as mock_prepared_request:
5757
mock_prepared_request.side_effect = [{'code': 200, 'msg': 'success', 'data': {"rrHomeId": 1}},
5858
{'code': 200, 'success': True, 'result': HOME_DATA_RAW}]
@@ -70,7 +70,8 @@ async def test_get_dust_collection_mode():
7070
rmc = RoborockMqttClient(UserData(USER_DATA), device_map)
7171
with patch("roborock.cloud_api.RoborockMqttClient.send_command") as command:
7272
command.return_value = {"mode": 1}
73-
assert await rmc.get_dust_collection_mode(home_data.devices[0].duid) == RoborockDockDustCollectionType.LIGHT
73+
dust = await rmc.get_dust_collection_mode(home_data.devices[0].duid)
74+
assert dust.mode == RoborockDockDustCollectionType.LIGHT
7475

7576

7677
@pytest.mark.asyncio
@@ -92,4 +93,5 @@ async def test_get_washing_mode():
9293
rmc = RoborockMqttClient(UserData(USER_DATA), device_map)
9394
with patch("roborock.cloud_api.RoborockMqttClient.send_command") as command:
9495
command.return_value = {'wash_mode': 2}
95-
assert await rmc.get_washing_mode(home_data.devices[0].duid) == RoborockDockWashingModeType.DEEP
96+
washing_mode = await rmc.get_washing_mode(home_data.devices[0].duid)
97+
assert washing_mode.wash_mode == RoborockDockWashingModeType.DEEP

0 commit comments

Comments
 (0)