[valve] Move to use `valve_schema(..) instead of VALVE_SCHEMA` (#8730)

This commit is contained in:
Jesse Hills 2025-05-09 18:14:13 +12:00 committed by GitHub
parent 2b3757dff8
commit 23fb1bed61
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 53 additions and 20 deletions

View File

@ -35,23 +35,30 @@ RESTORE_MODES = {
CONF_HAS_POSITION = "has_position" CONF_HAS_POSITION = "has_position"
CONF_TOGGLE_ACTION = "toggle_action" CONF_TOGGLE_ACTION = "toggle_action"
CONFIG_SCHEMA = valve.VALVE_SCHEMA.extend( CONFIG_SCHEMA = (
{ valve.valve_schema(TemplateValve)
cv.GenerateID(): cv.declare_id(TemplateValve), .extend(
cv.Optional(CONF_LAMBDA): cv.returning_lambda, {
cv.Optional(CONF_OPTIMISTIC, default=False): cv.boolean, cv.Optional(CONF_LAMBDA): cv.returning_lambda,
cv.Optional(CONF_ASSUMED_STATE, default=False): cv.boolean, cv.Optional(CONF_OPTIMISTIC, default=False): cv.boolean,
cv.Optional(CONF_HAS_POSITION, default=False): cv.boolean, cv.Optional(CONF_ASSUMED_STATE, default=False): cv.boolean,
cv.Optional(CONF_OPEN_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_HAS_POSITION, default=False): cv.boolean,
cv.Optional(CONF_CLOSE_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_OPEN_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_STOP_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_TOGGLE_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_STOP_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_POSITION_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_TOGGLE_ACTION): automation.validate_automation(
cv.Optional(CONF_RESTORE_MODE, default="NO_RESTORE"): cv.enum( single=True
RESTORE_MODES, upper=True ),
), cv.Optional(CONF_POSITION_ACTION): automation.validate_automation(
} single=True
).extend(cv.COMPONENT_SCHEMA) ),
cv.Optional(CONF_RESTORE_MODE, default="NO_RESTORE"): cv.enum(
RESTORE_MODES, upper=True
),
}
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):

View File

@ -5,6 +5,8 @@ from esphome.components import mqtt, web_server
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_ENTITY_CATEGORY,
CONF_ICON,
CONF_ID, CONF_ID,
CONF_MQTT_ID, CONF_MQTT_ID,
CONF_ON_OPEN, CONF_ON_OPEN,
@ -20,6 +22,7 @@ from esphome.const import (
DEVICE_CLASS_WATER, DEVICE_CLASS_WATER,
) )
from esphome.core import CORE, coroutine_with_priority from esphome.core import CORE, coroutine_with_priority
from esphome.cpp_generator import MockObjClass
from esphome.cpp_helpers import setup_entity from esphome.cpp_helpers import setup_entity
IS_PLATFORM_COMPONENT = True IS_PLATFORM_COMPONENT = True
@ -71,7 +74,7 @@ ValveClosedTrigger = valve_ns.class_(
CONF_ON_CLOSED = "on_closed" CONF_ON_CLOSED = "on_closed"
VALVE_SCHEMA = ( _VALVE_SCHEMA = (
cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA)
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
.extend( .extend(
@ -100,7 +103,30 @@ VALVE_SCHEMA = (
) )
async def setup_valve_core_(var, config): def valve_schema(
class_: MockObjClass = cv.UNDEFINED,
*,
device_class: str = cv.UNDEFINED,
entity_category: str = cv.UNDEFINED,
icon: str = cv.UNDEFINED,
) -> cv.Schema:
schema = {}
if class_ is not cv.UNDEFINED:
schema[cv.GenerateID()] = cv.declare_id(class_)
for key, default, validator in [
(CONF_DEVICE_CLASS, device_class, cv.one_of(*DEVICE_CLASSES, lower=True)),
(CONF_ENTITY_CATEGORY, entity_category, cv.entity_category),
(CONF_ICON, icon, cv.icon),
]:
if default is not cv.UNDEFINED:
schema[cv.Optional(key, default=default)] = validator
return _VALVE_SCHEMA.extend(schema)
async def _setup_valve_core(var, config):
await setup_entity(var, config) await setup_entity(var, config)
if device_class_config := config.get(CONF_DEVICE_CLASS): if device_class_config := config.get(CONF_DEVICE_CLASS):
@ -132,7 +158,7 @@ async def register_valve(var, config):
if not CORE.has_id(config[CONF_ID]): if not CORE.has_id(config[CONF_ID]):
var = cg.Pvariable(config[CONF_ID], var) var = cg.Pvariable(config[CONF_ID], var)
cg.add(cg.App.register_valve(var)) cg.add(cg.App.register_valve(var))
await setup_valve_core_(var, config) await _setup_valve_core(var, config)
async def new_valve(config, *args): async def new_valve(config, *args):