mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	fix never calling preset change trigger (#3864)
Co-authored-by: Keith Burzinski <kbx81x@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							bf15b1d302
						
					
				
				
					commit
					98171c9f49
				
			| @@ -974,9 +974,19 @@ void ThermostatClimate::change_preset_(climate::ClimatePreset preset) { | |||||||
|   auto config = this->preset_config_.find(preset); |   auto config = this->preset_config_.find(preset); | ||||||
|  |  | ||||||
|   if (config != this->preset_config_.end()) { |   if (config != this->preset_config_.end()) { | ||||||
|     ESP_LOGI(TAG, "Switching to preset  %s", LOG_STR_ARG(climate::climate_preset_to_string(preset))); |     ESP_LOGI(TAG, "Preset %s requested", LOG_STR_ARG(climate::climate_preset_to_string(preset))); | ||||||
|     this->change_preset_internal_(config->second); |     if (this->change_preset_internal_(config->second) || (!this->preset.has_value()) || | ||||||
|  |         this->preset.value() != preset) { | ||||||
|  |       // Fire any preset changed trigger if defined | ||||||
|  |       Trigger<> *trig = this->preset_change_trigger_; | ||||||
|  |       assert(trig != nullptr); | ||||||
|  |       trig->trigger(); | ||||||
|  |  | ||||||
|  |       this->refresh(); | ||||||
|  |       ESP_LOGI(TAG, "Preset %s applied", LOG_STR_ARG(climate::climate_preset_to_string(preset))); | ||||||
|  |     } else { | ||||||
|  |       ESP_LOGI(TAG, "No changes required to apply preset %s", LOG_STR_ARG(climate::climate_preset_to_string(preset))); | ||||||
|  |     } | ||||||
|     this->custom_preset.reset(); |     this->custom_preset.reset(); | ||||||
|     this->preset = preset; |     this->preset = preset; | ||||||
|   } else { |   } else { | ||||||
| @@ -988,9 +998,19 @@ void ThermostatClimate::change_custom_preset_(const std::string &custom_preset) | |||||||
|   auto config = this->custom_preset_config_.find(custom_preset); |   auto config = this->custom_preset_config_.find(custom_preset); | ||||||
|  |  | ||||||
|   if (config != this->custom_preset_config_.end()) { |   if (config != this->custom_preset_config_.end()) { | ||||||
|     ESP_LOGI(TAG, "Switching to custom preset  %s", custom_preset.c_str()); |     ESP_LOGI(TAG, "Custom preset %s requested", custom_preset.c_str()); | ||||||
|     this->change_preset_internal_(config->second); |     if (this->change_preset_internal_(config->second) || (!this->custom_preset.has_value()) || | ||||||
|  |         this->custom_preset.value() != custom_preset) { | ||||||
|  |       // Fire any preset changed trigger if defined | ||||||
|  |       Trigger<> *trig = this->preset_change_trigger_; | ||||||
|  |       assert(trig != nullptr); | ||||||
|  |       trig->trigger(); | ||||||
|  |  | ||||||
|  |       this->refresh(); | ||||||
|  |       ESP_LOGI(TAG, "Custom preset %s applied", custom_preset.c_str()); | ||||||
|  |     } else { | ||||||
|  |       ESP_LOGI(TAG, "No changes required to apply custom preset %s", custom_preset.c_str()); | ||||||
|  |     } | ||||||
|     this->preset.reset(); |     this->preset.reset(); | ||||||
|     this->custom_preset = custom_preset; |     this->custom_preset = custom_preset; | ||||||
|   } else { |   } else { | ||||||
| @@ -998,39 +1018,46 @@ void ThermostatClimate::change_custom_preset_(const std::string &custom_preset) | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void ThermostatClimate::change_preset_internal_(const ThermostatClimateTargetTempConfig &config) { | bool ThermostatClimate::change_preset_internal_(const ThermostatClimateTargetTempConfig &config) { | ||||||
|  |   bool something_changed = false; | ||||||
|  |  | ||||||
|   if (this->supports_two_points_) { |   if (this->supports_two_points_) { | ||||||
|  |     if (this->target_temperature_low != config.default_temperature_low) { | ||||||
|       this->target_temperature_low = config.default_temperature_low; |       this->target_temperature_low = config.default_temperature_low; | ||||||
|  |       something_changed = true; | ||||||
|  |     } | ||||||
|  |     if (this->target_temperature_high != config.default_temperature_high) { | ||||||
|       this->target_temperature_high = config.default_temperature_high; |       this->target_temperature_high = config.default_temperature_high; | ||||||
|  |       something_changed = true; | ||||||
|  |     } | ||||||
|   } else { |   } else { | ||||||
|  |     if (this->target_temperature != config.default_temperature) { | ||||||
|       this->target_temperature = config.default_temperature; |       this->target_temperature = config.default_temperature; | ||||||
|  |       something_changed = true; | ||||||
|  |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Note: The mode, fan_mode, and swing_mode can all be defined on the preset but if the climate.control call |   // Note: The mode, fan_mode and swing_mode can all be defined in the preset but if the climate.control call | ||||||
|   // also specifies them then the control's version will override these for that call |   //  also specifies them then the climate.control call's values will override the preset's values for that call | ||||||
|   if (config.mode_.has_value()) { |   if (config.mode_.has_value() && (this->mode != config.mode_.value())) { | ||||||
|     this->mode = *config.mode_; |  | ||||||
|     ESP_LOGV(TAG, "Setting mode to %s", LOG_STR_ARG(climate::climate_mode_to_string(*config.mode_))); |     ESP_LOGV(TAG, "Setting mode to %s", LOG_STR_ARG(climate::climate_mode_to_string(*config.mode_))); | ||||||
|  |     this->mode = *config.mode_; | ||||||
|  |     something_changed = true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (config.fan_mode_.has_value()) { |   if (config.fan_mode_.has_value() && (this->fan_mode != config.fan_mode_.value())) { | ||||||
|     this->fan_mode = *config.fan_mode_; |  | ||||||
|     ESP_LOGV(TAG, "Setting fan mode to %s", LOG_STR_ARG(climate::climate_fan_mode_to_string(*config.fan_mode_))); |     ESP_LOGV(TAG, "Setting fan mode to %s", LOG_STR_ARG(climate::climate_fan_mode_to_string(*config.fan_mode_))); | ||||||
|  |     this->fan_mode = *config.fan_mode_; | ||||||
|  |     something_changed = true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   if (config.swing_mode_.has_value()) { |   if (config.swing_mode_.has_value() && (this->swing_mode != config.swing_mode_.value())) { | ||||||
|     ESP_LOGV(TAG, "Setting swing mode to %s", LOG_STR_ARG(climate::climate_swing_mode_to_string(*config.swing_mode_))); |     ESP_LOGV(TAG, "Setting swing mode to %s", LOG_STR_ARG(climate::climate_swing_mode_to_string(*config.swing_mode_))); | ||||||
|     this->swing_mode = *config.swing_mode_; |     this->swing_mode = *config.swing_mode_; | ||||||
|  |     something_changed = true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // Fire any preset changed trigger if defined |   return something_changed; | ||||||
|   if (this->preset != preset) { |  | ||||||
|     Trigger<> *trig = this->preset_change_trigger_; |  | ||||||
|     assert(trig != nullptr); |  | ||||||
|     trig->trigger(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   this->refresh(); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void ThermostatClimate::set_preset_config(climate::ClimatePreset preset, | void ThermostatClimate::set_preset_config(climate::ClimatePreset preset, | ||||||
|   | |||||||
| @@ -168,7 +168,8 @@ class ThermostatClimate : public climate::Climate, public Component { | |||||||
|  |  | ||||||
|   /// Applies the temperature, mode, fan, and swing modes of the provided config. |   /// Applies the temperature, mode, fan, and swing modes of the provided config. | ||||||
|   /// This is agnostic of custom vs built in preset |   /// This is agnostic of custom vs built in preset | ||||||
|   void change_preset_internal_(const ThermostatClimateTargetTempConfig &config); |   /// Returns true if something was changed | ||||||
|  |   bool change_preset_internal_(const ThermostatClimateTargetTempConfig &config); | ||||||
|  |  | ||||||
|   /// Return the traits of this controller. |   /// Return the traits of this controller. | ||||||
|   climate::ClimateTraits traits() override; |   climate::ClimateTraits traits() override; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user