@@ -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