extend set_position() for all values

This commit is contained in:
patman15
2025-01-05 12:12:16 +01:00
parent 8c5c3d3c9a
commit ea33e08da0

View File

@@ -16,7 +16,10 @@ from cryptography.hazmat.primitives.ciphers.base import (
AEADDecryptionContext, AEADDecryptionContext,
AEADEncryptionContext, AEADEncryptionContext,
) )
from homeassistant.components.cover import ATTR_CURRENT_POSITION from homeassistant.components.cover import (
ATTR_CURRENT_POSITION,
ATTR_CURRENT_TILT_POSITION,
)
from .const import LOGGER, TIMEOUT from .const import LOGGER, TIMEOUT
@@ -122,7 +125,7 @@ class PowerViewBLE:
return self._is_encrypted return self._is_encrypted
@encrypted.setter @encrypted.setter
def encrypted(self, value:bool) -> None: def encrypted(self, value: bool) -> None:
self._is_encrypted = value self._is_encrypted = value
@property @property
@@ -136,9 +139,7 @@ class PowerViewBLE:
return self._client.is_connected return self._client.is_connected
# general cmd: uint16_t cmd, uint8_t seqID, uint8_t data_len # general cmd: uint16_t cmd, uint8_t seqID, uint8_t data_len
async def _cmd( async def _cmd(self, cmd: tuple[ShadeCmd, bytes], disconnect: bool = True) -> None:
self, cmd: tuple[ShadeCmd, bytes], disconnect: bool = True
) -> None:
self._cmd_next = cmd self._cmd_next = cmd
if self._cmd_lock.locked(): if self._cmd_lock.locked():
LOGGER.debug("%s: device busy, queuing %s command", self.name, cmd[0]) LOGGER.debug("%s: device busy, queuing %s command", self.name, cmd[0])
@@ -185,7 +186,7 @@ class PowerViewBLE:
(ATTR_CURRENT_POSITION, ((pos >> 2) / 10)), (ATTR_CURRENT_POSITION, ((pos >> 2) / 10)),
("position2", pos2 >> 2), ("position2", pos2 >> 2),
("position3", int(data[6])), ("position3", int(data[6])),
("tilt", int(data[7])), (ATTR_CURRENT_TILT_POSITION, int(data[7])),
("home_id", int.from_bytes(data[0:2], byteorder="little")), ("home_id", int.from_bytes(data[0:2], byteorder="little")),
("type_id", int.from_bytes(data[2:3])), ("type_id", int.from_bytes(data[2:3])),
("is_opening", bool(pos & 0x3 == 0x2)), ("is_opening", bool(pos & 0x3 == 0x2)),
@@ -197,16 +198,25 @@ class PowerViewBLE:
] ]
# position cmd: uint16_t pos1, uint16_t pos2, uint16_t pos3, uint16_t tilt, uint8_t velocity # position cmd: uint16_t pos1, uint16_t pos2, uint16_t pos3, uint16_t tilt, uint8_t velocity
async def set_position(self, value: int, disconnect: bool = True) -> None: async def set_position(
self,
pos1: int,
pos2: int = 0x8000,
pos3: int = 0x8000,
tilt: int = 0x8000,
velocity: int = 0x0,
disconnect: bool = True,
) -> None:
"""Set position of device.""" """Set position of device."""
LOGGER.debug("%s setting position to %i", self.name, value) LOGGER.debug("%s setting position to %i", self.name, pos1)
await self._cmd( await self._cmd(
( (
ShadeCmd.SET_POSITION, ShadeCmd.SET_POSITION,
bytes( int.to_bytes(pos1 * 100, 2, byteorder="little")
int.to_bytes(value * 100, 2, byteorder="little") + int.to_bytes(pos2 * 100, 2, byteorder="little")
+ bytes([0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x0]) + int.to_bytes(pos3 * 100, 2, byteorder="little")
), + int.to_bytes(tilt * 100, 2, byteorder="little")
+ int.to_bytes(velocity, 1),
), ),
disconnect, disconnect,
) )