From e15c8120b5128be9a881bf3366b20866adf2d4bd Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Jun 2023 18:40:51 -0400 Subject: [PATCH 1/5] fix: remove dnd timer and valley electricity from props --- roborock/api.py | 8 ++------ roborock/roborock_typing.py | 6 ------ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/roborock/api.py b/roborock/api.py index a744ac23..1f1e6e24 100644 --- a/roborock/api.py +++ b/roborock/api.py @@ -323,13 +323,11 @@ async def get_dock_summary(self, dock_type: RoborockDockTypeCode) -> DockSummary @fallback_cache async def get_prop(self) -> DeviceProp | None: """Gets device general properties.""" - [status, clean_summary, consumable, dnd_timer, valley_electricity_timer] = await asyncio.gather( + [status, clean_summary, consumable] = await asyncio.gather( *[ self.get_status(), self.get_clean_summary(), self.get_consumable(), - self.get_dnd_timer(), - self.get_valley_electricity_timer(), ] ) last_clean_record = None @@ -338,13 +336,11 @@ async def get_prop(self) -> DeviceProp | None: dock_summary = None if status and status.dock_type is not None and status.dock_type != RoborockDockTypeCode.no_dock: dock_summary = await self.get_dock_summary(status.dock_type) - if any([status, dnd_timer, clean_summary, consumable]): + if any([status, clean_summary, consumable]): return DeviceProp( status, clean_summary, consumable, - dnd_timer, - valley_electricity_timer, last_clean_record, dock_summary, ) diff --git a/roborock/roborock_typing.py b/roborock/roborock_typing.py index 76781123..1c684521 100644 --- a/roborock/roborock_typing.py +++ b/roborock/roborock_typing.py @@ -314,8 +314,6 @@ class DeviceProp(RoborockBase): status: Optional[Status] = None clean_summary: Optional[CleanSummary] = None consumable: Optional[Consumable] = None - dnd_timer: Optional[DnDTimer] = None - valley_electricity_timer: Optional[ValleyElectricityTimer] = None last_clean_record: Optional[CleanRecord] = None dock_summary: Optional[DockSummary] = None @@ -326,10 +324,6 @@ def update(self, device_prop: DeviceProp) -> None: self.clean_summary = device_prop.clean_summary if device_prop.consumable: self.consumable = device_prop.consumable - if device_prop.dnd_timer: - self.dnd_timer = device_prop.dnd_timer - if device_prop.valley_electricity_timer: - self.valley_electricity_timer = device_prop.valley_electricity_timer if device_prop.last_clean_record: self.last_clean_record = device_prop.last_clean_record if device_prop.dock_summary: From 015f3a5ee115a614f49584f67d6fe616dafc8529 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Jun 2023 18:52:33 -0400 Subject: [PATCH 2/5] fix: linting --- roborock/roborock_typing.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/roborock/roborock_typing.py b/roborock/roborock_typing.py index 1c684521..581c55ad 100644 --- a/roborock/roborock_typing.py +++ b/roborock/roborock_typing.py @@ -8,12 +8,10 @@ CleanRecord, CleanSummary, Consumable, - DnDTimer, DustCollectionMode, RoborockBase, SmartWashParams, Status, - ValleyElectricityTimer, WashTowelMode, ) From 55c006ee7cebf60715a9b203e77568347b0a7e3d Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Jun 2023 19:03:40 -0400 Subject: [PATCH 3/5] fix: clear out old keep alive before adding new one --- roborock/local_api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roborock/local_api.py b/roborock/local_api.py index 3c6d6e9c..f9b97120 100644 --- a/roborock/local_api.py +++ b/roborock/local_api.py @@ -51,6 +51,8 @@ async def keep_alive_func(self, _=None): await self.ping() except RoborockException: pass + if self.keep_alive_task is not None: + self.keep_alive_task.cancel() self.keep_alive_task = self.loop.call_later(10, lambda: asyncio.create_task(self.keep_alive_func())) async def async_connect(self) -> None: From 0fc6910febe9b192e65a717e1d4a3149568164ad Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Jun 2023 20:46:53 -0400 Subject: [PATCH 4/5] chore: remove keep_alive_task --- roborock/local_api.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/roborock/local_api.py b/roborock/local_api.py index f9b97120..3c6d6e9c 100644 --- a/roborock/local_api.py +++ b/roborock/local_api.py @@ -51,8 +51,6 @@ async def keep_alive_func(self, _=None): await self.ping() except RoborockException: pass - if self.keep_alive_task is not None: - self.keep_alive_task.cancel() self.keep_alive_task = self.loop.call_later(10, lambda: asyncio.create_task(self.keep_alive_func())) async def async_connect(self) -> None: From c508232f0d1b730fb9c4e0856cc6d51a15e26326 Mon Sep 17 00:00:00 2001 From: Luke Date: Thu, 15 Jun 2023 22:10:21 -0400 Subject: [PATCH 5/5] fix: add storing of dnd and valley in api --- roborock/api.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/roborock/api.py b/roborock/api.py index 1f1e6e24..9f7bcb54 100644 --- a/roborock/api.py +++ b/roborock/api.py @@ -103,6 +103,8 @@ def __init__(self, endpoint: str, device_info: DeviceData) -> None: self._last_disconnection = self.time_func() self.keep_alive = KEEPALIVE self._diagnostic_data: dict[str, dict[str, Any]] = {} + self.dnd_timer: DnDTimer | None = None + self.valley_timer: ValleyElectricityTimer | None = None def __del__(self) -> None: self.sync_disconnect() @@ -255,11 +257,19 @@ async def get_status(self) -> Status | None: @fallback_cache async def get_dnd_timer(self) -> DnDTimer | None: - return await self.send_command(RoborockCommand.GET_DND_TIMER, return_type=DnDTimer) + result = await self.send_command(RoborockCommand.GET_DND_TIMER, return_type=DnDTimer) + if result is not None: + self.dnd_timer = result + return result @fallback_cache async def get_valley_electricity_timer(self) -> ValleyElectricityTimer | None: - return await self.send_command(RoborockCommand.GET_VALLEY_ELECTRICITY_TIMER, return_type=ValleyElectricityTimer) + result = await self.send_command( + RoborockCommand.GET_VALLEY_ELECTRICITY_TIMER, return_type=ValleyElectricityTimer + ) + if result is not None: + self.valley_timer = result + return result @fallback_cache async def get_clean_summary(self) -> CleanSummary | None: