Version
2026.3.1
What type of installation are you using?
Home Assistant Add-on
Browser
Chrome
What happened?
I installed a Seeed XIAO Esp32c6 as a fully thread device over an USB port plugged into homeassistant server running ESPHome Builder. The esp32c6 is flashed, goes online, reports as a Router device and everything works. I plan to use 3 esp32c6 as thread routers in my house.
BUT: I cannot update/flash these devices except over USB. I cannot flash then via Thread from the ESPHome builder nor can I do a manual download and upload it via the web server on the ESP32C6. Is that not possible, not planned or is there a general problem or is it my Thread Border Router ?
I do not want to climb on a ladder, unscrew the case from the ceiling, transport it to homeassistant, flash it over USB and then remount it on the ceiling every time I need to update it.
My Thread Border Router is a SMLIGHT SLZB-MR1 attached to homeassistant via Ethernet cable.
How to reproduce
The ESP32C6 was flashed via USB and is running as a Thread Router.
2. open ESPHome builder
3. click Install
4. click Wirelessly
5. and after some time "ERROR Error receiving acknowledge version: [Errno 104] Connection reset by peer"
Expected behavior
To be able to flash the Esp32C6 wirelessly
Relevant log output
Here is the log of a typical try to flash wirelessly:
INFO ESPHome 2026.3.1
INFO Reading configuration /config/esphome/test-esp32c6.yaml...
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq/#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Setting CONFIG_LWIP_MAX_SOCKETS to 13 (TCP=8 [api=3, web_server=5], UDP=2 [mdns=2], TCP_LISTEN=3 [api=1, ota=1, web_server_base=1])
INFO Compiling app... Build path: /data/build/test-esp32c6
Processing test-esp32c6 (board: seeed_xiao_esp32c6; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip)
--------------------------------------------------------------------------------
HARDWARE: ESP32C6 160MHz, 320KB RAM, 4MB Flash
- contrib-piohome @ 3.4.4
- framework-espidf @ 3.50503.0 (5.5.3)
- tool-cmake @ 4.0.3
- tool-esp-rom-elfs @ 2024.10.11
- tool-esptoolpy @ 5.1.2
- tool-ninja @ 1.13.1
- tool-scons @ 4.40801.0 (4.8.1)
- toolchain-riscv32-esp @ 14.2.0+20251107
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.11
Compiling .pioenvs/test-esp32c6/src/main.cpp.o
RAM: [= ] 13.8% (used 45140 bytes from 327680 bytes)
Flash: [===== ] 48.0% (used 880792 bytes from 1835008 bytes)
========================= [SUCCESS] Took 8.44 seconds =========================
INFO Build Info: config_hash=0x71b63954 build_time_str=2026-03-28 21:11:46 +0100
INFO Successfully compiled program.
INFO Connecting to fd25:477b:2492:1:99a:5154:17c2:c558 port 3232...
INFO Connected to fd25:477b:2492:1:99a:5154:17c2:c558
INFO Uploading /data/build/test-esp32c6/.pioenvs/test-esp32c6/firmware.bin (881152 bytes)
ERROR Error receiving acknowledge version: [Errno 104] Connection reset by peer
WARNING Failed to upload to ['test-esp32c6.local']
Using the Webserver I get the following log on ESP32C6
INFO ESPHome 2026.3.1
INFO Reading configuration /config/esphome/test-esp32c6.yaml...
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq/#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from /dev/ttyACM0 with baud rate 115200
[21:24:07.325][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
[21:24:37.328][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
[21:25:07.328][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
[21:25:13.918][D][web_server_idf:509]: Removing dead event source session
[21:25:13.918][D][web_server_idf:600][httpd]: Event source connection closed (fd: 57)
[21:25:17.793][I][web_server.ota:108][httpd]: OTA Update Start: test-esp32c6.ota.bin
[21:25:17.897][D][web_server.ota:087][httpd]: OTA in progress: 0.0%
[21:25:37.331][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
[21:26:07.337][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
So it senses that the OTA update is about to start but on the Browser I get Connected.. then (in German) Sending the request.. and then the error screen (in German) Connection interrupted, The connection to the server was reset ... try again.
This was the successful flash and successful boot prior to trying to flash:
INFO ESPHome 2026.3.1
INFO Reading configuration /config/esphome/test-esp32c6.yaml...
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq/#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Setting CONFIG_LWIP_MAX_SOCKETS to 13 (TCP=8 [api=3, web_server=5], UDP=2 [mdns=2], TCP_LISTEN=3 [api=1, ota=1, web_server_base=1])
INFO Compiling app... Build path: /data/build/test-esp32c6
Processing test-esp32c6 (board: seeed_xiao_esp32c6; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.37/platform-espressif32.zip)
--------------------------------------------------------------------------------
HARDWARE: ESP32C6 160MHz, 320KB RAM, 4MB Flash
- contrib-piohome @ 3.4.4
- framework-espidf @ 3.50503.0 (5.5.3)
- tool-cmake @ 4.0.3
- tool-esp-rom-elfs @ 2024.10.11
- tool-esptoolpy @ 5.1.2
- tool-ninja @ 1.13.1
- tool-scons @ 4.40801.0 (4.8.1)
- toolchain-riscv32-esp @ 14.2.0+20251107
Reading CMake configuration...
Dependency Graph
|-- noise-c @ 0.1.11
Compiling .pioenvs/test-esp32c6/src/main.cpp.o
RAM: [= ] 13.8% (used 45140 bytes from 327680 bytes)
Flash: [===== ] 48.0% (used 880792 bytes from 1835008 bytes)
========================= [SUCCESS] Took 8.49 seconds =========================
INFO Build Info: config_hash=0x71b63954 build_time_str=2026-03-28 21:11:46 +0100
INFO Successfully compiled program.
esptool v5.2.0
Serial port /dev/ttyACM0:
Connecting...
Connected to ESP32-C6 on /dev/ttyACM0:
Chip type: ESP32-C6FH4 (QFN32) (revision v0.2)
Features: Wi-Fi 6, BT 5 (LE), IEEE802.15.4, Single Core + LP Core, 160MHz, Embedded Flash 4MB
Crystal frequency: 40MHz
USB mode: USB-Serial/JTAG
MAC: 58:e6:c5:ff:fe:00:90:f0
BASE MAC: 58:e6:c5:00:90:f0
MAC_EXT: ff:fe
Uploading stub flasher...
Running stub flasher...
Stub flasher running.
Changing baud rate to 460800...
Changed.
Configuring flash size...
Auto-detected flash size: 4MB
Flash will be erased from 0x00010000 to 0x000e7fff...
Compressed 881152 bytes to 554285...
Writing at 0x00010000 [ ] 0.0% 0/554285 bytes...
Writing at 0x0001bc0a [ ] 3.0% 16384/554285 bytes...
Writing at 0x00025dd8 [> ] 5.9% 32768/554285 bytes...
Writing at 0x0002a3ec [=> ] 8.9% 49152/554285 bytes...
Writing at 0x0003143d [==> ] 11.8% 65536/554285 bytes...
Writing at 0x000373c8 [===> ] 14.8% 81920/554285 bytes...
Writing at 0x0003d63c [====> ] 17.7% 98304/554285 bytes...
Writing at 0x00043631 [=====> ] 20.7% 114688/554285 bytes...
Writing at 0x000497ee [======> ] 23.6% 131072/554285 bytes...
Writing at 0x0004f95f [======> ] 26.6% 147456/554285 bytes...
Writing at 0x00055784 [=======> ] 29.6% 163840/554285 bytes...
Writing at 0x0005bd85 [========> ] 32.5% 180224/554285 bytes...
Writing at 0x00062271 [=========> ] 35.5% 196608/554285 bytes...
Writing at 0x000682fa [==========> ] 38.4% 212992/554285 bytes...
Writing at 0x0006edd9 [===========> ] 41.4% 229376/554285 bytes...
Writing at 0x00074d14 [============> ] 44.3% 245760/554285 bytes...
Writing at 0x0007aecb [=============> ] 47.3% 262144/554285 bytes...
Writing at 0x0008127b [==============> ] 50.2% 278528/554285 bytes...
Writing at 0x00087383 [==============> ] 53.2% 294912/554285 bytes...
Writing at 0x0008d6da [===============> ] 56.2% 311296/554285 bytes...
Writing at 0x000939f8 [================> ] 59.1% 327680/554285 bytes...
Writing at 0x0009996c [=================> ] 62.1% 344064/554285 bytes...
Writing at 0x0009f913 [==================> ] 65.0% 360448/554285 bytes...
Writing at 0x000a5627 [===================> ] 68.0% 376832/554285 bytes...
Writing at 0x000ab8a0 [====================> ] 70.9% 393216/554285 bytes...
Writing at 0x000b1934 [=====================> ] 73.9% 409600/554285 bytes...
Writing at 0x000b7ad2 [======================> ] 76.9% 425984/554285 bytes...
Writing at 0x000bdbd6 [======================> ] 79.8% 442368/554285 bytes...
Writing at 0x000c36c9 [=======================> ] 82.8% 458752/554285 bytes...
Writing at 0x000c925e [========================> ] 85.7% 475136/554285 bytes...
Writing at 0x000cef9f [=========================> ] 88.7% 491520/554285 bytes...
Writing at 0x000d4ab7 [==========================> ] 91.6% 507904/554285 bytes...
Writing at 0x000daa2e [===========================> ] 94.6% 524288/554285 bytes...
Writing at 0x000e0944 [============================> ] 97.5% 540672/554285 bytes...
Writing at 0x000e7200 [==============================] 100.0% 554285/554285 bytes...
Wrote 881152 bytes (554285 compressed) at 0x00010000 in 3.1 seconds (2253.9 kbit/s).
Verifying written data...
Hash of data verified.
SHA digest in image updated.
Flash will be erased from 0x00000000 to 0x00005fff...
Compressed 22576 bytes to 14044...
Writing at 0x00000000 [ ] 0.0% 0/14044 bytes...
Writing at 0x00005830 [==============================] 100.0% 14044/14044 bytes...
Wrote 22576 bytes (14044 compressed) at 0x00000000 in 0.2 seconds (977.5 kbit/s).
Verifying written data...
Hash of data verified.
Flash will be erased from 0x00008000 to 0x00008fff...
Compressed 3072 bytes to 134...
Writing at 0x00008000 [ ] 0.0% 0/134 bytes...
Writing at 0x00008c00 [==============================] 100.0% 134/134 bytes...
Wrote 3072 bytes (134 compressed) at 0x00008000 in 0.0 seconds (1047.3 kbit/s).
Verifying written data...
Hash of data verified.
Flash will be erased from 0x00009000 to 0x0000afff...
Compressed 8192 bytes to 31...
Writing at 0x00009000 [ ] 0.0% 0/31 bytes...
Writing at 0x0000b000 [==============================] 100.0% 31/31 bytes...
Wrote 8192 bytes (31 compressed) at 0x00009000 in 0.0 seconds (2166.0 kbit/s).
Verifying written data...
Hash of data verified.
Hard resetting via RTS pin...
INFO Successfully uploaded program.
INFO Starting log output from /dev/ttyACM0 with baud rate 115200
[21:15:07.144]I (193) esp_image: segment 3: paddr=000e470c vaddr=4080ce0c size[I][logger:120]: Log initialized
[21:15:07.145][C][safe_mode:136]: Unsuccessful boot attempts: 0
[21:15:07.148][D][esp32.preferences:144]: Writing 1 items: 0 cached, 1 written, 0 failed
[21:15:07.149][I][app:089]: Running through setup()
[21:15:07.151][D][binary_sensor:048]: 'System Boot Error' >> OFF
[21:15:07.152][D][light:079]: 'System Status LED' Setting:
[21:15:07.152][D][light:085]: Color mode: On/Off
[21:15:07.260][C][component:252]: Setup openthread took 107ms
[21:15:07.280][W][component:398]: api set Warning flag: unspecified
[21:15:07.282][D][openthread:157]: Setting up SRP services. count = 2
[21:15:07.283][D][openthread:207]: Added service: _esphomelib._tcp
[21:15:07.283][D][openthread:207]: Added service: _http._tcp
[21:15:07.283][D][openthread:211]: Finished SRP setup
[21:15:07.284][I][app:138]: setup() finished successfully!
[21:15:07.284][D][text_sensor:120]: 'Aktive Verbindung' >> 'Getrennt'
[21:15:07.284][D][openthread:113][ot_main]: Thread Version: 5
[21:15:07.285][D][openthread:137][ot_main]: Link Mode Device Type: TRUE, Network Data: TRUE, RX On When Idle: TRUE
[21:15:07.286][I][openthread:152][ot_main]: Activating dataset...
[21:15:07.288][I][app:231]: ESPHome version 2026.3.1 compiled on 2026-03-28 21:11:46 +0100
[21:15:07.288][I][app:233]: Project xiao.esp32c6_sensors version 1.0.0
[21:15:07.289][I][app:238]: ESP32 Chip: ESP32-C6 rev0.2, 1 core(s)
[21:15:07.289][C][logger:229]: Logger:
[21:15:07.289][C][logger:229]: Max Level: DEBUG
[21:15:07.289][C][logger:229]: Initial Level: DEBUG
[21:15:07.289][C][logger:236]: Log Baud Rate: 115200
[21:15:07.289][C][logger:236]: Hardware UART: USB_SERIAL_JTAG
[21:15:07.289][C][logger:246]: Task Log Buffer Size: 768 bytes
[21:15:07.305][C][gpio.output:010]: Binary Output:
[21:15:07.305][C][gpio.output:152]: Pin: GPIO15
[21:15:07.306][C][gpio.output:012]: Inverted: YES
[21:15:07.312][C][template.binary_sensor:016]: Template Binary Sensor 'System Boot Error'
[21:15:07.312][C][template.binary_sensor:237]: Device Class: 'problem'
[21:15:07.317][C][template.text_sensor:016]: Template Sensor 'Aktive Verbindung'
[21:15:07.318][C][template.text_sensor:228]: Icon: 'mdi:transit-connection-variant'
[21:15:07.323][C][light:092]: Light 'System Status LED'
[21:15:07.353][C][openthread:029]: Open Thread:
[21:15:07.353][C][openthread:031]: Device Type: FTD
[21:15:07.359][C][web_server:434]: Web Server:
[21:15:07.359][C][web_server:434]: Address: test-esp32c6.local:80
[21:15:07.364][C][esphome.ota:071]: Over-The-Air updates:
[21:15:07.364][C][esphome.ota:071]: Address: test-esp32c6.local:3232
[21:15:07.364][C][esphome.ota:071]: Version: 2
[21:15:07.369][C][safe_mode:026]: Safe Mode:
[21:15:07.370][C][safe_mode:026]: Successful after: 60s
[21:15:07.370][C][safe_mode:026]: Invoke after: 15 attempts
[21:15:07.370][C][safe_mode:026]: Duration: 300s
[21:15:07.370][C][safe_mode:043]: Bootloader rollback: support unknown
[21:15:07.375][C][web_server.ota:238]: Web Server OTA
[21:15:07.380][C][api:237]: Server:
[21:15:07.381][C][api:237]: Address: test-esp32c6.local:6053
[21:15:07.381][C][api:237]: Listen backlog: 4
[21:15:07.381][C][api:237]: Max connections: 8
[21:15:07.381][C][api:244]: Noise encryption: YES
[21:15:07.383][D][text_sensor:120]: 'Thread PAN ID' >> '16e7'
[21:15:07.387][C][openthread_info:016]: IPAddress 'Thread IP Adresse'
[21:15:07.393][C][openthread_info:016]: Role 'Thread Role'
[21:15:07.398][C][openthread_info:016]: PAN ID 'Thread PAN ID'
[21:15:07.403][C][mdns:194]: mDNS:
[21:15:07.403][C][mdns:194]: Hostname: test-esp32c6
[21:15:07.703][D][text_sensor:120]: 'Thread Role' >> 'detached'
[21:15:08.098][D][main:089]: Thread verloren oder noch nicht verbunden!
[21:15:12.092][D][text_sensor:120]: 'Thread IP Adresse' >> 'fd25:477b:2492:1:99a:5154:17c2:c558'
[21:15:12.093][I][openthread:107][ot_main]: SRP client has started
[21:15:12.711][D][text_sensor:120]: 'Thread Role' >> 'router'
[21:15:23.531][D][api:222]: Accept FD25:477B:2492:1:D3F6:6CB5:DB06:EB1
[21:15:23.532][W][component:429]: api cleared Warning flag
[21:15:23.532][D][main:341]: >>> SYSTEM ONLINE <<<
[21:15:23.533][D][light:079]: 'System Status LED' Setting:
[21:15:23.533][D][light:092]: State: ON
[21:15:23.534][D][light:079]: 'System Status LED' Setting:
[21:15:23.534][D][light:092]: State: OFF
[21:15:23.534][D][light:079]: 'System Status LED' Setting:
[21:15:23.535][D][main:022]: Thread Netzwerk steht, LED aus.
[21:15:23.535][D][light:079]: 'System Status LED' Setting:
[21:15:23.535][D][light:092]: State: ON
[21:15:23.536][D][light:079]: 'System Status LED' Setting:
[21:15:23.536][D][light:092]: State: OFF
[21:15:23.536][D][main:043]: >>> SYSTEM ONLINE <<<
[21:15:23.689][D][api.connection:2440]: Home Assistant 2026.3.4 (FD25:477B:2492:1:D3F6:6CB5:DB06:EB1): connected
[21:15:37.287][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
[21:16:07.150][I][safe_mode:091]: Boot seems successful; resetting boot loop counter
[21:16:07.292][D][text_sensor:120]: 'Aktive Verbindung' >> 'Thread'
[21:16:08.285][D][esp32.preferences:144]: Writing 1 items: 0 cached, 1 written, 0 failed
Screenshots
esp32c6-test.txt
Version
2026.3.1
What type of installation are you using?
Home Assistant Add-on
Browser
Chrome
What happened?
I installed a Seeed XIAO Esp32c6 as a fully thread device over an USB port plugged into homeassistant server running ESPHome Builder. The esp32c6 is flashed, goes online, reports as a Router device and everything works. I plan to use 3 esp32c6 as thread routers in my house.
BUT: I cannot update/flash these devices except over USB. I cannot flash then via Thread from the ESPHome builder nor can I do a manual download and upload it via the web server on the ESP32C6. Is that not possible, not planned or is there a general problem or is it my Thread Border Router ?
I do not want to climb on a ladder, unscrew the case from the ceiling, transport it to homeassistant, flash it over USB and then remount it on the ceiling every time I need to update it.
My Thread Border Router is a SMLIGHT SLZB-MR1 attached to homeassistant via Ethernet cable.
How to reproduce
The ESP32C6 was flashed via USB and is running as a Thread Router.
2. open ESPHome builder
3. click Install
4. click Wirelessly
5. and after some time "ERROR Error receiving acknowledge version: [Errno 104] Connection reset by peer"
Expected behavior
To be able to flash the Esp32C6 wirelessly
Relevant log output
Screenshots
esp32c6-test.txt