From a72837704c4cdd8765d9bef1ec058741cef38b27 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 2 Nov 2025 20:04:37 -0600 Subject: [PATCH 1/2] fix trigge on preset mode cleared --- esphome/components/fan/automation.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/esphome/components/fan/automation.h b/esphome/components/fan/automation.h index 48de8d66fb..ae0af1a9bd 100644 --- a/esphome/components/fan/automation.h +++ b/esphome/components/fan/automation.h @@ -215,8 +215,9 @@ class FanPresetSetTrigger : public Trigger { const auto *preset_mode = state->get_preset_mode(); auto should_trigger = preset_mode != this->last_preset_mode_; this->last_preset_mode_ = preset_mode; - if (should_trigger && preset_mode != nullptr) { - this->trigger(preset_mode); + if (should_trigger) { + // Trigger with empty string when nullptr to maintain backward compatibility + this->trigger(preset_mode != nullptr ? preset_mode : ""); } }); this->last_preset_mode_ = state->get_preset_mode(); From 42c3e7b542f300c11c7549c81e3ef4e829a757c4 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 2 Nov 2025 20:07:32 -0600 Subject: [PATCH 2/2] fix trigge on preset mode cleared --- esphome/components/fan/fan.cpp | 2 +- esphome/components/fan/fan.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/esphome/components/fan/fan.cpp b/esphome/components/fan/fan.cpp index aefa185844..959572e9d9 100644 --- a/esphome/components/fan/fan.cpp +++ b/esphome/components/fan/fan.cpp @@ -177,7 +177,7 @@ void Fan::publish_state() { ESP_LOGD(TAG, " Direction: %s", LOG_STR_ARG(fan_direction_to_string(this->direction))); } const char *preset = this->get_preset_mode(); - if (traits.supports_preset_modes() && preset != nullptr) { + if (preset != nullptr) { ESP_LOGD(TAG, " Preset Mode: %s", preset); } this->state_callback_.call(); diff --git a/esphome/components/fan/fan.h b/esphome/components/fan/fan.h index 33e546b2bb..e38a80dbbe 100644 --- a/esphome/components/fan/fan.h +++ b/esphome/components/fan/fan.h @@ -156,6 +156,8 @@ class Fan : public EntityBase { CallbackManager state_callback_{}; ESPPreferenceObject rtc_; FanRestoreMode restore_mode_; + + private: const char *preset_mode_{nullptr}; };