From 9603096824a8f1fa1c71718d0588161df363f47e Mon Sep 17 00:00:00 2001 From: PoppyPop Date: Thu, 23 May 2024 08:15:20 +0000 Subject: [PATCH 1/2] add preferred position functionnality to shutter --- src/pyatmo/modules/module.py | 11 ++++++++++- tests/test_shutter.py | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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), From 727ca4d5ec3d9d1cd403db736992fa5a9d04905a Mon Sep 17 00:00:00 2001 From: PoppyPop Date: Thu, 23 May 2024 09:16:55 +0000 Subject: [PATCH 2/2] Take sourcery suggestion --- src/pyatmo/modules/module.py | 22 ++++++++++++++-------- tests/test_shutter.py | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/pyatmo/modules/module.py b/src/pyatmo/modules/module.py index 54d2d806..fdc420d4 100644 --- a/src/pyatmo/modules/module.py +++ b/src/pyatmo/modules/module.py @@ -403,6 +403,11 @@ async def async_set_fan_speed(self, speed: int) -> bool: class ShutterMixin(EntityBase): """Mixin for shutter data.""" + __open_position = 100 + __close_position = 0 + __stop_position = -1 + __preferred_position = -2 + def __init__(self, home: Home, module: ModuleT): """Initialize shutter mixin.""" @@ -414,14 +419,15 @@ 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 + # We check against __preferred_position that is the lower known value + if target_position < self.__preferred_position: + target_position = self.__stop_position json_roller_shutter = { "modules": [ { "id": self.entity_id, - "target_position": min(100, target_position), + "target_position": min(self.__open_position, target_position), "bridge": self.bridge, }, ], @@ -431,22 +437,22 @@ async def async_set_target_position(self, target_position: int) -> bool: async def async_open(self) -> bool: """Open shutter.""" - return await self.async_set_target_position(100) + return await self.async_set_target_position(self.__open_position) async def async_close(self) -> bool: """Close shutter.""" - return await self.async_set_target_position(0) + return await self.async_set_target_position(self.__close_position) async def async_stop(self) -> bool: """Stop shutter.""" - return await self.async_set_target_position(-1) + return await self.async_set_target_position(self.__stop_position) - async def async_preferred_position(self) -> bool: + async def async_move_to_preferred_position(self) -> bool: """Move shutter to preferred position.""" - return await self.async_set_target_position(-2) + return await self.async_set_target_position(self.__preferred_position) class CameraMixin(EntityBase): diff --git a/tests/test_shutter.py b/tests/test_shutter.py index 5580a24c..f1a26ee3 100644 --- a/tests/test_shutter.py +++ b/tests/test_shutter.py @@ -84,7 +84,7 @@ def gen_json_data(position): endpoint="api/setstate", ) - assert await module.async_preferred_position() + assert await module.async_move_to_preferred_position() mock_resp.assert_awaited_with( params=gen_json_data(-2), endpoint="api/setstate",