|
9 | 9 | import logging |
10 | 10 | from typing import Any, Final |
11 | 11 |
|
12 | | -from ..api import ( |
13 | | - MotionConfig, |
14 | | - MotionSensitivity, |
15 | | - MotionState, |
16 | | - NodeEvent, |
17 | | - NodeFeature, |
18 | | - NodeType, |
19 | | -) |
| 12 | +from ..api import MotionConfig, MotionState, NodeEvent, NodeFeature, NodeType |
20 | 13 | from ..connection import StickController |
21 | 14 | from ..constants import MAX_UINT_2 |
22 | 15 | from ..exceptions import MessageError, NodeError, NodeTimeout |
|
43 | 36 |
|
44 | 37 | # region Defaults for Scan Devices |
45 | 38 |
|
| 39 | +# Sensitivity values for motion sensor configuration |
| 40 | +HIGH: Final[str] = "HIGH" |
| 41 | +MEDIUM: Final[str] = "MEDIUM" |
| 42 | +OFF: Final[str] = "OFF" |
| 43 | +MOTION_SENSITIVITY: Final[dict] = { |
| 44 | + HIGH: 20, # 0x14 |
| 45 | + MEDIUM: 30, # 0x1E |
| 46 | + OFF: 255, # 0xFF |
| 47 | +} |
| 48 | + |
46 | 49 | DEFAULT_MOTION_STATE: Final = False |
47 | 50 |
|
48 | 51 | # Time in minutes the motion sensor should not sense motion to |
49 | 52 | # report "no motion" state [Source: 1min - 4uur] |
50 | 53 | DEFAULT_RESET_TIMER: Final = 10 |
51 | 54 |
|
52 | 55 | # Default sensitivity of the motion sensors |
53 | | -DEFAULT_SENSITIVITY: Final = MotionSensitivity.MEDIUM |
| 56 | +DEFAULT_SENSITIVITY = MOTION_SENSITIVITY[MEDIUM] |
54 | 57 |
|
55 | 58 | # Light override |
56 | 59 | DEFAULT_DAYLIGHT_MODE: Final = False |
57 | 60 |
|
58 | 61 | # Default firmware if not known |
59 | 62 | DEFAULT_FIRMWARE: Final = datetime(2010, 11, 4, 16, 58, 46, tzinfo=UTC) |
60 | 63 |
|
61 | | -# Sensitivity values for motion sensor configuration |
62 | | -SENSITIVITY_MAP: Final = { |
63 | | - MotionSensitivity.HIGH: 20, # 0x14 |
64 | | - MotionSensitivity.MEDIUM: 30, # 0x1E |
65 | | - MotionSensitivity.OFF: 255, # 0xFF |
66 | | -} |
| 64 | + |
67 | 65 |
|
68 | 66 | # Scan Features |
69 | 67 | SCAN_FEATURES: Final = ( |
@@ -204,12 +202,12 @@ def _reset_timer_from_cache(self) -> int | None: |
204 | 202 | return int(reset_timer) |
205 | 203 | return None |
206 | 204 |
|
207 | | - def _sensitivity_level_from_cache(self) -> MotionSensitivity | None: |
| 205 | + def _sensitivity_level_from_cache(self) -> str | None: |
208 | 206 | """Load sensitivity level from cache.""" |
209 | 207 | if ( |
210 | 208 | sensitivity_level := self._get_cache(CACHE_SCAN_CONFIG_SENSITIVITY) |
211 | 209 | ) is not None: |
212 | | - return MotionSensitivity[sensitivity_level] |
| 210 | + return MOTION_SENSITIVITY[sensitivity_level] |
213 | 211 | return None |
214 | 212 |
|
215 | 213 | def _motion_config_dirty_from_cache(self) -> bool: |
@@ -278,7 +276,7 @@ def reset_timer(self) -> int: |
278 | 276 | return DEFAULT_RESET_TIMER |
279 | 277 |
|
280 | 278 | @property |
281 | | - def sensitivity_level(self) -> MotionSensitivity: |
| 279 | + def sensitivity_level(self) -> int: |
282 | 280 | """Sensitivity level of motion sensor.""" |
283 | 281 | if self._motion_config.sensitivity_level is not None: |
284 | 282 | return self._motion_config.sensitivity_level |
@@ -330,7 +328,7 @@ async def set_motion_reset_timer(self, minutes: int) -> bool: |
330 | 328 | await self._scan_configure_update() |
331 | 329 | return True |
332 | 330 |
|
333 | | - async def set_motion_sensitivity_level(self, level: MotionSensitivity) -> bool: |
| 331 | + async def set_motion_sensitivity_level(self, level: int) -> bool: |
334 | 332 | """Configure the motion sensitivity level.""" |
335 | 333 | _LOGGER.debug( |
336 | 334 | "set_motion_sensitivity_level | Device %s | %s -> %s", |
@@ -445,14 +443,11 @@ async def _configure_scan_task(self) -> bool: |
445 | 443 | async def scan_configure(self) -> bool: |
446 | 444 | """Configure Scan device settings. Returns True if successful.""" |
447 | 445 | # Default to medium |
448 | | - sensitivity_value = SENSITIVITY_MAP.get( |
449 | | - self._motion_config.sensitivity_level, MotionSensitivity.MEDIUM |
450 | | - ) |
451 | 446 | request = ScanConfigureRequest( |
452 | 447 | self._send, |
453 | 448 | self._mac_in_bytes, |
454 | 449 | self._motion_config.reset_timer, |
455 | | - sensitivity_value, |
| 450 | + self._motion_config.sensitivity_value, |
456 | 451 | self._motion_config.daylight_mode, |
457 | 452 | ) |
458 | 453 | if (response := await request.send()) is None: |
@@ -482,7 +477,7 @@ async def _scan_configure_update(self) -> None: |
482 | 477 | CACHE_SCAN_CONFIG_RESET_TIMER, str(self._motion_config.reset_timer) |
483 | 478 | ) |
484 | 479 | self._set_cache( |
485 | | - CACHE_SCAN_CONFIG_SENSITIVITY, self._motion_config.sensitivity_level.name |
| 480 | + CACHE_SCAN_CONFIG_SENSITIVITY, self._motion_config.sensitivity_level |
486 | 481 | ) |
487 | 482 | self._set_cache( |
488 | 483 | CACHE_SCAN_CONFIG_DAYLIGHT_MODE, str(self._motion_config.daylight_mode) |
|
0 commit comments