mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-24 14:48:29 +02:00
7708b81ef5
* Add fan speed percentage support to the API * Add float fan speed percentage * Add percentage support to automation and configuration * Update Tuya fan * Fix pylint warning * Update API to use speed levels instead of percentage * Use speed levels * Fix type warnings * MQTT component now converts between speed levels and enums * Webserver now supports speed_level * Update prometheus * Remove low/medium/high settings from speed fan * Remove unused enum * Configurable speed levels for speed fan * Remove unused import * Rename speed_level->speed and speed_levels->speed_count * Rename supported_speed_levels -> supported_speed_count in API and FanTraits Field id stays the same in the protocol, so the change is not breaking for aioesphome.
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
import esphome.codegen as cg
|
|
import esphome.config_validation as cv
|
|
from esphome.components import fan, output
|
|
from esphome.const import (
|
|
CONF_OSCILLATION_OUTPUT,
|
|
CONF_OUTPUT,
|
|
CONF_DIRECTION_OUTPUT,
|
|
CONF_OUTPUT_ID,
|
|
CONF_SPEED,
|
|
CONF_SPEED_COUNT,
|
|
)
|
|
from .. import speed_ns
|
|
|
|
SpeedFan = speed_ns.class_("SpeedFan", cg.Component)
|
|
|
|
CONFIG_SCHEMA = fan.FAN_SCHEMA.extend(
|
|
{
|
|
cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(SpeedFan),
|
|
cv.Required(CONF_OUTPUT): cv.use_id(output.FloatOutput),
|
|
cv.Optional(CONF_OSCILLATION_OUTPUT): cv.use_id(output.BinaryOutput),
|
|
cv.Optional(CONF_DIRECTION_OUTPUT): cv.use_id(output.BinaryOutput),
|
|
cv.Optional(CONF_SPEED): cv.invalid(
|
|
"Configuring individual speeds is deprecated."
|
|
),
|
|
cv.Optional(CONF_SPEED_COUNT, default=100): cv.int_range(min=1),
|
|
}
|
|
).extend(cv.COMPONENT_SCHEMA)
|
|
|
|
|
|
def to_code(config):
|
|
output_ = yield cg.get_variable(config[CONF_OUTPUT])
|
|
state = yield fan.create_fan_state(config)
|
|
var = cg.new_Pvariable(
|
|
config[CONF_OUTPUT_ID], state, output_, config[CONF_SPEED_COUNT]
|
|
)
|
|
yield cg.register_component(var, config)
|
|
|
|
if CONF_OSCILLATION_OUTPUT in config:
|
|
oscillation_output = yield cg.get_variable(config[CONF_OSCILLATION_OUTPUT])
|
|
cg.add(var.set_oscillating(oscillation_output))
|
|
|
|
if CONF_DIRECTION_OUTPUT in config:
|
|
direction_output = yield cg.get_variable(config[CONF_DIRECTION_OUTPUT])
|
|
cg.add(var.set_direction(direction_output))
|