mirror of
https://github.com/esphome/esphome.git
synced 2025-11-17 15:26:01 +00:00
simplify
This commit is contained in:
@@ -65,7 +65,13 @@ using ClimatePresetMask = FiniteSetMask<ClimatePreset, DefaultBitPolicy<ClimateP
|
|||||||
* - temperature step - the step with which to increase/decrease target temperature.
|
* - temperature step - the step with which to increase/decrease target temperature.
|
||||||
* This also affects with how many decimal places the temperature is shown
|
* This also affects with how many decimal places the temperature is shown
|
||||||
*/
|
*/
|
||||||
|
class Climate; // Forward declaration
|
||||||
|
class ClimateCall; // Forward declaration
|
||||||
|
|
||||||
class ClimateTraits {
|
class ClimateTraits {
|
||||||
|
friend class Climate; // Allow Climate to access protected find methods
|
||||||
|
friend class ClimateCall; // Allow ClimateCall to access protected find methods
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// Get/set feature flags (see ClimateFeatures enum in climate_mode.h)
|
/// Get/set feature flags (see ClimateFeatures enum in climate_mode.h)
|
||||||
uint32_t get_feature_flags() const { return this->feature_flags_; }
|
uint32_t get_feature_flags() const { return this->feature_flags_; }
|
||||||
@@ -160,10 +166,6 @@ class ClimateTraits {
|
|||||||
bool supports_custom_fan_mode(const std::string &custom_fan_mode) const {
|
bool supports_custom_fan_mode(const std::string &custom_fan_mode) const {
|
||||||
return this->supports_custom_fan_mode(custom_fan_mode.c_str());
|
return this->supports_custom_fan_mode(custom_fan_mode.c_str());
|
||||||
}
|
}
|
||||||
/// Find and return the matching custom fan mode pointer from supported modes, or nullptr if not found
|
|
||||||
const char *find_custom_fan_mode(const char *custom_fan_mode) const {
|
|
||||||
return vector_find(this->supported_custom_fan_modes_, custom_fan_mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_supported_presets(ClimatePresetMask presets) { this->supported_presets_ = presets; }
|
void set_supported_presets(ClimatePresetMask presets) { this->supported_presets_ = presets; }
|
||||||
void add_supported_preset(ClimatePreset preset) { this->supported_presets_.insert(preset); }
|
void add_supported_preset(ClimatePreset preset) { this->supported_presets_.insert(preset); }
|
||||||
@@ -187,10 +189,6 @@ class ClimateTraits {
|
|||||||
bool supports_custom_preset(const std::string &custom_preset) const {
|
bool supports_custom_preset(const std::string &custom_preset) const {
|
||||||
return this->supports_custom_preset(custom_preset.c_str());
|
return this->supports_custom_preset(custom_preset.c_str());
|
||||||
}
|
}
|
||||||
/// Find and return the matching custom preset pointer from supported presets, or nullptr if not found
|
|
||||||
const char *find_custom_preset(const char *custom_preset) const {
|
|
||||||
return vector_find(this->supported_custom_presets_, custom_preset);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_supported_swing_modes(ClimateSwingModeMask modes) { this->supported_swing_modes_ = modes; }
|
void set_supported_swing_modes(ClimateSwingModeMask modes) { this->supported_swing_modes_ = modes; }
|
||||||
void add_supported_swing_mode(ClimateSwingMode mode) { this->supported_swing_modes_.insert(mode); }
|
void add_supported_swing_mode(ClimateSwingMode mode) { this->supported_swing_modes_.insert(mode); }
|
||||||
@@ -249,6 +247,18 @@ class ClimateTraits {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Find and return the matching custom fan mode pointer from supported modes, or nullptr if not found
|
||||||
|
/// This is protected as it's an implementation detail - use Climate::set_custom_fan_mode_() instead
|
||||||
|
const char *find_custom_fan_mode(const char *custom_fan_mode) const {
|
||||||
|
return vector_find(this->supported_custom_fan_modes_, custom_fan_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Find and return the matching custom preset pointer from supported presets, or nullptr if not found
|
||||||
|
/// This is protected as it's an implementation detail - use Climate::set_custom_preset_() instead
|
||||||
|
const char *find_custom_preset(const char *custom_preset) const {
|
||||||
|
return vector_find(this->supported_custom_presets_, custom_preset);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t feature_flags_{0};
|
uint32_t feature_flags_{0};
|
||||||
float visual_min_temperature_{10};
|
float visual_min_temperature_{10};
|
||||||
float visual_max_temperature_{30};
|
float visual_max_temperature_{30};
|
||||||
|
|||||||
@@ -223,7 +223,8 @@ void ThermostatClimate::control(const climate::ClimateCall &call) {
|
|||||||
if (this->setup_complete_) {
|
if (this->setup_complete_) {
|
||||||
this->change_custom_preset_(call.get_custom_preset().value());
|
this->change_custom_preset_(call.get_custom_preset().value());
|
||||||
} else {
|
} else {
|
||||||
this->custom_preset = call.get_custom_preset().value();
|
// Use the base class method which handles pointer lookup internally
|
||||||
|
this->set_custom_preset_(call.get_custom_preset().value());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1171,7 +1172,7 @@ void ThermostatClimate::change_preset_(climate::ClimatePreset preset) {
|
|||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "No changes required to apply preset %s", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
|
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 = nullptr;
|
||||||
this->preset = preset;
|
this->preset = preset;
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGW(TAG, "Preset %s not configured; ignoring", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
|
ESP_LOGW(TAG, "Preset %s not configured; ignoring", LOG_STR_ARG(climate::climate_preset_to_string(preset)));
|
||||||
@@ -1183,11 +1184,12 @@ void ThermostatClimate::change_custom_preset_(const std::string &custom_preset)
|
|||||||
|
|
||||||
if (config != this->custom_preset_config_.end()) {
|
if (config != this->custom_preset_config_.end()) {
|
||||||
ESP_LOGV(TAG, "Custom preset %s requested", custom_preset.c_str());
|
ESP_LOGV(TAG, "Custom preset %s requested", custom_preset.c_str());
|
||||||
if (this->change_preset_internal_(config->second) || (!this->custom_preset.has_value()) ||
|
if (this->change_preset_internal_(config->second) || (this->custom_preset == nullptr) ||
|
||||||
this->custom_preset.value() != custom_preset) {
|
strcmp(this->custom_preset, custom_preset.c_str()) != 0) {
|
||||||
// Fire any preset changed trigger if defined
|
// Fire any preset changed trigger if defined
|
||||||
Trigger<> *trig = this->preset_change_trigger_;
|
Trigger<> *trig = this->preset_change_trigger_;
|
||||||
this->custom_preset = custom_preset;
|
// Use the base class method which handles pointer lookup and preset reset internally
|
||||||
|
this->set_custom_preset_(custom_preset);
|
||||||
if (trig != nullptr) {
|
if (trig != nullptr) {
|
||||||
trig->trigger();
|
trig->trigger();
|
||||||
}
|
}
|
||||||
@@ -1196,9 +1198,9 @@ void ThermostatClimate::change_custom_preset_(const std::string &custom_preset)
|
|||||||
ESP_LOGI(TAG, "Custom preset %s applied", custom_preset.c_str());
|
ESP_LOGI(TAG, "Custom preset %s applied", custom_preset.c_str());
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "No changes required to apply custom preset %s", custom_preset.c_str());
|
ESP_LOGI(TAG, "No changes required to apply custom preset %s", custom_preset.c_str());
|
||||||
|
// Still need to ensure preset is reset and custom_preset is set
|
||||||
|
this->set_custom_preset_(custom_preset);
|
||||||
}
|
}
|
||||||
this->preset.reset();
|
|
||||||
this->custom_preset = custom_preset;
|
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGW(TAG, "Custom preset %s not configured; ignoring", custom_preset.c_str());
|
ESP_LOGW(TAG, "Custom preset %s not configured; ignoring", custom_preset.c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1312,7 +1312,7 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf
|
|||||||
for (climate::ClimatePreset m : traits.get_supported_presets())
|
for (climate::ClimatePreset m : traits.get_supported_presets())
|
||||||
opt.add(PSTR_LOCAL(climate::climate_preset_to_string(m)));
|
opt.add(PSTR_LOCAL(climate::climate_preset_to_string(m)));
|
||||||
}
|
}
|
||||||
if (!traits.get_supported_custom_presets().empty() && obj->custom_preset.has_value()) {
|
if (!traits.get_supported_custom_presets().empty() && obj->custom_preset != nullptr) {
|
||||||
JsonArray opt = root["custom_presets"].to<JsonArray>();
|
JsonArray opt = root["custom_presets"].to<JsonArray>();
|
||||||
for (auto const &custom_preset : traits.get_supported_custom_presets())
|
for (auto const &custom_preset : traits.get_supported_custom_presets())
|
||||||
opt.add(custom_preset);
|
opt.add(custom_preset);
|
||||||
@@ -1333,14 +1333,14 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf
|
|||||||
if (traits.get_supports_fan_modes() && obj->fan_mode.has_value()) {
|
if (traits.get_supports_fan_modes() && obj->fan_mode.has_value()) {
|
||||||
root["fan_mode"] = PSTR_LOCAL(climate_fan_mode_to_string(obj->fan_mode.value()));
|
root["fan_mode"] = PSTR_LOCAL(climate_fan_mode_to_string(obj->fan_mode.value()));
|
||||||
}
|
}
|
||||||
if (!traits.get_supported_custom_fan_modes().empty() && obj->custom_fan_mode.has_value()) {
|
if (!traits.get_supported_custom_fan_modes().empty() && obj->custom_fan_mode != nullptr) {
|
||||||
root["custom_fan_mode"] = obj->custom_fan_mode.value().c_str();
|
root["custom_fan_mode"] = obj->custom_fan_mode;
|
||||||
}
|
}
|
||||||
if (traits.get_supports_presets() && obj->preset.has_value()) {
|
if (traits.get_supports_presets() && obj->preset.has_value()) {
|
||||||
root["preset"] = PSTR_LOCAL(climate_preset_to_string(obj->preset.value()));
|
root["preset"] = PSTR_LOCAL(climate_preset_to_string(obj->preset.value()));
|
||||||
}
|
}
|
||||||
if (!traits.get_supported_custom_presets().empty() && obj->custom_preset.has_value()) {
|
if (!traits.get_supported_custom_presets().empty() && obj->custom_preset != nullptr) {
|
||||||
root["custom_preset"] = obj->custom_preset.value().c_str();
|
root["custom_preset"] = obj->custom_preset;
|
||||||
}
|
}
|
||||||
if (traits.get_supports_swing_modes()) {
|
if (traits.get_supports_swing_modes()) {
|
||||||
root["swing_mode"] = PSTR_LOCAL(climate_swing_mode_to_string(obj->swing_mode));
|
root["swing_mode"] = PSTR_LOCAL(climate_swing_mode_to_string(obj->swing_mode));
|
||||||
|
|||||||
Reference in New Issue
Block a user