Skip to content

Instantly share code, notes, and snippets.

@shibajee
Created August 27, 2020 06:15
Show Gist options
  • Save shibajee/4861767bc10fde9328ed59b817bcc521 to your computer and use it in GitHub Desktop.
Save shibajee/4861767bc10fde9328ed59b817bcc521 to your computer and use it in GitHub Desktop.
Change region of Xiaomi routers to unlock all channel:
1. Login to ur router in browser.
2. Open a new tab and paste this
http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_country_code?country=CN
get the stok value from login tab and replace it in new tab and then hit enter.
3. Router will reboot automatically and on next login u will see all 5Ghz channel 36~48 and 149~165.
**u can also go with country=HK or country=TW (hongkong or taiwan)
@krisyan80
Copy link

Cant find CN/TW/HK, here is my country_code in my router AX3000: { "current": "FR", "list": [ { "name": "South Korea", "code": "KR" }, { "name": "Singapore", "code": "SG" }, { "name": "Malaysia", "code": "MY" }, { "name": "France", "code": "FR" }, { "name": "Germany", "code": "DE" }, { "name": "Italy", "code": "IT" }, { "name": "Spain", "code": "ES" }, { "name": "Indonesia", "code": "ID" }, { "name": "Thailand", "code": "TH" }, { "name": "Vietnam", "code": "VN" }, { "name": "Brazil", "code": "BR" }, { "name": "Russia", "code": "RU" }, { "name": "Turkey", "code": "TR" }, { "name": "阿拉伯联合酋长国(迪拜)", "code": "AE" }, { "name": "Australia", "code": "AU" }, { "name": "Belgium", "code": "BE" }, { "name": "Switzerland", "code": "CH" }, { "name": "Chile", "code": "CL" }, { "name": "Denmark", "code": "DK" }, { "name": "Egypt", "code": "EG" }, { "name": "Finland", "code": "FI" }, { "name": "Ireland", "code": "IE" }, { "name": "Israel", "code": "IL" }, { "name": "Morocco", "code": "MA" }, { "name": "Nigeria", "code": "NG" }, { "name": "Netherlands", "code": "NL" }, { "name": "Norway", "code": "NO" }, { "name": "Peru", "code": "PE" }, { "name": "Poland", "code": "PL" }, { "name": "Sweden", "code": "SE" }, { "name": "Ukraine", "code": "UA" }, { "name": "United Kingdom", "code": "GB" }, { "name": "New Zealand", "code": "NZ" }, { "name": "Portugal", "code": "PT" }, { "name": "Kenya", "code": "KE" }, { "name": "Bulgaria", "code": "BG" }, { "name": "Columbia", "code": "CO" }, { "name": "Czech Republic", "code": "CZ" }, { "name": "Estonia", "code": "EE" }, { "name": "Greece", "code": "GR" }, { "name": "Croatia", "code": "HR" }, { "name": "Hungary", "code": "HU" }, { "name": "Jordan", "code": "JO" }, { "name": "Cambodia", "code": "KH" }, { "name": "Lithuania", "code": "LT" }, { "name": "Latvia", "code": "LV" }, { "name": "Malta", "code": "MT" }, { "name": "Romania", "code": "RO" }, { "name": "Slovakia", "code": "SK" }, { "name": "Laos", "code": "LA" } ], "code": 0 }

I have the CN/TW/HK version, otherwise I need the global version, can you share your global version of Firmware with me? I will also share my Chinese version

@mstewart197930
Copy link

HI, I have just bought an ax1500 from aliexpress, and didnt realise it is chinese version, i dont seem to be able to change the language to english, any ideas???
thanks

@Unailoro
Copy link

HI, I have just bought an ax1500 from aliexpress, and didnt realise it is chinese version, i dont seem to be able to change the language to english, any ideas??? thanks

Hi, to change the language to English, you have to update the firmware to the global version.

@mstewart197930
Copy link

mstewart197930 commented Aug 31, 2024 via email

@CristianZatt
Copy link

Doesn't work on xiaomi be3600 as it unfortunately
has only CN region in the firmware.

@umutkeltek
Copy link

For those who cannot set the country to CN, TW, or HK, the best option might be South Korea (KR).

Additionally, from my experience, when you reset your router, if your first attempt is to set it to CN, TW, or HK, the router will change the country even if it shows an "invalid token" message. I changed mine to KR, and now I'm unable to change it back to CN, even though I was using CN before I had to reset my router.

@umutkeltek
Copy link

umutkeltek commented Oct 23, 2024

Instead of using set_country_code use this link:

http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_location?location=CN

You are not limited to country list.

@Shuozhe
Copy link

Shuozhe commented Nov 1, 2024

Instead of using set_country_code use this link:

http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_location?location=CN

You are not limited to country list.

Thanks, worked on my ax3600! Couldnt pair mi home app set to mainland before that (and router is not available in germany)

@umutkeltek
Copy link

Thanks, worked on my ax3600! Couldnt pair mi home app set to mainland before that (and router is not available in germany)

Glad to hear it worked! I haven't tried using the Mi Home app myself; I've been using the Mi WiFi app, but honestly, it feels a bit like trash. I prefer controlling through browser directly, it gives more control.

@ThomazPassarelli
Copy link

I have a Redmi AX6 Chinese Version running on MiWiFi 稳定版 1.1.14
accessing:
http://192.168.31.1/cgi-bin/luci/;stok=XXXXXXXXXXXXXXXXXXXX/api/xqsystem/country_code
Response:
{"current":"CN","list":[{"name":"中国大陆","code":"CN"},{"name":"香港地区","code":"HK"},{"name":"台湾地区","code":"TW"},{"name":"韩国","code":"KR"},{"name":"欧洲","code":"EU"}],"code":0}

Upon accessing:
http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_country_code?country=HK
Response:
{"msg":"操作失败","code":1606}

Also tried:
http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_location?location=HK
Response:
No page is registered at '/api/xqsystem/set_location'.
If this url belongs to an extension, make sure it is properly installed.
If the extension was recently installed, try removing the /tmp/luci-indexcache file.

@TheGraske
Copy link

Same issue here, anyone got a solution if neither set_country_code or set_location works?

@fich
Copy link

fich commented Jan 15, 2025

Works on my Mi Router 4a Global (not gigabit)
Thx

January 2025

@DiegoS-AS
Copy link

I have a Redmi AX6 Chinese Version running on MiWiFi 稳定版 1.1.14 accessing: http://192.168.31.1/cgi-bin/luci/;stok=XXXXXXXXXXXXXXXXXXXX/api/xqsystem/country_code Response: {"current":"CN","list":[{"name":"中国大陆","code":"CN"},{"name":"香港地区","code":"HK"},{"name":"台湾地区","code":"TW"},{"name":"韩国","code":"KR"},{"name":"欧洲","code":"EU"}],"code":0}

Upon accessing: http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_country_code?country=HK Response: {"msg":"操作失败","code":1606}

Also tried: http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_location?location=HK Response: No page is registered at '/api/xqsystem/set_location'. If this url belongs to an extension, make sure it is properly installed. If the extension was recently installed, try removing the /tmp/luci-indexcache file.

I got the same issue. Tried every method so far, i have an AX9000

@saif4341996
Copy link

Please note that some of these APIs are POST apis meaning you have to either use a tool like POSTMAN or write an actual code script to make these work. I couldnt get the actual complete channel list by changing the country but i was able to manually hard set the channel to 157 by using this API.

the important value below is channel2-157

http://router.miwifi.com/cgi-bin/luci/;stok=xxxxxx/api/xqnetwork/set_all_wifi?bsd=0&on1=1&ssid1=Xiaomi_601C&encryption1=psk2&channel1=0&bandwidth1=0&hidden1=0&txpwr1=max&pwd1=xxxxx&on2=1&ssid2=Xiaomi_601C_5G&encryption2=psk2&channel2=157&bandwidth2=0&hidden2=0&txpwr2=max&pwd2=xxxxxx&isDFS=0

hope this helps atleast somebody. I was trying to resolve this since 1 whole day until it hit me that not all api requests work on simple browsers.

Additionally, you can chech which apis are used by opening up developer tools and checking the network tab and then clicking on a button. from there you can take the api and payload format and try it yourself the way you would like.

@muneebshafiq
Copy link

muneebshafiq commented Feb 18, 2025

I was able to unlock upper channels (149 and above) of 5GHz WiFi on Ax3000. For me what I did was

  • Turned off smart connect i.e. separated 2.4GHz and 5GHz bands
  • First changed the location** and country code*** of satellite router then primary router to CN.
  • Changed the 5GHz bandwidth to 80MHz.

** http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_location?location=CN
*** http://192.168.31.1/cgi-bin/luci/;stok=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/api/xqsystem/set_country_code?country=CN

If you change the primary router first it will break the mesh network and you have to reset it. Also keep the wireless channel to auto because dropdown will not show the extended channels. I initalized the router with South Korea region and after changing the location to CN I changed the time zone of primaray router to Korea again as satellite/mesh router timezone was not changed with location change

image

@zcop
Copy link

zcop commented Mar 1, 2025

For those who has {"msg":"操作失败","code":1606} because CountryCode hardcode within bdata partition
You can change Country Code by editing bdata mtd partition then write back to device.
Here 's some steps:

1.Get bdata partition to edit. Require ssh enabled.

  • List all mtd partition to find which is bdata, in my case bdata is mtd15
    #cat /proc/mtd
  • Get bdata
    #nanddump -f /tmp/bdata.bin /dev/mtd15
  • Download bdata.bin to PC to edit with WinSCP or something like that.

2.Edit countrycode. Need hex editor, python 3 and some python script in https://github.com/odedlaz/ax3600-files/tree/master/scripts

  • Open bdata.bin in Hex Editor, replace old Country code whith new one then save the file.
    image
  • Calculate CRC32 of new file with crc32.py from above github
    python C:\crc32.py "C:\Users\z**\Desktop\bdata.bin"
    new:      0xc71829ed
    original: 0x20dddf5c
  • Edit bdata first 4 offset with new CRC32 checksum
    image
  1. Enable write permission on bdata partition. Default is readonly. SSH to Router
  • Run command to some write magic bytes to crash partition that make bdata writeable
    zz=$(dd if=/dev/zero bs=1 count=2 2>/dev/null) ; printf '\xA5\x5A%c%c' $zz $zz | mtd write - crash
  • Reboot device
    Reboot
  • I use WinsSCP uploading edited bdada.bin to /tmp/
  • Write new bdata to NAND
    mtd write /tmp/bdata.bin bdata
  • Reboot device
    Reboot
  1. The result
    image
  2. DFS channel(100-144) still not working as expected. wifi 5ghz disappeared. Maybe my device is for China only so Xiaomi blocking those channel from firmware that nothing i can do :/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment