下文介紹如何使用云云對接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");