mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
[water_heater] Store mode strings in flash and avoid heap allocation in set_mode (#13728)
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "esphome/core/log.h"
|
||||
#include "esphome/core/application.h"
|
||||
#include "esphome/core/controller_registry.h"
|
||||
#include "esphome/core/progmem.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
@@ -22,23 +23,23 @@ WaterHeaterCall &WaterHeaterCall::set_mode(WaterHeaterMode mode) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
WaterHeaterCall &WaterHeaterCall::set_mode(const std::string &mode) {
|
||||
if (str_equals_case_insensitive(mode, "OFF")) {
|
||||
WaterHeaterCall &WaterHeaterCall::set_mode(const char *mode) {
|
||||
if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("OFF")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_OFF);
|
||||
} else if (str_equals_case_insensitive(mode, "ECO")) {
|
||||
} else if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("ECO")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_ECO);
|
||||
} else if (str_equals_case_insensitive(mode, "ELECTRIC")) {
|
||||
} else if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("ELECTRIC")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_ELECTRIC);
|
||||
} else if (str_equals_case_insensitive(mode, "PERFORMANCE")) {
|
||||
} else if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("PERFORMANCE")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_PERFORMANCE);
|
||||
} else if (str_equals_case_insensitive(mode, "HIGH_DEMAND")) {
|
||||
} else if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("HIGH_DEMAND")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_HIGH_DEMAND);
|
||||
} else if (str_equals_case_insensitive(mode, "HEAT_PUMP")) {
|
||||
} else if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("HEAT_PUMP")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_HEAT_PUMP);
|
||||
} else if (str_equals_case_insensitive(mode, "GAS")) {
|
||||
} else if (ESPHOME_strcasecmp_P(mode, ESPHOME_PSTR("GAS")) == 0) {
|
||||
this->set_mode(WATER_HEATER_MODE_GAS);
|
||||
} else {
|
||||
ESP_LOGW(TAG, "'%s' - Unrecognized mode %s", this->parent_->get_name().c_str(), mode.c_str());
|
||||
ESP_LOGW(TAG, "'%s' - Unrecognized mode %s", this->parent_->get_name().c_str(), mode);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,8 @@ class WaterHeaterCall {
|
||||
WaterHeaterCall(WaterHeater *parent);
|
||||
|
||||
WaterHeaterCall &set_mode(WaterHeaterMode mode);
|
||||
WaterHeaterCall &set_mode(const std::string &mode);
|
||||
WaterHeaterCall &set_mode(const char *mode);
|
||||
WaterHeaterCall &set_mode(const std::string &mode) { return this->set_mode(mode.c_str()); }
|
||||
WaterHeaterCall &set_target_temperature(float temperature);
|
||||
WaterHeaterCall &set_target_temperature_low(float temperature);
|
||||
WaterHeaterCall &set_target_temperature_high(float temperature);
|
||||
|
||||
Reference in New Issue
Block a user