下文介紹如何使用云云對接SDK 2.1.3及以上版本,調用OTA升級接口,實現設備固件升級。
背景信息
說明 僅云云對接SDK 2.1.3及以上版本支持OTA升級。
設備OTA升級流程圖如下。
云端推送升級包的具體操作,請參見OTA升級概述。
設備OTA升級流程說明,及使用的Topic和數據格式等信息,請參見設備端OTA升級。
調用OTA接口
云云對接SDK中已封裝OTA升級相關接口。您需配置SDK調用以下三個接口實現OTA升級。
- 設備上報固件版本接口
設備啟動時和OTA升級后,上報固件當前版本到Topic:
/ota/device/inform/${YourProductKey}/${YourDeviceName}
。云云對接SDK調用TslUplinkHandler.reportOtaVersion接口,上報版本信息。接口設置如下:
/** * 設備上報固件版本。 * @param requestId 請求ID。 * @param originalIdentity 設備身份原始標識符。 * @param version 待上報的固件版本。 * @return 上報成功則返回true。 */ boolean reportOtaVersion(String requestId, String originalIdentity, String version)
調用示例:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler(); tslUplinkHandler.doOnline(session, originalIdentity); tslUplinkHandler.reportOtaVersion("12345", originalIdentity, "1.0.1");
- 監聽云端下發升級通知接口
您在物聯網平臺上添加升級包,并啟動批量升級后,物聯網平臺向設備下發升級通知。設備通過Topic:
/ota/device/upgrade/${YourProductKey}/${YourDeviceName}
獲取升級通知。云云對接SDK調用BridgeBootStrap.setOtaUpgradeHandler()接口,并設置一個回調,接收云端推送的OTA升級的信息。接口設置如下:
/** * 設置回調,接收云端推送的OTA升級的信息。 * @param otaUpgradeHandler 設置的回調。 */ public void setOtaUpgradeHandler(OtaUpgradeHandler otaUpgradeHandler) { this.callback.setOtaUpgradeHandler(otaUpgradeHandler); } public interface OtaUpgradeHandler { /** * 云端推送OTA升級消息。 * @param requestId 云端推送OTA升級消息的ID。 * @param firmwareInfo OTA升級信息。 * @param session 當前Session。 * @return */ boolean onUpgrade(String requestId, OtaFirmwareInfo firmwareInfo, Session session); } public class OtaFirmwareInfo { /** * 升級包大小。 */ private long size; /** * 簽名方法: MD5、SHA256。 */ private String signMethod; /** * 升級包簽名。 */ private String sign; /** * 升級包版本。 */ private String version; /** * 升級包下載URL。 */ private String url; }
調用示例:
bridgeBootstrap.setOtaUpgradeHandler(new OtaUpgradeHandler() { @Override public boolean onUpgrade(String requestId, OtaFirmwareInfo firmwareInfo, Session session) { log.info("ota onUpgrade, requestId:{}, firmware:{}, identity:{}", requestId, firmwareInfo, session.getOriginalIdentity()); //處理OTA升級。 return true; } });
- 上報升級進度接口
設備開始升級,并上報升級進度到Topic:
/ota/device/progress/${YourProductKey}/${YourDeviceName}
。云云對接SDK調用TslUplinkHandler.reportOtaProgress接口,上報升級進度。接口設置如下:
/** * 上報OTA升級進度。 * @param requestId 請求消息ID。 * @param originalIdentity 設備原始身份標識符。 * @param step 當前進度。 * @param desc 描述。 * @return */ boolean reportOtaProgress(String requestId, String originalIdentity, String step, String desc)
調用示例:
tslUplinkHandler.reportOtaProgress("7979", session.getOriginalIdentity(), "100", "ota success");