mirror of
https://github.com/esphome/esphome.git
synced 2025-03-15 15:18:16 +00:00
[remote_base] NEC, fix nec schema
This commit is contained in:
parent
4cbafccd00
commit
e8dfe21aff
@ -757,37 +757,50 @@ NEC_CODE_TYPES = {
|
|||||||
TYPE_REPEAT: nec_code_type_enum_class.REPEAT,
|
TYPE_REPEAT: nec_code_type_enum_class.REPEAT,
|
||||||
}
|
}
|
||||||
|
|
||||||
NEC_FRAME_SCHEMA = cv.Schema(
|
|
||||||
{
|
|
||||||
cv.Required(CONF_ADDRESS): cv.hex_uint16_t,
|
|
||||||
cv.Required(CONF_COMMAND): cv.hex_uint16_t,
|
|
||||||
cv.Optional(CONF_REPEATS, default=0): cv.uint16_t,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
NEC_REPEAT_SCHEMA = cv.Schema(
|
def nec_schema_validator(config):
|
||||||
{
|
"""Custom NEC schema validator that enforces different rules for FRAME vs. REPEAT."""
|
||||||
cv.Optional(CONF_ADDRESS, default=0): cv.hex_uint16_t,
|
code_type = config[CONF_TYPE]
|
||||||
cv.Optional(CONF_COMMAND, default=0): cv.hex_uint16_t,
|
|
||||||
cv.Optional(CONF_REPEATS, default=1): cv.int_range(min=1, max=65535),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if code_type == NEC_CODE_TYPES[TYPE_FRAME]:
|
||||||
|
if CONF_ADDRESS not in config:
|
||||||
|
raise cv.Invalid(f"'{CONF_ADDRESS}' is required for type='{TYPE_FRAME}'.")
|
||||||
|
if CONF_COMMAND not in config:
|
||||||
|
raise cv.Invalid(f"'{CONF_COMMAND}' is required for type='{TYPE_FRAME}'.")
|
||||||
|
config.setdefault(CONF_REPEATS, 0)
|
||||||
|
|
||||||
|
elif code_type == NEC_CODE_TYPES[TYPE_REPEAT]:
|
||||||
|
config.setdefault(CONF_ADDRESS, 0)
|
||||||
|
config.setdefault(CONF_COMMAND, 0)
|
||||||
|
config.setdefault(CONF_REPEATS, 1)
|
||||||
|
|
||||||
|
if config[CONF_ADDRESS] != 0:
|
||||||
|
raise cv.Invalid(f"'{CONF_ADDRESS}' must be 0 for type='{TYPE_REPEAT}'.")
|
||||||
|
if config[CONF_COMMAND] != 0:
|
||||||
|
raise cv.Invalid(f"'{CONF_COMMAND}' must be 0 for type='{TYPE_REPEAT}'.")
|
||||||
|
if config[CONF_REPEATS] == 0:
|
||||||
|
raise cv.Invalid(
|
||||||
|
f"'{CONF_REPEATS}' must be greater than 0 for type='{TYPE_REPEAT}'."
|
||||||
|
)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise cv.Invalid(f"Invalid NEC type: '{config[CONF_TYPE]}'")
|
||||||
|
|
||||||
def nec_schema_convert_type_to_enum(config):
|
|
||||||
config[CONF_TYPE] = cv.enum(NEC_CODE_TYPES, lower=True)(config[CONF_TYPE])
|
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
NEC_SCHEMA = cv.All(
|
NEC_SCHEMA = cv.All(
|
||||||
cv.typed_schema(
|
cv.Schema(
|
||||||
{
|
{
|
||||||
TYPE_FRAME: NEC_FRAME_SCHEMA,
|
cv.Optional(CONF_TYPE, default=TYPE_FRAME): cv.enum(
|
||||||
TYPE_REPEAT: NEC_REPEAT_SCHEMA,
|
NEC_CODE_TYPES, lower=True
|
||||||
},
|
),
|
||||||
lower=True,
|
cv.Optional(CONF_ADDRESS): cv.hex_uint16_t,
|
||||||
|
cv.Optional(CONF_COMMAND): cv.hex_uint16_t,
|
||||||
|
cv.Optional(CONF_REPEATS): cv.uint16_t,
|
||||||
|
}
|
||||||
),
|
),
|
||||||
nec_schema_convert_type_to_enum,
|
nec_schema_validator,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user