1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-06 13:22:19 +01:00

fix: improve state handling in DynamicLampComponent loop for output value constraints

This commit is contained in:
Oliver Kleinecke
2025-02-15 16:31:56 +01:00
parent ca04ade0ca
commit 7d306cb5c3

View File

@@ -49,34 +49,31 @@ void DynamicLampComponent::loop() {
for (j = 0; j < 16; j++) { for (j = 0; j < 16; j++) {
if (this->active_lamps_[i].used_outputs[j]) { if (this->active_lamps_[i].used_outputs[j]) {
// Update level // Update level
float new_state;
new_state = this->active_lamps_[i].state_;
switch (this->available_outputs_[j].mode) { switch (this->available_outputs_[j].mode) {
float new_state = this->active_lamps_[i].state_;
case MODE_EQUAL: case MODE_EQUAL:
// Equal if (this->available_outputs_[j].min_value && new_state < *this->available_outputs_[j].min_value) {
if (new_state < this->available_outputs_[j].min_value) { new_state = *this->available_outputs_[j].min_value;
new_state = this->available_outputs_[j].min_value;
} }
else if (new_state > this->available_outputs_[j].max_value) { else if (this->available_outputs_[j].max_value && new_state > *this->available_outputs_[j].max_value) {
new_state = this->available_outputs_[j].max_value; new_state = *this->available_outputs_[j].max_value;
} }
break; break;
case MODE_STATIC: case MODE_STATIC:
// Static new_state = this->available_outputs_[j].mode_value;
new_state = this->available_outputs_[j].mode_value);
break; break;
case MODE_PERCENTAGE: case MODE_PERCENTAGE:
// Percent
new_state = this->active_lamps_[i].state * this->available_outputs_[j].mode_value; new_state = this->active_lamps_[i].state * this->available_outputs_[j].mode_value;
if (new_state < this->available_outputs_[j].min_value) { if (this->available_outputs_[j].min_value && new_state < *this->available_outputs_[j].min_value) {
new_state = this->available_outputs_[j].min_value; new_state = *this->available_outputs_[j].min_value;
} }
else if (new_state > this->available_outputs_[j].max_value) { else if (this->available_outputs_[j].max_value && new_state > *this->available_outputs_[j].max_value) {
new_state = this->available_outputs_[j].max_value; new_state = *this->available_outputs_[j].max_value;
} }
break; break;
case MODE_FUNCTION: case MODE_FUNCTION:
// ToDo - yet to be implemented // ToDo - yet to be implemented
// Function
ESP_LOGW(TAG, "Mode %d for output %s is not implemented yet, sorry", this->available_outputs_[j].mode, this->available_outputs_[j].output_id.c_str()); ESP_LOGW(TAG, "Mode %d for output %s is not implemented yet, sorry", this->available_outputs_[j].mode, this->available_outputs_[j].output_id.c_str());
this->status_set_warning(); this->status_set_warning();
continue; continue;