diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.cpp b/esphome/components/dynamic_lamp/dynamic_lamp.cpp index fd77a9ed6d..859b3e3dd9 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.cpp +++ b/esphome/components/dynamic_lamp/dynamic_lamp.cpp @@ -24,10 +24,12 @@ void DynamicLamp::setup() { } } // for testing only - this->add_lamp_output_(0, this->available_outputs_[0]); - this->add_lamp_output_(0, this->available_outputs_[1]); - this->add_lamp_output_(0, this->available_outputs_[2]); - this->add_lamp_output_(0, this->available_outputs_[3]); + uint8_t first_lamp; + first_lamp = this->add_lamp(); + this->add_lamp_output_(first_lamp, this->available_outputs_[0]); + this->add_lamp_output_(first_lamp, this->available_outputs_[1]); + this->add_lamp_output_(first_lamp, this->available_outputs_[2]); + this->add_lamp_output_(first_lamp, this->available_outputs_[3]); } void DynamicLamp::loop() { @@ -36,8 +38,8 @@ void DynamicLamp::loop() { if (this->active_lamps_[i].active) { uint8_t j = 0; for (j = 0; j < 16; j++) { - if (this->active_lamps_[i].used_outputs[j].active) { - if (this->active_lamps_[i].used_outputs[j].update_level) { + if (this->active_lamps_[i].used_outputs[j]) { + if (this->available_outputs_[j].update_level) { // Update level switch (this->active_lamps_[i].used_outputs[j].mode) { case MODE_EQUAL: @@ -105,6 +107,18 @@ void DynamicLamp::set_available_outputs(std::string output_list) { } } +uint8_t DynamicLamp::add_lamp() { + uint8_t i = 0; + while (i < 16) { + if (!this->active_lamps_[i].active) { + this->active_lamps_[i].active = true; + this->lamp_count_++; + return i; + } + i++; + } +} + void DynamicLamp::add_lamp_output_(uint8_t lamp_number, LinkedOutput output) { this->active_lamps_[lamp_number].used_outputs[output.output_index] = true; } diff --git a/esphome/components/dynamic_lamp/dynamic_lamp.h b/esphome/components/dynamic_lamp/dynamic_lamp.h index 0d750b9c06..ced2a8e387 100644 --- a/esphome/components/dynamic_lamp/dynamic_lamp.h +++ b/esphome/components/dynamic_lamp/dynamic_lamp.h @@ -41,6 +41,7 @@ class DynamicLamp : public Component { void set_save_mode(uint8_t save_mode); protected: + uint8_t add_lamp(); bool[16] get_lamp_outputs_(uint8_t lamp_number); void add_lamp_output_(uint8_t lamp_number, LinkedOutput output); void restore_lamp_values_(uint8_t lamp_number); @@ -52,6 +53,7 @@ class DynamicLamp : public Component { CombinedLamp active_lamps_[16]; LinkedOutput available_outputs_[16]; uint8_t save_mode_; + uint8_t lamp_count_ = 0; };