mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 14:43:51 +00:00 
			
		
		
		
	Merge branch 'integration' into memory_api
This commit is contained in:
		| @@ -7,6 +7,17 @@ namespace number { | ||||
|  | ||||
| static const char *const TAG = "number"; | ||||
|  | ||||
| // Helper functions to reduce code size for logging | ||||
| void NumberCall::log_perform_warning_(const LogString *message) { | ||||
|   ESP_LOGW(TAG, "'%s': %s", this->parent_->get_name().c_str(), LOG_STR_ARG(message)); | ||||
| } | ||||
|  | ||||
| void NumberCall::log_perform_warning_value_range_(const LogString *comparison, const LogString *limit_type, float val, | ||||
|                                                   float limit) { | ||||
|   ESP_LOGW(TAG, "'%s': %f %s %s %f", this->parent_->get_name().c_str(), val, LOG_STR_ARG(comparison), | ||||
|            LOG_STR_ARG(limit_type), limit); | ||||
| } | ||||
|  | ||||
| NumberCall &NumberCall::set_value(float value) { return this->with_operation(NUMBER_OP_SET).with_value(value); } | ||||
|  | ||||
| NumberCall &NumberCall::number_increment(bool cycle) { | ||||
| @@ -42,7 +53,7 @@ void NumberCall::perform() { | ||||
|   const auto &traits = parent->traits; | ||||
|  | ||||
|   if (this->operation_ == NUMBER_OP_NONE) { | ||||
|     ESP_LOGW(TAG, "'%s' - NumberCall performed without selecting an operation", name); | ||||
|     this->log_perform_warning_(LOG_STR("No operation")); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
| @@ -51,28 +62,28 @@ void NumberCall::perform() { | ||||
|   float max_value = traits.get_max_value(); | ||||
|  | ||||
|   if (this->operation_ == NUMBER_OP_SET) { | ||||
|     ESP_LOGD(TAG, "'%s' - Setting number value", name); | ||||
|     ESP_LOGD(TAG, "'%s': Setting value", name); | ||||
|     if (!this->value_.has_value() || std::isnan(*this->value_)) { | ||||
|       ESP_LOGW(TAG, "'%s' - No value set for NumberCall", name); | ||||
|       this->log_perform_warning_(LOG_STR("No value")); | ||||
|       return; | ||||
|     } | ||||
|     target_value = this->value_.value(); | ||||
|   } else if (this->operation_ == NUMBER_OP_TO_MIN) { | ||||
|     if (std::isnan(min_value)) { | ||||
|       ESP_LOGW(TAG, "'%s' - Can't set to min value through NumberCall: no min_value defined", name); | ||||
|       this->log_perform_warning_(LOG_STR("min undefined")); | ||||
|     } else { | ||||
|       target_value = min_value; | ||||
|     } | ||||
|   } else if (this->operation_ == NUMBER_OP_TO_MAX) { | ||||
|     if (std::isnan(max_value)) { | ||||
|       ESP_LOGW(TAG, "'%s' - Can't set to max value through NumberCall: no max_value defined", name); | ||||
|       this->log_perform_warning_(LOG_STR("max undefined")); | ||||
|     } else { | ||||
|       target_value = max_value; | ||||
|     } | ||||
|   } else if (this->operation_ == NUMBER_OP_INCREMENT) { | ||||
|     ESP_LOGD(TAG, "'%s' - Increment number, with%s cycling", name, this->cycle_ ? "" : "out"); | ||||
|     ESP_LOGD(TAG, "'%s': Increment with%s cycling", name, this->cycle_ ? "" : "out"); | ||||
|     if (!parent->has_state()) { | ||||
|       ESP_LOGW(TAG, "'%s' - Can't increment number through NumberCall: no active state to modify", name); | ||||
|       this->log_perform_warning_(LOG_STR("Can't increment, no state")); | ||||
|       return; | ||||
|     } | ||||
|     auto step = traits.get_step(); | ||||
| @@ -85,9 +96,9 @@ void NumberCall::perform() { | ||||
|       } | ||||
|     } | ||||
|   } else if (this->operation_ == NUMBER_OP_DECREMENT) { | ||||
|     ESP_LOGD(TAG, "'%s' - Decrement number, with%s cycling", name, this->cycle_ ? "" : "out"); | ||||
|     ESP_LOGD(TAG, "'%s': Decrement with%s cycling", name, this->cycle_ ? "" : "out"); | ||||
|     if (!parent->has_state()) { | ||||
|       ESP_LOGW(TAG, "'%s' - Can't decrement number through NumberCall: no active state to modify", name); | ||||
|       this->log_perform_warning_(LOG_STR("Can't decrement, no state")); | ||||
|       return; | ||||
|     } | ||||
|     auto step = traits.get_step(); | ||||
| @@ -102,15 +113,15 @@ void NumberCall::perform() { | ||||
|   } | ||||
|  | ||||
|   if (target_value < min_value) { | ||||
|     ESP_LOGW(TAG, "'%s' - Value %f must not be less than minimum %f", name, target_value, min_value); | ||||
|     this->log_perform_warning_value_range_(LOG_STR("<"), LOG_STR("min"), target_value, min_value); | ||||
|     return; | ||||
|   } | ||||
|   if (target_value > max_value) { | ||||
|     ESP_LOGW(TAG, "'%s' - Value %f must not be greater than maximum %f", name, target_value, max_value); | ||||
|     this->log_perform_warning_value_range_(LOG_STR(">"), LOG_STR("max"), target_value, max_value); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   ESP_LOGD(TAG, "  New number value: %f", target_value); | ||||
|   ESP_LOGD(TAG, "  New value: %f", target_value); | ||||
|   this->parent_->control(target_value); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "esphome/core/helpers.h" | ||||
| #include "esphome/core/log.h" | ||||
| #include "number_traits.h" | ||||
|  | ||||
| namespace esphome { | ||||
| @@ -33,6 +34,10 @@ class NumberCall { | ||||
|   NumberCall &with_cycle(bool cycle); | ||||
|  | ||||
|  protected: | ||||
|   void log_perform_warning_(const LogString *message); | ||||
|   void log_perform_warning_value_range_(const LogString *comparison, const LogString *limit_type, float val, | ||||
|                                         float limit); | ||||
|  | ||||
|   Number *const parent_; | ||||
|   NumberOperation operation_{NUMBER_OP_NONE}; | ||||
|   optional<float> value_; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user