[fan] Update components to use `fan_schema(...)` (#8786)

This commit is contained in:
Jesse Hills 2025-05-14 13:30:11 +12:00 committed by GitHub
parent a835ab48bc
commit 42c355e6d7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 76 additions and 81 deletions

View File

@ -1,31 +1,22 @@
import logging
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import fan from esphome.components import fan
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_ID
from .. import BEDJET_CLIENT_SCHEMA, bedjet_ns, register_bedjet_child from .. import BEDJET_CLIENT_SCHEMA, bedjet_ns, register_bedjet_child
_LOGGER = logging.getLogger(__name__)
CODEOWNERS = ["@jhansche"] CODEOWNERS = ["@jhansche"]
DEPENDENCIES = ["bedjet"] DEPENDENCIES = ["bedjet"]
BedJetFan = bedjet_ns.class_("BedJetFan", fan.Fan, cg.PollingComponent) BedJetFan = bedjet_ns.class_("BedJetFan", fan.Fan, cg.PollingComponent)
CONFIG_SCHEMA = ( CONFIG_SCHEMA = (
fan.FAN_SCHEMA.extend( fan.fan_schema(BedJetFan)
{
cv.GenerateID(): cv.declare_id(BedJetFan),
}
)
.extend(cv.polling_component_schema("60s")) .extend(cv.polling_component_schema("60s"))
.extend(BEDJET_CLIENT_SCHEMA) .extend(BEDJET_CLIENT_SCHEMA)
) )
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = await fan.new_fan(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await fan.register_fan(var, config)
await register_bedjet_child(var, config) await register_bedjet_child(var, config)

View File

@ -1,31 +1,28 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import fan, output from esphome.components import fan, output
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import ( from esphome.const import CONF_DIRECTION_OUTPUT, CONF_OSCILLATION_OUTPUT, CONF_OUTPUT
CONF_DIRECTION_OUTPUT,
CONF_OSCILLATION_OUTPUT,
CONF_OUTPUT,
CONF_OUTPUT_ID,
)
from .. import binary_ns from .. import binary_ns
BinaryFan = binary_ns.class_("BinaryFan", fan.Fan, cg.Component) BinaryFan = binary_ns.class_("BinaryFan", fan.Fan, cg.Component)
CONFIG_SCHEMA = fan.FAN_SCHEMA.extend( CONFIG_SCHEMA = (
{ fan.fan_schema(BinaryFan)
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(BinaryFan), .extend(
cv.Required(CONF_OUTPUT): cv.use_id(output.BinaryOutput), {
cv.Optional(CONF_DIRECTION_OUTPUT): cv.use_id(output.BinaryOutput), cv.Required(CONF_OUTPUT): cv.use_id(output.BinaryOutput),
cv.Optional(CONF_OSCILLATION_OUTPUT): cv.use_id(output.BinaryOutput), cv.Optional(CONF_DIRECTION_OUTPUT): cv.use_id(output.BinaryOutput),
} cv.Optional(CONF_OSCILLATION_OUTPUT): cv.use_id(output.BinaryOutput),
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_OUTPUT_ID]) var = await fan.new_fan(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await fan.register_fan(var, config)
output_ = await cg.get_variable(config[CONF_OUTPUT]) output_ = await cg.get_variable(config[CONF_OUTPUT])
cg.add(var.set_output(output_)) cg.add(var.set_output(output_))

View File

@ -1,7 +1,7 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import fan from esphome.components import fan
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_ENTITY_CATEGORY, CONF_ICON, CONF_ID, CONF_SOURCE_ID from esphome.const import CONF_ENTITY_CATEGORY, CONF_ICON, CONF_SOURCE_ID
from esphome.core.entity_helpers import inherit_property_from from esphome.core.entity_helpers import inherit_property_from
from .. import copy_ns from .. import copy_ns
@ -9,12 +9,15 @@ from .. import copy_ns
CopyFan = copy_ns.class_("CopyFan", fan.Fan, cg.Component) CopyFan = copy_ns.class_("CopyFan", fan.Fan, cg.Component)
CONFIG_SCHEMA = fan.FAN_SCHEMA.extend( CONFIG_SCHEMA = (
{ fan.fan_schema(CopyFan)
cv.GenerateID(): cv.declare_id(CopyFan), .extend(
cv.Required(CONF_SOURCE_ID): cv.use_id(fan.Fan), {
} cv.Required(CONF_SOURCE_ID): cv.use_id(fan.Fan),
).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),
@ -23,8 +26,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 fan.new_fan(config)
await fan.register_fan(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

@ -30,25 +30,28 @@ DECAY_MODE_OPTIONS = {
# Actions # Actions
BrakeAction = hbridge_ns.class_("BrakeAction", automation.Action) BrakeAction = hbridge_ns.class_("BrakeAction", automation.Action)
CONFIG_SCHEMA = fan.FAN_SCHEMA.extend( CONFIG_SCHEMA = (
{ fan.fan_schema(HBridgeFan)
cv.GenerateID(CONF_ID): cv.declare_id(HBridgeFan), .extend(
cv.Required(CONF_PIN_A): cv.use_id(output.FloatOutput), {
cv.Required(CONF_PIN_B): cv.use_id(output.FloatOutput), cv.Required(CONF_PIN_A): cv.use_id(output.FloatOutput),
cv.Optional(CONF_DECAY_MODE, default="SLOW"): cv.enum( cv.Required(CONF_PIN_B): cv.use_id(output.FloatOutput),
DECAY_MODE_OPTIONS, upper=True cv.Optional(CONF_DECAY_MODE, default="SLOW"): cv.enum(
), DECAY_MODE_OPTIONS, upper=True
cv.Optional(CONF_SPEED_COUNT, default=100): cv.int_range(min=1), ),
cv.Optional(CONF_ENABLE_PIN): cv.use_id(output.FloatOutput), cv.Optional(CONF_SPEED_COUNT, default=100): cv.int_range(min=1),
cv.Optional(CONF_PRESET_MODES): validate_preset_modes, cv.Optional(CONF_ENABLE_PIN): cv.use_id(output.FloatOutput),
} cv.Optional(CONF_PRESET_MODES): validate_preset_modes,
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
@automation.register_action( @automation.register_action(
"fan.hbridge.brake", "fan.hbridge.brake",
BrakeAction, BrakeAction,
maybe_simple_id({cv.Required(CONF_ID): cv.use_id(HBridgeFan)}), maybe_simple_id({cv.GenerateID(): cv.use_id(HBridgeFan)}),
) )
async def fan_hbridge_brake_to_code(config, action_id, template_arg, args): async def fan_hbridge_brake_to_code(config, action_id, template_arg, args):
paren = await cg.get_variable(config[CONF_ID]) paren = await cg.get_variable(config[CONF_ID])
@ -56,13 +59,12 @@ async def fan_hbridge_brake_to_code(config, action_id, template_arg, args):
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable( var = await fan.new_fan(
config[CONF_ID], config,
config[CONF_SPEED_COUNT], config[CONF_SPEED_COUNT],
config[CONF_DECAY_MODE], config[CONF_DECAY_MODE],
) )
await cg.register_component(var, config) await cg.register_component(var, config)
await fan.register_fan(var, config)
pin_a_ = await cg.get_variable(config[CONF_PIN_A]) pin_a_ = await cg.get_variable(config[CONF_PIN_A])
cg.add(var.set_pin_a(pin_a_)) cg.add(var.set_pin_a(pin_a_))
pin_b_ = await cg.get_variable(config[CONF_PIN_B]) pin_b_ = await cg.get_variable(config[CONF_PIN_B])

View File

@ -6,7 +6,6 @@ from esphome.const import (
CONF_DIRECTION_OUTPUT, CONF_DIRECTION_OUTPUT,
CONF_OSCILLATION_OUTPUT, CONF_OSCILLATION_OUTPUT,
CONF_OUTPUT, CONF_OUTPUT,
CONF_OUTPUT_ID,
CONF_PRESET_MODES, CONF_PRESET_MODES,
CONF_SPEED, CONF_SPEED,
CONF_SPEED_COUNT, CONF_SPEED_COUNT,
@ -16,25 +15,27 @@ from .. import speed_ns
SpeedFan = speed_ns.class_("SpeedFan", cg.Component, fan.Fan) SpeedFan = speed_ns.class_("SpeedFan", cg.Component, fan.Fan)
CONFIG_SCHEMA = fan.FAN_SCHEMA.extend( CONFIG_SCHEMA = (
{ fan.fan_schema(SpeedFan)
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(SpeedFan), .extend(
cv.Required(CONF_OUTPUT): cv.use_id(output.FloatOutput), {
cv.Optional(CONF_OSCILLATION_OUTPUT): cv.use_id(output.BinaryOutput), cv.Required(CONF_OUTPUT): cv.use_id(output.FloatOutput),
cv.Optional(CONF_DIRECTION_OUTPUT): cv.use_id(output.BinaryOutput), cv.Optional(CONF_OSCILLATION_OUTPUT): cv.use_id(output.BinaryOutput),
cv.Optional(CONF_SPEED): cv.invalid( cv.Optional(CONF_DIRECTION_OUTPUT): cv.use_id(output.BinaryOutput),
"Configuring individual speeds is deprecated." cv.Optional(CONF_SPEED): cv.invalid(
), "Configuring individual speeds is deprecated."
cv.Optional(CONF_SPEED_COUNT, default=100): cv.int_range(min=1), ),
cv.Optional(CONF_PRESET_MODES): validate_preset_modes, cv.Optional(CONF_SPEED_COUNT, default=100): cv.int_range(min=1),
} cv.Optional(CONF_PRESET_MODES): validate_preset_modes,
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_OUTPUT_ID], config[CONF_SPEED_COUNT]) var = await fan.new_fan(config, config[CONF_SPEED_COUNT])
await cg.register_component(var, config) await cg.register_component(var, config)
await fan.register_fan(var, config)
output_ = await cg.get_variable(config[CONF_OUTPUT]) output_ = await cg.get_variable(config[CONF_OUTPUT])
cg.add(var.set_output(output_)) cg.add(var.set_output(output_))

View File

@ -2,7 +2,7 @@ import esphome.codegen as cg
from esphome.components import fan from esphome.components import fan
from esphome.components.fan import validate_preset_modes from esphome.components.fan import validate_preset_modes
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_OUTPUT_ID, CONF_PRESET_MODES, CONF_SPEED_COUNT from esphome.const import CONF_PRESET_MODES, CONF_SPEED_COUNT
from .. import template_ns from .. import template_ns
@ -13,21 +13,23 @@ TemplateFan = template_ns.class_("TemplateFan", cg.Component, fan.Fan)
CONF_HAS_DIRECTION = "has_direction" CONF_HAS_DIRECTION = "has_direction"
CONF_HAS_OSCILLATING = "has_oscillating" CONF_HAS_OSCILLATING = "has_oscillating"
CONFIG_SCHEMA = fan.FAN_SCHEMA.extend( CONFIG_SCHEMA = (
{ fan.fan_schema(TemplateFan)
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(TemplateFan), .extend(
cv.Optional(CONF_HAS_DIRECTION, default=False): cv.boolean, {
cv.Optional(CONF_HAS_OSCILLATING, default=False): cv.boolean, cv.Optional(CONF_HAS_DIRECTION, default=False): cv.boolean,
cv.Optional(CONF_SPEED_COUNT): cv.int_range(min=1), cv.Optional(CONF_HAS_OSCILLATING, default=False): cv.boolean,
cv.Optional(CONF_PRESET_MODES): validate_preset_modes, cv.Optional(CONF_SPEED_COUNT): cv.int_range(min=1),
} cv.Optional(CONF_PRESET_MODES): validate_preset_modes,
).extend(cv.COMPONENT_SCHEMA) }
)
.extend(cv.COMPONENT_SCHEMA)
)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_OUTPUT_ID]) var = await fan.new_fan(config)
await cg.register_component(var, config) await cg.register_component(var, config)
await fan.register_fan(var, config)
cg.add(var.set_has_direction(config[CONF_HAS_DIRECTION])) cg.add(var.set_has_direction(config[CONF_HAS_DIRECTION]))
cg.add(var.set_has_oscillating(config[CONF_HAS_OSCILLATING])) cg.add(var.set_has_oscillating(config[CONF_HAS_OSCILLATING]))