diff --git a/esphome/components/dynamic_lamp/__init__.py b/esphome/components/dynamic_lamp/__init__.py index db65801250..7197c8cd19 100644 --- a/esphome/components/dynamic_lamp/__init__.py +++ b/esphome/components/dynamic_lamp/__init__.py @@ -18,5 +18,6 @@ CONFIG_SCHEMA = cv.Schema({ async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) - cg.add(var.set_available_outputs(config[CONF_AVAILABLE_OUTPUTS])) + for outputPointer in config.get(CONF_AVAILABLE_OUTPUTS): + cg.add(var.add_available_output(outputPointer)) cg.add(var.set_save_mode(config[CONF_SAVE_MODE])) diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.cpp b/esphome/components/dynamic_lamp/dynamic_lamp.cpp index 3cd38243a4..411ae0fb94 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.cpp +++ b/esphome/components/dynamic_lamp/dynamic_lamp.cpp @@ -93,38 +93,17 @@ void DynamicLamp::set_save_mode(uint8_t save_mode) { this->save_mode_ = save_mode; } -void DynamicLamp::set_available_outputs(std::list<*FloatOutput> output_list) { +void DynamicLamp::add_available_output(FloatOutput &output) { uint8_t counter = 0; - /* - std::vector v; - - char * token = strtok (&output_list[0],","); - while (token != NULL) - { - v.push_back(token); - token = strtok (NULL, ","); - } - for ( std::string s : v ) - { - this->available_outputs_[counter] = LinkedOutput{ - true, - static_cast(this->trim_(s)), - counter, - 0, 0, 1.0, false - }; - counter++; - } - */ - std::list<*FloatOutput>::iterator output_it; - for (output_it = data.begin(); output_it != data.end(); ++output_it){ - this->available_outputs_[counter] = LinkedOutput{ - true, - static_cast(this->trim_(output_it.id)), - counter, - 0, 0, 1.0, false - }; + while (this->available_outputs_[counter].active) { counter++; } + this->available_outputs_[counter] = LinkedOutput{ + true, + output, + counter, + 0, 0, 1.0, false + counter++; } uint8_t DynamicLamp::add_lamp() { diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.h b/esphome/components/dynamic_lamp/dynamic_lamp.h index a82c7414d1..496a56b3ce 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.h +++ b/esphome/components/dynamic_lamp/dynamic_lamp.h @@ -20,7 +20,7 @@ enum LinkedOutputModeIdx : uint8_t { struct LinkedOutput { bool active = false; - std::string output_id; + FloatOutput &output; uint8_t output_index; uint8_t mode = 0; optional min_value; @@ -38,7 +38,7 @@ class DynamicLamp : public Component { void setup() override; void loop() override; void dump_config() override; - void set_available_outputs(std::list<*FloatOutput> output_list); + void add_available_output(FloatOutput &output); void set_save_mode(uint8_t save_mode); protected: