物联网平台通过设备分发实现设备跨地域、跨实例或跨账号的分发。分发后,云端下发新的连接地址给设备,设备本地固化收到信息之后,直接连接新的地址,免去二次烧录设备信息。

使用场景

设备分发功能适用于以下场景:

  • 设备提前烧录:无需在设备出厂时对不同地域和不同实例的连接信息进行硬编码,设备统一烧录全球统一接入点信息(无地域信息)。设备出厂后,在物联网平台控制台对设备集中进行跨地域分发,实现设备全球接入。
  • 业务迁移:由于业务的迁移,需要更改设备的接入地域或接入实例,可通过设备分发,实现设备跨地域、跨实例、跨账号的变更。

支持两种分发策略:

  • 指定地域:将设备分发到指定的地域、实例。如果能提前确认设备会接入到的地域、实例,推荐使用该策略,分发效率更高。
  • 就近接入:设备可能会被拿到全球不同的地域使用,配置分发时在每个地域选择一个实例,设备接入时根据设备的IP位置动态接入其中距离最近的地域。这样设备无论在哪,都能就近接入到指定地域。
说明
  • 支持在所有已开通物联网平台的地域之间分发设备。
  • 跨账号分发不支持在同地域的公共实例内部进行,即不支持在同一个实例内跨账号分发。
  • 跨账号分发不支持就近接入。
  • 指定地域分发支持仅分发产品,不分发设备。此时分发对象为产品数据,更多信息,请参见设备分发对象
  • 支持多次分发。
  • 设备分发成功后,不能取消。
  • 如果产品下的设备进行过授权或转移操作,则该产品下的所有设备不可以进行分发操作。
  • 设备跨地域、跨实例分发后,您在配置OTA升级时需要在物联网平台控制台切换到目标地域、目标实例后操作;设备跨账号分发后,由接收者配置OTA升级,升级包请从分发者获取。具体操作,请参见推送升级包到设备端

设备分发对象

设备分发实现设备跨实例、跨地域或跨账号的分发。

设备分发后,除了设备本身,部分设备数据、产品数据也被随之分发,具体分发对象请参见下表。

分发对象 限制、说明
设备 单次分发最大设备数:1,000。
设备数据 随设备分发设备证书(ProductKey、DeviceName和DeviceSecret),用于设备连接新实例时的认证。

以下设备数据不会分发:

  • 运行时数据:即设备状态、物模型数据、设备影子、文件、日志等设备运行时产生的数据。设备状态将变为未激活,设备成功重新连接物联网平台后,即被激活,可正常上下线。其他已产生的运行时数据将保留在源地域、实例、账号,如设备再次分发回原位置,可以继续使用。
  • 拓扑关系、标签数据、设备分组数据会清空。
产品数据 分发产品信息、Topic类、物模型、数据解析脚本。但接收者在被分发产品下只允许查看,不允许编辑、删除产品数据,即不可在控制台产品详情页的产品信息Topic类列表功能定义数据解析页签进行任何编辑或删除操作,也不可在被分发产品下创建新设备。

设备分发流程

  1. 对于新设备,在物联网平台控制台创建产品与设备,获取物联网平台颁发的设备证书(ProductKey、DeviceName和DeviceSecret)。具体操作,请参见创建产品单个创建设备批量创建设备
  2. 选择阿里云提供的4.x版本C SDK完成物理设备开发,或根据交互协议自行完成设备开发,使其实现如下功能。
    说明 推荐使用阿里云的C SDK完成设备开发。

    控制台对设备进行分发后,设备应按如下流程与云端建立连接:

    1. 根据设备开发场景,选择以下方式,发起接口Bootstrap请求。
      • 阿里云C SDK接入方式

        设备调用SDK封装的Bootstrap接口,携带ProductKey和DeviceName,向设备分发中心的全球统一域名https://iot-auth-global.aliyuncs.com发送请求。

        其中,Bootstrap功能开发的具体操作,请参见设备分发服务

      • 非SDK的自行接入方式

        按照如下协议内容,向https://iot-auth-global.aliyuncs.com/auth/bootstrap发送请求。

        表 1. 请求参数
        参数 是否必选 说明
        productKey 必选 设备所属产品的ProductKey,从物联网平台控制台获取。

        具体操作,请参见单个创建设备

        deviceName 必选 设备名称DeviceName,从物联网平台控制台获取。
        clientId 可选 表示客户端ID,长度不大于64个字符。
        version 可选 认证服务的版本号。
        timestamp 可选 时间戳。时间戳不做时间窗口校验。
        resources 可选 希望获取的资源描述,如MQTT。 多个资源名称用逗号隔开。
        表 2. 返回参数
        参数 类型 说明
        resources Struct 资源信息,如MQTT服务器地址等。

        请求示例

        POST /auth/bootstrap HTTP/1.1
        Host: iot-auth-global.aliyuncs.com
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 123
        productKey=123&timestamp=123&version=default&clientId=123&resources=mqtt&deviceName=test

        返回示例

        HTTP/1.1 200 OK
        Server: Tengine
        Date: Wed, 29 Mar 2017 13:08:36 GMT
        Content-Type: application/json;charset=utf-8
        Connection: close
        {
          "code" : 200,
          "data" : {
            "resources" : {
              "mqtt" : {
                "host" : "xxx.iot-as-mqtt.cn-shanghai.aliyuncs.com",
                "port" : 1883
              }
            }
          },
          "message" : "success"
        }
    2. 设备分发中心根据分发的目标地域和实例(就近接入时,将根据设备IP位置动态判断目标地域和实例),返回设备目标实例接入点。
    3. 设备可以通过三元组和分发服务返回给设备的实例接入点信息,使用MQTT协议与云端建立连接。
      • 阿里云C SDK接入方式

        建议使用SDK 4.x版本进行设备接入。具体操作,请参见MQTT接入

      • 非SDK的自行接入方式

        使用Paho提供的嵌入式C语言MQTT开源工程进行设备接入。具体操作,请参见Paho-MQTT C接入示例

    4. (可选)控制台分发设备后,设备会收到如下MQTT消息,提示设备发生了分发,设备将被迫下线。

      MQTT消息,数据下行。

      请求Topic:/sys/${productKey}/${deviceName}/thing/bootstrap/notify

      Alink请求数据格式:

      {
          "id": "XXX",
          "version": "1.0", 
          "method": "thing.bootstrap.notify", 
          "params": {
            "cmd": 0
          }
      }

      响应Topic:/sys/${productKey}/${deviceName}/thing/bootstrap/notify_reply

      Alink响应数据格式:

      {
          "id": "XXX",
          "code":200,
          "data" : {}
      }
    注意 每次连接设备时,建议先完成上述的前3个流程,以免设备存储的接入点与云端不一致,而导致设备连接失败。

    设备也支持本地存储接入点信息,当本地连接信息丢失或连接失败时,可发起Bootstrap请求,重新获取接入点信息。

  3. 完成设备开发后,针对不同情况进行以下操作:
    • 对于不具有设备分发能力的存量设备,通过OTA升级,升级到上一步中开发完成的版本,使设备获得分发能力。具体操作,请参见推送升级包到设备端
      注意

      不具有设备分发能力的存量设备,在进行设备分发前,必须通过OTA升级获得分发能力,否则在控制台操作分发后,设备将无法正常连接到物联网平台。

    • 对于新设备,向设备烧录设备证书。具体操作,请参见烧录设备证书
  4. 根据业务需求在控制台操作设备分发,将设备分发到指定的地域、实例、账号。
    1. 登录物联网平台控制台
    2. 从顶部导航栏的地域下拉菜单选择华东2(上海),切换到华东2(上海)地域。
      说明 这里选择地域仅为了进入设备分发功能,与分发设备的源地域、目标地域无关。
    3. 实例概览页,找到对应的实例,单击实例进入实例详情页。
      实例概览
    4. 在左侧导航栏,选择设备划归 > 设备分发
    5. 设备分发页,单击设备分发
    6. 按照页面提示填写信息。

      页面参数设置如下:

      参数 描述
      分发方式 设备分发方式:
      • 本账号:分发到本账号的其他地域、实例。
      • 跨账号:分发到其他账号。
        说明 跨账号分发时,分发策略不支持就近接入。
      目标账号 分发方式选择为跨账号时,需设置跨账号设备分发的接收者。

      选择目标账号的填写形式:

      • 目标账号名称:填写阿里云账号名称。
      • 目标账号ID:填写阿里云账号ID。
      说明 阿里云账号ID,可登录物联网平台控制台,单击账号头像,跳转至安全设置页面查看。
      授权码 填写目标账号后,单击获取授权码,系统会向目标账号绑定的手机发送一条授权码。授权码5分钟内有效,请联系设备接收者获取授权码。
      源地域 要分发的设备所在的地域。
      源实例 要分发的设备所在的实例。
      分发策略 设备分发策略:
      • 指定地域:将设备分发到指定地域。
      • 就近接入:选择多个地域,设备将根据设备的IP位置动态接入其中距离最近的地域。
      目标地域 分发策略选择为指定地域时的参数。

      选择设备要分发到的地域。

      目标实例 分发策略选择为指定地域时的参数。

      设置设备要分发到的实例。

      • 分发方式选择为本账号时,选择目标实例。
      • 分发方式选择为跨账号时,填写目标实例ID,不填写默认为公共实例。
      地域范围 分发策略选择为就近接入时的参数。

      选择设备可能分发到的多个目标地域。当可能分发到源地域时,源地域也需要选择。

      若地域下有多个实例,可从下拉框选择要分发到的实例。

      设备选择方式 可通过两种方式选择要分发的设备:
      • 手动勾选:从产品列表选择设备所在的产品,再从设备列表选择设备。设备列表翻页时会保持设备选中状态。

        分发策略选择为指定地域时,如果不选择设备,则仅分发产品。

      • 文件上传:上传设备分发列表文件。一个文件最多包含1,000条记录,格式为CSV,可单击下载模板获取文件模板。
    7. 单击确认
    物联网平台立即执行分发任务:
    • 分发策略为指定地域:将产品数据和设备数据分发到指定地域。
    • 分发策略为就近接入:将产品数据分发到所有地域。而设备数据会在设备连接时,根据设备的IP位置动态分发到就近地域。

    请关注批次列表中显示的任务状态,可能出现以下几种状态:

    状态 说明
    任务初始化中 正在初始化任务信息。
    分发任务进行中 正在执行分发任务。

    如果长时间处于该状态,请您重试。

    分发任务完成 已完成分发任务。

    分发任务完成不代表所有设备都分发成功。各设备是否分发成功,可以单击任务对应的下载分发结果,下载文件进行查看。部分设备分发失败可能是由于设备不存在等原因。

    分发任务异常 可能由于网络抖动导致分发任务异常,请您重试。如果重试后仍有问题,请联系客服或提交工单处理。

    分发任务完成后,设备连接物联网平台时,将按步骤2中介绍的流程与目标地域和实例建立连接。