Skip to content

Commit 0ca45fa

Browse files
committed
Scan: adapt further towards sed
1 parent e3ae231 commit 0ca45fa

File tree

1 file changed

+31
-33
lines changed

1 file changed

+31
-33
lines changed

plugwise_usb/nodes/scan.py

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,7 @@ def __init__(
9191

9292
self._motion_state = MotionState()
9393
self._motion_config = MotionConfig()
94-
self._new_daylight_mode: bool | None = None
95-
self._new_reset_timer: int | None = None
96-
self._new_sensitivity_level: MotionSensitivity | None = None
94+
self._new_motion_config = MotionConfig()
9795

9896
self._scan_config_task_scheduled = False
9997
self._configure_daylight_mode_task: Task[Coroutine[Any, Any, None]] | None = (
@@ -225,8 +223,8 @@ def _motion_timestamp_from_cache(self) -> datetime | None:
225223
@property
226224
def daylight_mode(self) -> bool:
227225
"""Daylight mode of motion sensor."""
228-
if self._new_daylight_mode is not None:
229-
return self._new_daylight_mode
226+
if self._new_motion_config.daylight_mode is not None:
227+
return self._new_motion_config.daylight_mode
230228
if self._motion_config.daylight_mode is not None:
231229
return self._motion_config.daylight_mode
232230
return SCAN_DEFAULT_DAYLIGHT_MODE
@@ -266,8 +264,8 @@ def motion_config(self) -> MotionConfig:
266264
@property
267265
def reset_timer(self) -> int:
268266
"""Total minutes without motion before no motion is reported."""
269-
if self._new_reset_timer is not None:
270-
return self._new_reset_timer
267+
if self._new_motion_config.reset_timer is not None:
268+
return self._new_motion_config.reset_timer
271269
if self._motion_config.reset_timer is not None:
272270
return self._motion_config.reset_timer
273271
return SCAN_DEFAULT_MOTION_RESET_TIMER
@@ -280,8 +278,8 @@ def scan_config_task_scheduled(self) -> bool:
280278
@property
281279
def sensitivity_level(self) -> MotionSensitivity:
282280
"""Sensitivity level of motion sensor."""
283-
if self._new_sensitivity_level is not None:
284-
return self._new_sensitivity_level
281+
if self._new_motion_config.sensitivity_level is not None:
282+
return self._new_motion_config.sensitivity_level
285283
if self._motion_config.sensitivity_level is not None:
286284
return self._motion_config.sensitivity_level
287285
return SCAN_DEFAULT_SENSITIVITY
@@ -304,7 +302,9 @@ async def set_motion_daylight_mode(self, state: bool) -> bool:
304302
if self._motion_config.daylight_mode == state:
305303
return False
306304

307-
self._new_daylight_mode = state
305+
self._new_motion_config = replace(
306+
self._new_motion_config, daylight_mode=state
307+
)
308308
if not self._scan_config_task_scheduled:
309309
await self.schedule_task_when_awake(await self._configure_scan_task())
310310
self._scan_config_task_scheduled = True
@@ -330,7 +330,9 @@ async def set_motion_reset_timer(self, minutes: int) -> bool:
330330
if self._motion_config.reset_timer == minutes:
331331
return False
332332

333-
self._new_reset_timer = minutes
333+
self._new_motion_config = replace(
334+
self._new_motion_config, reset_timer=minutes
335+
)
334336
if not self._scan_config_task_scheduled:
335337
await self.schedule_task_when_awake(await self._configure_scan_task())
336338
self._scan_config_task_scheduled = True
@@ -352,7 +354,9 @@ async def set_motion_sensitivity_level(self, level: MotionSensitivity) -> bool:
352354
if self._motion_config.sensitivity_level == level:
353355
return False
354356

355-
self._new_sensitivity_level = level
357+
self._new_motion_config = replace(
358+
self._new_motion_config, sensitivity_level=level
359+
)
356360
if not self._scan_config_task_scheduled:
357361
await self.schedule_task_when_awake(await self._configure_scan_task())
358362
self._scan_config_task_scheduled = True
@@ -445,9 +449,9 @@ async def _configure_scan_task(self) -> bool:
445449
_LOGGER.debug("HOI _configure_scan_task | starting... ")
446450
change_required = False
447451
if (
448-
self._new_reset_timer is not None
449-
or self._new_sensitivity_level is not None
450-
or self._new_daylight_mode is not None
452+
self._new_motion_config.reset_timer is not None
453+
or self._new_motion_config.sensitivity_level is not None
454+
or self._new_motion_config.daylight_mode is not None
451455
):
452456
change_required = True
453457
if not change_required:
@@ -460,30 +464,30 @@ async def _configure_scan_task(self) -> bool:
460464
):
461465
return False
462466

463-
if self._new_reset_timer is not None:
467+
if self._new_motion_config.reset_timer is not None:
464468
_LOGGER.info(
465469
"Change of motion reset timer from %s to %s minutes has been accepted by %s",
466470
self._motion_config.reset_timer,
467-
self._new_reset_timer,
471+
self._new_motion_config.reset_timer,
468472
self.name,
469473
)
470-
# self._new_reset_timer = None
471-
if self._new_sensitivity_level is not None:
474+
# self._new_motion_config.reset_timer = None
475+
if self._new_motion_config.sensitivity_level is not None:
472476
_LOGGER.info(
473477
"Change of sensitivity level from %s to %s has been accepted by %s",
474478
self._motion_config.sensitivity_level,
475-
self._new_sensitivity_level,
479+
self._new_motion_config.sensitivity_level,
476480
self.name,
477481
)
478-
# self._new_sensitivity_level = None
479-
if self._new_daylight_mode is not None:
482+
# self._new_motion_config.sensitivity_level = None
483+
if self._new_motion_config.daylight_mode is not None:
480484
_LOGGER.info(
481485
"Change of daylight mode from %s to %s has been accepted by %s",
482486
"On" if self._motion_config.daylight_mode else "Off",
483-
"On" if self._new_daylight_mode else "Off",
487+
"On" if self._new_motion_config.daylight_mode else "Off",
484488
self.name,
485489
)
486-
# self._new_daylight_mode = None
490+
# self._new_motion_config.daylight_mode = None
487491
return True
488492

489493
async def scan_configure(
@@ -510,29 +514,23 @@ async def scan_configure(
510514
daylight_mode,
511515
)
512516
if (response := await request.send()) is None:
517+
self._new_motion_config = MotionConfig()
513518
_LOGGER.warning(
514519
"No response from %s to configure scan device settings request",
515520
self.name,
516521
)
517-
# self._new_reset_timer = None
518-
# self._new_sensitivity_level = None
519-
# self._new_daylight_mode = None
520522
return False
521523

522524
if response.node_ack_type == NodeAckResponseType.SCAN_CONFIG_FAILED:
523-
self._new_reset_timer = None
524-
self._new_sensitivity_level = None
525-
self._new_daylight_mode = None
525+
self._new_motion_config = MotionConfig()
526526
_LOGGER.warning("Failed to configure scan settings for %s", self.name)
527527
return False
528528

529529
if response.node_ack_type == NodeAckResponseType.SCAN_CONFIG_ACCEPTED:
530530
await self._scan_configure_update(
531531
motion_reset_timer, sensitivity_level, daylight_mode
532532
)
533-
self._new_reset_timer = None
534-
self._new_sensitivity_level = None
535-
self._new_daylight_mode = None
533+
self._new_motion_config = MotionConfig()
536534
return True
537535

538536
_LOGGER.warning(

0 commit comments

Comments
 (0)