OpenWrt support for Xiaomi AX3000T

I've adjusted the stock firmware checker script (git) provided by @itay to work with the AX3000T RD23 model:

Phyton script
 import requests
 import datetime
 import base64
 import hashlib
 
 # Dummy values, countryCode required if querying EU servers
 # Most important here are the hardware and channel
 params = {
     "countryCode": "EU",
     "deviceID": "",
     "rom": "1.0.31",
     "hardware": "RD23",
     "cfe": "",
     "linux": "0.0.1",
     "ramfs": "0.0.1",
     "sqafs": "0.0.1",
     "rootfs": "0.0.1",
     "channel": "release",
     "locale": 'en_US',
     "serialNumber": "55xxxF4NV0xxx0",
 }
 
 # Default server: http://api.miwifi.com, EU servers: http://eu.api.miwifi.com
 server = "http://eu.api.miwifi.com"
 recoveryURL = "/rs/grayupgrade/recovery"
 normalUpgradeUrl = "/rs/grayupgrade"
 default_token = "8007236f-a2d6-4847-ac83-c49395ad6d65"
 
 def main():
 
     # Constuct initial sub url based on params
     sub_url = recoveryURL + "?"
     for key, value in params.items():
         sub_url += key + "=" + value + "&"
 
     # Add time to params formatted as %Y-%m-%d--%X
     timestr = datetime.datetime.now().strftime("%Y-%m-%d--%X")
     params["time"] = timestr
     
     # Get sorted params list
     sortedParams = sorted(params.items(), key=lambda x: x[0])
 
     # Loop through sorted params to create params string
     paramsString = ""
     for item in sortedParams:
         paramsString += item[0] + "=" + item[1] + "&"
 
     # Append default token to paramsString
     paramsString += default_token
 
     # Create signature of paramsString (md5 with base64 contents)
     signature = hashlib.md5(base64.b64encode(paramsString.encode('utf-8'))).hexdigest()
 
     # Construct url
     url = server + sub_url + "s=" + signature + "&time=" + timestr + "&token=" + default_token
 
     print("URL: " + url)
 
     # Set user agent to "miwifi-", similar to their recovery process
     headers = {'User-Agent': 'miwifi-'}
 
     # Make request with url and headers
     response = requests.get(url, headers=headers)
     
     # Print response details
     print("Status code: " + str(response.status_code))
     print("Response: " + response.text)
 
 if __name__ == "__main__":
     main()
Response

{"code":"0","data":{"needUpgrade":true,"size":24904712,"buildTime":1733813137448,"changelogUrl":"https://cdn.azams0.fds.api.mi-img.com/miwifi/d83d269b-2055-4eb5-92f7-d118a77b4b69.html","toVersionName":"1.0.90","link":"https://cdn.cnbj1.fds.api.mi-img.com/xiaoqiang/rom/rd23/miwifi_rd23_firmware_99b0f_1.0.90_INT.bin","description":"","weight":"1","otherParam":"{\"cfe\":1000002,\"buildTime\":\"1733813137448\",\"linux\":1,\"rootfs\":1,\"weight\":1,\"sqafs\":1,\"ramfs\":1}","upgradeId":"15149","hash":"c4b3384972776e54e291e53f22d99b0f","toVersion":"1.0.90"}}

So, the new stock firmware version 1.0.90 for the RD23 (Global version) is now available:

3 Likes