From 4e388e143580f592ac40a25e6328503e31bceb3f Mon Sep 17 00:00:00 2001 From: Mick Vleeshouwer Date: Fri, 8 May 2026 12:09:04 +0200 Subject: [PATCH] Fix cover controls for UpDownBioclimaticPergola in Overkiz (#170058) --- homeassistant/components/overkiz/cover.py | 3 + .../setup/local_somfy_tahoma_v2_europe.json | 65 +++++++++++++++++++ .../overkiz/snapshots/test_cover.ambr | 54 +++++++++++++++ tests/components/overkiz/test_cover.py | 29 +++++++++ 4 files changed, 151 insertions(+) diff --git a/homeassistant/components/overkiz/cover.py b/homeassistant/components/overkiz/cover.py index 5b08e5714ec7..a81ef475ca21 100644 --- a/homeassistant/components/overkiz/cover.py +++ b/homeassistant/components/overkiz/cover.py @@ -247,6 +247,9 @@ COVER_DESCRIPTIONS: list[OverkizCoverDescription] = [ OverkizCoverDescription( key=UIClass.PERGOLA, device_class=CoverDeviceClass.AWNING, + open_command=OverkizCommand.OPEN, + close_command=OverkizCommand.CLOSE, + stop_command=OverkizCommand.STOP, is_closed_state=OverkizState.CORE_SLATS_OPEN_CLOSED, current_tilt_position_state=OverkizState.CORE_SLATE_ORIENTATION, set_tilt_position_command=OverkizCommand.SET_ORIENTATION, diff --git a/tests/components/overkiz/fixtures/setup/local_somfy_tahoma_v2_europe.json b/tests/components/overkiz/fixtures/setup/local_somfy_tahoma_v2_europe.json index fad9e83dfc1e..e309c17526f5 100644 --- a/tests/components/overkiz/fixtures/setup/local_somfy_tahoma_v2_europe.json +++ b/tests/components/overkiz/fixtures/setup/local_somfy_tahoma_v2_europe.json @@ -741,6 +741,71 @@ "uiClass": "Pergola" } }, + { + "deviceURL": "rts://1234-5678-3293/16757826", + "available": true, + "synced": true, + "type": 1, + "states": [], + "label": "Kitchen Pergola", + "subsystemId": 0, + "attributes": [], + "enabled": true, + "controllableName": "rts:BioclimaticPergolaRTSComponent", + "definition": { + "states": [], + "widgetName": "UpDownBioclimaticPergola", + "type": "ACTUATOR", + "attributes": [], + "commands": [ + { + "commandName": "identify", + "nparams": 0 + }, + { + "nparams": 2, + "commandName": "tiltPositive", + "paramsSig": "p1,p2" + }, + { + "nparams": 0, + "commandName": "my", + "paramsSig": "*p1" + }, + { + "nparams": 0, + "commandName": "stop", + "paramsSig": "*p1" + }, + { + "nparams": 2, + "commandName": "tiltNegative", + "paramsSig": "p1,p2" + }, + { + "nparams": 0, + "commandName": "close", + "paramsSig": "*p1" + }, + { + "nparams": 0, + "commandName": "down", + "paramsSig": "*p1" + }, + { + "nparams": 0, + "commandName": "open", + "paramsSig": "*p1" + }, + { + "nparams": 0, + "commandName": "up", + "paramsSig": "*p1" + } + ], + "uiClass": "Pergola" + } + }, { "creationTime": 1686173907452, "deviceURL": "rts://1234-5678-3293/16757362", diff --git a/tests/components/overkiz/snapshots/test_cover.ambr b/tests/components/overkiz/snapshots/test_cover.ambr index 4fc0d4c9abc1..d82da83ecc8e 100644 --- a/tests/components/overkiz/snapshots/test_cover.ambr +++ b/tests/components/overkiz/snapshots/test_cover.ambr @@ -3303,6 +3303,60 @@ 'state': 'closed', }) # --- +# name: test_cover_entities_snapshot[local_somfy_tahoma_v2_europe.json][cover.kitchen_pergola-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'cover', + 'entity_category': None, + 'entity_id': 'cover.kitchen_pergola', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': None, + 'platform': 'overkiz', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': , + 'translation_key': None, + 'unique_id': 'rts://1234-5678-3293/16757826', + 'unit_of_measurement': None, + }) +# --- +# name: test_cover_entities_snapshot[local_somfy_tahoma_v2_europe.json][cover.kitchen_pergola-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'assumed_state': True, + 'device_class': 'awning', + 'friendly_name': 'Kitchen Pergola', + 'is_closed': None, + 'supported_features': , + }), + 'context': , + 'entity_id': 'cover.kitchen_pergola', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_cover_entities_snapshot[local_somfy_tahoma_v2_europe.json][cover.living_room_curtain-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ diff --git a/tests/components/overkiz/test_cover.py b/tests/components/overkiz/test_cover.py index ec0e561fb5ca..9d32c44b2a69 100644 --- a/tests/components/overkiz/test_cover.py +++ b/tests/components/overkiz/test_cover.py @@ -57,6 +57,11 @@ PERGOLA = FixtureDevice( "io://1234-5678-3293/7614902", "cover.garden_pergola", ) +UP_DOWN_BIOCLIMATIC_PERGOLA = FixtureDevice( + "setup/local_somfy_tahoma_v2_europe.json", + "rts://1234-5678-3293/16757826", + "cover.kitchen_pergola", +) RTS = FixtureDevice( "setup/cloud_somfy_connexoon_rts_asia.json", "rts://1234-1234-6362/16730022", @@ -162,6 +167,13 @@ async def test_cover_entities_snapshot( (DYNAMIC_GARAGE_DOOR, SERVICE_OPEN_COVER, "open", None, CoverState.OPENING), (DYNAMIC_GARAGE_DOOR_OGP, SERVICE_OPEN_COVER, "open", None, CoverState.OPENING), (PARTIAL_GARAGE_DOOR, SERVICE_OPEN_COVER, "open", None, CoverState.OPENING), + ( + UP_DOWN_BIOCLIMATIC_PERGOLA, + SERVICE_OPEN_COVER, + "open", + [0], + CoverState.OPENING, + ), (TILT_ONLY_VENETIAN_BLIND, SERVICE_OPEN_COVER, "open", [0], CoverState.OPENING), (SHUTTER, SERVICE_CLOSE_COVER, "close", None, CoverState.CLOSING), (AWNING, SERVICE_CLOSE_COVER, "undeploy", None, CoverState.CLOSING), @@ -175,6 +187,13 @@ async def test_cover_entities_snapshot( CoverState.CLOSING, ), (PARTIAL_GARAGE_DOOR, SERVICE_CLOSE_COVER, "close", None, CoverState.CLOSING), + ( + UP_DOWN_BIOCLIMATIC_PERGOLA, + SERVICE_CLOSE_COVER, + "close", + [0], + CoverState.CLOSING, + ), ( TILT_ONLY_VENETIAN_BLIND, SERVICE_CLOSE_COVER, @@ -188,6 +207,13 @@ async def test_cover_entities_snapshot( (DYNAMIC_GARAGE_DOOR, SERVICE_STOP_COVER, "stop", None, CoverState.CLOSED), (DYNAMIC_GARAGE_DOOR_OGP, SERVICE_STOP_COVER, "stop", None, CoverState.CLOSED), (PARTIAL_GARAGE_DOOR, SERVICE_STOP_COVER, "stop", None, CoverState.CLOSED), + ( + UP_DOWN_BIOCLIMATIC_PERGOLA, + SERVICE_STOP_COVER, + "stop", + [0], + STATE_UNKNOWN, + ), (TILT_ONLY_VENETIAN_BLIND, SERVICE_STOP_COVER, "stop", [0], STATE_UNKNOWN), ( TILT_ONLY_VENETIAN_BLIND, @@ -218,6 +244,7 @@ async def test_cover_entities_snapshot( "open-dynamic-garage-door", "open-dynamic-garage-door-ogp", "open-partial-garage-door", + "open-up-down-bioclimatic-pergola", "open-tilt-only-venetian-blind", "close-roller-shutter", "close-awning", @@ -225,6 +252,7 @@ async def test_cover_entities_snapshot( "close-dynamic-garage-door", "close-dynamic-garage-door-ogp", "close-partial-garage-door", + "close-up-down-bioclimatic-pergola", "close-tilt-only-venetian-blind", "stop-roller-shutter", "stop-awning", @@ -232,6 +260,7 @@ async def test_cover_entities_snapshot( "stop-dynamic-garage-door", "stop-dynamic-garage-door-ogp", "stop-partial-garage-door", + "stop-up-down-bioclimatic-pergola", "stop-tilt-only-venetian-blind", "open-tilt-tilt-only-venetian-blind", "close-tilt-tilt-only-venetian-blind",