|
8 | 8 |
|
9 | 9 | # Curtain keys |
10 | 10 | CURTAIN_COMMAND = "4501" |
11 | | -OPEN_KEY = f"{REQ_HEADER}{CURTAIN_COMMAND}010100" |
12 | | -CLOSE_KEY = f"{REQ_HEADER}{CURTAIN_COMMAND}010164" |
13 | | -POSITION_KEY = f"{REQ_HEADER}{CURTAIN_COMMAND}0101" # +actual_position |
14 | | -STOP_KEY = f"{REQ_HEADER}{CURTAIN_COMMAND}0001" |
| 11 | +OPEN_KEYS = [ |
| 12 | + f"{REQ_HEADER}{CURTAIN_COMMAND}010100", |
| 13 | + f"{REQ_HEADER}{CURTAIN_COMMAND}05ff00", |
| 14 | +] |
| 15 | +CLOSE_KEYS = [ |
| 16 | + f"{REQ_HEADER}{CURTAIN_COMMAND}010164", |
| 17 | + f"{REQ_HEADER}{CURTAIN_COMMAND}05ff64", |
| 18 | +] |
| 19 | +POSITION_KEYS = [ |
| 20 | + f"{REQ_HEADER}{CURTAIN_COMMAND}0101", |
| 21 | + f"{REQ_HEADER}{CURTAIN_COMMAND}05ff", |
| 22 | +] # +actual_position |
| 23 | +STOP_KEYS = [f"{REQ_HEADER}{CURTAIN_COMMAND}0001", f"{REQ_HEADER}{CURTAIN_COMMAND}00ff"] |
| 24 | + |
15 | 25 | CURTAIN_EXT_SUM_KEY = f"{REQ_HEADER}460401" |
16 | 26 | CURTAIN_EXT_ADV_KEY = f"{REQ_HEADER}460402" |
17 | 27 | CURTAIN_EXT_CHAIN_INFO_KEY = f"{REQ_HEADER}468101" |
@@ -40,27 +50,37 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: |
40 | 50 | self.ext_info_sum: dict[str, Any] = {} |
41 | 51 | self.ext_info_adv: dict[str, Any] = {} |
42 | 52 |
|
| 53 | + async def _send_multiple_commands(self, keys: list[str]) -> bool: |
| 54 | + """Send multiple commands to device. |
| 55 | +
|
| 56 | + Since we current have no way to tell which command the device |
| 57 | + needs we send both. |
| 58 | + """ |
| 59 | + final_result = False |
| 60 | + for key in keys: |
| 61 | + result = await self._send_command(key) |
| 62 | + final_result |= self._check_command_result(result, 0, {1}) |
| 63 | + return final_result |
| 64 | + |
43 | 65 | async def open(self) -> bool: |
44 | 66 | """Send open command.""" |
45 | | - result = await self._send_command(OPEN_KEY) |
46 | | - return self._check_command_result(result, 0, {1}) |
| 67 | + return await self._send_multiple_commands(OPEN_KEYS) |
47 | 68 |
|
48 | 69 | async def close(self) -> bool: |
49 | 70 | """Send close command.""" |
50 | | - result = await self._send_command(CLOSE_KEY) |
51 | | - return self._check_command_result(result, 0, {1}) |
| 71 | + return await self._send_multiple_commands(CLOSE_KEYS) |
52 | 72 |
|
53 | 73 | async def stop(self) -> bool: |
54 | 74 | """Send stop command to device.""" |
55 | | - result = await self._send_command(STOP_KEY) |
56 | | - return self._check_command_result(result, 0, {1}) |
| 75 | + return await self._send_multiple_commands(STOP_KEYS) |
57 | 76 |
|
58 | 77 | async def set_position(self, position: int) -> bool: |
59 | 78 | """Send position command (0-100) to device.""" |
60 | 79 | position = (100 - position) if self._reverse else position |
61 | 80 | hex_position = "%0.2X" % position |
62 | | - result = await self._send_command(POSITION_KEY + hex_position) |
63 | | - return self._check_command_result(result, 0, {1}) |
| 81 | + return await self._send_multiple_commands( |
| 82 | + [key + hex_position for key in POSITION_KEYS] |
| 83 | + ) |
64 | 84 |
|
65 | 85 | async def update(self, interface: int | None = None) -> None: |
66 | 86 | """Update position, battery percent and light level of device.""" |
|
0 commit comments