Device automation extra fields translation for KNX (#119518)

This commit is contained in:
Matthias Alphart 2024-06-15 11:31:10 +02:00 committed by GitHub
parent 8c5c7203ea
commit c8e9a3a8f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 56 additions and 17 deletions

View File

@ -21,8 +21,12 @@ from .const import DOMAIN
from .project import KNXProject from .project import KNXProject
from .trigger import ( from .trigger import (
CONF_KNX_DESTINATION, 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, PLATFORM_TYPE_TRIGGER_TELEGRAM,
TELEGRAM_TRIGGER_OPTIONS,
TELEGRAM_TRIGGER_SCHEMA, TELEGRAM_TRIGGER_SCHEMA,
TRIGGER_SCHEMA as TRIGGER_TRIGGER_SCHEMA, TRIGGER_SCHEMA as TRIGGER_TRIGGER_SCHEMA,
) )
@ -79,7 +83,21 @@ async def async_get_trigger_capabilities(
options=options, 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} } | {CONF_PLATFORM: PLATFORM_TYPE_TRIGGER_TELEGRAM}
try: try:
TRIGGER_TRIGGER_SCHEMA(trigger_config) trigger_config = TRIGGER_TRIGGER_SCHEMA(trigger_config)
except vol.Invalid as err: except vol.Invalid as err:
raise InvalidDeviceAutomationConfig(f"{err}") from err raise InvalidDeviceAutomationConfig(f"{err}") from err

View File

@ -296,7 +296,23 @@
}, },
"device_automation": { "device_automation": {
"trigger_type": { "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": { "services": {

View File

@ -31,20 +31,15 @@ CONF_KNX_GROUP_VALUE_RESPONSE: Final = "group_value_response"
CONF_KNX_INCOMING: Final = "incoming" CONF_KNX_INCOMING: Final = "incoming"
CONF_KNX_OUTGOING: Final = "outgoing" 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_WRITE, default=True): cv.boolean,
vol.Optional(CONF_KNX_GROUP_VALUE_RESPONSE, 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_GROUP_VALUE_READ, default=True): cv.boolean,
vol.Optional(CONF_KNX_INCOMING, default=True): cv.boolean, vol.Optional(CONF_KNX_INCOMING, default=True): cv.boolean,
vol.Optional(CONF_KNX_OUTGOING, 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 is exclusive to triggers, the above are used in device triggers too
TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend( TRIGGER_SCHEMA = cv.TRIGGER_BASE_SCHEMA.extend(
{ {

View File

@ -319,31 +319,41 @@ async def test_get_trigger_capabilities(
"name": "group_value_write", "name": "group_value_write",
"optional": True, "optional": True,
"default": True, "default": True,
"type": "boolean", "selector": {
"boolean": {},
},
}, },
{ {
"name": "group_value_response", "name": "group_value_response",
"optional": True, "optional": True,
"default": True, "default": True,
"type": "boolean", "selector": {
"boolean": {},
},
}, },
{ {
"name": "group_value_read", "name": "group_value_read",
"optional": True, "optional": True,
"default": True, "default": True,
"type": "boolean", "selector": {
"boolean": {},
},
}, },
{ {
"name": "incoming", "name": "incoming",
"optional": True, "optional": True,
"default": True, "default": True,
"type": "boolean", "selector": {
"boolean": {},
},
}, },
{ {
"name": "outgoing", "name": "outgoing",
"optional": True, "optional": True,
"default": True, "default": True,
"type": "boolean", "selector": {
"boolean": {},
},
}, },
] ]