From 950e758b62b460ec40cf95b3461c4d465044e3bc Mon Sep 17 00:00:00 2001 From: Matthias Alphart Date: Tue, 16 Sep 2025 19:39:39 +0200 Subject: [PATCH] Fix KNX UI schema missing DPT (#152430) --- .../knx/storage/entity_store_schema.py | 22 +++++---- .../knx/snapshots/test_websocket.ambr | 48 +++++++++++++++++-- 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/knx/storage/entity_store_schema.py b/homeassistant/components/knx/storage/entity_store_schema.py index 21252e35f3a7..934008132a89 100644 --- a/homeassistant/components/knx/storage/entity_store_schema.py +++ b/homeassistant/components/knx/storage/entity_store_schema.py @@ -118,27 +118,31 @@ COVER_KNX_SCHEMA = AllSerializeFirst( vol.Schema( { "section_binary_control": KNXSectionFlat(), - vol.Optional(CONF_GA_UP_DOWN): GASelector(state=False), + vol.Optional(CONF_GA_UP_DOWN): GASelector(state=False, valid_dpt="1"), vol.Optional(CoverConf.INVERT_UPDOWN): selector.BooleanSelector(), "section_stop_control": KNXSectionFlat(), - vol.Optional(CONF_GA_STOP): GASelector(state=False), - vol.Optional(CONF_GA_STEP): GASelector(state=False), + vol.Optional(CONF_GA_STOP): GASelector(state=False, valid_dpt="1"), + vol.Optional(CONF_GA_STEP): GASelector(state=False, valid_dpt="1"), "section_position_control": KNXSectionFlat(collapsible=True), - vol.Optional(CONF_GA_POSITION_SET): GASelector(state=False), - vol.Optional(CONF_GA_POSITION_STATE): GASelector(write=False), + vol.Optional(CONF_GA_POSITION_SET): GASelector( + state=False, valid_dpt="5.001" + ), + vol.Optional(CONF_GA_POSITION_STATE): GASelector( + write=False, valid_dpt="5.001" + ), vol.Optional(CoverConf.INVERT_POSITION): selector.BooleanSelector(), "section_tilt_control": KNXSectionFlat(collapsible=True), - vol.Optional(CONF_GA_ANGLE): GASelector(), + vol.Optional(CONF_GA_ANGLE): GASelector(valid_dpt="5.001"), vol.Optional(CoverConf.INVERT_ANGLE): selector.BooleanSelector(), "section_travel_time": KNXSectionFlat(), - vol.Optional( + vol.Required( CoverConf.TRAVELLING_TIME_UP, default=25 ): selector.NumberSelector( selector.NumberSelectorConfig( min=0, max=1000, step=0.1, unit_of_measurement="s" ) ), - vol.Optional( + vol.Required( CoverConf.TRAVELLING_TIME_DOWN, default=25 ): selector.NumberSelector( selector.NumberSelectorConfig( @@ -310,7 +314,7 @@ LIGHT_KNX_SCHEMA = AllSerializeFirst( SWITCH_KNX_SCHEMA = vol.Schema( { "section_switch": KNXSectionFlat(), - vol.Required(CONF_GA_SWITCH): GASelector(write_required=True), + vol.Required(CONF_GA_SWITCH): GASelector(write_required=True, valid_dpt="1"), vol.Optional(CONF_INVERT, default=False): selector.BooleanSelector(), vol.Optional(CONF_RESPOND_TO_READ, default=False): selector.BooleanSelector(), vol.Optional(CONF_SYNC_STATE, default=True): SyncStateSelector(), diff --git a/tests/components/knx/snapshots/test_websocket.ambr b/tests/components/knx/snapshots/test_websocket.ambr index 6dc651195aeb..388c68e0d3f4 100644 --- a/tests/components/knx/snapshots/test_websocket.ambr +++ b/tests/components/knx/snapshots/test_websocket.ambr @@ -111,6 +111,12 @@ 'options': dict({ 'passive': True, 'state': False, + 'validDPTs': list([ + dict({ + 'main': 1, + 'sub': None, + }), + ]), 'write': dict({ 'required': False, }), @@ -140,6 +146,12 @@ 'options': dict({ 'passive': True, 'state': False, + 'validDPTs': list([ + dict({ + 'main': 1, + 'sub': None, + }), + ]), 'write': dict({ 'required': False, }), @@ -153,6 +165,12 @@ 'options': dict({ 'passive': True, 'state': False, + 'validDPTs': list([ + dict({ + 'main': 1, + 'sub': None, + }), + ]), 'write': dict({ 'required': False, }), @@ -172,6 +190,12 @@ 'options': dict({ 'passive': True, 'state': False, + 'validDPTs': list([ + dict({ + 'main': 5, + 'sub': 1, + }), + ]), 'write': dict({ 'required': False, }), @@ -187,6 +211,12 @@ 'state': dict({ 'required': False, }), + 'validDPTs': list([ + dict({ + 'main': 5, + 'sub': 1, + }), + ]), 'write': False, }), 'required': False, @@ -216,6 +246,12 @@ 'state': dict({ 'required': False, }), + 'validDPTs': list([ + dict({ + 'main': 5, + 'sub': 1, + }), + ]), 'write': dict({ 'required': False, }), @@ -242,8 +278,7 @@ dict({ 'default': 25, 'name': 'travelling_time_up', - 'optional': True, - 'required': False, + 'required': True, 'selector': dict({ 'number': dict({ 'max': 1000.0, @@ -258,8 +293,7 @@ dict({ 'default': 25, 'name': 'travelling_time_down', - 'optional': True, - 'required': False, + 'required': True, 'selector': dict({ 'number': dict({ 'max': 1000.0, @@ -746,6 +780,12 @@ 'state': dict({ 'required': False, }), + 'validDPTs': list([ + dict({ + 'main': 1, + 'sub': None, + }), + ]), 'write': dict({ 'required': True, }),