From ac672e4b8f1107664dfe53dabf1d60a4cfd5559b Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 7 Jan 2026 17:19:46 +1000 Subject: [PATCH] [esp32] Don't warn about no ota rollback if no ota at all (#13045) --- esphome/components/esp32/__init__.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index aa7d215c06..45fe8d1c26 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -20,6 +20,7 @@ from esphome.const import ( CONF_IGNORE_EFUSE_MAC_CRC, CONF_LOG_LEVEL, CONF_NAME, + CONF_OTA, CONF_PATH, CONF_PLATFORM_VERSION, CONF_PLATFORMIO_OPTIONS, @@ -620,11 +621,18 @@ def final_validate(config): ) ) if advanced[CONF_ENABLE_OTA_ROLLBACK]: - safe_mode_config = full_config.get(CONF_SAFE_MODE) - if safe_mode_config is None or safe_mode_config.get(CONF_DISABLED, False): - _LOGGER.warning( - "OTA rollback requires safe_mode, disabling rollback support" - ) + # "disabled: false" means safe mode *is* enabled. + safe_mode_config = full_config.get(CONF_SAFE_MODE, {CONF_DISABLED: True}) + safe_mode_enabled = not safe_mode_config[CONF_DISABLED] + ota_enabled = CONF_OTA in full_config + # Both need to be enabled for rollback to work + if not (ota_enabled and safe_mode_enabled): + # But only warn if ota is even possible + if ota_enabled: + _LOGGER.warning( + "OTA rollback requires safe_mode, disabling rollback support" + ) + # disable the rollback feature anyway since it can't be used. advanced[CONF_ENABLE_OTA_ROLLBACK] = False if errs: raise cv.MultipleInvalid(errs)