{"id":"a675c18f-c30e-4e8f-ba52-0a6685f10810","task":"Perform an OTA firmware update to an ESPHome device via the native API OTA platform","domain":"iot","steps":["Add an ota: block with platform: esphome (and a password) to the device YAML; this is the protocol used by both the ESPHome dashboard and the CLI to install firmware over the network","From the ESPHome dashboard, use the device's install/update action to trigger a wireless install of the compiled firmware","From the CLI, run esphome run <config.yaml> to compile and upload over the network, or esphome upload <config.yaml> to upload the most recently built firmware without recompiling","Target a specific device with --device <ip> (or --device OTA for network discovery) when the command supports it","To update many devices in one pass, run esphome update-all <CONFIG>..., which runs esphome run <CONFIG> --no-logs --device OTA for each config found and reports successes/failures"],"gotchas":["Because the same password compiles and authenticates the upload, changing it requires an on_boot lambda trick (set_auth_password) rather than a plain esphome run with the new password","Interrupting a partition-table or bootloader OTA update (esphome upload --partition-table / --bootloader) can brick the device, requiring serial flashing to recover","If the device isn't reachable over the network, native API OTA fails; you can instead upload via the web_server OTA platform with esphome upload <config.yaml> --ota-platform web_server"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/a675c18f-c30e-4e8f-ba52-0a6685f10810"}