批量 OTA 升级业务实现

更新时间:2024-07-22 08:08:56下载pdf

实现批量 OTA 升级业务,需要用到以下能力:

  • 获取当前家庭下可 OTA 升级的设备列表
  • 开始批量 OTA 升级
  • 监听设备 OTA 升级状态

前置条件

在涂鸦体系下,只有当前用户权限是 家庭管理员及以上,才能进行设备 OTA 升级。

是否为家庭管理员及以上

查看用户的权限,请接入 家庭管理业务拓展 SDK,并按照以下代码查看。

  // 查看当前用户的权限
  var mMemberUseCase : IMemberUseCase =  FamilyManagerCoreKit.getMemberUseCase()
  mMemberUseCase.getMemberInfo(11,111,object :IFamilyMemberDataCallback<MemberBean>{
      override fun onSuccess(result: MemberBean?) {
        /**
         * 0:家庭所有者 MemberRole.ROLE_OWNER
         * 1:家庭管理员 MemberRole.ROLE_ADMIN
         * 2:家庭普通成员 MemberRole.ROLE_MEMBER
         */
        result?.role
      }

      override fun onError(errorCode: String?, errorMessage: String?) {

      }
    })

步骤 1:获取当前家庭下可 OTA 的设备列表

先调用 获取当前家庭下可 OTA 的设备列表 的接口,获取到所有可 OTA 的数据。UpgradeDevListBean 数据模型包含设备的名称、ID、设备固件信息,可以用这些信息来搭建个性化的界面。

IDeviceOTAManager otaManager = DeviceBusinessDataManager.getInstance().getDeviceOTAManager();
 otaManager.queryHasUpgradeInfoDeviceList(mGid, new Business.ResultListener<UpgradeDevListBean>() {
     @Override
     public void onFailure(BusinessResponse bizResponse, UpgradeDevListBean bizResult, String apiName) {
        // Failed
     }

     @Override
     public void onSuccess(BusinessResponse bizResponse, UpgradeDevListBean bizResult, String apiName) {
         if (bizResult.isStatus()) {

         } else {
            // Failed
         }
     }
 });

步骤 2:开始批量 OTA 升级

在获取到 OTA 列表之后,就可以进行批量 OTA 升级了。目前,SDK 并未提供直接批量升级的接口,因此可以通过循环调用单个设备的 OTA 接口来完成。需要注意的是,如果是蓝牙 Mesh 或者 Beacon 协议的设备,需要保持设备与手机连接,并且升级时不要退出 App,否则会导致 OTA 失败。

步骤 1 已经获取到设备的固件信息,一般情况下直接使用该固件信息来调用 OTA 升级接口,就能完成设备的 OTA 升级。但是在此期间,设备的 OTA 信息发生了变更。因此,稳妥的做法是,先调用接口获取最新的设备的固件信息,再进行 OTA 升级。

val mIThingOTAService : IThingOTAService = OtaServiceManager.instance.getOtaService(devId)
mIThingOTAService?.getFirmwareUpgradeInfo(object : IGetOtaInfoCallback {
    override fun onSuccess(upgradeInfoBeans: MutableList<UpgradeInfoBean>?) {
        mIThingOTAService?.startFirmwareUpgrade(upgradeInfoBeans)
    }

    override fun onFailure(code: String?, error: String?) {
        callback?.onError(code, error)
    }
})

步骤 3:监听设备 OTA 状态

同步骤 2,设备的 OTA 状态也是需循环进行监听的。

IThingOTAService mIThingOTAService = OtaServiceManager.instance.getOtaService(devId)
mIThingOTAService.registerDevOTAListener(new IDevOTAListener() {
    @Override
    public void firmwareUpgradeStatus(ThingDevUpgradeStatusBean upgradeStatusBean) {
        // 获取单设备的 OTA 状态
    }
});