mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	[esp32] Add framework migration warning for upcoming ESP-IDF default change (#10030)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
		| @@ -680,6 +680,64 @@ ESP_IDF_FRAMEWORK_SCHEMA = cv.All( | |||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class _FrameworkMigrationWarning: | ||||||
|  |     shown = False | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def _show_framework_migration_message(name: str, variant: str) -> None: | ||||||
|  |     """Show a friendly message about framework migration when defaulting to Arduino.""" | ||||||
|  |     if _FrameworkMigrationWarning.shown: | ||||||
|  |         return | ||||||
|  |     _FrameworkMigrationWarning.shown = True | ||||||
|  |  | ||||||
|  |     from esphome.log import AnsiFore, color | ||||||
|  |  | ||||||
|  |     message = ( | ||||||
|  |         color( | ||||||
|  |             AnsiFore.BOLD_CYAN, | ||||||
|  |             f"💡 IMPORTANT: {name} doesn't have a framework specified!", | ||||||
|  |         ) | ||||||
|  |         + "\n\n" | ||||||
|  |         + f"Currently, {variant} defaults to the Arduino framework.\n" | ||||||
|  |         + color(AnsiFore.YELLOW, "This will change to ESP-IDF in ESPHome 2026.1.0.\n") | ||||||
|  |         + "\n" | ||||||
|  |         + "Note: Newer ESP32 variants (C6, H2, P4, etc.) already use ESP-IDF by default.\n" | ||||||
|  |         + "\n" | ||||||
|  |         + "Why change? ESP-IDF offers:\n" | ||||||
|  |         + color(AnsiFore.GREEN, "  ✨ Up to 40% smaller binaries\n") | ||||||
|  |         + color(AnsiFore.GREEN, "  🚀 Better performance and optimization\n") | ||||||
|  |         + color(AnsiFore.GREEN, "  📦 Custom-built firmware for your exact needs\n") | ||||||
|  |         + color( | ||||||
|  |             AnsiFore.GREEN, | ||||||
|  |             "  🔧 Active development and testing by ESPHome developers\n", | ||||||
|  |         ) | ||||||
|  |         + "\n" | ||||||
|  |         + "Trade-offs:\n" | ||||||
|  |         + color(AnsiFore.YELLOW, "  ⏱️  Compile times are ~25% longer\n") | ||||||
|  |         + color(AnsiFore.YELLOW, "  🔄 Some components need migration\n") | ||||||
|  |         + "\n" | ||||||
|  |         + "What should I do?\n" | ||||||
|  |         + color(AnsiFore.CYAN, "  Option 1") | ||||||
|  |         + ": Migrate to ESP-IDF (recommended)\n" | ||||||
|  |         + "    Add this to your YAML under 'esp32:':\n" | ||||||
|  |         + color(AnsiFore.WHITE, "      framework:\n") | ||||||
|  |         + color(AnsiFore.WHITE, "        type: esp-idf\n") | ||||||
|  |         + "\n" | ||||||
|  |         + color(AnsiFore.CYAN, "  Option 2") | ||||||
|  |         + ": Keep using Arduino (still supported)\n" | ||||||
|  |         + "    Add this to your YAML under 'esp32:':\n" | ||||||
|  |         + color(AnsiFore.WHITE, "      framework:\n") | ||||||
|  |         + color(AnsiFore.WHITE, "        type: arduino\n") | ||||||
|  |         + "\n" | ||||||
|  |         + "Need help? Check out the migration guide:\n" | ||||||
|  |         + color( | ||||||
|  |             AnsiFore.BLUE, | ||||||
|  |             "https://esphome.io/guides/esp32_arduino_to_idf.html", | ||||||
|  |         ) | ||||||
|  |     ) | ||||||
|  |     _LOGGER.warning(message) | ||||||
|  |  | ||||||
|  |  | ||||||
| def _set_default_framework(config): | def _set_default_framework(config): | ||||||
|     if CONF_FRAMEWORK not in config: |     if CONF_FRAMEWORK not in config: | ||||||
|         config = config.copy() |         config = config.copy() | ||||||
| @@ -688,6 +746,10 @@ def _set_default_framework(config): | |||||||
|         if variant in ARDUINO_ALLOWED_VARIANTS: |         if variant in ARDUINO_ALLOWED_VARIANTS: | ||||||
|             config[CONF_FRAMEWORK] = ARDUINO_FRAMEWORK_SCHEMA({}) |             config[CONF_FRAMEWORK] = ARDUINO_FRAMEWORK_SCHEMA({}) | ||||||
|             config[CONF_FRAMEWORK][CONF_TYPE] = FRAMEWORK_ARDUINO |             config[CONF_FRAMEWORK][CONF_TYPE] = FRAMEWORK_ARDUINO | ||||||
|  |             # Show the migration message | ||||||
|  |             _show_framework_migration_message( | ||||||
|  |                 config.get(CONF_NAME, "This device"), variant | ||||||
|  |             ) | ||||||
|         else: |         else: | ||||||
|             config[CONF_FRAMEWORK] = ESP_IDF_FRAMEWORK_SCHEMA({}) |             config[CONF_FRAMEWORK] = ESP_IDF_FRAMEWORK_SCHEMA({}) | ||||||
|             config[CONF_FRAMEWORK][CONF_TYPE] = FRAMEWORK_ESP_IDF |             config[CONF_FRAMEWORK][CONF_TYPE] = FRAMEWORK_ESP_IDF | ||||||
|   | |||||||
| @@ -345,5 +345,11 @@ def get_esp32_arduino_flash_error_help() -> str | None: | |||||||
|         + "2. Clean build files and compile again\n" |         + "2. Clean build files and compile again\n" | ||||||
|         + "\n" |         + "\n" | ||||||
|         + "Note: ESP-IDF uses less flash space and provides better performance.\n" |         + "Note: ESP-IDF uses less flash space and provides better performance.\n" | ||||||
|         + "Some Arduino-specific libraries may need alternatives.\n\n" |         + "Some Arduino-specific libraries may need alternatives.\n" | ||||||
|  |         + "\n" | ||||||
|  |         + "For detailed migration instructions, see:\n" | ||||||
|  |         + color( | ||||||
|  |             AnsiFore.BLUE, | ||||||
|  |             "https://esphome.io/guides/esp32_arduino_to_idf.html\n\n", | ||||||
|  |         ) | ||||||
|     ) |     ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user