mirror of
https://github.com/esphome/esphome.git
synced 2025-09-09 23:02:23 +01:00
refactor: update DynamicLampComponent to support new save modes and integrate with light output
This commit is contained in:
@@ -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)
|
||||
|
@@ -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++) {
|
||||
|
@@ -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 {
|
||||
|
@@ -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])
|
||||
|
@@ -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)) {
|
||||
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
|
||||
|
@@ -7,12 +7,17 @@
|
||||
namespace esphome {
|
||||
namespace dynamic_lamp {
|
||||
|
||||
class DynamicLamp : public output::FloatOutput, public Parented<DynamicLampComponent> {
|
||||
class DynamicLamp : public light::LightOutput, public Parented<DynamicLampComponent> {
|
||||
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_;
|
||||
|
Reference in New Issue
Block a user