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

refactor: update DynamicLamp to use FloatOutput and adjust related methods for improved functionality

This commit is contained in:
Oliver Kleinecke
2025-02-15 21:17:08 +01:00
parent c37ffe3f58
commit 8c28ff3af4
3 changed files with 15 additions and 21 deletions

View File

@@ -1,14 +1,14 @@
import esphome.codegen as cg import esphome.codegen as cg
from esphome.components import light from esphome.components import output
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome.const import CONF_CHANNEL, CONF_OUTPUT_ID from esphome.const import CONF_CHANNEL, CONF_ID
from .. import CONF_DYNAMIC_LAMP_ID, DynamicLampComponent, dynamic_lamp_ns from .. import CONF_DYNAMIC_LAMP_ID, DynamicLampComponent, dynamic_lamp_ns
DEPENDENCIES = ["dynamic_lamp"] DEPENDENCIES = ["dynamic_lamp"]
DynamicLamp = dynamic_lamp_ns.class_( DynamicLamp = dynamic_lamp_ns.class_(
"DynamicLamp", light.LightOutput, cg.Parented.template(DynamicLampComponent) "DynamicLamp", output.FloatOutput, cg.Parented.template(DynamicLampComponent)
) )
DynamicLampIdx = dynamic_lamp_ns.enum("DynamicLampIdx") DynamicLampIdx = dynamic_lamp_ns.enum("DynamicLampIdx")
@@ -31,9 +31,9 @@ CHANNEL_OPTIONS = {
"P": DynamicLampIdx.LAMP_16, "P": DynamicLampIdx.LAMP_16,
} }
CONFIG_SCHEMA = light.BRIGHTNESS_ONLY_LIGHT_SCHEMA.extend( CONFIG_SCHEMA = output.FLOAT_OUTPUT_SCHEMA.extend(
{ {
cv.Required(CONF_OUTPUT_ID): cv.declare_id(DynamicLamp), cv.Required(CONF_ID): cv.declare_id(DynamicLamp),
cv.GenerateID(CONF_DYNAMIC_LAMP_ID): cv.use_id(DynamicLampComponent), cv.GenerateID(CONF_DYNAMIC_LAMP_ID): cv.use_id(DynamicLampComponent),
cv.Required(CONF_CHANNEL): cv.enum(CHANNEL_OPTIONS, upper=True), cv.Required(CONF_CHANNEL): cv.enum(CHANNEL_OPTIONS, upper=True),
} }
@@ -43,9 +43,9 @@ CONFIG_SCHEMA = light.BRIGHTNESS_ONLY_LIGHT_SCHEMA.extend(
async def to_code(config): async def to_code(config):
parent = await cg.get_variable(config[CONF_DYNAMIC_LAMP_ID]) parent = await cg.get_variable(config[CONF_DYNAMIC_LAMP_ID])
var = cg.new_Pvariable( var = cg.new_Pvariable(
config[CONF_OUTPUT_ID], config[CONF_ID],
parent, parent,
config[CONF_CHANNEL], config[CONF_CHANNEL],
) )
await light.register_light(var, config) await output.register_output(var, config)
await cg.register_parented(var, config[CONF_DYNAMIC_LAMP_ID]) await cg.register_parented(var, config[CONF_DYNAMIC_LAMP_ID])

View File

@@ -3,13 +3,12 @@
namespace esphome { namespace esphome {
namespace dynamic_lamp { namespace dynamic_lamp {
void DynamicLamp::write_state(light::LightState *state) override { void DynamicLamp::write_state(float state) {
float bright; if (this->available_outputs_[this->lamp_].set_level(state))
state->current_values_as_brightness(&bright); {
if (this->parent_->write_state_(this->lamp_, bright)) { this->state_ = state;
this->state_ = state;
}
} }
}
} // namespace dynamic_lamp } // namespace dynamic_lamp
} // namespace esphome } // namespace esphome

View File

@@ -5,17 +5,12 @@
namespace esphome { namespace esphome {
namespace dynamic_lamp { namespace dynamic_lamp {
class DynamicLamp : public light::LightOutput, public Parented<DynamicLampComponent> { class DynamicLamp : public output::FloatOutput, public Parented<DynamicLampComponent> {
public: public:
DynamicLamp(DynamicLampComponent *parent, DynamicLampIdx lamp) : parent_(parent), lamp_(lamp) {} DynamicLamp(DynamicLampComponent *parent, DynamicLamp lamp) : parent_(parent), lamp_(lamp) {}
light::LightTraits get_traits() override {
auto traits = light::LightTraits();
traits.set_supported_color_modes({light::ColorMode::BRIGHTNESS});
return traits;
}
protected: protected:
void write_state(light::LightState *state) override; void write_state(float state) override;
DynamicLampComponent *parent_; DynamicLampComponent *parent_;
DynamicLampIdx lamp_; DynamicLampIdx lamp_;
float state_; float state_;