ESPHome 2025.9.3 update fails

Having issues updating sensor firmware 2025-6-1 t0 2025-9-3

Getting this message but cant find any good advice on how to fix.
Help with this would be graatlu appreciated!

Updating /config/esphome/esphome-web-0309ec.yaml

INFO ESPHome 2025.9.3
INFO Reading configuration /config/esphome/esphome-web-0309ec.yaml…
INFO Generating C++ source…
INFO Compiling app…
Processing garage-door-esphome (board: seeed_xiao_esp32c3; framework: arduino; platform: platformio/[email protected])

HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash

  • framework-arduinoespressif32 @ 3.2.1
  • toolchain-riscv32-esp @ 8.4.0+2021r2-patch5

*** missing SConscript file ‘/data/cache/platformio/packages/framework-arduinoespressif32/tools/platformio-build.py’
File “/data/cache/platformio/platforms/espressif32/builder/frameworks/arduino.py”, line 41, in
========================== [FAILED] Took 0.35 seconds ==========================
===== [ERROR] /config/esphome/esphome-web-0309ec.yaml =====

======================== [SUMMARY] ========================

  • /config/esphome/esphome-web-0309ec.yaml: FAILED

Remove ESPHome device builder and then install it again.

OK, I did that and now I am getting this error any further ideas?

INFO ESPHome 2025.10.0
INFO Reading configuration /config/esphome/esphome-web-0309ec.yaml…
Failed config

esp32: [source /config/esphome/esphome-web-0309ec.yaml:8]
board: seeed_xiao_esp32c3
variant: esp32c3

Version needs to be explicitly set when a custom source or platform_version is used.
framework:
type: arduino
platform_version: 5.4.0

The yaml code In case that helps

esphome:
  name: garage-door-esphome
  friendly_name: Gargae Door Sensor
  platformio_options:
   board_build.flash_mode: dio

esp32:
  board: seeed_xiao_esp32c3
  variant: esp32c3
  framework:
    type: arduino
    platform_version: 5.4.0

# Enable logging
logger:
 hardware_uart: UART0

# Enable Home Assistant API
api:
  encryption:
    key: "QLwFolre3qQsf4riSBaPBVdGb76oNQoa19O6DSyhc9s="

ota:
 - platform: esphome
   # password: "xxxxxxxxxxxxxxxx"
   
# safe_mode: False
# num_attempts: 3
# safe_mode: True

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-garage-door"
    password: "Removed"

captive_portal:


switch:
  - platform: template
    name: "Virtual Lock"
    id: virtual_lock
    optimistic: true
  - platform: gpio
    pin: GPIO5
    name: "Door relay"
    id: door_relay
    internal: true
    on_turn_on:
    - delay: 250ms
    - switch.turn_off: door_relay
    
binary_sensor:
  - platform: template
    name: "Garage Door Is Jammed"
    id: is_jammed
    device_class: problem
  - platform: template
    name: "Garage Door Is Open"
    id: is_open
    device_class: garage_door
    
  - platform: gpio
    pin:
      number: GPIO3
      inverted: true
      mode:
        input: true
        pullup: true
    name: "Garage Door Close Sensor"
    id: close_endstop_binary_sensor
    internal: true
    filters:
       - delayed_on_off:
           time_on: 50ms
           time_off: 50ms
    on_press:
       - cover.template.publish:
           id: garage_door
           state: CLOSED
           current_operation: IDLE
       - binary_sensor.template.publish:
          id: is_jammed
          state: OFF
       - binary_sensor.template.publish:
          id: is_open
          state: OFF
    on_release: 
       - cover.template.publish:
           id: garage_door
           current_operation: OPENING    
       - binary_sensor.template.publish:
          id: is_open
          state: ON
       - delay: 25s
       - if:
           condition:
             binary_sensor.is_off: open_endstop_binary_sensor
           then: 
              - binary_sensor.template.publish:
                  id: is_jammed
                  state: ON
  - platform: gpio
    pin:
      number: GPIO4
      inverted: true
      mode:
        input: true
        pullup: true
    name: "Garage Door Open Sensor"
    id: open_endstop_binary_sensor
    internal: true
    filters:
       - delayed_on_off:
           time_on: 50ms
           time_off: 50ms
    on_press:
       - cover.template.publish:
           id: garage_door
           state: OPEN
           current_operation: IDLE
       - binary_sensor.template.publish:
          id: is_jammed
          state: OFF
    on_release: 
       - cover.template.publish:
           id: garage_door
           current_operation: CLOSING  
       - delay: 25s
       - if:
           condition:
             binary_sensor.is_off: close_endstop_binary_sensor
           then: 
              - binary_sensor.template.publish:
                  id: is_jammed
                  state: ON

sensor:
  - platform: wifi_signal
    name: "WiFi Signal"
    update_interval: 60s
    
cover:
  - platform: template
    id: garage_door
    name: "Garage Door"
    device_class: garage
    open_action:
        - if:
           condition:
             - and:
               - switch.is_off: virtual_lock
               - binary_sensor.is_on: close_endstop_binary_sensor
           then: 
             - switch.turn_on: door_relay
    close_action:
      - if:
           condition:
             - and:
               - switch.is_off: virtual_lock
               - binary_sensor.is_on: open_endstop_binary_sensor
           then: 
             - switch.turn_on: door_relay
    stop_action:
      - if:
           condition:
             - and:
               - switch.is_off: virtual_lock
               - binary_sensor.is_off: close_endstop_binary_sensor
               - binary_sensor.is_off: open_endstop_binary_sensor
           then: 
             - switch.turn_on: door_relay

Made the above change to the yaml file which fixed the latest issue.
I needed to update the Framework.
Wondering if that might have been the issue all along?

Found this advice that helped me track down the issue
https://www.reddit.com/r/homeassistant/comments/1itc57q/psa_esphome_202520_pushes_a_breaking_change_for/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button