diff --git a/src/pyatmo/modules/module.py b/src/pyatmo/modules/module.py index b918c2b4..54d2d806 100644 --- a/src/pyatmo/modules/module.py +++ b/src/pyatmo/modules/module.py @@ -413,11 +413,15 @@ def __init__(self, home: Home, module: ModuleT): async def async_set_target_position(self, target_position: int) -> bool: """Set shutter to target position.""" + # in case of a too low value, we default to stop and not the preferred position + if target_position < -2: + target_position = -1 + json_roller_shutter = { "modules": [ { "id": self.entity_id, - "target_position": max(min(100, target_position), -1), + "target_position": min(100, target_position), "bridge": self.bridge, }, ], @@ -439,6 +443,11 @@ async def async_stop(self) -> bool: return await self.async_set_target_position(-1) + async def async_preferred_position(self) -> bool: + """Move shutter to preferred position.""" + + return await self.async_set_target_position(-2) + class CameraMixin(EntityBase): """Mixin for camera data.""" diff --git a/tests/test_shutter.py b/tests/test_shutter.py index b09d5526..5580a24c 100644 --- a/tests/test_shutter.py +++ b/tests/test_shutter.py @@ -84,6 +84,12 @@ def gen_json_data(position): endpoint="api/setstate", ) + assert await module.async_preferred_position() + mock_resp.assert_awaited_with( + params=gen_json_data(-2), + endpoint="api/setstate", + ) + assert await module.async_set_target_position(47) mock_resp.assert_awaited_with( params=gen_json_data(47),