Skip to content

Commit e647d30

Browse files
committed
remove awake queue
1 parent 00b37c9 commit e647d30

File tree

2 files changed

+27
-58
lines changed

2 files changed

+27
-58
lines changed

plugwise_usb/nodes/scan.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ async def _load_defaults(self) -> None:
154154
self._new_reset_timer = SCAN_DEFAULT_MOTION_RESET_TIMER
155155
self._new_daylight_mode = SCAN_DEFAULT_DAYLIGHT_MODE
156156
self._new_sensitivity_level = SCAN_DEFAULT_SENSITIVITY
157-
await self.schedule_task_when_awake(self._configure_scan_task())
158157
self._scan_config_task_scheduled = True
159158

160159
async def _load_from_cache(self) -> bool:
@@ -303,7 +302,6 @@ async def set_motion_daylight_mode(self, state: bool) -> bool:
303302
if self._motion_config.daylight_mode == state:
304303
return False
305304
if not self._scan_config_task_scheduled:
306-
await self.schedule_task_when_awake(self._configure_scan_task())
307305
self._scan_config_task_scheduled = True
308306
_LOGGER.debug(
309307
"set_motion_daylight_mode | Device %s | config scheduled",
@@ -328,7 +326,6 @@ async def set_motion_reset_timer(self, minutes: int) -> bool:
328326
if self._motion_config.reset_timer == minutes:
329327
return False
330328
if not self._scan_config_task_scheduled:
331-
await self.schedule_task_when_awake(self._configure_scan_task())
332329
self._scan_config_task_scheduled = True
333330
_LOGGER.debug(
334331
"set_motion_reset_timer | Device %s | config scheduled",
@@ -349,7 +346,6 @@ async def set_motion_sensitivity_level(self, level: MotionSensitivity) -> bool:
349346
if self._motion_config.sensitivity_level == level:
350347
return False
351348
if not self._scan_config_task_scheduled:
352-
await self.schedule_task_when_awake(self._configure_scan_task())
353349
self._scan_config_task_scheduled = True
354350
_LOGGER.debug(
355351
"set_motion_sensitivity_level | Device %s | config scheduled",
@@ -434,9 +430,17 @@ async def _motion_state_update(
434430
]
435431
)
436432

433+
async def _run_awake_tasks(self) -> None:
434+
"""Execute all awake tasks."""
435+
await super()._run_awake_tasks()
436+
if (
437+
self._scan_config_task_scheduled
438+
and await self._configure_scan_task()
439+
):
440+
self._scan_config_task_scheduled = False
441+
437442
async def _configure_scan_task(self) -> bool:
438443
"""Configure Scan device settings. Returns True if successful."""
439-
self._scan_config_task_scheduled = False
440444
change_required = False
441445
if self._new_reset_timer is not None:
442446
change_required = True

plugwise_usb/nodes/sed.py

Lines changed: 18 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from asyncio import (
66
CancelledError,
77
Future,
8-
Lock,
98
Task,
109
gather,
1110
get_running_loop,
@@ -101,9 +100,7 @@ def __init__(
101100
self._battery_config = BatteryConfig()
102101
self._new_battery_config = BatteryConfig()
103102
self._sed_config_task_scheduled = False
104-
self._send_task_queue: list[Coroutine[Any, Any, bool]] = []
105-
self._send_task_lock = Lock()
106-
self._delayed_task: Task[None] | None = None
103+
self._sed_node_info_update_task_scheduled = False
107104

108105
self._last_awake: dict[NodeAwakeResponseType, datetime] = {}
109106
self._last_awake_reason: str = "Unknown"
@@ -136,14 +133,6 @@ async def unload(self) -> None:
136133
await self._awake_timer_task
137134
if self._awake_subscription is not None:
138135
self._awake_subscription()
139-
if self._delayed_task is not None and not self._delayed_task.done():
140-
await self._delayed_task
141-
if len(self._send_task_queue) > 0:
142-
_LOGGER.warning(
143-
"Unable to execute %s open tasks for %s",
144-
len(self._send_task_queue),
145-
self.name,
146-
)
147136
await super().unload()
148137

149138
@raise_not_loaded
@@ -168,10 +157,9 @@ async def _load_defaults(self) -> None:
168157
maintenance_interval=SED_DEFAULT_MAINTENANCE_INTERVAL,
169158
sleep_duration=SED_DEFAULT_SLEEP_DURATION,
170159
)
171-
await self.schedule_task_when_awake(self.node_info_update(None))
172-
self._sed_config_task_scheduled = True
160+
self._sed_node_info_update_task_scheduled = True
173161
self._new_battery_config = self._battery_config
174-
await self.schedule_task_when_awake(self._configure_sed_task())
162+
self._sed_config_task_scheduled = True
175163

176164
async def _load_from_cache(self) -> bool:
177165
"""Load states from previous cached information. Returns True if successful."""
@@ -250,7 +238,6 @@ async def set_awake_duration(self, seconds: int) -> bool:
250238
self._new_battery_config, awake_duration=seconds
251239
)
252240
if not self._sed_config_task_scheduled:
253-
await self.schedule_task_when_awake(self._configure_sed_task())
254241
self._sed_config_task_scheduled = True
255242
_LOGGER.debug(
256243
"set_awake_duration | Device %s | config scheduled",
@@ -280,7 +267,6 @@ async def set_clock_interval(self, minutes: int) -> bool:
280267
self._new_battery_config, clock_interval=minutes
281268
)
282269
if not self._sed_config_task_scheduled:
283-
await self.schedule_task_when_awake(self._configure_sed_task())
284270
self._sed_config_task_scheduled = True
285271
_LOGGER.debug(
286272
"set_clock_interval | Device %s | config scheduled",
@@ -303,7 +289,6 @@ async def set_clock_sync(self, sync: bool) -> bool:
303289

304290
self._new_battery_config = replace(self._new_battery_config, clock_sync=sync)
305291
if not self._sed_config_task_scheduled:
306-
await self.schedule_task_when_awake(self._configure_sed_task())
307292
self._sed_config_task_scheduled = True
308293
_LOGGER.debug(
309294
"set_clock_sync | Device %s | config scheduled",
@@ -333,7 +318,6 @@ async def set_maintenance_interval(self, minutes: int) -> bool:
333318
self._new_battery_config, maintenance_interval=minutes
334319
)
335320
if not self._sed_config_task_scheduled:
336-
await self.schedule_task_when_awake(self._configure_sed_task())
337321
self._sed_config_task_scheduled = True
338322
_LOGGER.debug(
339323
"set_maintenance_interval | Device %s | config scheduled",
@@ -366,7 +350,6 @@ async def set_sleep_duration(self, minutes: int) -> bool:
366350
self._new_battery_config, sleep_duration=minutes
367351
)
368352
if not self._sed_config_task_scheduled:
369-
await self.schedule_task_when_awake(self._configure_sed_task())
370353
self._sed_config_task_scheduled = True
371354
_LOGGER.debug(
372355
"set_sleep_duration | Device %s | config scheduled",
@@ -490,14 +473,6 @@ async def _configure_sed_task(self) -> bool:
490473

491474
return True
492475

493-
async def node_info_update(
494-
self, node_info: NodeInfoResponse | None = None
495-
) -> NodeInfo | None:
496-
"""Update Node (hardware) information."""
497-
if node_info is not None and self.skip_update(self._node_info, 86400):
498-
return self._node_info
499-
return await super().node_info_update(node_info)
500-
501476
async def _awake_response(self, response: PlugwiseResponse) -> bool:
502477
"""Process awake message."""
503478
if not isinstance(response, NodeAwakeResponse):
@@ -522,16 +497,14 @@ async def _awake_response(self, response: PlugwiseResponse) -> bool:
522497
self._last_awake[response.awake_type] = response.timestamp
523498

524499
tasks: list[Coroutine[Any, Any, None]] = [
525-
self._reset_awake(response.timestamp),
500+
await self._reset_awake(response.timestamp),
526501
self.publish_feature_update_to_subscribers(
527502
NodeFeature.BATTERY,
528503
self._battery_config,
529504
),
530-
self.save_cache(),
505+
await self.save_cache(),
531506
]
532-
self._delayed_task = self._loop.create_task(
533-
self._send_tasks(), name=f"Delayed update for {self._mac_in_str}"
534-
)
507+
await self._run_awake_tasks()
535508
if response.awake_type == NodeAwakeResponseType.MAINTENANCE:
536509
self._last_awake_reason = "Maintenance"
537510
self._set_cache(CACHE_AWAKE_REASON, "Maintenance")
@@ -642,27 +615,19 @@ async def _awake_timer(self) -> None:
642615
pass
643616
self._awake_future = None
644617

645-
async def _send_tasks(self) -> None:
646-
"""Send all tasks in queue."""
647-
if len(self._send_task_queue) == 0:
648-
return
649-
async with self._send_task_lock:
650-
task_result = await gather(*self._send_task_queue)
651-
if not all(task_result):
652-
_LOGGER.warning(
653-
"Executed %s tasks (result=%s) for %s",
654-
len(self._send_task_queue),
655-
task_result,
656-
self.name,
657-
)
658-
self._send_task_queue = []
618+
async def _run_awake_tasks(self) -> None:
619+
"""Execute all awake tasks."""
620+
if (
621+
self._sed_node_info_update_task_scheduled
622+
and await self.node_info_update(None) is not None
623+
):
624+
self._sed_node_info_update_task_scheduled = False
659625

660-
async def schedule_task_when_awake(
661-
self, task_fn: Coroutine[Any, Any, bool]
662-
) -> None:
663-
"""Add task to queue to be executed when node is awake."""
664-
async with self._send_task_lock:
665-
self._send_task_queue.append(task_fn)
626+
if (
627+
self._sed_config_task_scheduled
628+
and await self._configure_sed_task()
629+
):
630+
self._sed_config_task_scheduled = False
666631

667632
async def sed_configure( # pylint: disable=too-many-arguments
668633
self,

0 commit comments

Comments
 (0)