diff --git a/homeassistant/components/knx/device_trigger.py b/homeassistant/components/knx/device_trigger.py index 5551aa1d439..ea3cc5faad4 100644 --- a/homeassistant/components/knx/device_trigger.py +++ b/homeassistant/components/knx/device_trigger.py @@ -21,8 +21,12 @@ from .const import DOMAIN from .project import KNXProject from .trigger import ( CONF_KNX_DESTINATION, + CONF_KNX_GROUP_VALUE_READ, + CONF_KNX_GROUP_VALUE_RESPONSE, + CONF_KNX_GROUP_VALUE_WRITE, + CONF_KNX_INCOMING, + CONF_KNX_OUTGOING, PLATFORM_TYPE_TRIGGER_TELEGRAM, - TELEGRAM_TRIGGER_OPTIONS, TELEGRAM_TRIGGER_SCHEMA, TRIGGER_SCHEMA as TRIGGER_TRIGGER_SCHEMA, ) @@ -79,7 +83,21 @@ async def async_get_trigger_capabilities( options=options, ), ), - **TELEGRAM_TRIGGER_OPTIONS, + vol.Optional( + CONF_KNX_GROUP_VALUE_WRITE, default=True + ): selector.BooleanSelector(), + vol.Optional( + CONF_KNX_GROUP_VALUE_RESPONSE, default=True + ): selector.BooleanSelector(), + vol.Optional( + CONF_KNX_GROUP_VALUE_READ, default=True + ): selector.BooleanSelector(), + vol.Optional( + CONF_KNX_INCOMING, default=True + ): selector.BooleanSelector(), + vol.Optional( + CONF_KNX_OUTGOING, default=True + ): selector.BooleanSelector(), } ) } @@ -98,7 +116,7 @@ async def async_attach_trigger( } | {CONF_PLATFORM: PLATFORM_TYPE_TRIGGER_TELEGRAM} try: - TRIGGER_TRIGGER_SCHEMA(trigger_config) + trigger_config = TRIGGER_TRIGGER_SCHEMA(trigger_config) except vol.Invalid as err: raise InvalidDeviceAutomationConfig(f"{err}") from err diff --git a/homeassistant/components/knx/strings.json b/homeassistant/components/knx/strings.json index 39b96dddf8f..d6e1e2f49f0 100644 --- a/homeassistant/components/knx/strings.json +++ b/homeassistant/components/knx/strings.json @@ -296,7 +296,23 @@ }, "device_automation": { "trigger_type": { - "telegram": "Telegram sent or received" + "telegram": "Telegram" + }, + "extra_fields": { + "destination": "Group addresses", + "group_value_write": "GroupValueWrite", + "group_value_read": "GroupValueRead", + "group_value_response": "GroupValueResponse", + "incoming": "Incoming", + "outgoing": "Outgoing" + }, + "extra_fields_descriptions": { + "destination": "The trigger will listen to telegrams sent or received on these group addresses. If no address is selected, the trigger will fire for every group address.", + "group_value_write": "Listen on GroupValueWrite telegrams.", + "group_value_read": "Listen on GroupValueRead telegrams.", + "group_value_response": "Listen on GroupValueResponse telegrams.", + "incoming": "Listen on incoming telegrams.", + "outgoing": "Listen on outgoing telegrams." } }, "services": { diff --git a/homeassistant/components/knx/trigger.py b/homeassistant/components/knx/trigger.py index fff844f35b0..1df1ffd6c3b 100644 --- a/homeassistant/components/knx/trigger.py +++ b/homeassistant/components/knx/trigger.py @@ -31,20 +31,15 @@ CONF_KNX_GROUP_VALUE_RESPONSE: Final = "group_value_response" CONF_KNX_INCOMING: Final = "incoming" CONF_KNX_OUTGOING: Final = "outgoing" -TELEGRAM_TRIGGER_OPTIONS: Final = { + +TELEGRAM_TRIGGER_SCHEMA: Final = { + vol.Optional(CONF_KNX_DESTINATION): vol.All(cv.ensure_list, [ga_validator]), vol.Optional(CONF_KNX_GROUP_VALUE_WRITE, default=True): cv.boolean, vol.Optional(CONF_KNX_GROUP_VALUE_RESPONSE, default=True): cv.boolean, vol.Optional(CONF_KNX_GROUP_VALUE_READ, default=True): cv.boolean, vol.Optional(CONF_KNX_INCOMING, default=True): cv.boolean, vol.Optional(CONF_KNX_OUTGOING, default=True): cv.boolean, } -TELEGRAM_TRIGGER_SCHEMA: Final = { - vol.Optional(CONF_KNX_DESTINATION): vol.All( - cv.ensure_list, - [ga_validator], - ), - **TELEGRAM_TRIGGER_OPTIONS, -} # TRIGGER_SCHEMA is exclusive to triggers, the above are used in device triggers too TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend( { diff --git a/tests/components/knx/test_device_trigger.py b/tests/components/knx/test_device_trigger.py index 2fd15150503..136dddefaab 100644 --- a/tests/components/knx/test_device_trigger.py +++ b/tests/components/knx/test_device_trigger.py @@ -319,31 +319,41 @@ async def test_get_trigger_capabilities( "name": "group_value_write", "optional": True, "default": True, - "type": "boolean", + "selector": { + "boolean": {}, + }, }, { "name": "group_value_response", "optional": True, "default": True, - "type": "boolean", + "selector": { + "boolean": {}, + }, }, { "name": "group_value_read", "optional": True, "default": True, - "type": "boolean", + "selector": { + "boolean": {}, + }, }, { "name": "incoming", "optional": True, "default": True, - "type": "boolean", + "selector": { + "boolean": {}, + }, }, { "name": "outgoing", "optional": True, "default": True, - "type": "boolean", + "selector": { + "boolean": {}, + }, }, ]