mirror of
https://github.com/esphome/esphome.git
synced 2025-03-14 06:38:17 +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,
|
||||
}
|
||||
|
||||
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(
|
||||
{
|
||||
cv.Optional(CONF_ADDRESS, default=0): cv.hex_uint16_t,
|
||||
cv.Optional(CONF_COMMAND, default=0): cv.hex_uint16_t,
|
||||
cv.Optional(CONF_REPEATS, default=1): cv.int_range(min=1, max=65535),
|
||||
}
|
||||
)
|
||||
def nec_schema_validator(config):
|
||||
"""Custom NEC schema validator that enforces different rules for FRAME vs. REPEAT."""
|
||||
code_type = config[CONF_TYPE]
|
||||
|
||||
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
|
||||
|
||||
|
||||
NEC_SCHEMA = cv.All(
|
||||
cv.typed_schema(
|
||||
cv.Schema(
|
||||
{
|
||||
TYPE_FRAME: NEC_FRAME_SCHEMA,
|
||||
TYPE_REPEAT: NEC_REPEAT_SCHEMA,
|
||||
},
|
||||
lower=True,
|
||||
cv.Optional(CONF_TYPE, default=TYPE_FRAME): cv.enum(
|
||||
NEC_CODE_TYPES, 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