Skip to content

upload failure "retry" forces recompilation instead of reconnection #824

@Stoatwblr

Description

@Stoatwblr

Version

2025.10.4

What type of installation are you using?

Home Assistant Add-on

Browser

Chrome

What happened?

This is particularly applicable to battery operated devices

If the device isn't present during the "install, wireless" run, the OTA process gives up after a few seconds

At that point, clicking "retry" restarts the compilation process. It's a lot faster the second time around but that takes time, requires watching the battery device and usually clicking regularly on a button to force it to remain connected

IE: It's quite easy to have it time out again. It takes around 40-60 seconds for battery devices to wake up and reconnect to the AP and connecting to Homeassistant API takes a few seconds longer than that due to HA polling the device instead of the other way around

quickfix: Unless the Yaml or underlaying software version have changed, "retry" should simply resume at the upload stage.

drifting into feature territory:

Even better would be an option to queue the failed upload until the device becomes present - some battery devices are hard to physically access and may only connect 3 or 4 times/day. Presence polling needs to happen every 10-15 seconds

How to reproduce

Go to "edit" on any configured device in the ESPhome Builder dashboard (or right click,install on it)
Select "wirelessly"
let ESPhome compile and fail to connect (or fail during upload)
click retry

Watch the whole processes kick off again from the start, skipping various objects that haven't changed

It's as if the yaml is updated every time "retry" is clicked.

(It makes sense to do that for "install" but not for "retry")

Expected behavior

"retry" should skip the entire compilation process and simply resume the script at connection/upload stage

Even better, a "queue" option would save having to physically hover over and poke at the battery operated device whilst it's updating

Relevant log output

[Note the wildly varying retry times. This makes uploading to battery devices (especially tuya low-energy ones) much harder]


Building UF2 OTA image
|-- esphome_2025.10.4_cbu_bk7231n_lt1.9.1.uf2
|-- firmware.uf2
|-- firmware.bin
======================== [SUCCESS] Took 586.63 seconds ========================
INFO Successfully compiled program.
INFO Connecting to 192.168.178.133 port 8892...
ERROR Connecting to 192.168.178.133 port 8892 failed: [Errno 113] No route to host
ERROR Connection failed.
WARNING Failed to upload to ['th08.local']

retry 

INFO ESPHome 2025.10.4
INFO Reading configuration /config/esphome/th08.yaml...
INFO Detected timezone 'Europe/London'
...
RAM:   [====      ]  36.8% (used 96436 bytes from 262144 bytes)
Flash: [========= ]  88.0% (used 952716 bytes from 1083136 bytes)
========================= [SUCCESS] Took 35.12 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.178.133 port 8892...
ERROR Connecting to 192.168.178.133 port 8892 failed: [Errno 113] No route to host
ERROR Connection failed.
WARNING Failed to upload to ['th08.local']

retry

...
RAM:   [====      ]  36.8% (used 96436 bytes from 262144 bytes)
Flash: [========= ]  88.0% (used 952716 bytes from 1083136 bytes)
Building UF2 OTA image
|-- esphome_2025.10.4_cbu_bk7231n_lt1.9.1.uf2
|-- firmware.uf2
|-- firmware.bin
========================= [SUCCESS] Took 83.01 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.178.133 port 8892...
INFO Connected to 192.168.178.133
INFO Uploading /data/build/th08/.pioenvs/th08/firmware.uf2 (3307008 bytes)
Uploading: [============================================================] 100% Done...

INFO Upload took 15.17 seconds, waiting for result...
INFO OTA successful

Screenshots

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions