1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-12 16:22:22 +01:00

Dont need to warning about simple string area

A single device in a single area can have a simple string as the area
This commit is contained in:
Jesse Hills
2025-06-23 09:20:53 +12:00
parent 5857f7b9a7
commit 06de58ff8b

View File

@@ -42,7 +42,6 @@ from esphome.helpers import (
copy_file_if_changed, copy_file_if_changed,
fnv1a_32bit_hash, fnv1a_32bit_hash,
get_str_env, get_str_env,
slugify,
walk_files, walk_files,
) )
from esphome.types import ConfigType from esphome.types import ConfigType
@@ -67,27 +66,6 @@ Area = cg.esphome_ns.class_("Area")
VALID_INCLUDE_EXTS = {".h", ".hpp", ".tcc", ".ino", ".cpp", ".c"} VALID_INCLUDE_EXTS = {".h", ".hpp", ".tcc", ".ino", ".cpp", ".c"}
def validate_area_config(value: dict | str) -> dict[str, str | core.ID]:
"""Convert legacy string area to structured format."""
if isinstance(value, str):
# Legacy string format - convert to structured format
_LOGGER.warning(
"Using 'area' as a string is deprecated. Please use the new format:\n"
"area:\n"
" id: %s\n"
' name: "%s"',
slugify(value),
value,
)
# Return a structured area config with the ID generated here
return {
CONF_ID: cv.declare_id(Area)(slugify(value)),
CONF_NAME: value,
}
# Already structured format
return value
def validate_hostname(config): def validate_hostname(config):
max_length = 31 max_length = 31
if config[CONF_NAME_ADD_MAC_SUFFIX]: if config[CONF_NAME_ADD_MAC_SUFFIX]:
@@ -206,21 +184,28 @@ if "ESPHOME_DEFAULT_COMPILE_PROCESS_LIMIT" in os.environ:
else: else:
_compile_process_limit_default = cv.UNDEFINED _compile_process_limit_default = cv.UNDEFINED
AREA_SCHEMA = cv.Schema(
{
cv.GenerateID(CONF_ID): cv.declare_id(Area),
cv.Required(CONF_NAME): cv.string,
}
)
DEVICE_SCHEMA = cv.Schema(
{
cv.GenerateID(CONF_ID): cv.declare_id(Device),
cv.Required(CONF_NAME): cv.string,
cv.Optional(CONF_AREA_ID): cv.use_id(Area),
}
)
CONFIG_SCHEMA = cv.All( CONFIG_SCHEMA = cv.All(
cv.Schema( cv.Schema(
{ {
cv.Required(CONF_NAME): cv.valid_name, cv.Required(CONF_NAME): cv.valid_name,
cv.Optional(CONF_FRIENDLY_NAME, ""): cv.string, cv.Optional(CONF_FRIENDLY_NAME, ""): cv.string,
cv.Optional(CONF_AREA): cv.All( cv.Optional(CONF_AREA): cv.maybe_simple_value(AREA_SCHEMA, key=CONF_NAME),
validate_area_config,
cv.Schema(
{
cv.GenerateID(CONF_ID): cv.declare_id(Area),
cv.Required(CONF_NAME): cv.string,
}
),
),
cv.Optional(CONF_COMMENT): cv.string, cv.Optional(CONF_COMMENT): cv.string,
cv.Required(CONF_BUILD_PATH): cv.string, cv.Required(CONF_BUILD_PATH): cv.string,
cv.Optional(CONF_PLATFORMIO_OPTIONS, default={}): cv.Schema( cv.Optional(CONF_PLATFORMIO_OPTIONS, default={}): cv.Schema(
@@ -270,23 +255,8 @@ CONFIG_SCHEMA = cv.All(
cv.Optional( cv.Optional(
CONF_COMPILE_PROCESS_LIMIT, default=_compile_process_limit_default CONF_COMPILE_PROCESS_LIMIT, default=_compile_process_limit_default
): cv.int_range(min=1, max=get_usable_cpu_count()), ): cv.int_range(min=1, max=get_usable_cpu_count()),
cv.Optional(CONF_AREAS, default=[]): cv.ensure_list( cv.Optional(CONF_AREAS, default=[]): cv.ensure_list(AREA_SCHEMA),
cv.Schema( cv.Optional(CONF_DEVICES, default=[]): cv.ensure_list(DEVICE_SCHEMA),
{
cv.GenerateID(CONF_ID): cv.declare_id(Area),
cv.Required(CONF_NAME): cv.string,
}
),
),
cv.Optional(CONF_DEVICES, default=[]): cv.ensure_list(
cv.Schema(
{
cv.GenerateID(CONF_ID): cv.declare_id(Device),
cv.Required(CONF_NAME): cv.string,
cv.Optional(CONF_AREA_ID): cv.use_id(Area),
}
),
),
} }
), ),
validate_hostname, validate_hostname,