Create a window_covering_mode attribute and simplify inversion switch

This commit is contained in:
puddly 2024-01-30 12:57:45 -05:00
parent 5dd4ea9b21
commit 048d649b4d
2 changed files with 17 additions and 10 deletions

View file

@ -270,3 +270,8 @@ class WindowCoveringClusterHandler(ClusterHandler):
def window_covering_type(self) -> WindowCovering.WindowCoveringType | None:
"""Return the window covering type."""
return self.cluster.get(WindowCovering.AttributeDefs.window_covering_type.name)
@property
def window_covering_mode(self) -> WindowCovering.WindowCoveringMode | None:
"""Return the window covering mode."""
return self.cluster.get(WindowCovering.AttributeDefs.window_covering_mode.name)

View file

@ -635,17 +635,19 @@ class WindowCoveringInversionSwitch(ZHASwitchConfigurationEntity):
async def _async_on_off(self, invert: bool) -> None:
"""Turn the entity on or off."""
name: str = WindowCovering.AttributeDefs.window_covering_mode.name
current_mode: WindowCoveringMode = WindowCoveringMode(
self._cluster_handler.cluster.get(name)
)
send_command: bool = False
if (current_mode := self._cluster_handler.window_covering_mode) is None:
await self.async_update()
current_mode = self._cluster_handler.window_covering_mode
if invert and WindowCoveringMode.Motor_direction_reversed not in current_mode:
current_mode |= WindowCoveringMode.Motor_direction_reversed
send_command = True
elif not invert and WindowCoveringMode.Motor_direction_reversed in current_mode:
current_mode &= ~WindowCoveringMode.Motor_direction_reversed
send_command = True
if send_command:
await self._cluster_handler.write_attributes_safe({name: current_mode})
await self.async_update()
else:
return
await self._cluster_handler.write_attributes_safe(
{WindowCovering.AttributeDefs.window_covering_mode.name: current_mode}
)
await self.async_update()