Skip to content

Commit 64c8159

Browse files
fix: adding method parse_datetime_to_roborock_datetime
1 parent c0e7997 commit 64c8159

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

roborock/api.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
)
5555
from .protocol import Utils
5656
from .roborock_future import RoborockFuture
57-
from .roborock_message import RoborockMessage
57+
from .roborock_message import RoborockDataProtocol, RoborockMessage
5858
from .roborock_typing import DeviceProp, DockSummary, RoborockCommand
5959
from .util import fallback_cache, unpack_list
6060

@@ -169,6 +169,8 @@ def on_message_received(self, messages: list[RoborockMessage]) -> None:
169169
if isinstance(decompressed, list):
170170
decompressed = decompressed[0]
171171
queue.resolve((decompressed, None))
172+
elif data.payload and protocol in RoborockDataProtocol:
173+
_LOGGER.debug(f"Got device update for {RoborockDataProtocol(protocol).name}: {data.payload!r}")
172174
else:
173175
queue = self._waiting_queue.get(data.seq)
174176
if queue:

roborock/cloud_api.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,14 @@ def sync_disconnect(self) -> bool:
119119
return rc == mqtt.MQTT_ERR_SUCCESS
120120

121121
def sync_connect(self) -> bool:
122-
self.sync_start_loop()
123-
if not self.is_connected():
122+
should_connect = not self.is_connected()
123+
if should_connect:
124124
if self._mqtt_port is None or self._mqtt_host is None:
125125
raise RoborockException("Mqtt information was not entered. Cannot connect.")
126126
_LOGGER.info("Connecting to mqtt")
127127
super().connect(host=self._mqtt_host, port=self._mqtt_port, keepalive=KEEPALIVE)
128-
return True
129-
return False
128+
self.sync_start_loop()
129+
return should_connect
130130

131131
async def async_disconnect(self) -> None:
132132
async with self._mutex:
@@ -154,7 +154,7 @@ async def send_command(
154154
method: RoborockCommand,
155155
params: Optional[list | dict] = None,
156156
return_type: Optional[Type[RT]] = None,
157-
):
157+
) -> RT:
158158
await self.validate_connection()
159159
request_id, timestamp, payload = super()._get_payload(method, params, True)
160160
_LOGGER.debug(f"id={request_id} Requesting method {method} with {params}")

roborock/roborock_message.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@ class RoborockMessageProtocol(RoborockEnum):
1818
GENERAL_RESPONSE = 5
1919

2020

21+
class RoborockDataProtocol(RoborockEnum):
22+
RPC_REQUEST = 101
23+
RPC_RESPONSE = 102
24+
ERROR_CODE = 120
25+
STATE = 121
26+
BATTERY = 122
27+
FAN_POWER = 123
28+
WATER_BOX_MODE = 124
29+
MAIN_BRUSH_LIFE = 125
30+
SIDE_BRUSH_LIFE = 126
31+
FILTER_LIFE = 127
32+
ADDITIONAL_PROPS = 128
33+
TASK_COMPLETE = 130
34+
TASK_CANCEL_LOW_POWER = 131
35+
TASK_CANCEL_IN_MOTION = 132
36+
CHARGE_STATUS = 133
37+
DRYING_STATUS = 134
38+
39+
2140
@dataclass
2241
class RoborockMessage:
2342
protocol: int

roborock/util.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,25 @@ def get_running_loop_or_create_one() -> AbstractEventLoop:
2323
return loop
2424

2525

26+
def parse_datetime_to_roborock_datetime(
27+
start_datetime: datetime.datetime, end_datetime: datetime.datetime
28+
) -> Tuple[datetime.datetime, datetime.datetime]:
29+
now = datetime.datetime.now(DEFAULT_TIME_ZONE)
30+
start_datetime = start_datetime.replace(
31+
year=now.year, month=now.month, day=now.day, second=0, microsecond=0, tzinfo=DEFAULT_TIME_ZONE
32+
)
33+
end_datetime = end_datetime.replace(
34+
year=now.year, month=now.month, day=now.day, second=0, microsecond=0, tzinfo=DEFAULT_TIME_ZONE
35+
)
36+
if start_datetime > end_datetime:
37+
end_datetime += datetime.timedelta(days=1)
38+
elif end_datetime < now:
39+
start_datetime += datetime.timedelta(days=1)
40+
end_datetime += datetime.timedelta(days=1)
41+
42+
return start_datetime, end_datetime
43+
44+
2645
def parse_time_to_datetime(
2746
start_time: datetime.time, end_time: datetime.time
2847
) -> Tuple[datetime.datetime, datetime.datetime]:
@@ -34,13 +53,7 @@ def parse_time_to_datetime(
3453
hour=end_time.hour, minute=end_time.minute, second=0, microsecond=0
3554
)
3655

37-
if start_datetime > end_datetime:
38-
end_datetime += datetime.timedelta(days=1)
39-
elif end_datetime < datetime.datetime.now(DEFAULT_TIME_ZONE):
40-
start_datetime += datetime.timedelta(days=1)
41-
end_datetime += datetime.timedelta(days=1)
42-
43-
return start_datetime, end_datetime
56+
return parse_datetime_to_roborock_datetime(start_datetime, end_datetime)
4457

4558

4659
def run_sync():

0 commit comments

Comments
 (0)