使用OTA控制臺(tái)升級(jí)固件
使用生活物聯(lián)網(wǎng)平臺(tái)設(shè)備端SDK的內(nèi)置OTA功能,用戶只需要適配所使用的模組和新品,即可使用生活物聯(lián)網(wǎng)平臺(tái)的云端OTA服務(wù)。本文主要介紹自有品牌項(xiàng)目下使用OTA控制臺(tái)升級(jí)固件的流程。
前提條件
設(shè)備已燒錄了一個(gè)固件版本,且已成功連接到生活物聯(lián)網(wǎng)平臺(tái)。
背景信息
總體OTA升級(jí)流程如下:
設(shè)備端開(kāi)發(fā)升級(jí)所需的固件
編譯設(shè)備端新固件,固件中需要內(nèi)置版本號(hào)信息,設(shè)備完成固件燒寫(xiě)并重啟后,會(huì)上報(bào)該新版本號(hào)到OTA服務(wù)端。
控制臺(tái)(云端)執(zhí)行升級(jí)過(guò)程
用戶在OTA控制臺(tái)執(zhí)行操作,包括上傳固件、驗(yàn)證固件、批量升級(jí)、管理固件等。
手機(jī)App端確認(rèn)升級(jí)和驗(yàn)證升級(jí)結(jié)果
如果固件升級(jí)開(kāi)啟App確認(rèn)功能,則需要用戶在手機(jī)App上確認(rèn)升級(jí)任務(wù)后,控制臺(tái)才會(huì)執(zhí)行固件升級(jí)。升級(jí)完成后,在手機(jī)App上驗(yàn)證升級(jí)結(jié)果。
一、設(shè)備端開(kāi)發(fā)升級(jí)所需的固件
設(shè)備端(以Wi-Fi設(shè)備為例)主要有3個(gè)topic來(lái)與云端進(jìn)行交互,流程如下圖所示。
設(shè)備端通過(guò)以下topic向云端上報(bào)當(dāng)前版本號(hào)。通常設(shè)備上電開(kāi)機(jī)后需要上報(bào)一次當(dāng)前固件版本號(hào)。
當(dāng)設(shè)備完成OTA固件下載并燒錄,重啟后該topic上報(bào)的則為新固件的版本信息。
數(shù)據(jù)上行
/ota/device/inform/${productKey}/${deviceName}
請(qǐng)求數(shù)據(jù)格式:
{ "id":"123", "params":{ "version":"1.0.1", "module":"MCU" } }
參數(shù)
類型
說(shuō)明
id
String
消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。
version
String
OTA模塊版本。
module
String
OTA模塊名。
說(shuō)明
上報(bào)默認(rèn)(default)模塊的版本號(hào)時(shí),可以不上報(bào)module參數(shù)。
設(shè)備的默認(rèn)(default)模塊的版本號(hào)代表整個(gè)設(shè)備的固件版本號(hào)。
當(dāng)有新版本固件時(shí),云端通過(guò)以下topic向設(shè)備端推送新固件的版本信息。
數(shù)據(jù)下行
/ota/device/upgrade/${productKey}/${deviceName}
設(shè)備端通過(guò)以下topic向云端上報(bào)OTA升級(jí)進(jìn)度。該進(jìn)度可以在控制臺(tái)以及手機(jī)App中查看。
數(shù)據(jù)上行
/ota/device/progress/${productKey}/${deviceName}
說(shuō)明建議設(shè)置設(shè)備端上報(bào)進(jìn)度頻率為3秒內(nèi)最多一次。若設(shè)備上報(bào)進(jìn)度頻繁,在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)的OTA升級(jí)包詳情的批次詳情中,可能無(wú)法查看到上報(bào)的全部進(jìn)度。
{ "id": "123", "params": { "step": "-1", "desc": "OTA升級(jí)失敗,請(qǐng)求不到升級(jí)包信息。", "module": "MCU" } }
參數(shù)
類型
說(shuō)明
id
String
消息ID號(hào)。String類型的數(shù)字,取值范圍0~4294967295,且每個(gè)消息ID在當(dāng)前設(shè)備中具有唯一性。
step
String
OTA升級(jí)進(jìn)度。
取值范圍:
1~100的整數(shù):升級(jí)進(jìn)度百分比。
-1:升級(jí)失敗。
-2:下載失敗。
-3:校驗(yàn)失敗。
-4:燒寫(xiě)失敗。
desc
String
當(dāng)前步驟的描述信息,長(zhǎng)度不超過(guò)128個(gè)字符。如果發(fā)生異常,此字段可承載錯(cuò)誤信息。
module
String
升級(jí)包所屬的模塊名。模塊的更多信息,請(qǐng)參見(jiàn)添加升級(jí)包。
說(shuō)明 上報(bào)默認(rèn)(default)模塊的OTA升級(jí)進(jìn)度時(shí),可以不上報(bào)module參數(shù)。
根據(jù)設(shè)備端開(kāi)發(fā)文檔和設(shè)備端與云端交互的流程圖,開(kāi)發(fā)待升級(jí)的設(shè)備固件。詳細(xì)的OTA開(kāi)發(fā)編程請(qǐng)參見(jiàn)設(shè)備OTA編程。
編譯生成新的設(shè)備固件,并確認(rèn)設(shè)備端新固件的版本號(hào)。
在SDK根目錄,執(zhí)行編譯命令。
aos make clean aos make living_platform@<模組名>
以下為編譯過(guò)程中的日志片段,其中app_version_new對(duì)應(yīng)的即為新固件的版本號(hào)。
Check if required tools for esp8266 exist Making config file for first time processing components: living_platform esp8266 platform/mcu/esp8266 vcall init auto_component server region: MAINLAND server env: ONLINE APP: living_platform Board: esp8266host user: liuese branch: rel_1.1.0 hash: 0f1596cffffd9a4646a3cce4d3c7ba9b4f14649d app_version_new:app-1.0.0-20191107142256 //新固件的版本號(hào) firmware type: RELEASE FEATURE_SUPPORT_ITLS != y, so using normal TLS app_version:app-1.0.0-20191107142256 kernel_version:AOS-R-1.3.4 server region: MAINLAND server env: ONLINE APP: living_platform Board: esp8266
二、在控制臺(tái)執(zhí)行升級(jí)過(guò)程
上傳固件。
進(jìn)入 頁(yè)面。
在固件列表頁(yè)簽中的產(chǎn)品下拉框選擇產(chǎn)品名稱,并單擊添加固件。
輸入固件相關(guān)參數(shù),并單擊確定完成。
通常使用容易識(shí)別的固件名稱和版本號(hào)來(lái)標(biāo)識(shí)固件,建議將固件版本號(hào)與設(shè)備固件自身版本號(hào)保持一致。詳細(xì)參數(shù)解釋請(qǐng)參見(jiàn)固件升級(jí)。
上傳固件后,使用測(cè)試設(shè)備驗(yàn)證固件。
固件驗(yàn)證的目的是為了保證固件質(zhì)量,并且,通常建議選擇3~5個(gè)測(cè)試設(shè)備來(lái)執(zhí)行固件驗(yàn)證。
確保新固件版本正確,固件運(yùn)行正常。
確保OTA升級(jí)服務(wù)可以正常執(zhí)行,設(shè)備可以正常完成升級(jí)任務(wù)。
返回 頁(yè)面。
單擊固件列表中操作列中的驗(yàn)證固件。
配置驗(yàn)證固件的相關(guān)參數(shù)。
待升級(jí)版本號(hào):現(xiàn)有設(shè)備版本號(hào),即原版本號(hào)。
待驗(yàn)證設(shè)備:選擇待驗(yàn)證設(shè)備,支持單選、多選、全選。
APP確認(rèn)升級(jí):選擇是否支持App升級(jí)確認(rèn)功能,如果通過(guò)云智能App連接設(shè)備,可以使用云智能App確認(rèn)升級(jí)該固件。
設(shè)備升級(jí)超時(shí)時(shí)間:選擇超時(shí)時(shí)間,達(dá)到超時(shí)時(shí)間后仍未完成固件驗(yàn)證,則驗(yàn)證固件失敗。
單擊確定,開(kāi)始執(zhí)行固件驗(yàn)證。
如果APP確認(rèn)升級(jí)配置為是,需登錄手機(jī)云智能App,進(jìn)入 中,單擊確認(rèn)升級(jí)后,才開(kāi)始執(zhí)行固件驗(yàn)證。
選擇新的測(cè)試設(shè)備,執(zhí)行以上步驟。
批量升級(jí)固件。
固件驗(yàn)證通過(guò)后,進(jìn)入批量升級(jí)階段,可以支持全量、分批向設(shè)備推送升級(jí)。
返回 頁(yè)面。
單擊固件列表中操作列中的批量升級(jí)。
配置批量升級(jí)的相關(guān)參數(shù),并單擊確定完成。
根據(jù)您自身需要選擇合理參數(shù),控制OTA升級(jí)節(jié)奏,提高升級(jí)成功率。批量升級(jí)的參數(shù)介紹請(qǐng)參見(jiàn)固件升級(jí)。
管理固件升級(jí)。
控制臺(tái)支持對(duì)固件的管理,包括了新增、產(chǎn)品維度固件枚舉、查看指定固件詳情、刪除等操作。在固件詳情界面中,可以查看當(dāng)前固件詳細(xì)信息,還包括了目標(biāo)設(shè)備總數(shù)、升級(jí)成功數(shù)、失敗數(shù)等信息,有利于廠商掌握該版本升級(jí)的結(jié)果信息。下面介紹查看固件升級(jí)結(jié)果的操作為例,更多操作可參見(jiàn)固件升級(jí)。
進(jìn)入 頁(yè)面。
單擊固件列表中操作列中的查看。
在批次管理頁(yè)簽下的設(shè)備列表頁(yè)簽中,查看升級(jí)狀態(tài)。
三、多模塊升級(jí)
應(yīng)用場(chǎng)景
部分飛燕客戶需要對(duì)WiFi模組和MCU分別進(jìn)行升級(jí),所以需要設(shè)置不同的模塊來(lái)區(qū)分。因?yàn)闀?huì)存在多個(gè)模塊同時(shí)需要升級(jí)的情況,所以需要在控制臺(tái)同時(shí)創(chuàng)建升級(jí)任務(wù)來(lái)依次進(jìn)行升級(jí),但一個(gè)設(shè)備在一個(gè)時(shí)間點(diǎn)只能存在一個(gè)升級(jí)任務(wù),所以可能出現(xiàn)報(bào)錯(cuò),可參考下面步驟實(shí)現(xiàn)。
比如設(shè)備當(dāng)前固件版本:WiFi:1.0.0,MCU:2.0.0
要升級(jí)的目標(biāo)固件版本:WiFi:1.1.0,MCU:2.2.0
(模塊之間的版本互不影響)
新增固件
分別給模塊創(chuàng)建動(dòng)態(tài)升級(jí)任務(wù)
先創(chuàng)建一個(gè)WiFi 模塊從1.0.0升級(jí)到1.1.0的動(dòng)態(tài)升級(jí)任務(wù)
再創(chuàng)建一個(gè)MCU模塊從2.0.0升級(jí)到2.2.0的動(dòng)態(tài)升級(jí)任務(wù)
由于一個(gè)設(shè)備同一時(shí)間只能在一個(gè)正在進(jìn)行的升級(jí)批次中(設(shè)備處于待推送、已推送或升級(jí)中狀態(tài)),所以第二個(gè)創(chuàng)建的MCU的批次會(huì)直接顯示失敗,但是沒(méi)關(guān)系。先確認(rèn)WiFi模塊的升級(jí),在WiFi模塊升級(jí)成功后,設(shè)備再次上報(bào)MCU:2.0.0版本,MCU批次下的該設(shè)備就會(huì)變成待推送狀態(tài),可以繼續(xù)升級(jí)MCU模塊。
四、手機(jī)App確認(rèn)升級(jí)和驗(yàn)證升級(jí)結(jié)果
App端主要有4個(gè)topic來(lái)與云端進(jìn)行交互,流程如下圖所示。
查詢待升級(jí)固件
App端通過(guò)以下topic向云端查詢用戶綁定設(shè)備的待升級(jí)信息,根據(jù)返回信息展示待升級(jí)設(shè)備名稱列表。在控制臺(tái)添加批量升級(jí)任務(wù)后,云端會(huì)將相應(yīng)待確認(rèn)升級(jí)固件列表信息會(huì)返回給用戶(App端)。
/living/ota/firmware/file/get
確認(rèn)設(shè)備升級(jí)
當(dāng)APP確認(rèn)升級(jí)配置為是時(shí),云端需要收到App端通過(guò)該topic上報(bào)的消息后,才能開(kāi)始執(zhí)行升級(jí)任務(wù),并將該執(zhí)行任務(wù)推送到設(shè)備端。
/living/ota/confirm
獲取正在升級(jí)的設(shè)備列表(公版App中目前沒(méi)有使用該topic)
App端選擇周期性或者下拉刷新等UI交互方式,通過(guò)以下topic向云端查詢當(dāng)前正在升級(jí)的設(shè)備信息。云端返回升級(jí)的設(shè)備列表信息等。
/living/ota/devices/list
獲取指定固件的升級(jí)信息
長(zhǎng)連接實(shí)時(shí)監(jiān)聽(tīng),實(shí)時(shí)通知方式,不需要輪詢方便使用;
Android長(zhǎng)連接通道:長(zhǎng)連接通道SDK;
IOS長(zhǎng)連接通道:長(zhǎng)連接通道SDK;
長(zhǎng)連接topic:長(zhǎng)連接服務(wù);
TOPIC:
/sys/${productKey}/${deviceName}/app/down/ota/device/forward
API接口查詢
需要調(diào)用接口輪詢查詢,詳情參見(jiàn):獲取用戶名下設(shè)備的固件升級(jí)進(jìn)度
/living/ota/progress/list
取消固件升級(jí)
取消某一個(gè)設(shè)備的固件升級(jí)流程,詳情參見(jiàn):取消固件升級(jí);
/living/ota/cancel
上報(bào)固件升級(jí)進(jìn)度、上報(bào)固件版本信息 兩個(gè)API不建議使用,設(shè)備端會(huì)進(jìn)行固件進(jìn)度上報(bào)的,不需要APP上報(bào)的。
下面以生活物聯(lián)網(wǎng)平臺(tái)云智能App為例,介紹App端的操作。
登錄云智能App。
選擇 。
查看固件升級(jí),展示待升級(jí)信息、發(fā)起固件升級(jí)、展示升級(jí)結(jié)果等信息。