From c068da6edbdc7a43d5670cde61af8a3a147f8645 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sun, 31 Mar 2019 11:43:12 +0200 Subject: [PATCH] Fix light flashes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Plácido Revilla --- src/esphome/light/light_state.cpp | 7 +++++-- src/esphome/light/light_transformer.cpp | 3 --- src/esphome/light/light_transformer.h | 7 ------- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/esphome/light/light_state.cpp b/src/esphome/light/light_state.cpp index 6618b454..2a1b7f8a 100644 --- a/src/esphome/light/light_state.cpp +++ b/src/esphome/light/light_state.cpp @@ -201,7 +201,7 @@ void LightState::loop() { this->active_effect_->apply(); } - if (this->next_write_ || (this->transformer_ != nullptr && this->transformer_->is_continuous())) { + if (this->next_write_ || this->transformer_ != nullptr) { this->output_->write_state(this); this->next_write_ = false; } @@ -477,7 +477,10 @@ void LightState::StateCall::perform() const { saved.white = v.get_white(); saved.color_temp = v.get_color_temperature(); saved.effect = *this->state_->active_effect_index_; - this->state_->rtc_.save(&saved); + if (!this->flash_length_.has_value()) { + // Do not save RTC state for flashes. + this->state_->rtc_.save(&saved); + } this->state_->send_values(); } LightState::StateCall::StateCall(LightState *state) : state_(state) {} diff --git a/src/esphome/light/light_transformer.cpp b/src/esphome/light/light_transformer.cpp index dbc1e64e..2c517689 100644 --- a/src/esphome/light/light_transformer.cpp +++ b/src/esphome/light/light_transformer.cpp @@ -50,8 +50,6 @@ LightTransitionTransformer::LightTransitionTransformer(uint32_t start_time, uint this->start_values_.set_color_temperature(target_values.get_color_temperature()); } } -bool LightTransitionTransformer::is_continuous() { return true; } - LightColorValues LightFlashTransformer::get_values() { return this->get_target_values_(); } LightColorValues LightFlashTransformer::get_end_values() { return this->get_start_values_(); } @@ -59,7 +57,6 @@ LightColorValues LightFlashTransformer::get_end_values() { return this->get_star LightFlashTransformer::LightFlashTransformer(uint32_t start_time, uint32_t length, const LightColorValues &start_values, const LightColorValues &target_values) : LightTransformer(start_time, length, start_values, target_values) {} -bool LightFlashTransformer::is_continuous() { return false; } } // namespace light diff --git a/src/esphome/light/light_transformer.h b/src/esphome/light/light_transformer.h index 54b8e44f..817e8cbf 100644 --- a/src/esphome/light/light_transformer.h +++ b/src/esphome/light/light_transformer.h @@ -22,9 +22,6 @@ class LightTransformer { /// Whether this transformation is finished virtual bool is_finished(); - /// Whether the output needs to be written in every loop cycle. - virtual bool is_continuous() = 0; - /// This will be called to get the current values for output. virtual LightColorValues get_values() = 0; @@ -54,8 +51,6 @@ class LightTransitionTransformer : public LightTransformer { const LightColorValues &target_values); LightColorValues get_values() override; - - bool is_continuous() override; }; class LightFlashTransformer : public LightTransformer { @@ -66,8 +61,6 @@ class LightFlashTransformer : public LightTransformer { LightColorValues get_values() override; LightColorValues get_end_values() override; - - bool is_continuous() override; }; } // namespace light