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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user