diff --git a/esphome/components/dynamic_lamp/__init__.py b/esphome/components/dynamic_lamp/__init__.py index d7423c752c..b7ba713bc5 100644 --- a/esphome/components/dynamic_lamp/__init__.py +++ b/esphome/components/dynamic_lamp/__init__.py @@ -10,10 +10,11 @@ dynamic_lamp_ns = cg.esphome_ns.namespace('dynamic_lamp') DynamicLampComponent = dynamic_lamp_ns.class_('DynamicLampComponent', cg.Component) CONF_DYNAMIC_LAMP_ID = "dynamic_lamp_id" + CONF_SAVE_MODE = 'save_mode' CONF_AVAILABLE_OUTPUTS = 'available_outputs' CONFIG_SCHEMA = cv.Schema({ - cv.GenerateID(): cv.declare_id(DynamicLampComponent), + cv.GenerateID(CONF_ID): cv.declare_id(DynamicLampComponent), cv.Required(CONF_AVAILABLE_OUTPUTS): [cv.use_id(output.FloatOutput)], cv.Optional(CONF_SAVE_MODE, default=0): cv.int_range(0, 1), }).extend(cv.COMPONENT_SCHEMA) diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.cpp b/esphome/components/dynamic_lamp/dynamic_lamp.cpp index bbaebe8a26..3ea0dd0db8 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.cpp +++ b/esphome/components/dynamic_lamp/dynamic_lamp.cpp @@ -97,11 +97,14 @@ void DynamicLampComponent::dump_config() { case SAVE_MODE_NONE: ESP_LOGCONFIG(TAG, "Save mode set to NONE"); break; + case SAVE_MODE_LOCAL: + ESP_LOGCONFIG(TAG, "Save mode set to LOCAL"); + break; case SAVE_MODE_FRAM: ESP_LOGCONFIG(TAG, "Save mode set to FRAM"); break; default: - ESP_LOGCONFIG(TAG, "Currently only NONE(0) && FRAM(1) save modes supported, ignoring value %" PRIu8 " and defaulting to NONE!", this->save_mode_); + ESP_LOGCONFIG(TAG, "Currently only NONE(0), LOCAL(1) & FRAM(2) save modes supported, ignoring value %" PRIu8 " and defaulting to NONE!", this->save_mode_); this->save_mode_ = 0; } for (uint8_t i = 0; i < 16; i++) { diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.h b/esphome/components/dynamic_lamp/dynamic_lamp.h index 0d6567b340..151d30f5f1 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.h +++ b/esphome/components/dynamic_lamp/dynamic_lamp.h @@ -8,7 +8,8 @@ namespace dynamic_lamp { enum SupportedSaveModes : uint8_t { SAVE_MODE_NONE = 0, - SAVE_MODE_FRAM = 1 + SAVE_MODE_LOCAL = 1, + SAVE_MODE_FRAM = 2 }; enum LinkedOutputModeIdx : uint8_t { diff --git a/esphome/components/dynamic_lamp/output/__init__.py b/esphome/components/dynamic_lamp/output/__init__.py index 36987b5c44..eade6873c4 100644 --- a/esphome/components/dynamic_lamp/output/__init__.py +++ b/esphome/components/dynamic_lamp/output/__init__.py @@ -1,5 +1,5 @@ import esphome.codegen as cg -from esphome.components import output +from esphome.components import light import esphome.config_validation as cv from esphome.const import CONF_CHANNEL, CONF_ID @@ -8,7 +8,7 @@ from .. import CONF_DYNAMIC_LAMP_ID, DynamicLampComponent, dynamic_lamp_ns DEPENDENCIES = ["dynamic_lamp"] DynamicLamp = dynamic_lamp_ns.class_( - "DynamicLamp", output.FloatOutput, cg.Parented.template(DynamicLampComponent) + "DynamicLamp", light.LightOutput, cg.Parented.template(DynamicLampComponent) ) DynamicLampIdx = dynamic_lamp_ns.enum("DynamicLampIdx") @@ -31,7 +31,7 @@ CHANNEL_OPTIONS = { "P": DynamicLampIdx.LAMP_16, } -CONFIG_SCHEMA = output.FLOAT_OUTPUT_SCHEMA.extend( +CONFIG_SCHEMA = light.BRIGHTNESS_ONLY_LIGHT_SCHEMA.extend( { cv.Required(CONF_ID): cv.declare_id(DynamicLamp), cv.GenerateID(CONF_DYNAMIC_LAMP_ID): cv.use_id(DynamicLampComponent), @@ -47,5 +47,5 @@ async def to_code(config): parent, config[CONF_CHANNEL], ) - await output.register_output(var, config) + await light.register_light(var, config) await cg.register_parented(var, config[CONF_DYNAMIC_LAMP_ID]) diff --git a/esphome/components/dynamic_lamp/output/dynamic_lamp_output.cpp b/esphome/components/dynamic_lamp/output/dynamic_lamp_output.cpp index 0d6684b440..9d626c5349 100644 --- a/esphome/components/dynamic_lamp/output/dynamic_lamp_output.cpp +++ b/esphome/components/dynamic_lamp/output/dynamic_lamp_output.cpp @@ -7,11 +7,13 @@ namespace dynamic_lamp { static const char *const TAG = "dynamic_lamp.output"; -void DynamicLamp::write_state(float state) { - if (this->parent_->write_state_(this->lamp_, state)) { - this->state_ = state; +void DynamicLamp::write_state(light::LightState *state) override { + float bright; + state->current_values_as_brightness(&bright); + if (this->parent_->write_state_(this->lamp_, bright)) { + this->state_ = state; + } } -} } // namespace dynamic_lamp } // namespace esphome diff --git a/esphome/components/dynamic_lamp/output/dynamic_lamp_output.h b/esphome/components/dynamic_lamp/output/dynamic_lamp_output.h index ef82f7b05e..04a186a9e6 100644 --- a/esphome/components/dynamic_lamp/output/dynamic_lamp_output.h +++ b/esphome/components/dynamic_lamp/output/dynamic_lamp_output.h @@ -7,12 +7,17 @@ namespace esphome { namespace dynamic_lamp { -class DynamicLamp : public output::FloatOutput, public Parented { +class DynamicLamp : public light::LightOutput, public Parented { public: DynamicLamp(DynamicLampComponent *parent, DynamicLampIdx 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: - void write_state(float state) override; + void write_state(light::LightState *state) override; DynamicLampComponent *parent_; DynamicLampIdx lamp_; float state_;