From 6d58fff6c89d441138c6192c1058b51137da74c1 Mon Sep 17 00:00:00 2001 From: moqiyi <85303405@qq.com> Date: Wed, 3 Sep 2025 08:20:50 +0000 Subject: [PATCH] =?UTF-8?q?update=20docs/Application=5Fguide/zh/firmware-u?= =?UTF-8?q?pgrade/firmware-ota.md.=20=E5=8E=9F=E8=84=9A=E6=9C=AC=E5=8F=8D?= =?UTF-8?q?=E9=A6=88=E4=BD=BF=E7=94=A8=E5=BC=82=E5=B8=B8=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0ota=E7=A4=BA=E4=BE=8B=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: moqiyi <85303405@qq.com> --- .../zh/firmware-upgrade/firmware-ota.md | 132 ++++++++++++------ 1 file changed, 89 insertions(+), 43 deletions(-) diff --git a/docs/Application_guide/zh/firmware-upgrade/firmware-ota.md b/docs/Application_guide/zh/firmware-upgrade/firmware-ota.md index 9378b126..151582b1 100644 --- a/docs/Application_guide/zh/firmware-upgrade/firmware-ota.md +++ b/docs/Application_guide/zh/firmware-upgrade/firmware-ota.md @@ -207,26 +207,28 @@ OTA云平台的作用是: import uos import fota import app_fota +import utime import modem import ujson from misc import Power -from aliYun import aLiYun +from aLiYun import aLiYun +import _thread # 定义软件名称 -PROJECT_NAME = "QuecPython-XXX" +PROJECT_NAME = "EG915U-XXXX" # 定义软件版本 -PROJECT_VERSION = "1.0.0" +PROJECT_VERSION = "1.0.1" # 获取固件型号 FIRMWARE_NAME = uos.uname()[0].split("=")[1] # 获取固件版本号 FIRMWARE_VERSION = modem.getDevFwVersion() # 初始化aLiYun功能 -ProductKey = "xxx" -ProductSecret = "xxx" -DeviceName = "xxx" -DeviceSecret = "xxx" -MqttServer = "xxx" +ProductKey = "XX" +ProductSecret = None +DeviceName = "XX" +DeviceSecret = "XX" +MqttServer = "XX" cloud = aLiYun(ProductKey, ProductSecret, DeviceName, DeviceSecret, MqttServer) # 初始化OTA相关Topic @@ -246,40 +248,79 @@ client_id = modem.getDevImei() clean_session = True cloud.setMqtt(client_id, clean_session) - ota_module = None +fota_data = '' +fota_topic = '' +fota_flag = False +chafen_url='' +ota_data='' +chafen_url1='' +chafen_url2='' + # 订阅Topic回调函数 def sub_cb(topic, data): - if topic in (ota_topic_device_upgrade, ota_topic_firmware_get_reply): - # OTA升级 - global ota_module - data = ujson.loads(data) - ota_module = data["module"] - ota_version = data["version"] - if ota_module == FIRMWARE_NAME: - # FOTA升级 - _fota = fota() - _fota.httpDownload(url1=data.get("url"), callback=fota_callback) - elif ota_module == PROJECT_NAME: - # SOTA升级 - ota_data = [{"url": i["fileUrl"], "filename": "/usr/" + i["fileName"].replace(".bin", ".py")} for i in data.get("files", [])] - _app_fota = app_fota.new() - res = _app_fota.bulk_download(ota_data) - # SOTA上报升级结果 - ota_process = 100 if not res else -1 - if ota_process == 100: - _app_fota.set_update_flag() - process_data = { - "id": 5, - "params": { - "step": ota_process, - "desc": "desc", - "module": ota_module, - } - } - cloud.publish(ota_topic_device_progress, ujson.dumps(process_data), qos=1) - # 升级完成之后需要重启设备 - Power.powerRestart() + global fota_data, fota_topic, fota_flag, ota_module,chafen_url,ota_data + # 解码字节数据为字符串 + fota_data = data.decode('utf-8') + fota_topic = topic.decode('utf-8') + if fota_topic in (ota_topic_device_upgrade, ota_topic_firmware_get_reply): + try: + # 解析 JSON 数据 + fota_data = ujson.loads(fota_data) + # 检查 "data" 键和 "module" 键是否存在 + if "data" in fota_data and "module" in fota_data["data"]: + ota_module = fota_data["data"]["module"] + #固件升级 + if ota_module == FIRMWARE_NAME: + chafen_url = fota_data["data"]["url"] + print("chafen_url =", chafen_url) + fota_flag=True + #app升级 + if ota_module == PROJECT_NAME: + ota_version = fota_data["data"]["version"] + print("OTA 模块:", ota_module) + print("OTA 版本:", ota_version) + ota_data = [{"url": i["fileUrl"], "file_name": "/usr/" + i["fileName"].replace(".bin", ".py")} for i in fota_data.get("data", {}).get("files", [])] + print("OTA 文件信息:", ota_data) + fota_flag=True + except ValueError: + print("JSON 解析失败") + print("fota_lock release") + + +def fota_start(): + global fota_data, fota_topic, fota_flag, flag,ota_module,ota_data,chafen_url,ota_data + while True: + if fota_flag: + if fota_topic in (ota_topic_device_upgrade, ota_topic_firmware_get_reply): + # OTA升级 + if ota_module: + if ota_module == FIRMWARE_NAME: + # FOTA升级 + _fota = fota() + _fota.httpDownload(url1=chafen_url,callback=fota_callback) + elif ota_module == PROJECT_NAME: + # # SOTA升级 + _app_fota = app_fota.new() + res = _app_fota.bulk_download(ota_data) + print("app_fota.bulk_download res:", res) + # SOTA上报升级结果 + ota_process = 100 if not res else -1 + if ota_process == 100: + _app_fota.set_update_flag() + process_data = { + "id": 5, + "params": { + "step": ota_process, + "desc": "desc", + "module": ota_module, + } + } + cloud.publish(ota_topic_device_progress, ujson.dumps(process_data), qos=1) + # 升级完成之后需要重启设备 + Power.powerRestart() + utime.sleep(1) + @@ -303,11 +344,10 @@ def fota_callback(args): } cloud.publish(ota_topic_device_progress, ujson.dumps(process_data), qos=1) # 升级成功后会自动重启, 此处无需手动重启 - #Power.powerRestart() - + # Power.powerRestart() # 设置订阅Topic回调函数 -cloud.setCallBack(sub_cb) +cloud.setCallback(sub_cb) # 订阅Topic qos = 1 @@ -340,7 +380,7 @@ cloud.publish(ota_topic_device_inform, ujson.dumps(fota_data), qos=1) # 查询软件升级计划 sota_query = { "id": 3, - "version": "1.0", + "version": "1.0.2", "params": { "module": PROJECT_NAME, }, @@ -358,6 +398,12 @@ sota_query = { "method": "thing.ota.firmware.get" } cloud.publish(ota_topic_firmware_get, ujson.dumps(sota_query), qos=1) + +if __name__ == "__main__": + _thread.start_new_thread(fota_start, ()) + while True: + utime.sleep(3) + ``` ### 腾讯云 -- Gitee