固件升级支持远程空中OTA(Over The Air)升级设备固件,实现对设备的远程维护、功能升级、问题修复等场景的使用。您可以指定产品新增一个固件,对固件进行验证,验证通过后开始批量升级,并在固件详情中查看升级结果。

前提条件

设备已烧录了一个固件版本,且已成功连接到生活物联网平台。

背景信息

固件升级功能是网络设备所必须支持的基础服务。在设备固件出现安全漏洞、软件bug维护、自身功能优化、以及设备性能改良等需更新固件时,在线升级功能就尤为重要。

生活物联网平台目前提供两种升级方式。

  • 静默升级:设备连云后若发现有新的固件版本就自动进行升级,无需用户干预。
  • App提醒升级:手机App会提示用户有新版本可用,并询问用户是否确认升级,只有在用户确认升级的情况下才会进行设备升级。

新增固件

  1. 在项目主页面,单击运营中心
  2. 选择设备运维 > 固件升级
  3. (可选)若您的设备搭载了AliOS Things芯片,可以开启安全升级功能。

    安全升级是保证固件完整性、机密性的一种方式,建议打开。使用安全升级功能,设备端需配合对固件和固件的签名进行验证。具体请参见AliOS Things技术文档

    1. 固件升级页,单击安全升级
    2. 在对话框中,将待升级产品对应的安全升级按钮设置为
      当安全升级功能为时,可单击对应的复制按钮,复制公钥,用于设备端验证签名。
  4. 固件升级页,单击新增固件
  5. 添加固件对话框中,输入固件信息,单击确认,上传固件文件。
    参数 描述
    固件类型
    • 自有品牌项目下产品
      • 整包:您上传的固件文件是完整的固件文件,将推送整包固件给设备进行升级。
      • 差分:您上传的固件文件仅包含新版本固件与之前版本的差异部分,仅推送差异部分至设备,设备进行差分还原,还原为完整固件。差分升级可有效减少升级对设备资源的占用,和减少下发固件的流量消耗。

        以下情况,我们提供差分包生成方法和差分还原算法。您也可以自行生成差分包并完成差分还原算法开发。

    • 天猫精灵生态项目下产品

      仅支持整包方式上传,即您上传的固件文件需为完整的固件文件。

    固件名称 设置固件名称。仅支持中文、英文字母、数字、短划线(-)、下划线(_)和圆括号()。长度限制为1~40个字符。
    固件版本号 设置该固件的版本号。仅支持英文字母、数字、点号(.)、短划线(-)和下划线(_)。长度限制为1~64个字符。

    固件类型选择为整包时,需设置的参数。

    待升级版本号 选择待升级的固件版本号。下拉选项框中,将展示当前产品下所有设备的固件版本号,选择一个或者多个待升级的固件版本。

    固件类型选择为差分时,需设置的参数。

    说明 天猫精灵生态项目下的产品仅支持固件类型整包,无需设置该参数。
    升级后版本号 设置升级后的固件版本号。

    固件类型选择为差分时,需设置的参数。

    说明 天猫精灵生态项目下的产品仅支持固件类型整包,无需设置该参数。
    所属产品 选择固件所属产品。
    固件模块 固件模块用于区分同产品下设备的不同模块的升级。
    • 选择模块:从已有的固件模块中选择。
    • 新增模块:自定义新的模块。仅支持英文字母、数字、点号(.)、短划线(-)和下划线(_)。长度限制为1~64个字符。默认填写default。
    签名算法
    • 天猫精灵生态项目下的产品,且产品的入网类型为蓝牙:仅支持MD5算法
    • 其他:支持MD5和SHA256算法

      自有品牌项目下产品,使用阿里云提供的Android SDK,且固件类型选择为差分时,请选择MD5算法。

    上传固件 上传固件文件。文件大小不能超过1,000 MB,仅支持BIN、TAR、GZ、TAR.GZ、ZIP、GZIP类型的文件。
    固件描述 可描述该固件的功能等信息。描述长度不超过100个字符,一个中文计为一个字符。

验证固件

在进行批量升级之前,您需要先进行固件验证,确认固件各项功能正常使用之后再批量升级,避免因固件缺陷导致升级后大量设备不能正常工作。验证固件的本质是指定少量设备进行固件升级。固件验证通过后不能再次验证。

  1. 选择要验证的固件,单击操作中的验证固件
    说明 固件上传至物联网平台后,必须使用少量设备对固件进行验证。确认测试设备升级成功后,才能批量升级。
  2. 配置验证固件的参数。
    验证固件
    参数 描述
    待升级版本号 下拉选项框中,展示当前产品下所有设备的固件版本号,选择一个或者多个待升级的固件版本。

    选择待升级版本号后,使用这些固件版本的设备将展示在待验证设备列表中。

    待验证设备 选择用于此次测试的设备。
    设备升级超时时间 设置单个设备的升级超时时间,即多长时间之后,升级未完成则为超时。从设备第一次上报升级进度开始计算时间。可选值范围:1分钟~1,440分钟。
    根据自身需要进行配置APP确认升级
    • 是:升级固件时,在App上推送消息,提醒用户本次的升级
    • 否:升级固件时,不提醒App端用户,即静默升级
  3. 单击确定完成。
    • 固件验证不通过

      状态显示为验证失败,您可以重新验证固件。

    • 固件验证通过

      状态显示为已验证,您不可以再次验证固件,您可以操作批量升级。

批量升级

固件验证通过并确认各项功能正常后,该固件才可以在大批设备上投入使用。批量升级的本质也是对大批设备定向推送升级通知。

批量升级操作前的说明如下。

  • 测试设备不能进行批量升级。
  • 禁止使用未验证的固件进行批量升级操作。
  • 设备从收到升级通知开始直至升级完成是一个渐进的过程,请耐心等待升级结果。
  • 批量升级所覆盖的设备可能会因为设备上一次的升级动作没有结束(设备处于待升级或者升级中),而导致本次升级中该部分设备升级失败。
  • 设备在实际升级过程中出现错误(如下载失败、校验失败、解压失败等),并且通知OTA系统后,系统会将本次升级动作置为完成(而实际升级操作结果为失败)。
  • 可以在固件详情页,看到批量升级对应设备的升级情况,升级失败列表选项卡会显示简要的升级失败原因。
说明 由于设备端存在的差异化,即使固件验证升级成功,也无法完全体现设备升级后各项功能是否正常可用,建议您在设备固件升级后自行检查设备是否正常使用,避免批量升级后引起大批量的设备故障。
  1. 选择要进行批量升级的固件,单击操作中的批量升级
  2. 配置批量升级的参数。
    批量升级
    根据自身需要进行配置APP确认升级
    • 是:升级固件时,在App上推送消息,提醒用户本次的升级
    • 否:升级固件时,不提醒App端用户,即静默升级
    参数 描述
    待升级版本号 下拉选项框中,展示当前产品下所有设备的当前固件版本号,从中选择待升级的固件版本。

    整包升级时,需设置该参数。

    升级策略
    • 静态升级:仅升级当前满足升级条件的设备。
    • 动态升级:除了升级当前满足升级条件的设备,还将持续检查设备是否满足升级条件,对满足升级条件的设备进行升级。包括但不限于以下情况:
      • 后续新激活的设备满足升级条件。
      • 设备当前上报的固件版本号不满足升级条件,后续上报了满足升级条件的固件版本号。
      说明 一个固件下只能有一个动态升级批次。如果固件下已有一个动态升级批次,将不能创建新的动态升级,需先取消原有动态升级批次。
    升级范围
    • 全部设备:升级该产品下的全部设备。
    • 定向升级:选择为定向升级后,下方出现设备范围选项框。单击选项框,在右侧弹出的对话框中,选择要升级的设备。仅升级被选中的设备。
      说明 定向升级的待升级版本为多选。默认选中您之前已输入的待升级版本号。
    • 灰度升级:即局部升级。升级策略选择为静态升级时出现的可选项。

      选择为灰度升级后,下方出现灰度范围输入框,需针对已选择的设备,设置灰度百分比。物联网平台根据设置的灰度百分进行计算,计算结果向下取整。灰度升级的设备至少为1个。

    升级时间 指定设备固件升级的时间。
    • 立即升级:立即进行固件升级。
    • 定时升级:设置升级开始时间、升级结束时间。升级开始时间距当前时间最少5分钟,最多7天。升级结束时间距开始时间最少1小时,最多为30天,可不设置,不设置表示不会强制结束。
      说明 仅当升级策略为静态升级时,支持定时升级。
    固件推送速率 设置每分钟向多少个设备推送固件下载URL。取值范围:10~1,000。
    升级失败重试间隔 如果升级失败,在什么时候进行重试升级。可选:
    • 不重试
    • 立即重试
    • 10分钟后重试
    • 30分钟后重试
    • 1小时后重试
    • 24小时后重试
    升级重试上限次数 选择升级失败后,最多可重试几次。可选:
    • 1次
    • 2次
    • 5次
    设备升级超时时间 设置单个设备的升级超时时间,即多长时间之后,升级未完成则为超时。从设备第一次上报升级进度开始计算时间。可选值范围:1分钟~1,440分钟。
    是否覆盖设备之前的升级任务 由于一个设备同一时间只能在一个正在进行的升级批次中(设备处于待推送、已推送或升级中状态),需要选择是否覆盖设备之前的升级任务。
    • 选择是,则设备只执行新的升级任务。
    • 选择否,若设备已有升级任务,则只执行已有任务。

    不覆盖升级中的任务,此时继续执行升级中的任务,不执行新的任务。

    是否仅对新上报版本的设备生效 当升级策略选择为动态升级时的参数。

    选择是否仅对后续新上报版本号的设备生效,待升级版本号以新上报的新版本号为准。

    • 选择是,则仅升级后续新上报版本号的设备。
    • 选择否,则升级当前满足升级条件的设备,并持续检查后续新上报版本号的设备是否满足升级条件。
  3. 批量升级提交后,单击该固件的查看,然后在批次管理页签下的设备列表页签中,查看升级状态。
    升级详情
    状态 说明
    待推送 还未向设备推送固件升级通知。

    待推送状态原因有三种:设备离线、定时推送或速率限制,状态分别显示为:

    • 待推送(设备离线)
    • 待推送(定时:2020/XX/XX XX:XX:XX)
    • 待推送
    已推送 已向设备推送固件升级通知,设备尚未上报进度。
    升级中 设备已收到升级通知,并已上传升级进度。
    升级成功 设备上报升级进度100%,并上报了升级后的正确版本号。
    升级失败 以下原因可能造成设备升级失败。
    • 若设备未结束上一次升级动作,又推送新的升级,后推送的升级作业则会升级失败。可以等设备完成上一次升级后,再对设备发起升级。
    • 设备在实际升级过程中,出现如下载失败、校验失败、解压失败等错误,可以尝试重新对设备发起升级。

    如果设置批量升级时,指定了升级失败后重试,在以下情况下会进行自动重试升级。

    • 设备在待推送已推送状态下,上报原版本和目标版本以外的版本信息导致的升级失败。
    • 设备在升级中状态下,上报了目标版本以外的版本信息导致的升级失败。
    • 设备通过上报升级进度的Topic,主动上报-1-2-3-4导致的升级失败。

    自动重试时,设备在云端的升级状态显示不变,即在已推送状态下重试时,状态仍然显示为已推送;在升级中状态下重试时,状态仍然显示为升级中

    说明

    云端不会触发自动重试逻辑的情况:

    • 因升级超时(失败原因:timeout)而导致的升级失败。
    • 您主动取消的升级。
    已取消 已取消该设备的升级。