[cover] Update components to use `cover_schema(...)` (#8770)

This commit is contained in:
Jesse Hills 2025-05-13 17:29:00 +12:00 committed by GitHub
parent 864ae7a56c
commit a36e1aab8e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 164 additions and 157 deletions

View File

@ -1,7 +1,7 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import ble_client, cover from esphome.components import ble_client, cover
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_ID, CONF_PIN from esphome.const import CONF_PIN
CODEOWNERS = ["@buxtronix"] CODEOWNERS = ["@buxtronix"]
DEPENDENCIES = ["ble_client"] DEPENDENCIES = ["ble_client"]
@ -15,9 +15,9 @@ Am43Component = am43_ns.class_(
) )
CONFIG_SCHEMA = ( CONFIG_SCHEMA = (
cover.COVER_SCHEMA.extend( cover.cover_schema(Am43Component)
.extend(
{ {
cv.GenerateID(): cv.declare_id(Am43Component),
cv.Optional(CONF_PIN, default=8888): cv.int_range(min=0, max=0xFFFF), cv.Optional(CONF_PIN, default=8888): cv.int_range(min=0, max=0xFFFF),
cv.Optional(CONF_INVERT_POSITION, default=False): cv.boolean, cv.Optional(CONF_INVERT_POSITION, default=False): cv.boolean,
} }
@ -28,9 +28,8 @@ CONFIG_SCHEMA = (
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
cg.add(var.set_pin(config[CONF_PIN])) cg.add(var.set_pin(config[CONF_PIN]))
cg.add(var.set_invert_position(config[CONF_INVERT_POSITION])) cg.add(var.set_invert_position(config[CONF_INVERT_POSITION]))
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
await ble_client.register_ble_node(var, config) await ble_client.register_ble_node(var, config)

View File

@ -5,7 +5,6 @@ from esphome.const import (
CONF_DEVICE_CLASS, CONF_DEVICE_CLASS,
CONF_ENTITY_CATEGORY, CONF_ENTITY_CATEGORY,
CONF_ICON, CONF_ICON,
CONF_ID,
CONF_SOURCE_ID, CONF_SOURCE_ID,
) )
from esphome.core.entity_helpers import inherit_property_from from esphome.core.entity_helpers import inherit_property_from
@ -15,12 +14,15 @@ from .. import copy_ns
CopyCover = copy_ns.class_("CopyCover", cover.Cover, cg.Component) CopyCover = copy_ns.class_("CopyCover", cover.Cover, cg.Component)
CONFIG_SCHEMA = cover.COVER_SCHEMA.extend( CONFIG_SCHEMA = (
{ cover.cover_schema(CopyCover)
cv.GenerateID(): cv.declare_id(CopyCover), .extend(
cv.Required(CONF_SOURCE_ID): cv.use_id(cover.Cover), {
} cv.Required(CONF_SOURCE_ID): cv.use_id(cover.Cover),
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
FINAL_VALIDATE_SCHEMA = cv.All( FINAL_VALIDATE_SCHEMA = cv.All(
inherit_property_from(CONF_ICON, CONF_SOURCE_ID), inherit_property_from(CONF_ICON, CONF_SOURCE_ID),
@ -30,8 +32,7 @@ FINAL_VALIDATE_SCHEMA = cv.All(
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cover.register_cover(var, config)
await cg.register_component(var, config) await cg.register_component(var, config)
source = await cg.get_variable(config[CONF_SOURCE_ID]) source = await cg.get_variable(config[CONF_SOURCE_ID])

View File

@ -5,7 +5,6 @@ import esphome.config_validation as cv
from esphome.const import ( from esphome.const import (
CONF_CLOSE_ACTION, CONF_CLOSE_ACTION,
CONF_CLOSE_DURATION, CONF_CLOSE_DURATION,
CONF_ID,
CONF_MAX_DURATION, CONF_MAX_DURATION,
CONF_OPEN_ACTION, CONF_OPEN_ACTION,
CONF_OPEN_DURATION, CONF_OPEN_DURATION,
@ -30,45 +29,47 @@ CurrentBasedCover = current_based_ns.class_(
"CurrentBasedCover", cover.Cover, cg.Component "CurrentBasedCover", cover.Cover, cg.Component
) )
CONFIG_SCHEMA = cover.COVER_SCHEMA.extend( CONFIG_SCHEMA = (
{ cover.cover_schema(CurrentBasedCover)
cv.GenerateID(): cv.declare_id(CurrentBasedCover), .extend(
cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True), {
cv.Required(CONF_OPEN_SENSOR): cv.use_id(sensor.Sensor), cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_OPEN_MOVING_CURRENT_THRESHOLD): cv.float_range( cv.Required(CONF_OPEN_SENSOR): cv.use_id(sensor.Sensor),
min=0, min_included=False cv.Required(CONF_OPEN_MOVING_CURRENT_THRESHOLD): cv.float_range(
), min=0, min_included=False
cv.Optional(CONF_OPEN_OBSTACLE_CURRENT_THRESHOLD): cv.float_range( ),
min=0, min_included=False cv.Optional(CONF_OPEN_OBSTACLE_CURRENT_THRESHOLD): cv.float_range(
), min=0, min_included=False
cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True), ),
cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_CLOSE_SENSOR): cv.use_id(sensor.Sensor), cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds,
cv.Required(CONF_CLOSE_MOVING_CURRENT_THRESHOLD): cv.float_range( cv.Required(CONF_CLOSE_SENSOR): cv.use_id(sensor.Sensor),
min=0, min_included=False cv.Required(CONF_CLOSE_MOVING_CURRENT_THRESHOLD): cv.float_range(
), min=0, min_included=False
cv.Optional(CONF_CLOSE_OBSTACLE_CURRENT_THRESHOLD): cv.float_range( ),
min=0, min_included=False cv.Optional(CONF_CLOSE_OBSTACLE_CURRENT_THRESHOLD): cv.float_range(
), min=0, min_included=False
cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True), ),
cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_OBSTACLE_ROLLBACK, default="10%"): cv.percentage, cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds,
cv.Optional(CONF_MAX_DURATION): cv.positive_time_period_milliseconds, cv.Optional(CONF_OBSTACLE_ROLLBACK, default="10%"): cv.percentage,
cv.Optional(CONF_MALFUNCTION_DETECTION, default=True): cv.boolean, cv.Optional(CONF_MAX_DURATION): cv.positive_time_period_milliseconds,
cv.Optional(CONF_MALFUNCTION_ACTION): automation.validate_automation( cv.Optional(CONF_MALFUNCTION_DETECTION, default=True): cv.boolean,
single=True cv.Optional(CONF_MALFUNCTION_ACTION): automation.validate_automation(
), single=True
cv.Optional( ),
CONF_START_SENSING_DELAY, default="500ms" cv.Optional(
): cv.positive_time_period_milliseconds, CONF_START_SENSING_DELAY, default="500ms"
} ): cv.positive_time_period_milliseconds,
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
await automation.build_automation( await automation.build_automation(
var.get_stop_trigger(), [], config[CONF_STOP_ACTION] var.get_stop_trigger(), [], config[CONF_STOP_ACTION]

View File

@ -6,7 +6,6 @@ from esphome.const import (
CONF_CLOSE_ACTION, CONF_CLOSE_ACTION,
CONF_CLOSE_DURATION, CONF_CLOSE_DURATION,
CONF_CLOSE_ENDSTOP, CONF_CLOSE_ENDSTOP,
CONF_ID,
CONF_MAX_DURATION, CONF_MAX_DURATION,
CONF_OPEN_ACTION, CONF_OPEN_ACTION,
CONF_OPEN_DURATION, CONF_OPEN_DURATION,
@ -17,25 +16,27 @@ from esphome.const import (
endstop_ns = cg.esphome_ns.namespace("endstop") endstop_ns = cg.esphome_ns.namespace("endstop")
EndstopCover = endstop_ns.class_("EndstopCover", cover.Cover, cg.Component) EndstopCover = endstop_ns.class_("EndstopCover", cover.Cover, cg.Component)
CONFIG_SCHEMA = cover.COVER_SCHEMA.extend( CONFIG_SCHEMA = (
{ cover.cover_schema(EndstopCover)
cv.GenerateID(): cv.declare_id(EndstopCover), .extend(
cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True), {
cv.Required(CONF_OPEN_ENDSTOP): cv.use_id(binary_sensor.BinarySensor), cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True), cv.Required(CONF_OPEN_ENDSTOP): cv.use_id(binary_sensor.BinarySensor),
cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True), cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds,
cv.Required(CONF_CLOSE_ENDSTOP): cv.use_id(binary_sensor.BinarySensor), cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_CLOSE_ENDSTOP): cv.use_id(binary_sensor.BinarySensor),
cv.Optional(CONF_MAX_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds,
} cv.Optional(CONF_MAX_DURATION): cv.positive_time_period_milliseconds,
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
await automation.build_automation( await automation.build_automation(
var.get_stop_trigger(), [], config[CONF_STOP_ACTION] var.get_stop_trigger(), [], config[CONF_STOP_ACTION]

View File

@ -7,7 +7,6 @@ from esphome.const import (
CONF_CLOSE_ACTION, CONF_CLOSE_ACTION,
CONF_CLOSE_DURATION, CONF_CLOSE_DURATION,
CONF_CLOSE_ENDSTOP, CONF_CLOSE_ENDSTOP,
CONF_ID,
CONF_MAX_DURATION, CONF_MAX_DURATION,
CONF_OPEN_ACTION, CONF_OPEN_ACTION,
CONF_OPEN_DURATION, CONF_OPEN_DURATION,
@ -50,36 +49,43 @@ def validate_infer_endstop(config):
return config return config
CONFIG_FEEDBACK_COVER_BASE_SCHEMA = cover.COVER_SCHEMA.extend( CONFIG_FEEDBACK_COVER_BASE_SCHEMA = (
{ cover.cover_schema(FeedbackCover)
cv.GenerateID(): cv.declare_id(FeedbackCover), .extend(
cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True), {
cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True), cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_OPEN_ENDSTOP): cv.use_id(binary_sensor.BinarySensor), cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds,
cv.Optional(CONF_OPEN_SENSOR): cv.use_id(binary_sensor.BinarySensor), cv.Optional(CONF_OPEN_ENDSTOP): cv.use_id(binary_sensor.BinarySensor),
cv.Optional(CONF_OPEN_OBSTACLE_SENSOR): cv.use_id(binary_sensor.BinarySensor), cv.Optional(CONF_OPEN_SENSOR): cv.use_id(binary_sensor.BinarySensor),
cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_OPEN_OBSTACLE_SENSOR): cv.use_id(
cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds, binary_sensor.BinarySensor
cv.Optional(CONF_CLOSE_ENDSTOP): cv.use_id(binary_sensor.BinarySensor), ),
cv.Optional(CONF_CLOSE_SENSOR): cv.use_id(binary_sensor.BinarySensor), cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_CLOSE_OBSTACLE_SENSOR): cv.use_id(binary_sensor.BinarySensor), cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds,
cv.Optional(CONF_MAX_DURATION): cv.positive_time_period_milliseconds, cv.Optional(CONF_CLOSE_ENDSTOP): cv.use_id(binary_sensor.BinarySensor),
cv.Optional(CONF_HAS_BUILT_IN_ENDSTOP, default=False): cv.boolean, cv.Optional(CONF_CLOSE_SENSOR): cv.use_id(binary_sensor.BinarySensor),
cv.Optional(CONF_ASSUMED_STATE): cv.boolean, cv.Optional(CONF_CLOSE_OBSTACLE_SENSOR): cv.use_id(
cv.Optional( binary_sensor.BinarySensor
CONF_UPDATE_INTERVAL, "1000ms" ),
): cv.positive_time_period_milliseconds, cv.Optional(CONF_MAX_DURATION): cv.positive_time_period_milliseconds,
cv.Optional(CONF_INFER_ENDSTOP_FROM_MOVEMENT, False): cv.boolean, cv.Optional(CONF_HAS_BUILT_IN_ENDSTOP, default=False): cv.boolean,
cv.Optional( cv.Optional(CONF_ASSUMED_STATE): cv.boolean,
CONF_DIRECTION_CHANGE_WAIT_TIME cv.Optional(
): cv.positive_time_period_milliseconds, CONF_UPDATE_INTERVAL, "1000ms"
cv.Optional( ): cv.positive_time_period_milliseconds,
CONF_ACCELERATION_WAIT_TIME, "0s" cv.Optional(CONF_INFER_ENDSTOP_FROM_MOVEMENT, False): cv.boolean,
): cv.positive_time_period_milliseconds, cv.Optional(
cv.Optional(CONF_OBSTACLE_ROLLBACK, default="10%"): cv.percentage, CONF_DIRECTION_CHANGE_WAIT_TIME
}, ): cv.positive_time_period_milliseconds,
).extend(cv.COMPONENT_SCHEMA) cv.Optional(
CONF_ACCELERATION_WAIT_TIME, "0s"
): cv.positive_time_period_milliseconds,
cv.Optional(CONF_OBSTACLE_ROLLBACK, default="10%"): cv.percentage,
},
)
.extend(cv.COMPONENT_SCHEMA)
)
CONFIG_SCHEMA = cv.All( CONFIG_SCHEMA = cv.All(
@ -90,9 +96,8 @@ CONFIG_SCHEMA = cv.All(
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
# STOP # STOP
await automation.build_automation( await automation.build_automation(

View File

@ -1,17 +1,17 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import cover, uart from esphome.components import cover, uart
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_CLOSE_DURATION, CONF_ID, CONF_OPEN_DURATION from esphome.const import CONF_CLOSE_DURATION, CONF_OPEN_DURATION
he60r_ns = cg.esphome_ns.namespace("he60r") he60r_ns = cg.esphome_ns.namespace("he60r")
HE60rCover = he60r_ns.class_("HE60rCover", cover.Cover, cg.Component) HE60rCover = he60r_ns.class_("HE60rCover", cover.Cover, cg.Component)
CONFIG_SCHEMA = ( CONFIG_SCHEMA = (
cover.COVER_SCHEMA.extend(uart.UART_DEVICE_SCHEMA) cover.cover_schema(HE60rCover)
.extend(uart.UART_DEVICE_SCHEMA)
.extend(cv.COMPONENT_SCHEMA) .extend(cv.COMPONENT_SCHEMA)
.extend( .extend(
{ {
cv.GenerateID(): cv.declare_id(HE60rCover),
cv.Optional( cv.Optional(
CONF_OPEN_DURATION, default="15s" CONF_OPEN_DURATION, default="15s"
): cv.positive_time_period_milliseconds, ): cv.positive_time_period_milliseconds,
@ -34,9 +34,8 @@ FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
await uart.register_uart_device(var, config) await uart.register_uart_device(var, config)
cg.add(var.set_close_duration(config[CONF_CLOSE_DURATION])) cg.add(var.set_close_duration(config[CONF_CLOSE_DURATION]))

View File

@ -34,31 +34,37 @@ RESTORE_MODES = {
CONF_HAS_POSITION = "has_position" CONF_HAS_POSITION = "has_position"
CONF_TOGGLE_ACTION = "toggle_action" CONF_TOGGLE_ACTION = "toggle_action"
CONFIG_SCHEMA = cover.COVER_SCHEMA.extend( CONFIG_SCHEMA = (
{ cover.cover_schema(TemplateCover)
cv.GenerateID(): cv.declare_id(TemplateCover), .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_TILT_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_STOP_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_TILT_LAMBDA): cv.returning_lambda, cv.Optional(CONF_TILT_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_TOGGLE_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_TILT_LAMBDA): cv.returning_lambda,
cv.Optional(CONF_POSITION_ACTION): automation.validate_automation(single=True), cv.Optional(CONF_TOGGLE_ACTION): automation.validate_automation(
cv.Optional(CONF_RESTORE_MODE, default="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="RESTORE"): cv.enum(
RESTORE_MODES, upper=True
),
}
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
if CONF_LAMBDA in config: if CONF_LAMBDA in config:
template_ = await cg.process_lambda( template_ = await cg.process_lambda(
config[CONF_LAMBDA], [], return_type=cg.optional.template(float) config[CONF_LAMBDA], [], return_type=cg.optional.template(float)

View File

@ -6,7 +6,6 @@ from esphome.const import (
CONF_ASSUMED_STATE, CONF_ASSUMED_STATE,
CONF_CLOSE_ACTION, CONF_CLOSE_ACTION,
CONF_CLOSE_DURATION, CONF_CLOSE_DURATION,
CONF_ID,
CONF_OPEN_ACTION, CONF_OPEN_ACTION,
CONF_OPEN_DURATION, CONF_OPEN_DURATION,
CONF_STOP_ACTION, CONF_STOP_ACTION,
@ -18,25 +17,27 @@ TimeBasedCover = time_based_ns.class_("TimeBasedCover", cover.Cover, cg.Componen
CONF_HAS_BUILT_IN_ENDSTOP = "has_built_in_endstop" CONF_HAS_BUILT_IN_ENDSTOP = "has_built_in_endstop"
CONF_MANUAL_CONTROL = "manual_control" CONF_MANUAL_CONTROL = "manual_control"
CONFIG_SCHEMA = cover.COVER_SCHEMA.extend( CONFIG_SCHEMA = (
{ cover.cover_schema(TimeBasedCover)
cv.GenerateID(): cv.declare_id(TimeBasedCover), .extend(
cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True), {
cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True), cv.Required(CONF_STOP_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_OPEN_ACTION): automation.validate_automation(single=True),
cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True), cv.Required(CONF_OPEN_DURATION): cv.positive_time_period_milliseconds,
cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds, cv.Required(CONF_CLOSE_ACTION): automation.validate_automation(single=True),
cv.Optional(CONF_HAS_BUILT_IN_ENDSTOP, default=False): cv.boolean, cv.Required(CONF_CLOSE_DURATION): cv.positive_time_period_milliseconds,
cv.Optional(CONF_MANUAL_CONTROL, default=False): cv.boolean, cv.Optional(CONF_HAS_BUILT_IN_ENDSTOP, default=False): cv.boolean,
cv.Optional(CONF_ASSUMED_STATE, default=True): cv.boolean, cv.Optional(CONF_MANUAL_CONTROL, default=False): cv.boolean,
} cv.Optional(CONF_ASSUMED_STATE, default=True): cv.boolean,
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
await automation.build_automation( await automation.build_automation(
var.get_stop_trigger(), [], config[CONF_STOP_ACTION] var.get_stop_trigger(), [], config[CONF_STOP_ACTION]

View File

@ -1,17 +1,17 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import cover, uart from esphome.components import cover, uart
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_CLOSE_DURATION, CONF_ID, CONF_OPEN_DURATION from esphome.const import CONF_CLOSE_DURATION, CONF_OPEN_DURATION
tormatic_ns = cg.esphome_ns.namespace("tormatic") tormatic_ns = cg.esphome_ns.namespace("tormatic")
Tormatic = tormatic_ns.class_("Tormatic", cover.Cover, cg.PollingComponent) Tormatic = tormatic_ns.class_("Tormatic", cover.Cover, cg.PollingComponent)
CONFIG_SCHEMA = ( CONFIG_SCHEMA = (
cover.COVER_SCHEMA.extend(uart.UART_DEVICE_SCHEMA) cover.cover_schema(Tormatic)
.extend(uart.UART_DEVICE_SCHEMA)
.extend(cv.polling_component_schema("300ms")) .extend(cv.polling_component_schema("300ms"))
.extend( .extend(
{ {
cv.GenerateID(): cv.declare_id(Tormatic),
cv.Optional( cv.Optional(
CONF_OPEN_DURATION, default="15s" CONF_OPEN_DURATION, default="15s"
): cv.positive_time_period_milliseconds, ): cv.positive_time_period_milliseconds,
@ -34,9 +34,8 @@ FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
await uart.register_uart_device(var, config) await uart.register_uart_device(var, config)
cg.add(var.set_close_duration(config[CONF_CLOSE_DURATION])) cg.add(var.set_close_duration(config[CONF_CLOSE_DURATION]))

View File

@ -1,12 +1,7 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import cover from esphome.components import cover
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import ( from esphome.const import CONF_MAX_VALUE, CONF_MIN_VALUE, CONF_RESTORE_MODE
CONF_MAX_VALUE,
CONF_MIN_VALUE,
CONF_OUTPUT_ID,
CONF_RESTORE_MODE,
)
from .. import CONF_TUYA_ID, Tuya, tuya_ns from .. import CONF_TUYA_ID, Tuya, tuya_ns
@ -38,9 +33,9 @@ def validate_range(config):
CONFIG_SCHEMA = cv.All( CONFIG_SCHEMA = cv.All(
cover.COVER_SCHEMA.extend( cover.cover_schema(TuyaCover)
.extend(
{ {
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(TuyaCover),
cv.GenerateID(CONF_TUYA_ID): cv.use_id(Tuya), cv.GenerateID(CONF_TUYA_ID): cv.use_id(Tuya),
cv.Optional(CONF_CONTROL_DATAPOINT): cv.uint8_t, cv.Optional(CONF_CONTROL_DATAPOINT): cv.uint8_t,
cv.Optional(CONF_DIRECTION_DATAPOINT): cv.uint8_t, cv.Optional(CONF_DIRECTION_DATAPOINT): cv.uint8_t,
@ -54,15 +49,15 @@ CONFIG_SCHEMA = cv.All(
RESTORE_MODES, upper=True RESTORE_MODES, upper=True
), ),
}, },
).extend(cv.COMPONENT_SCHEMA), )
.extend(cv.COMPONENT_SCHEMA),
validate_range, validate_range,
) )
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_OUTPUT_ID]) var = await cover.new_cover(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await cover.register_cover(var, config)
if CONF_CONTROL_DATAPOINT in config: if CONF_CONTROL_DATAPOINT in config:
cg.add(var.set_control_id(config[CONF_CONTROL_DATAPOINT])) cg.add(var.set_control_id(config[CONF_CONTROL_DATAPOINT]))