python-roborock 2.3.0__tar.gz → 2.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_roborock-2.3.0 → python_roborock-2.5.0}/PKG-INFO +1 -1
- {python_roborock-2.3.0 → python_roborock-2.5.0}/pyproject.toml +1 -1
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/code_mappings.py +96 -2
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/const.py +4 -1
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/containers.py +17 -4
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/local_api.py +1 -1
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/roborock_client_v1.py +3 -3
- {python_roborock-2.3.0 → python_roborock-2.5.0}/LICENSE +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/README.md +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/__init__.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/api.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/cli.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/cloud_api.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/command_cache.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/exceptions.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/protocol.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/py.typed +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/roborock_future.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/roborock_message.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/roborock_typing.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/util.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/__init__.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/roborock_local_client_v1.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/roborock_mqtt_client_v1.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_a01_apis/__init__.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_a01_apis/roborock_client_a01.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_a01_apis/roborock_mqtt_client_a01.py +0 -0
- {python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/web_api.py +0 -0
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
from enum import Enum, IntEnum
|
|
5
5
|
|
|
6
6
|
_LOGGER = logging.getLogger(__name__)
|
|
7
|
+
completed_warnings = set()
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class RoborockEnum(IntEnum):
|
|
@@ -16,10 +17,16 @@ class RoborockEnum(IntEnum):
|
|
|
16
17
|
@classmethod
|
|
17
18
|
def _missing_(cls: type[RoborockEnum], key) -> RoborockEnum:
|
|
18
19
|
if hasattr(cls, "unknown"):
|
|
19
|
-
|
|
20
|
+
warning = f"Missing {cls.__name__} code: {key} - defaulting to 'unknown'"
|
|
21
|
+
if warning not in completed_warnings:
|
|
22
|
+
completed_warnings.add(warning)
|
|
23
|
+
_LOGGER.warning(warning)
|
|
20
24
|
return cls.unknown # type: ignore
|
|
21
25
|
default_value = next(item for item in cls)
|
|
22
|
-
|
|
26
|
+
warning = f"Missing {cls.__name__} code: {key} - defaulting to {default_value}"
|
|
27
|
+
if warning not in completed_warnings:
|
|
28
|
+
completed_warnings.add(warning)
|
|
29
|
+
_LOGGER.warning(warning)
|
|
23
30
|
return default_value
|
|
24
31
|
|
|
25
32
|
@classmethod
|
|
@@ -415,6 +422,93 @@ class RoborockCategory(Enum):
|
|
|
415
422
|
return RoborockCategory.UNKNOWN
|
|
416
423
|
|
|
417
424
|
|
|
425
|
+
class RoborockFinishReason(RoborockEnum):
|
|
426
|
+
manual_interrupt = 21 # Cleaning interrupted by user
|
|
427
|
+
cleanup_interrupted = 24 # Cleanup interrupted
|
|
428
|
+
manual_interrupt_2 = 21
|
|
429
|
+
breakpoint = 32 # Could not continue cleaning
|
|
430
|
+
breakpoint_2 = 33
|
|
431
|
+
cleanup_interrupted_2 = 34
|
|
432
|
+
manual_interrupt_3 = 35
|
|
433
|
+
manual_interrupt_4 = 36
|
|
434
|
+
manual_interrupt_5 = 37
|
|
435
|
+
manual_interrupt_6 = 43
|
|
436
|
+
locate_fail = 45 # Positioning Failed
|
|
437
|
+
cleanup_interrupted_3 = 64
|
|
438
|
+
locate_fail_2 = 65
|
|
439
|
+
manual_interrupt_7 = 48
|
|
440
|
+
manual_interrupt_8 = 49
|
|
441
|
+
manual_interrupt_9 = 50
|
|
442
|
+
cleanup_interrupted_4 = 51
|
|
443
|
+
finished_cleaning = 52 # Finished cleaning
|
|
444
|
+
finished_cleaning_2 = 54
|
|
445
|
+
finished_cleaning_3 = 55
|
|
446
|
+
finished_cleaning_4 = 56
|
|
447
|
+
finished_clenaing_5 = 57
|
|
448
|
+
manual_interrupt_10 = 60
|
|
449
|
+
area_unreachable = 61 # Area unreachable
|
|
450
|
+
area_unreachable_2 = 62
|
|
451
|
+
washing_error = 67 # Washing error
|
|
452
|
+
back_to_wash_failure = 68 # Failed to return to the dock
|
|
453
|
+
cleanup_interrupted_5 = 101
|
|
454
|
+
breakpoint_4 = 102
|
|
455
|
+
manual_interrupt_11 = 103
|
|
456
|
+
cleanup_interrupted_6 = 104
|
|
457
|
+
cleanup_interrupted_7 = 105
|
|
458
|
+
cleanup_interrupted_8 = 106
|
|
459
|
+
cleanup_interrupted_9 = 107
|
|
460
|
+
cleanup_interrupted_10 = 109
|
|
461
|
+
cleanup_interrupted_11 = 110
|
|
462
|
+
patrol_success = 114 # Cruise completed
|
|
463
|
+
patrol_fail = 115 # Cruise failed
|
|
464
|
+
pet_patrol_success = 116 # Pet found
|
|
465
|
+
pet_patrol_fail = 117 # Pet found failed
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
class RoborockInCleaning(RoborockEnum):
|
|
469
|
+
complete = 0
|
|
470
|
+
global_clean_not_complete = 1
|
|
471
|
+
zone_clean_not_complete = 2
|
|
472
|
+
segment_clean_not_complete = 3
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
class RoborockCleanType(RoborockEnum):
|
|
476
|
+
all_zone = 1
|
|
477
|
+
draw_zone = 2
|
|
478
|
+
select_zone = 3
|
|
479
|
+
quick_build = 4
|
|
480
|
+
video_patrol = 5
|
|
481
|
+
pet_patrol = 6
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
class RoborockStartType(RoborockEnum):
|
|
485
|
+
button = 1
|
|
486
|
+
app = 2
|
|
487
|
+
schedule = 3
|
|
488
|
+
mi_home = 4
|
|
489
|
+
quick_start = 5
|
|
490
|
+
voice_control = 13
|
|
491
|
+
routines = 101
|
|
492
|
+
alexa = 801
|
|
493
|
+
google = 802
|
|
494
|
+
ifttt = 803
|
|
495
|
+
yandex = 804
|
|
496
|
+
homekit = 805
|
|
497
|
+
xiaoai = 806
|
|
498
|
+
tmall_genie = 807
|
|
499
|
+
duer = 808
|
|
500
|
+
dingdong = 809
|
|
501
|
+
siri = 810
|
|
502
|
+
clova = 811
|
|
503
|
+
wechat = 901
|
|
504
|
+
alipay = 902
|
|
505
|
+
aqara = 903
|
|
506
|
+
hisense = 904
|
|
507
|
+
huawei = 905
|
|
508
|
+
widget_launch = 820
|
|
509
|
+
smart_watch = 821
|
|
510
|
+
|
|
511
|
+
|
|
418
512
|
class DyadSelfCleanMode(RoborockEnum):
|
|
419
513
|
self_clean = 1
|
|
420
514
|
self_clean_and_dry = 2
|
|
@@ -42,8 +42,11 @@ ROBOROCK_1S = "roborock.vacuum.m1s"
|
|
|
42
42
|
ROBOROCK_C1 = "roborock.vacuum.c1"
|
|
43
43
|
ROBOROCK_S8_PRO_ULTRA = "roborock.vacuum.a70"
|
|
44
44
|
ROBOROCK_S8 = "roborock.vacuum.a51"
|
|
45
|
-
ROBOROCK_P10 = "roborock.vacuum.a75"
|
|
45
|
+
ROBOROCK_P10 = "roborock.vacuum.a75" # also known as q_revo
|
|
46
46
|
ROBOROCK_S8_MAXV_ULTRA = "roborock.vacuum.a97"
|
|
47
|
+
ROBOROCK_QREVO_S = "roborock.vacuum.a104"
|
|
48
|
+
ROBOROCK_QREVO_PRO = "roborock.vacuum.a101"
|
|
49
|
+
ROBOROCK_QREVO_MAXV = "roborock.vacuum.a87"
|
|
47
50
|
|
|
48
51
|
ROBOROCK_DYAD_AIR = "roborock.wetdryvac.a107"
|
|
49
52
|
ROBOROCK_DYAD_PRO_COMBO = "roborock.wetdryvac.a83"
|
|
@@ -13,6 +13,7 @@ from dacite import Config, from_dict
|
|
|
13
13
|
|
|
14
14
|
from .code_mappings import (
|
|
15
15
|
RoborockCategory,
|
|
16
|
+
RoborockCleanType,
|
|
16
17
|
RoborockDockDustCollectionModeCode,
|
|
17
18
|
RoborockDockErrorCode,
|
|
18
19
|
RoborockDockTypeCode,
|
|
@@ -25,6 +26,8 @@ from .code_mappings import (
|
|
|
25
26
|
RoborockFanSpeedS7,
|
|
26
27
|
RoborockFanSpeedS7MaxV,
|
|
27
28
|
RoborockFanSpeedS8MaxVUltra,
|
|
29
|
+
RoborockFinishReason,
|
|
30
|
+
RoborockInCleaning,
|
|
28
31
|
RoborockMopIntensityCode,
|
|
29
32
|
RoborockMopIntensityP10,
|
|
30
33
|
RoborockMopIntensityS5Max,
|
|
@@ -36,6 +39,7 @@ from .code_mappings import (
|
|
|
36
39
|
RoborockMopModeS7,
|
|
37
40
|
RoborockMopModeS8MaxVUltra,
|
|
38
41
|
RoborockMopModeS8ProUltra,
|
|
42
|
+
RoborockStartType,
|
|
39
43
|
RoborockStateCode,
|
|
40
44
|
)
|
|
41
45
|
from .const import (
|
|
@@ -47,6 +51,9 @@ from .const import (
|
|
|
47
51
|
ROBOROCK_G10S_PRO,
|
|
48
52
|
ROBOROCK_P10,
|
|
49
53
|
ROBOROCK_Q7_MAX,
|
|
54
|
+
ROBOROCK_QREVO_MAXV,
|
|
55
|
+
ROBOROCK_QREVO_PRO,
|
|
56
|
+
ROBOROCK_QREVO_S,
|
|
50
57
|
ROBOROCK_S4_MAX,
|
|
51
58
|
ROBOROCK_S5_MAX,
|
|
52
59
|
ROBOROCK_S6,
|
|
@@ -408,7 +415,7 @@ class Status(RoborockBase):
|
|
|
408
415
|
square_meter_clean_area: float | None = None
|
|
409
416
|
error_code: RoborockErrorCode | None = None
|
|
410
417
|
map_present: int | None = None
|
|
411
|
-
in_cleaning:
|
|
418
|
+
in_cleaning: RoborockInCleaning | None = None
|
|
412
419
|
in_returning: int | None = None
|
|
413
420
|
in_fresh_state: int | None = None
|
|
414
421
|
lab_status: int | None = None
|
|
@@ -574,6 +581,12 @@ ModelStatus: dict[str, type[Status]] = {
|
|
|
574
581
|
ROBOROCK_S8_PRO_ULTRA: S8ProUltraStatus,
|
|
575
582
|
ROBOROCK_G10S_PRO: S7MaxVStatus,
|
|
576
583
|
ROBOROCK_P10: P10Status,
|
|
584
|
+
# These likely are not correct,
|
|
585
|
+
# but i am currently unable to do my typical reverse engineering/ get any data from users on this,
|
|
586
|
+
# so this will be here in the mean time.
|
|
587
|
+
ROBOROCK_QREVO_S: P10Status,
|
|
588
|
+
ROBOROCK_QREVO_MAXV: P10Status,
|
|
589
|
+
ROBOROCK_QREVO_PRO: P10Status,
|
|
577
590
|
ROBOROCK_S8_MAXV_ULTRA: S8MaxvUltraStatus,
|
|
578
591
|
}
|
|
579
592
|
|
|
@@ -613,9 +626,9 @@ class CleanRecord(RoborockBase):
|
|
|
613
626
|
square_meter_area: float | None = None
|
|
614
627
|
error: int | None = None
|
|
615
628
|
complete: int | None = None
|
|
616
|
-
start_type:
|
|
617
|
-
clean_type:
|
|
618
|
-
finish_reason:
|
|
629
|
+
start_type: RoborockStartType | None = None
|
|
630
|
+
clean_type: RoborockCleanType | None = None
|
|
631
|
+
finish_reason: RoborockFinishReason | None = None
|
|
619
632
|
dust_collection_status: int | None = None
|
|
620
633
|
avoid_count: int | None = None
|
|
621
634
|
wash_count: int | None = None
|
|
@@ -96,7 +96,7 @@ class RoborockLocalClient(RoborockClient, asyncio.Protocol):
|
|
|
96
96
|
except Exception as e:
|
|
97
97
|
self._logger.error(e)
|
|
98
98
|
|
|
99
|
-
async def ping(self):
|
|
99
|
+
async def ping(self) -> None:
|
|
100
100
|
request_id = 2
|
|
101
101
|
protocol = RoborockMessageProtocol.PING_REQUEST
|
|
102
102
|
return await self.send_message(
|
{python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/roborock_client_v1.py
RENAMED
|
@@ -105,7 +105,7 @@ class AttributeCache:
|
|
|
105
105
|
def stop(self):
|
|
106
106
|
self.task.cancel()
|
|
107
107
|
|
|
108
|
-
async def update_value(self, params):
|
|
108
|
+
async def update_value(self, params) -> None:
|
|
109
109
|
if self.attribute.set_command is None:
|
|
110
110
|
raise RoborockException(f"{self.attribute.attribute} have no set command")
|
|
111
111
|
response = await self.api._send_command(self.attribute.set_command, params)
|
|
@@ -119,7 +119,7 @@ class AttributeCache:
|
|
|
119
119
|
await self._async_value()
|
|
120
120
|
return response
|
|
121
121
|
|
|
122
|
-
async def close_value(self, params=None):
|
|
122
|
+
async def close_value(self, params=None) -> None:
|
|
123
123
|
if self.attribute.close_command is None:
|
|
124
124
|
raise RoborockException(f"{self.attribute.attribute} have no close command")
|
|
125
125
|
response = await self.api._send_command(self.attribute.close_command, params)
|
|
@@ -154,7 +154,7 @@ class RoborockClientV1(RoborockClient):
|
|
|
154
154
|
super().release()
|
|
155
155
|
[item.stop() for item in self.cache.values()]
|
|
156
156
|
|
|
157
|
-
async def async_release(self):
|
|
157
|
+
async def async_release(self) -> None:
|
|
158
158
|
await super().async_release()
|
|
159
159
|
[item.stop() for item in self.cache.values()]
|
|
160
160
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/roborock_local_client_v1.py
RENAMED
|
File without changes
|
{python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_1_apis/roborock_mqtt_client_v1.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_roborock-2.3.0 → python_roborock-2.5.0}/roborock/version_a01_apis/roborock_client_a01.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|