From 2fb75ea02e3c5c25e60817efbfebbddf5b709817 Mon Sep 17 00:00:00 2001 From: Daniil Karpenko Date: Thu, 14 May 2026 12:24:51 +0400 Subject: [PATCH 1/4] Add tilt support for RTS sheer screens --- homeassistant/components/overkiz/cover.py | 14 + ..._connexoon_rts_asia_with_sheer_screen.json | 585 ++++++++++++++++++ tests/components/overkiz/test_cover.py | 55 ++ 3 files changed, 654 insertions(+) create mode 100644 tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json diff --git a/homeassistant/components/overkiz/cover.py b/homeassistant/components/overkiz/cover.py index 05073558661054..73f24488a4bf88 100644 --- a/homeassistant/components/overkiz/cover.py +++ b/homeassistant/components/overkiz/cover.py @@ -145,6 +145,20 @@ class OverkizCoverDescription(CoverEntityDescription): close_tilt_command_args=(15, 1), # position (1-127), speed (1-15) stop_tilt_command=OverkizCommand.STOP, ), + # Needs override to support very specific tilt commands (rts:SheerBlindRTSComponent) + # uiClass is VenetianBlind + OverkizCoverDescription( + key=UIWidget.UP_DOWN_SHEER_SCREEN, + device_class=CoverDeviceClass.BLIND, + open_command=OverkizCommand.OPEN, + close_command=OverkizCommand.CLOSE, + stop_command=OverkizCommand.STOP, + open_tilt_command=OverkizCommand.TILT_POSITIVE, + open_tilt_command_args=(15, 1), # position (1-127), speed (1-15) + close_tilt_command=OverkizCommand.TILT_NEGATIVE, + close_tilt_command_args=(15, 1), # position (1-127), speed (1-15) + stop_tilt_command=OverkizCommand.STOP, + ), # Needs override since PositionableGarageDoor reports # core:OpenClosedUnknownState instead of core:OpenClosedState # uiClass is GarageDoor diff --git a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json new file mode 100644 index 00000000000000..94471684305803 --- /dev/null +++ b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json @@ -0,0 +1,585 @@ +{ + "creationTime": 1613674982000, + "lastUpdateTime": 1613674982000, + "id": "SETUP-1234-1234-6362", + "location": { + "creationTime": 1613674982000, + "lastUpdateTime": 1632527573000, + "city": "*", + "country": "*", + "postalCode": "*/*", + "addressLine1": "*", + "addressLine2": "", + "timezone": "Asia/Bangkok", + "longitude": "*", + "latitude": "*", + "twilightMode": 2, + "twilightAngle": "CIVIL", + "twilightCity": "paris", + "summerSolsticeDuskMinutes": 1290, + "winterSolsticeDuskMinutes": 990, + "twilightOffsetEnabled": false, + "dawnOffset": 0, + "duskOffset": 0, + "countryCode": "TH" + }, + "gateways": [ + { + "gatewayId": "1234-1234-6362", + "type": 53, + "subType": 1, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "alive": true, + "timeReliable": true, + "connectivity": { + "status": "OK", + "protocolVersion": "2021.2.4" + }, + "upToDate": true, + "updateStatus": "UP_TO_DATE", + "syncInProgress": false, + "functions": "INTERNET_AUTHORIZATION,SCENARIO_DOWNLOAD,SCENARIO_AUTO_LAUNCHING,SCENARIO_TELECO_LAUNCHING,INTERNET_UPLOAD,INTERNET_UPDATE,TRIGGERS_SENSORS", + "mode": "ACTIVE" + } + ], + "devices": [ + { + "creationTime": 1613675393000, + "lastUpdateTime": 1613675393000, + "label": "*", + "deviceURL": "internal://1234-1234-6362/pod/0", + "shortcut": false, + "controllableName": "internal:PodMiniComponent", + "definition": { + "commands": [ + { + "commandName": "getName", + "nparams": 0 + }, + { + "commandName": "update", + "nparams": 0 + }, + { + "commandName": "setCountryCode", + "nparams": 1 + }, + { + "commandName": "activateCalendar", + "nparams": 0 + }, + { + "commandName": "deactivateCalendar", + "nparams": 0 + }, + { + "commandName": "refreshPodMode", + "nparams": 0 + }, + { + "commandName": "refreshUpdateStatus", + "nparams": 0 + }, + { + "commandName": "setCalendar", + "nparams": 1 + }, + { + "commandName": "setLightingLedPodMode", + "nparams": 1 + }, + { + "commandName": "setPodLedOff", + "nparams": 0 + }, + { + "commandName": "setPodLedOn", + "nparams": 0 + } + ], + "states": [ + { + "type": "DiscreteState", + "values": [ + "offline", + "online" + ], + "qualifiedName": "core:ConnectivityState" + }, + { + "type": "DataState", + "qualifiedName": "core:CountryCodeState" + }, + { + "type": "DataState", + "qualifiedName": "core:LocalIPv4AddressState" + }, + { + "type": "DataState", + "qualifiedName": "core:NameState" + }, + { + "type": "DiscreteState", + "values": [ + "doublePress", + "longPress", + "simplePress", + "triplePress", + "veryLongPress" + ], + "qualifiedName": "internal:LastActionConfigButtonState" + }, + { + "type": "ContinuousState", + "qualifiedName": "internal:LightingLedPodModeState" + } + ], + "dataProperties": [], + "widgetName": "Pod", + "uiProfiles": [ + "UpdatableComponent" + ], + "uiClass": "Pod", + "qualifiedName": "internal:PodMiniComponent", + "type": "ACTUATOR" + }, + "states": [ + { + "name": "core:NameState", + "type": 3, + "value": "*" + }, + { + "name": "internal:LightingLedPodModeState", + "type": 2, + "value": 1.0 + }, + { + "name": "core:CountryCodeState", + "type": 3, + "value": "TH" + }, + { + "name": "core:LocalIPv4AddressState", + "type": 3, + "value": "N/A" + } + ], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "Pod", + "type": 1, + "oid": "2dfeb3c8-a71d-4552-9e9b-875baf906a6c", + "uiClass": "Pod" + }, + { + "creationTime": 1613676516000, + "lastUpdateTime": 1613676516000, + "label": "Patio Shutter", + "deviceURL": "rts://1234-1234-6362/16730022", + "shortcut": false, + "controllableName": "rts:RollerShutterRTSComponent", + "definition": { + "commands": [ + { + "commandName": "close", + "nparams": 1 + }, + { + "commandName": "down", + "nparams": 1 + }, + { + "commandName": "identify", + "nparams": 0 + }, + { + "commandName": "my", + "nparams": 1 + }, + { + "commandName": "open", + "nparams": 1 + }, + { + "commandName": "rest", + "nparams": 1 + }, + { + "commandName": "stop", + "nparams": 1 + }, + { + "commandName": "test", + "nparams": 0 + }, + { + "commandName": "up", + "nparams": 1 + }, + { + "commandName": "openConfiguration", + "nparams": 1 + } + ], + "states": [], + "dataProperties": [ + { + "value": "0", + "qualifiedName": "core:identifyInterval" + } + ], + "widgetName": "UpDownRollerShutter", + "uiProfiles": [ + "OpenCloseShutter", + "OpenClose" + ], + "uiClass": "RollerShutter", + "qualifiedName": "rts:RollerShutterRTSComponent", + "type": "ACTUATOR" + }, + "attributes": [ + { + "name": "rts:diy", + "type": 6, + "value": false + } + ], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "UpDownRollerShutter", + "type": 1, + "oid": "d4da34c9-5cbf-4278-b8ec-ae66428b9522", + "uiClass": "RollerShutter" + }, + { + "creationTime": 1613676640000, + "lastUpdateTime": 1613676640000, + "label": "Kitchen Shutter", + "deviceURL": "rts://1234-1234-6362/16749917", + "shortcut": false, + "controllableName": "rts:RollerShutterRTSComponent", + "definition": { + "commands": [ + { + "commandName": "close", + "nparams": 1 + }, + { + "commandName": "down", + "nparams": 1 + }, + { + "commandName": "identify", + "nparams": 0 + }, + { + "commandName": "my", + "nparams": 1 + }, + { + "commandName": "open", + "nparams": 1 + }, + { + "commandName": "rest", + "nparams": 1 + }, + { + "commandName": "stop", + "nparams": 1 + }, + { + "commandName": "test", + "nparams": 0 + }, + { + "commandName": "up", + "nparams": 1 + }, + { + "commandName": "openConfiguration", + "nparams": 1 + } + ], + "states": [], + "dataProperties": [ + { + "value": "0", + "qualifiedName": "core:identifyInterval" + } + ], + "widgetName": "UpDownRollerShutter", + "uiProfiles": [ + "OpenCloseShutter", + "OpenClose" + ], + "uiClass": "RollerShutter", + "qualifiedName": "rts:RollerShutterRTSComponent", + "type": "ACTUATOR" + }, + "attributes": [ + { + "name": "rts:diy", + "type": 6, + "value": false + } + ], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "UpDownRollerShutter", + "type": 1, + "oid": "ef870fe7-daf3-4f33-b91e-62b2a809ef4e", + "uiClass": "RollerShutter" + }, + { + "creationTime": 1613676700000, + "lastUpdateTime": 1613676700000, + "label": "Jaloezie", + "deviceURL": "rts://1234-1234-6362/16730044", + "shortcut": false, + "controllableName": "rts:TiltOnlyVenetianBlindRTSComponent", + "definition": { + "commands": [ + { + "commandName": "open", + "nparams": 0 + }, + { + "commandName": "close", + "nparams": 0 + }, + { + "commandName": "stop", + "nparams": 0 + }, + { + "commandName": "tiltPositive", + "nparams": 2 + }, + { + "commandName": "tiltNegative", + "nparams": 2 + }, + { + "commandName": "my", + "nparams": 1 + }, + { + "commandName": "identify", + "nparams": 0 + } + ], + "states": [], + "attributes": [], + "dataProperties": [], + "widgetName": "TiltOnlyVenetianBlind", + "uiProfiles": [ + "OpenClose" + ], + "uiClass": "VenetianBlind", + "qualifiedName": "rts:TiltOnlyVenetianBlindRTSComponent", + "type": "ACTUATOR" + }, + "states": [], + "attributes": [], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "TiltOnlyVenetianBlind", + "type": 1, + "oid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "uiClass": "VenetianBlind" + }, + { + "creationTime": 1613676700000, + "lastUpdateTime": 1613676700000, + "label": "Office Venetian Blind", + "deviceURL": "rts://1234-1234-6362/16747291", + "shortcut": false, + "controllableName": "rts:VenetianBlindRTSComponent", + "definition": { + "commands": [ + { + "commandName": "close", + "nparams": 1 + }, + { + "commandName": "down", + "nparams": 1 + }, + { + "commandName": "identify", + "nparams": 0 + }, + { + "commandName": "my", + "nparams": 1 + }, + { + "commandName": "open", + "nparams": 1 + }, + { + "commandName": "rest", + "nparams": 1 + }, + { + "commandName": "stop", + "nparams": 1 + }, + { + "commandName": "test", + "nparams": 0 + }, + { + "commandName": "up", + "nparams": 1 + }, + { + "commandName": "moveOf", + "nparams": 2 + }, + { + "commandName": "openConfiguration", + "nparams": 1 + }, + { + "commandName": "tiltNegative", + "nparams": 2 + }, + { + "commandName": "tiltPositive", + "nparams": 2 + } + ], + "states": [], + "dataProperties": [ + { + "value": "0", + "qualifiedName": "core:identifyInterval" + } + ], + "widgetName": "UpDownVenetianBlind", + "uiProfiles": [ + "OpenCloseBlind", + "OpenClose" + ], + "uiClass": "VenetianBlind", + "qualifiedName": "rts:VenetianBlindRTSComponent", + "type": "ACTUATOR" + }, + "attributes": [], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "UpDownVenetianBlind", + "type": 1, + "oid": "3496a041-cafc-4d5d-ab3b-7947985812dc", + "uiClass": "VenetianBlind" + }, + { + "creationTime": 1613676710000, + "lastUpdateTime": 1613676710000, + "label": "Kitchen Sheer Screen", + "deviceURL": "rts://1234-1234-6362/16753206", + "shortcut": false, + "controllableName": "rts:SheerBlindRTSComponent", + "definition": { + "commands": [ + { + "commandName": "open", + "nparams": 0 + }, + { + "commandName": "up", + "nparams": 0 + }, + { + "commandName": "tiltPositive", + "nparams": 2 + }, + { + "commandName": "tiltNegative", + "nparams": 2 + }, + { + "commandName": "down", + "nparams": 0 + }, + { + "commandName": "rest", + "nparams": 0 + }, + { + "commandName": "openConfiguration", + "nparams": 0 + }, + { + "commandName": "test", + "nparams": 0 + }, + { + "commandName": "close", + "nparams": 0 + }, + { + "commandName": "identify", + "nparams": 0 + }, + { + "commandName": "moveOf", + "nparams": 1 + }, + { + "commandName": "my", + "nparams": 0 + }, + { + "commandName": "stop", + "nparams": 0 + } + ], + "states": [], + "dataProperties": [], + "widgetName": "UpDownSheerScreen", + "uiProfiles": [ + "OpenCloseBlind", + "OpenClose" + ], + "uiClass": "VenetianBlind", + "qualifiedName": "rts:SheerBlindRTSComponent", + "type": "ACTUATOR" + }, + "states": [], + "attributes": [], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "UpDownSheerScreen", + "type": 1, + "oid": "c198bcdd-8b8b-4dc6-a2b0-f86f7dc7c001", + "uiClass": "VenetianBlind" + } + ], + "zones": [], + "resellerDelegationType": "NEVER", + "oid": "fee37cf6-1d39-49fc-8d67-af71dfe20c4d", + "rootPlace": { + "creationTime": 1613674982000, + "lastUpdateTime": 1613674982000, + "label": "Palm Court", + "type": 0, + "oid": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "subPlaces": [] + }, + "features": [ + { + "name": "connexoon-rts-window", + "source": "GATEWAY_TYPE" + } + ] +} diff --git a/tests/components/overkiz/test_cover.py b/tests/components/overkiz/test_cover.py index 4e158a53b46c0b..432feee3412af2 100644 --- a/tests/components/overkiz/test_cover.py +++ b/tests/components/overkiz/test_cover.py @@ -109,6 +109,11 @@ "rts://1234-1234-6362/16747291", "cover.office_venetian_blind", ) +UP_DOWN_SHEER_SCREEN = FixtureDevice( + "setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json", + "rts://1234-1234-6362/16753206", + "cover.kitchen_sheer_screen", +) DYNAMIC_GARAGE_DOOR = FixtureDevice( "setup/cloud_somfy_tahoma_v2_europe.json", "io://1234-1234-6233/16730050", @@ -187,6 +192,7 @@ async def test_cover_entities_snapshot( ), (TILT_ONLY_VENETIAN_BLIND, SERVICE_OPEN_COVER, "open", [0], CoverState.OPENING), (UP_DOWN_VENETIAN_BLIND, SERVICE_OPEN_COVER, "open", [0], CoverState.OPENING), + (UP_DOWN_SHEER_SCREEN, SERVICE_OPEN_COVER, "open", [0], CoverState.OPENING), (SHUTTER, SERVICE_CLOSE_COVER, "close", None, CoverState.CLOSING), (AWNING, SERVICE_CLOSE_COVER, "undeploy", None, CoverState.CLOSING), (GARAGE, SERVICE_CLOSE_COVER, "close", None, CoverState.CLOSING), @@ -215,6 +221,7 @@ async def test_cover_entities_snapshot( CoverState.CLOSING, ), (UP_DOWN_VENETIAN_BLIND, SERVICE_CLOSE_COVER, "close", [0], CoverState.CLOSING), + (UP_DOWN_SHEER_SCREEN, SERVICE_CLOSE_COVER, "close", [0], CoverState.CLOSING), (SHUTTER, SERVICE_STOP_COVER, "stop", None, CoverState.CLOSED), (AWNING, SERVICE_STOP_COVER, "stop", None, CoverState.CLOSED), (GARAGE, SERVICE_STOP_COVER, "stop", None, CoverState.CLOSED), @@ -252,6 +259,7 @@ async def test_cover_entities_snapshot( STATE_UNKNOWN, ), (UP_DOWN_VENETIAN_BLIND, SERVICE_STOP_COVER, "stop", [0], STATE_UNKNOWN), + (UP_DOWN_SHEER_SCREEN, SERVICE_STOP_COVER, "stop", [0], STATE_UNKNOWN), ( UP_DOWN_VENETIAN_BLIND, SERVICE_OPEN_COVER_TILT, @@ -273,6 +281,27 @@ async def test_cover_entities_snapshot( [0], STATE_UNKNOWN, ), + ( + UP_DOWN_SHEER_SCREEN, + SERVICE_OPEN_COVER_TILT, + "tiltPositive", + [15, 1], + CoverState.OPENING, + ), + ( + UP_DOWN_SHEER_SCREEN, + SERVICE_CLOSE_COVER_TILT, + "tiltNegative", + [15, 1], + CoverState.CLOSING, + ), + ( + UP_DOWN_SHEER_SCREEN, + SERVICE_STOP_COVER_TILT, + "stop", + [0], + STATE_UNKNOWN, + ), ], ids=[ "open-roller-shutter", @@ -285,6 +314,7 @@ async def test_cover_entities_snapshot( "open-up-down-bioclimatic-pergola", "open-tilt-only-venetian-blind", "open-venetian-blind-rts", + "open-sheer-screen-rts", "close-roller-shutter", "close-awning", "close-garage-door", @@ -295,6 +325,7 @@ async def test_cover_entities_snapshot( "close-up-down-bioclimatic-pergola", "close-tilt-only-venetian-blind", "close-venetian-blind-rts", + "close-sheer-screen-rts", "stop-roller-shutter", "stop-awning", "stop-garage-door", @@ -308,9 +339,13 @@ async def test_cover_entities_snapshot( "close-tilt-tilt-only-venetian-blind", "stop-tilt-tilt-only-venetian-blind", "stop-venetian-blind-rts", + "stop-sheer-screen-rts", "open-tilt-venetian-blind-rts", "close-tilt-venetian-blind-rts", "stop-tilt-venetian-blind-rts", + "open-tilt-sheer-screen-rts", + "close-tilt-sheer-screen-rts", + "stop-tilt-sheer-screen-rts", ], ) async def test_cover_service_actions( @@ -393,6 +428,26 @@ async def test_cover_set_position( ) +async def test_cover_tilt_features_for_up_down_sheer_screen( + hass: HomeAssistant, + setup_overkiz_integration: SetupOverkizIntegration, +) -> None: + """Test tilt features for a RTS UpDownSheerScreen cover.""" + await setup_overkiz_integration(fixture=UP_DOWN_SHEER_SCREEN.fixture) + + state = hass.states.get(UP_DOWN_SHEER_SCREEN.entity_id) + assert state + assert ATTR_CURRENT_TILT_POSITION not in state.attributes + assert state.attributes["supported_features"] == ( + CoverEntityFeature.OPEN + | CoverEntityFeature.CLOSE + | CoverEntityFeature.STOP + | CoverEntityFeature.OPEN_TILT + | CoverEntityFeature.CLOSE_TILT + | CoverEntityFeature.STOP_TILT + ) + + async def test_cover_tilt_services( hass: HomeAssistant, setup_overkiz_integration: SetupOverkizIntegration, From 41e509786c5106bc7dec2c69877f5997989f2518 Mon Sep 17 00:00:00 2001 From: Daniil Karpenko Date: Thu, 14 May 2026 12:46:16 +0400 Subject: [PATCH 2/4] Format sheer screen fixture JSON --- ..._connexoon_rts_asia_with_sheer_screen.json | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json index 94471684305803..16cd191f1a4553 100644 --- a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json +++ b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json @@ -100,10 +100,7 @@ "states": [ { "type": "DiscreteState", - "values": [ - "offline", - "online" - ], + "values": ["offline", "online"], "qualifiedName": "core:ConnectivityState" }, { @@ -136,9 +133,7 @@ ], "dataProperties": [], "widgetName": "Pod", - "uiProfiles": [ - "UpdatableComponent" - ], + "uiProfiles": ["UpdatableComponent"], "uiClass": "Pod", "qualifiedName": "internal:PodMiniComponent", "type": "ACTUATOR" @@ -231,10 +226,7 @@ } ], "widgetName": "UpDownRollerShutter", - "uiProfiles": [ - "OpenCloseShutter", - "OpenClose" - ], + "uiProfiles": ["OpenCloseShutter", "OpenClose"], "uiClass": "RollerShutter", "qualifiedName": "rts:RollerShutterRTSComponent", "type": "ACTUATOR" @@ -312,10 +304,7 @@ } ], "widgetName": "UpDownRollerShutter", - "uiProfiles": [ - "OpenCloseShutter", - "OpenClose" - ], + "uiProfiles": ["OpenCloseShutter", "OpenClose"], "uiClass": "RollerShutter", "qualifiedName": "rts:RollerShutterRTSComponent", "type": "ACTUATOR" @@ -377,9 +366,7 @@ "attributes": [], "dataProperties": [], "widgetName": "TiltOnlyVenetianBlind", - "uiProfiles": [ - "OpenClose" - ], + "uiProfiles": ["OpenClose"], "uiClass": "VenetianBlind", "qualifiedName": "rts:TiltOnlyVenetianBlindRTSComponent", "type": "ACTUATOR" @@ -464,10 +451,7 @@ } ], "widgetName": "UpDownVenetianBlind", - "uiProfiles": [ - "OpenCloseBlind", - "OpenClose" - ], + "uiProfiles": ["OpenCloseBlind", "OpenClose"], "uiClass": "VenetianBlind", "qualifiedName": "rts:VenetianBlindRTSComponent", "type": "ACTUATOR" @@ -546,10 +530,7 @@ "states": [], "dataProperties": [], "widgetName": "UpDownSheerScreen", - "uiProfiles": [ - "OpenCloseBlind", - "OpenClose" - ], + "uiProfiles": ["OpenCloseBlind", "OpenClose"], "uiClass": "VenetianBlind", "qualifiedName": "rts:SheerBlindRTSComponent", "type": "ACTUATOR" From e1c4a28d64508fa33d10c33d18435d05d238a184 Mon Sep 17 00:00:00 2001 From: Daniil Karpenko Date: Thu, 14 May 2026 13:14:05 +0400 Subject: [PATCH 3/4] Trim redundant sheer screen feature test --- tests/components/overkiz/test_cover.py | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/tests/components/overkiz/test_cover.py b/tests/components/overkiz/test_cover.py index 432feee3412af2..af59891ef77358 100644 --- a/tests/components/overkiz/test_cover.py +++ b/tests/components/overkiz/test_cover.py @@ -428,26 +428,6 @@ async def test_cover_set_position( ) -async def test_cover_tilt_features_for_up_down_sheer_screen( - hass: HomeAssistant, - setup_overkiz_integration: SetupOverkizIntegration, -) -> None: - """Test tilt features for a RTS UpDownSheerScreen cover.""" - await setup_overkiz_integration(fixture=UP_DOWN_SHEER_SCREEN.fixture) - - state = hass.states.get(UP_DOWN_SHEER_SCREEN.entity_id) - assert state - assert ATTR_CURRENT_TILT_POSITION not in state.attributes - assert state.attributes["supported_features"] == ( - CoverEntityFeature.OPEN - | CoverEntityFeature.CLOSE - | CoverEntityFeature.STOP - | CoverEntityFeature.OPEN_TILT - | CoverEntityFeature.CLOSE_TILT - | CoverEntityFeature.STOP_TILT - ) - - async def test_cover_tilt_services( hass: HomeAssistant, setup_overkiz_integration: SetupOverkizIntegration, From ad605ba6b059a49eec3b203b1e9fbffc656dd0b1 Mon Sep 17 00:00:00 2001 From: Daniil Karpenko Date: Thu, 14 May 2026 17:56:54 +0400 Subject: [PATCH 4/4] Refactor sheer screen fixture into existing RTS setup --- .../setup/cloud_somfy_connexoon_rts_asia.json | 80 +++ ..._connexoon_rts_asia_with_sheer_screen.json | 566 ------------------ .../overkiz/snapshots/test_cover.ambr | 54 ++ tests/components/overkiz/test_cover.py | 2 +- 4 files changed, 135 insertions(+), 567 deletions(-) delete mode 100644 tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json diff --git a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia.json b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia.json index d3559a1344f21d..16cd191f1a4553 100644 --- a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia.json +++ b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia.json @@ -464,6 +464,86 @@ "type": 1, "oid": "3496a041-cafc-4d5d-ab3b-7947985812dc", "uiClass": "VenetianBlind" + }, + { + "creationTime": 1613676710000, + "lastUpdateTime": 1613676710000, + "label": "Kitchen Sheer Screen", + "deviceURL": "rts://1234-1234-6362/16753206", + "shortcut": false, + "controllableName": "rts:SheerBlindRTSComponent", + "definition": { + "commands": [ + { + "commandName": "open", + "nparams": 0 + }, + { + "commandName": "up", + "nparams": 0 + }, + { + "commandName": "tiltPositive", + "nparams": 2 + }, + { + "commandName": "tiltNegative", + "nparams": 2 + }, + { + "commandName": "down", + "nparams": 0 + }, + { + "commandName": "rest", + "nparams": 0 + }, + { + "commandName": "openConfiguration", + "nparams": 0 + }, + { + "commandName": "test", + "nparams": 0 + }, + { + "commandName": "close", + "nparams": 0 + }, + { + "commandName": "identify", + "nparams": 0 + }, + { + "commandName": "moveOf", + "nparams": 1 + }, + { + "commandName": "my", + "nparams": 0 + }, + { + "commandName": "stop", + "nparams": 0 + } + ], + "states": [], + "dataProperties": [], + "widgetName": "UpDownSheerScreen", + "uiProfiles": ["OpenCloseBlind", "OpenClose"], + "uiClass": "VenetianBlind", + "qualifiedName": "rts:SheerBlindRTSComponent", + "type": "ACTUATOR" + }, + "states": [], + "attributes": [], + "available": true, + "enabled": true, + "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", + "widget": "UpDownSheerScreen", + "type": 1, + "oid": "c198bcdd-8b8b-4dc6-a2b0-f86f7dc7c001", + "uiClass": "VenetianBlind" } ], "zones": [], diff --git a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json b/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json deleted file mode 100644 index 16cd191f1a4553..00000000000000 --- a/tests/components/overkiz/fixtures/setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json +++ /dev/null @@ -1,566 +0,0 @@ -{ - "creationTime": 1613674982000, - "lastUpdateTime": 1613674982000, - "id": "SETUP-1234-1234-6362", - "location": { - "creationTime": 1613674982000, - "lastUpdateTime": 1632527573000, - "city": "*", - "country": "*", - "postalCode": "*/*", - "addressLine1": "*", - "addressLine2": "", - "timezone": "Asia/Bangkok", - "longitude": "*", - "latitude": "*", - "twilightMode": 2, - "twilightAngle": "CIVIL", - "twilightCity": "paris", - "summerSolsticeDuskMinutes": 1290, - "winterSolsticeDuskMinutes": 990, - "twilightOffsetEnabled": false, - "dawnOffset": 0, - "duskOffset": 0, - "countryCode": "TH" - }, - "gateways": [ - { - "gatewayId": "1234-1234-6362", - "type": 53, - "subType": 1, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "alive": true, - "timeReliable": true, - "connectivity": { - "status": "OK", - "protocolVersion": "2021.2.4" - }, - "upToDate": true, - "updateStatus": "UP_TO_DATE", - "syncInProgress": false, - "functions": "INTERNET_AUTHORIZATION,SCENARIO_DOWNLOAD,SCENARIO_AUTO_LAUNCHING,SCENARIO_TELECO_LAUNCHING,INTERNET_UPLOAD,INTERNET_UPDATE,TRIGGERS_SENSORS", - "mode": "ACTIVE" - } - ], - "devices": [ - { - "creationTime": 1613675393000, - "lastUpdateTime": 1613675393000, - "label": "*", - "deviceURL": "internal://1234-1234-6362/pod/0", - "shortcut": false, - "controllableName": "internal:PodMiniComponent", - "definition": { - "commands": [ - { - "commandName": "getName", - "nparams": 0 - }, - { - "commandName": "update", - "nparams": 0 - }, - { - "commandName": "setCountryCode", - "nparams": 1 - }, - { - "commandName": "activateCalendar", - "nparams": 0 - }, - { - "commandName": "deactivateCalendar", - "nparams": 0 - }, - { - "commandName": "refreshPodMode", - "nparams": 0 - }, - { - "commandName": "refreshUpdateStatus", - "nparams": 0 - }, - { - "commandName": "setCalendar", - "nparams": 1 - }, - { - "commandName": "setLightingLedPodMode", - "nparams": 1 - }, - { - "commandName": "setPodLedOff", - "nparams": 0 - }, - { - "commandName": "setPodLedOn", - "nparams": 0 - } - ], - "states": [ - { - "type": "DiscreteState", - "values": ["offline", "online"], - "qualifiedName": "core:ConnectivityState" - }, - { - "type": "DataState", - "qualifiedName": "core:CountryCodeState" - }, - { - "type": "DataState", - "qualifiedName": "core:LocalIPv4AddressState" - }, - { - "type": "DataState", - "qualifiedName": "core:NameState" - }, - { - "type": "DiscreteState", - "values": [ - "doublePress", - "longPress", - "simplePress", - "triplePress", - "veryLongPress" - ], - "qualifiedName": "internal:LastActionConfigButtonState" - }, - { - "type": "ContinuousState", - "qualifiedName": "internal:LightingLedPodModeState" - } - ], - "dataProperties": [], - "widgetName": "Pod", - "uiProfiles": ["UpdatableComponent"], - "uiClass": "Pod", - "qualifiedName": "internal:PodMiniComponent", - "type": "ACTUATOR" - }, - "states": [ - { - "name": "core:NameState", - "type": 3, - "value": "*" - }, - { - "name": "internal:LightingLedPodModeState", - "type": 2, - "value": 1.0 - }, - { - "name": "core:CountryCodeState", - "type": 3, - "value": "TH" - }, - { - "name": "core:LocalIPv4AddressState", - "type": 3, - "value": "N/A" - } - ], - "available": true, - "enabled": true, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "widget": "Pod", - "type": 1, - "oid": "2dfeb3c8-a71d-4552-9e9b-875baf906a6c", - "uiClass": "Pod" - }, - { - "creationTime": 1613676516000, - "lastUpdateTime": 1613676516000, - "label": "Patio Shutter", - "deviceURL": "rts://1234-1234-6362/16730022", - "shortcut": false, - "controllableName": "rts:RollerShutterRTSComponent", - "definition": { - "commands": [ - { - "commandName": "close", - "nparams": 1 - }, - { - "commandName": "down", - "nparams": 1 - }, - { - "commandName": "identify", - "nparams": 0 - }, - { - "commandName": "my", - "nparams": 1 - }, - { - "commandName": "open", - "nparams": 1 - }, - { - "commandName": "rest", - "nparams": 1 - }, - { - "commandName": "stop", - "nparams": 1 - }, - { - "commandName": "test", - "nparams": 0 - }, - { - "commandName": "up", - "nparams": 1 - }, - { - "commandName": "openConfiguration", - "nparams": 1 - } - ], - "states": [], - "dataProperties": [ - { - "value": "0", - "qualifiedName": "core:identifyInterval" - } - ], - "widgetName": "UpDownRollerShutter", - "uiProfiles": ["OpenCloseShutter", "OpenClose"], - "uiClass": "RollerShutter", - "qualifiedName": "rts:RollerShutterRTSComponent", - "type": "ACTUATOR" - }, - "attributes": [ - { - "name": "rts:diy", - "type": 6, - "value": false - } - ], - "available": true, - "enabled": true, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "widget": "UpDownRollerShutter", - "type": 1, - "oid": "d4da34c9-5cbf-4278-b8ec-ae66428b9522", - "uiClass": "RollerShutter" - }, - { - "creationTime": 1613676640000, - "lastUpdateTime": 1613676640000, - "label": "Kitchen Shutter", - "deviceURL": "rts://1234-1234-6362/16749917", - "shortcut": false, - "controllableName": "rts:RollerShutterRTSComponent", - "definition": { - "commands": [ - { - "commandName": "close", - "nparams": 1 - }, - { - "commandName": "down", - "nparams": 1 - }, - { - "commandName": "identify", - "nparams": 0 - }, - { - "commandName": "my", - "nparams": 1 - }, - { - "commandName": "open", - "nparams": 1 - }, - { - "commandName": "rest", - "nparams": 1 - }, - { - "commandName": "stop", - "nparams": 1 - }, - { - "commandName": "test", - "nparams": 0 - }, - { - "commandName": "up", - "nparams": 1 - }, - { - "commandName": "openConfiguration", - "nparams": 1 - } - ], - "states": [], - "dataProperties": [ - { - "value": "0", - "qualifiedName": "core:identifyInterval" - } - ], - "widgetName": "UpDownRollerShutter", - "uiProfiles": ["OpenCloseShutter", "OpenClose"], - "uiClass": "RollerShutter", - "qualifiedName": "rts:RollerShutterRTSComponent", - "type": "ACTUATOR" - }, - "attributes": [ - { - "name": "rts:diy", - "type": 6, - "value": false - } - ], - "available": true, - "enabled": true, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "widget": "UpDownRollerShutter", - "type": 1, - "oid": "ef870fe7-daf3-4f33-b91e-62b2a809ef4e", - "uiClass": "RollerShutter" - }, - { - "creationTime": 1613676700000, - "lastUpdateTime": 1613676700000, - "label": "Jaloezie", - "deviceURL": "rts://1234-1234-6362/16730044", - "shortcut": false, - "controllableName": "rts:TiltOnlyVenetianBlindRTSComponent", - "definition": { - "commands": [ - { - "commandName": "open", - "nparams": 0 - }, - { - "commandName": "close", - "nparams": 0 - }, - { - "commandName": "stop", - "nparams": 0 - }, - { - "commandName": "tiltPositive", - "nparams": 2 - }, - { - "commandName": "tiltNegative", - "nparams": 2 - }, - { - "commandName": "my", - "nparams": 1 - }, - { - "commandName": "identify", - "nparams": 0 - } - ], - "states": [], - "attributes": [], - "dataProperties": [], - "widgetName": "TiltOnlyVenetianBlind", - "uiProfiles": ["OpenClose"], - "uiClass": "VenetianBlind", - "qualifiedName": "rts:TiltOnlyVenetianBlindRTSComponent", - "type": "ACTUATOR" - }, - "states": [], - "attributes": [], - "available": true, - "enabled": true, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "widget": "TiltOnlyVenetianBlind", - "type": 1, - "oid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "uiClass": "VenetianBlind" - }, - { - "creationTime": 1613676700000, - "lastUpdateTime": 1613676700000, - "label": "Office Venetian Blind", - "deviceURL": "rts://1234-1234-6362/16747291", - "shortcut": false, - "controllableName": "rts:VenetianBlindRTSComponent", - "definition": { - "commands": [ - { - "commandName": "close", - "nparams": 1 - }, - { - "commandName": "down", - "nparams": 1 - }, - { - "commandName": "identify", - "nparams": 0 - }, - { - "commandName": "my", - "nparams": 1 - }, - { - "commandName": "open", - "nparams": 1 - }, - { - "commandName": "rest", - "nparams": 1 - }, - { - "commandName": "stop", - "nparams": 1 - }, - { - "commandName": "test", - "nparams": 0 - }, - { - "commandName": "up", - "nparams": 1 - }, - { - "commandName": "moveOf", - "nparams": 2 - }, - { - "commandName": "openConfiguration", - "nparams": 1 - }, - { - "commandName": "tiltNegative", - "nparams": 2 - }, - { - "commandName": "tiltPositive", - "nparams": 2 - } - ], - "states": [], - "dataProperties": [ - { - "value": "0", - "qualifiedName": "core:identifyInterval" - } - ], - "widgetName": "UpDownVenetianBlind", - "uiProfiles": ["OpenCloseBlind", "OpenClose"], - "uiClass": "VenetianBlind", - "qualifiedName": "rts:VenetianBlindRTSComponent", - "type": "ACTUATOR" - }, - "attributes": [], - "available": true, - "enabled": true, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "widget": "UpDownVenetianBlind", - "type": 1, - "oid": "3496a041-cafc-4d5d-ab3b-7947985812dc", - "uiClass": "VenetianBlind" - }, - { - "creationTime": 1613676710000, - "lastUpdateTime": 1613676710000, - "label": "Kitchen Sheer Screen", - "deviceURL": "rts://1234-1234-6362/16753206", - "shortcut": false, - "controllableName": "rts:SheerBlindRTSComponent", - "definition": { - "commands": [ - { - "commandName": "open", - "nparams": 0 - }, - { - "commandName": "up", - "nparams": 0 - }, - { - "commandName": "tiltPositive", - "nparams": 2 - }, - { - "commandName": "tiltNegative", - "nparams": 2 - }, - { - "commandName": "down", - "nparams": 0 - }, - { - "commandName": "rest", - "nparams": 0 - }, - { - "commandName": "openConfiguration", - "nparams": 0 - }, - { - "commandName": "test", - "nparams": 0 - }, - { - "commandName": "close", - "nparams": 0 - }, - { - "commandName": "identify", - "nparams": 0 - }, - { - "commandName": "moveOf", - "nparams": 1 - }, - { - "commandName": "my", - "nparams": 0 - }, - { - "commandName": "stop", - "nparams": 0 - } - ], - "states": [], - "dataProperties": [], - "widgetName": "UpDownSheerScreen", - "uiProfiles": ["OpenCloseBlind", "OpenClose"], - "uiClass": "VenetianBlind", - "qualifiedName": "rts:SheerBlindRTSComponent", - "type": "ACTUATOR" - }, - "states": [], - "attributes": [], - "available": true, - "enabled": true, - "placeOID": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "widget": "UpDownSheerScreen", - "type": 1, - "oid": "c198bcdd-8b8b-4dc6-a2b0-f86f7dc7c001", - "uiClass": "VenetianBlind" - } - ], - "zones": [], - "resellerDelegationType": "NEVER", - "oid": "fee37cf6-1d39-49fc-8d67-af71dfe20c4d", - "rootPlace": { - "creationTime": 1613674982000, - "lastUpdateTime": 1613674982000, - "label": "Palm Court", - "type": 0, - "oid": "6133b4a0-f514-4553-b635-d1b7beb7e7b2", - "subPlaces": [] - }, - "features": [ - { - "name": "connexoon-rts-window", - "source": "GATEWAY_TYPE" - } - ] -} diff --git a/tests/components/overkiz/snapshots/test_cover.ambr b/tests/components/overkiz/snapshots/test_cover.ambr index b1aaf0ea9a3bee..c208b4440b4106 100644 --- a/tests/components/overkiz/snapshots/test_cover.ambr +++ b/tests/components/overkiz/snapshots/test_cover.ambr @@ -377,6 +377,60 @@ 'state': 'unknown', }) # --- +# name: test_cover_entities_snapshot[cloud_somfy_connexoon_rts_asia.json][cover.kitchen_sheer_screen-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_sheer_screen', + '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-1234-6362/16753206', + 'unit_of_measurement': None, + }) +# --- +# name: test_cover_entities_snapshot[cloud_somfy_connexoon_rts_asia.json][cover.kitchen_sheer_screen-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'assumed_state': True, + 'device_class': 'blind', + 'friendly_name': 'Kitchen Sheer Screen', + 'is_closed': None, + 'supported_features': , + }), + 'context': , + 'entity_id': 'cover.kitchen_sheer_screen', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_cover_entities_snapshot[cloud_somfy_connexoon_rts_asia.json][cover.kitchen_shutter-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ diff --git a/tests/components/overkiz/test_cover.py b/tests/components/overkiz/test_cover.py index af59891ef77358..c6bd568a51debb 100644 --- a/tests/components/overkiz/test_cover.py +++ b/tests/components/overkiz/test_cover.py @@ -110,7 +110,7 @@ "cover.office_venetian_blind", ) UP_DOWN_SHEER_SCREEN = FixtureDevice( - "setup/cloud_somfy_connexoon_rts_asia_with_sheer_screen.json", + "setup/cloud_somfy_connexoon_rts_asia.json", "rts://1234-1234-6362/16753206", "cover.kitchen_sheer_screen", )