as in your pin assignments in the config page aren't saving?
as in your pin assignments in the config page aren't saving?
Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie taminsmod wrote:did xr809 ota ever work?
p.kaczmarek2 wrote:can you try with older OBK binary?
insmod wrote:
did xr809 ota ever work?.
[0m
[17:49:11.452] - [33;4m
sysTick:90127
7C3E82C16F17
10.10.123.3
fh:62544
st1:21 st2:0 st3:0
life:%100
repT:0s
pwr:0
wanT:0 lanT:0
ping:0 (0) 9999
rssi:-9999 (0) 9999
[17:56:47.813] - serial type is general
[17:56:50.190] - Open COM5 Success[19:49:31.413] - Starting bl602 now....
Booting BL602 Chip...
██████╗ ██╗ ██████╗ ██████╗ ██████╗
██╔══██╗██║ ██╔════╝ ██╔═████╗╚════██╗
██████╔╝██║ ███████╗
[19:49:31.413] - ██║██╔██║ █████╔╝
██╔══██╗██║ ██╔═══██╗████╔╝██║██╔═══╝
██████╔╝███████╗╚██████╔╝╚██████╔╝███████╗
╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚══════╝
------------------------------------------------------------
RISC-V Core Feature:RV32-ACFIMX
Build Version: release_bl_iot_sdk_1.6.39-238-gf5ba0a7ee
Build Date: Jun 21 2025
Build Time: 05:56:26
------------------------------------------------------------
blog init set power on level 2, 2, 2.
[IRQ] Clearing and Disable all the pending IRQ...
[ 0][INFO: hal_boot2.c: 282] [HAL] [BOOT2] Active Partition[0] consumed 596 Bytes
[ 0][INFO: hal_boot2.c: 82] ======= PtTable_Config @0x4200f250=======
[ 0][INFO: hal_boot2.c: 83] magicCode 0x54504642; version 0x0000; entryCnt 7; age 0; crc32 0x12DF9A26
[ 0][INFO: hal_boot2.c: 89] idx type device activeIndex name Address[0] Address[1] Length[0] Length[1] age
[ 0][INFO: hal_boot2.c: 91] [00] 00 0 0 FW 0x00010000 0x000e8000 0x000d8000 0x00088000 0
[ 0][INFO: hal_boot2.c: 91] [01] 02 0 0 mfg 0x00170000 0x00000000 0x00032000 0x00000000 0
[ 0][INFO: hal_boot2.c: 91] [02] 03 0 0 media 0x001a2000 0x00000000 0x00047000 0x00000000 0
[ 0][INFO: hal_boot2.c: 91] [03] 04 0 0 PSM 0x001e9000 0x00000000 0x00008000 0x00000000 0
[ 0][INFO: hal_boot2.c: 91] [04] 05 0 0 KEY 0x001f1000 0x00000000 0x00002000 0x00000000 0
[ 0][INFO: hal_boot2.c: 91] [05] 06 0 0 DATA 0x001f3000 0x00000000 0x00005000 0x00000000 0
[ 0][INFO: hal_boot2.c: 91] [06] 07 0 0 factory 0x001f8000 0x00000000 0x00007000 0x00000000 0
[ 0][INFO: bl_flash.c: 391] ======= FlashCfg magiccode @0x42049c18=======
[ 0][INFO: bl_flash.c: 392] mid 0x5E
[ 0][INFO: bl_flash.c: 393] clkDelay 0x1
[ 0][INFO: bl_flash.c: 394] clkInvert 0x1
[ 0][INFO: bl_flash.c: 395] sector size 4KBytes
[ 0][INFO: bl_flash.c: 396] page size 256Bytes
[ 0][INFO: bl_flash.c: 397] ---------------------------------------------------------------
[ 0][INFO: hal_board.c:1249] [MAIN] [BOARD] [FLASH] addr from partition is 001f8000, ret is 0
[ 0][INFO: hal_board.c:1257] [MAIN] [BOARD] [XIP] addr from partition is 231e7000, ret is 0
[ 0][INFO: hal_board.c: 208] MAC address mode length 3
[ 0][INFO: hal_board.c: 212] MAC address mode is MBF
Read slot:0
[ 0][INFO: hal_board.c: 187] Set MAC addrress 7C:3E:82:C1:6F:17
[ 0][INFO: hal_board.c: 955] country_code : 86
[ 0][INFO: hal_board.c: 342] xtal_mode is MF
Read slot:0
[ 0][INFO: hal_board.c: 374] get xtal from M ready 31 31 1 60 60
[ 0][INFO: hal_board.c: 846] pwr_table_11b :20 20 20 18
[ 0][INFO: hal_board.c: 860] pwr_table_11g :18 18 18 18 18 18 14 14
[ 0][INFO: hal_board.c: 878] pwr_table_11n :18 18 18 18 18 16 14 14
No written slot found
[ 0][BUF: hal_board.c: 606] 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[ 0][INFO: hal_board.c: 902] set pwr_table_ble = 13 in dts
[ 0][INFO: hal_board.c: 687] ap_ssid string[0] = bl_test_005, ap_ssid_len = 11
[
[19:49:31.429] - 0][INFO: hal_board.c: 698] ap_psk string[0] = 12345678, ap_psk_len = 8
[ 0][INFO: hal_board.c: 707] ap_channel
[19:49:31.429] - = 11
[ 0][INFO: hal_board.c: 635] [STA] ap_ssid string[0] = yourssid, ap_ssid_len = 8
[ 0][INFO: hal_board.c: 646] [STA] ap_psk string[0] = yourapssword, ap_psk_len = 12
[ 0][INFO: hal_board.c: 654] auto_connect_enable = 0
[ 0][INFO: hal_board.c: 749] Troom_os = -1, lentmp = 4
[ 0][INFO: hal_board.c: 758] linear_or_follow = 1, lentmp = 4
[ 0][INFO: hal_board.c: 767] Tchannels:2412,2427,2442,2457,2472,
[ 0][INFO: hal_board.c: 781] Tchannel_os:180,168,163,160,157,
[ 0][INFO: hal_board.c: 795] Tchannel_os_low:199,186,170,165,160,
[ 0][INFO: hal_board.c: 808] en_tcal = 0, lentmp = 4
[OS] Starting aos_loop_proc task...
[OS] Starting OS Scheduler...
[MTD] >>>>>> Hanlde info Dump >>>>>>
name PSM
id 0
offset 0x001e9000(2002944)
size 0x00008000(32Kbytes)
xip_addr 0x231d8000
[MTD] <<<<<< Hanlde info End <<<<<<
[EF] Found Valid PSM partition, XIP Addr 231d8000, flash addr 001e9000, size 32768
ENV AREA SIZE 32768, SECTOR NUM 8
*default_env_size = 0x00000001
ENV start address is 0x00000000, size is 32768 bytes.
[19:49:31.476] - EasyFlash V4.0.99 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
[MTD] >>>>>> Hanlde info Dump >>>>>>
name media
id 0
offset 0x001a200
[19:49:31.476] - 0(1712128)
size 0x00047000(284Kbytes)
xip_addr 0x23191000
[MTD] <<<<<< Hanlde info End <<<<<<
[ 38][ERROR : bl_romfs.c: 158] romfs magic is NOT correct
[ 39][INFO : hosal_adc.c: 459] offset = 2132
[ 39][INFO : hosal_adc.c: 233] ADC freq: 284Hz. div:6
[OS] Starting proc_mian_entry task...
[OS] Starting TCP/IP Stack...
-------------------->>>>>>>> LWIP tcp_port 58301
[MTD] >>>>>> Hanlde info Dump >>>>>>
name PSM
id 0
offset 0x001e9000(2002944)
size 0x00008000(32Kbytes)
xip_addr 0x231d8000
[MTD] <<<<<< Hanlde info End <<<<<<
[EF] Found Valid PSM partition, XIP Addr 231d8000, flash addr 001e9000, size 32768
ENV AREA SIZE 32768, SECTOR NUM 8
*default_env_size = 0x00000001
EasyFlash V4.0.99 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
Start Wi-Fi fw @95ms
[19:49:31.554] - 1th channel,lo_vco_freq_cw=154
2th channel,lo_vco_freq_cw=153
3th channel,lo_vco_freq_cw=152
4th channel,lo_vco_freq_cw=151
5th channel,lo_vco_freq_cw=149
6th channel,lo_vco_freq_cw=148
7th channel,lo_vco
[19:49:31.554] - _freq_cw=147
8th channel,lo_vco_freq_cw=145
9th channel,lo_vco_freq_cw=144
10th channel,lo_vco_freq_cw=143
11th channel,lo_vco_freq_cw=141
12th channel,lo_vco_freq_cw=140
13th channel,lo_vco_freq_cw=139
14th channel,lo_vco_freq_cw=138
15th channel,lo_vco_freq_cw=136
16th channel,lo_vco_freq_cw=135
17th channel,lo_vco_freq_cw=134
18th channel,lo_vco_freq_cw=133
19th channel,lo_vco_freq_cw=132
20th channel,lo_vco_freq_cw=130
21th channel,lo_vco_freq_cw=129
0th channel,vco_idac_cw=7
1th channel,vco_idac_cw=6
2th channel,vco_idac_cw=6
3th channel,vco_idac_cw=6
4th channel,vco_idac_cw=6
5th channel,vco_idac_cw=6
6th channel,vco_idac_cw=6
7th channel,vco_idac_cw=6
8th channel,vco_idac_cw=6
9th channel,vco_idac_cw=6
10th channel,vco_idac_cw=5
11th channel,vco_idac_cw=5
12th channel,vco_idac_cw=5
13th channel,vco_idac_cw=5
14th channel,vco_idac_cw=5
15th channel,vco_idac_cw=6
16th channel,vco_idac_cw=5
17th channel,vco_idac_cw=5
18th channel,vco_idac_cw=5
19th channel,vco_idac_cw=5
20th channel,vco_idac_cw=5
LO locked 9 144
rosdac_i_gc3=27
rosdac_i_gc2=27
rosdac_i_gc1=27
rosdac_i_gc0=27
rosdac_q_gc3=33
rosdac_q_gc2=33
rosdac_q_gc1=33
rosdac_q_gc0=33
rbb_cap1_fc_i=30,rbb_cap2_fc_i=30,rbb_cap1_fc_q=30,rbb_cap2_fc_q=30
new rbb_cap1_fc_i=54,rbb_cap2_fc_i=54,rbb_cap1_fc_q=54,rbb_cap2_fc_q=54
LO locked 9 144
amp=128,step=32,adc_mean_i=85
amp=160,step=16,adc_mean_i=111
tmx_cs=0, tmxcs_pwr_avg=50712, tmxcs_pwr_avg>>10=49
tmx_cs=1, tmxcs_pwr_avg=57332, tmxcs_pwr_avg>>10=55
tmx_cs=2, tmxcs_pwr_avg=66924, tmxcs_pwr_avg>>10=65
tmx_cs=3, tmxcs_pwr_avg=81456, tmxcs_pwr_avg>>10=79
tmx_cs=4, tmxcs_pwr_avg=98581, tmxcs_pwr_avg>>10=96
tmx_cs=5, tmxcs_pwr_avg=112166, tmxcs_pwr_avg>>10=109
tmx_cs=6, tmxcs_pwr_avg=110187, tmxcs_pwr_avg>>10=107
tmx_cs=7, tmxcs_pwr_avg=95296, tmxcs_pwr_avg>>10=93
tmx_cs_max=5, tmxcs_pwr_max=112166, tmxcs_pwr_max>>10=109
amp=256,step=64,adc_mean_i=112
amp=320,step=32,adc_mean_i=228
tosdac_i=30,tosdac_q=44,tx_iq_gain_comp=1054,tx_iq_phase_comp=1
tosdac_i=28,tosdac_q=42,tx_iq_gain_comp=1042,tx_iq_phase_comp=5
tosdac_i=28,tosdac_q=44,tx_iq_gain_comp=1029,tx_iq_phase_comp=4
tosdac_i=31,tosdac_q=47,tx_iq_gain_comp=1040,tx_iq_phase_comp=2
tosdac_i=31,tosdac_q=47,tx_iq_gain_comp=1040,tx_iq_phase_comp=7
tosdac_i=29,tosdac_q=47,tx_iq_gain_comp=1032,tx_iq_phase_comp=2
tosdac_i=27,tosdac_q=48,tx_iq_gain_comp=1040,tx_iq_phase_comp=0
tosdac_i=27,tosdac_q=46,tx_iq_gain_comp=1042,tx_iq_phase_comp=-3
[WF] [KEY] [CFG] nVAP is 2, endidx 12, startidx 8
td_init
td_reset idx=0
td_reset idx=1
Start Wi-Fi fw is Done @169ms
[APP] [EVT] INIT DONE 118
[BL] Initi Wi-Fi with MAC #### 7C:3E:82:C1:6F:17 ####
hostname: OpenBL602_82c16f17
[WF] country code CN used, num of channel 13
-----------------------------------------------------
[IPC] [TX] Low level size 204, driver size 100, total size 304
Enable BMX IRQ
[WF] [KEY] [CFG] nVAP is 2, endidx 12, startidx 8
td_init
td_reset idx=0
td_reset idx=1
[version] lmac 5.4.0.0
[version] version_machw_1 000055FB
[version] version_machw_2 000001B3
[version] version_phy_1 00822111
[version] version_phy_2 00000000
[version] features 001089DF
[ME] HT supp 1, VHT supp 0
[WF][SM] reload tsen
[WF][SM] Exiting ifaceDown state
[WF][SM] State Action ###ifaceDown### --->>> ###idle###
[WF][SM] Entering idle state
[APP] [EVT] MGMR DONE 130, now 182ms
[19:49:32.017] - Entering initLog()...
Commands registered!
initLog() done!
[MTD] >>>>>> Hanlde info Dump >>>>>>
na
[19:49:32.017] - me PSM
id 0
offset 0x001e9000(2002944)
size 0x00008000(32Kbytes)
xip_addr 0x231d8000
[MTD] <<<<<< Hanlde info End <<<<<<
[EF] Found Valid PSM partition, XIP Addr 231d8000, flash addr 001e9000, size 32768
ENV AREA SIZE 32768, SECTOR NUM 8
*default_env_size = 0x00000001
EasyFlash V4.0.99 is initialize success.
You can get the latest version on https://github.com/armink/EasyFlash .
[19:49:32.050] - [ 651][WARN : bl_mtd.c: 205] addr@0x230a4d1c is xip flash, size 8
[19:49:32.150] - [MTD] >>>>>> Hanlde info Dump >>>>>>
name media
id 0
offset 0x001a2000(1712128)
size 0x00047000(284Kbytes)
xip_ad
[19:49:32.167] - dr 0x23191000
[MTD] <<<<<< Hanlde info End <<<<<<
Main_Init_Before_Delay done
Main_Init_Delay
Main_Init_Delay done
Info:MAIN:Main_Init_Before_Delay
Warn:CFG:CFG_InitAndLoad: Correct config has been loaded with 2 changes count.
Error:CMD:lfs is absent
Info:GEN:PIN_SetupPins pins have been set up.
Info:MAIN:Main_Init_Before_Delay done
Info:MAIN:Main_Init_Delay
Info:MAIN:Main_Init_Delay done
Info:MAIN:Main_Init_After_Delay
Info:MAIN:Using SSID []
Info:MAIN:Using Pass []
Error:HTTP:Created HTTP SV thread with (stack=2048)
Info:MQTT:MQTT_RegisterCallback called for bT obl82C16F17/ subT obl82C16F17/+/set
Info:MQTT:MQTT_RegisterCallback called for bT bl602s/ subT bl602s/+/set
Info:MQTT:MQTT_RegisterCallback called for bT cmnd/obl82C16F17/ subT cmnd/obl82C16F17/+
Info:MQTT:MQTT_RegisterCallback called for bT cmnd/bl602s/ subT cmnd/bl602s/+
Info:MQTT:MQTT_RegisterCallback called for bT obl82C16F17/ subT obl82C16F17/+/get
Info:CMD:CMD_StartScript: started @startup at the beginning
Error:CMD:LFS_ReadFile: lfs is absent
Info:CMD:CMD_StartScript: failed to get file autoexec.bat
Info:MAIN:Main_Init_After_Delay done
[19:49:33.051] - Info:MAIN:Time 1, idle 0/s, free 112736, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:34.005] - Info:MAIN:Time 2, idle 0/s, free 112736, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:34.975] - Info:MAIN:Time 3, idle 0/s, free 112736, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:35.928] - Info:MAIN:Time 4, idle 0/s, free 112736, MQTT 0(0), bWifi 0, secondsWithNoPing
[19:49:35.928] - -1, socks 2/21
[19:49:36.900] - [lwip] netif status callback
IP: 192.168.11.1
MK: 255.255.255.0
GW: 0.0.0.0
[WF] MM_ADD_IF_REQ Sending: AP
td_start idx=0
[W
[19:49:36.900] - F] MM_ADD_IF_REQ Done
[WF] vif_index from LAMC is 0
[lwip] netif status callback
IP: 192.168.169.1
MK: 255.255.255.0
GW: 0.0.0.0
[DHCP] ip_start: [192.168.169.2]
[DHCP] ip_start: [192.168.169.254]
[WF][SM] start AP with ssid OpenBL602_82C16F17;
[WF][SM] pwd ;
[WF][SM] channel 1;
[WF] APM_START_REQ Sending with vif_index 0
[WF] received APM Start apm_start_req_handler:74
[WF] return with other handler
[WF] APM_START_REQ Done
[WF] status is 00
[WF] vif_idx is 00
[WF] ch_idx is 00
[WF] bcmc_idx is 05
[WF][SM] stateGlobalGuard_AP: AP iface has started!
Info:MAIN:Time 5, idle 0/s, free 112736, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[APP] [EVT] Unknown code 11, 5706
[19:49:37.878] - [ 6710][WARN : bl_mtd.c: 205] addr@0x230a4d1c is xip flash, size 8
Info:MAIN:Time 6, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
Info:MAIN:Boot complete time reached (5 seconds)
[19:49:38.816] - In
[19:49:38.832] - fo:MAIN:Time 7, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:39.801] - Info:MAIN:Time 8, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:40.754] - Info:MAIN:Time 9, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:41.722] - Info:MAIN:Time 10, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:42.682] - Info:MAIN:Time 11, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[19:49:43.096] - Close COM5 Success
[19:49:42.682] - Info:MAIN:Time 11, idle 0/s, free 112424, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/21
[16:02:47.930] - [lwip] netif status callback
IP: 192.168.11.1
MK: 255.255.255.0
GW: 0.0.0.0
[WF] MM_ADD_IF_REQ Sending: AP
td_start idx=0
[WF] MM_ADD_IF_REQ Done
[WF] vif_index from LAMC is 0
[lwip] netif status callback
IP: 192.168.169.1
MK: 255.255.255.0
GW: 0.0.0.0
[DHCP] i
[16:02:47.946] - p_start: [192.168.169.2]
[DHCP] ip_start: [192.168.169.254]
[WF][SM] start AP with ssid OpenBL602_82C12029;
[WF][SM] pwd ;
[WF][SM] channel 1;
[WF] APM_START_REQ Sending with vif_index 0
[WF] received APM Start apm_start_req_handler:74
[WF] return with other handler
[WF] APM_START_REQ Done
[WF] status is 00
[WF] vif_idx is 00
[WF] ch_idx is 00
[WF] bcmc_idx is 05
[WF][SM] stateGlobalGuard_AP: AP iface has started!
[ 41][ERROR : bl_romfs.c: 158] romfs magic is NOT correct
.....
Error:CMD:lfs is absent
.....
Error:HTTP:Created HTTP SV thread with (stack=2048)
.....
Error:CMD:LFS_ReadFile: lfs is absent
[16:41:54.353] - [ 6763][WARN : bl_mtd.c: 205] addr@0x230a4d1c is xip flash, size 8
TL;DR: With 0 solder joints and "back ok" as the key success reply, this method lets Magic Home BL602 owners push an OpenBeken OTA file over the device’s own AP using UDP port 48899 and a local HTTP server. It suits users who want a faster no-solder path, but only on firmware that still accepts the vendor OTA trigger. [#21056057]
Why it matters: This gives BL602 Magic Home owners a real no-solder upgrade path, while also showing exactly where newer Zengge firmware blocks it.
| Method | Hardware access | Main transport | Typical result in thread | Recovery path |
|---|---|---|---|---|
| Magic Home OTA exploit | No | UDP 48899 + local HTTP | Works on some BL602 firmwares | Restore dump or solder later |
| mhflasher on Android | No | Automates same OTA path | Works on vulnerable devices | Same limits as OTA exploit |
| UART / BLDevCube flashing | Yes | Serial flashing | Most reliable overall | Full dump restore possible |
| Factory dump restore | Yes | Serial flashing | Confirmed working on 2 MB dumps | Returns device to stock |
Key insight: The no-solder path is real, but it is firmware-dependent. Older Magic Home BL602 builds can fetch and install an OTA image from your own server, while newer builds such as 33_227_20231220_ZG-BL return OTA errors and appear patched. [#21418610]
AT+UPURL=http://10.10.123.4:1111/...; users reported success after about 1 minute. [#21056057]ota download is done! before reset. [#21063222]OpenBL602_...OTA.bin.xz.ota on a local HTTP server, often on port 1111. 3. Send AT+UPURL=http://10.10.123.4:1111/update?... to 10.10.123.3:48899. A working device replies back ok, then usually reboots after about 1 minute and appears as OpenBL602_XXXXXXXX. [#21056057]OpenBL602_1.17.553_OTA.bin.xz.ota, not the plain .bin. The OTA method calls the manufacturer’s updater, so it expects an OTA-formatted image rather than a raw UART-flash binary. The thread explicitly says to choose the version for the BL602 chip and OTA. A regular OpenBL602_...bin is used for wired flashing through tools like BLDevCube, not for the WiFi-only exploit path. [#21056057]AT+LVER reads the installed firmware version, and AT+UPURL tells the device where to fetch an update. In the working example, AT+LVER returned +ok=33_48_20201219_ZG-BL from UDP port 48899. AT+UPURL then pointed the device at a local HTTP URL on 10.10.123.4:1111 so it could download and install OpenBeken. "AT+UPURL is a device OTA trigger that makes the stock firmware fetch a new image from a supplied URL, using the vendor update path rather than UART flashing." [#21056057]+ok=up_ErrType appeared on newer or incompatible Magic Home firmware, including 33_227_20231220_ZG-BL, and on a 35_162_20220801_ZG-BL-BP101 device that did not exploit. +ok=up_ErrHttp points to a fetch or URL issue. A blank +ok= can happen before reboot; one user saw it before disconnect, but the HTTP listener never received a request. Check firmware version, URL reachability, exact query format, and whether that device family still accepts custom OTA payloads. [#21245497]HttpListener on port 1111 and serve OpenBL602_...OTA.bin.xz.ota. 2. Connect your PC to the device AP, usually with the controller at 10.10.123.3 and your PC at 10.10.123.4. 3. In Packet Sender, send AT+UPURL=http://10.10.123.4:1111/update?version=...&beta,pierogi as UDP to port 48899. The thread reports you should see the upload, an OK, then a reboot into OpenBeken. [#21063222]+ok=+ok=up_ErrType, and its UART log showed *system:ota fail after comparing the OpenBeken version string against stock values. Another user also suspected newer versions had been patched against custom firmware via OTA. The thread’s working pattern is clear: exploit success depends on firmware family and date, not just on using a BL602 chip. [#21418610].bin files, and tested full-image writes from address 0x0 or app-region writes from 0x10000. One successful restore to a 4 MB dev board from a 2 MB Magic Home dump booted the stock LED... AP and even paired in the app. That made BLDevCube the main recovery tool when OTA failed. [#21063112]LEDnet... AP and normal app pairing. One user called this a tested dump-and-restore path for putting BL602 devices back to factory firmware. If OpenBeken config is broken, a full restore is the recommended reset path before trying another flash. [#21063222]{"cmd":0,"pv":0,"sn":"...","msg":{}} and returned JSON with fields such as did, pid, mac, ip, and res. "CozyLife local JSON protocol is a device-control API that exchanges structured JSON commands and responses, unlike Magic Home’s short AT strings sent to the vendor pairing port." The thread also tied CozyLife cmd:5 to OTA experiments. [#21068684]