基于消息转发的M2M设备间通信

本文以使用手机App控制智能灯为例,介绍基于物联网平台的消息转发中数据流转功能,构建一个M2M设备间通信架构的完整流程。

背景信息

使用手机App控制智能灯的流程:

M2M设备间通信

创建产品和设备

  1. 物联网平台控制台的对应实例下,为手机App注册产品和设备。具体操作,请参见创建产品单个创建设备

    本示例中,创建产品的产品名称手机App所属品类自定义品类节点类型直连设备,其他参数使用默认值。

    创建设备的DeviceNameControlApp

    本示例中,假设手机AppProductKeyal987654321

    为手机App创建产品和设备后,手机App可以作为一个设备连接到物联网平台。

    当手机App用户注册登录时,您的服务器将App的设备信息发送给手机App,手机App即可作为一个设备连接到物联网平台。

  2. 添加具有发布权限的自定义Topic,用于发布控制指令。

    本示例添加Topic:/al987654321/ControlApp/user/command。具体操作,请参见使用自定义Topic通信

  3. 开发手机App设备。

    本示例中,手机App与物联网平台间的通信协议使用HTTPS。

    手机App通过自定义Topic发送给智能灯的控制指令payload数据格式如下:

    {
        "TargetDevice": "light", 
        "Switch": 0, 
        "Timestamp": 1557750407000
    }

    设备端SDK开发详情,请参见设备接入Link SDK

  4. 物联网平台控制台的对应实例下,为智能灯设备创建产品和设备,定义功能等。具体操作,请参见创建产品批量创建设备单个添加物模型

    本示例中,创建产品的产品名称智能灯所属品类自定义品类节点类型直连设备,其他参数使用默认值。

    创建设备的DeviceNamelight

    本示例中,假设智能灯ProductKeyal123456789

    您自行添加物模型功能,例如添加物模型属性开关(Switch),数据类型为布尔型(0是关,1是开),来控制智能灯开关。

  5. 添加具有订阅权限的自定义Topic,用于接收手机App下发的控制指令。

    本示例添加Topic:/al123456789/light/user/set。具体操作,请参见使用自定义Topic通信

  6. 开发智能灯设备端,实现智能灯设备连接物联网平台,接收并执行指令等功能。

    本示例中,设备与物联网平台间的通信协议使用MQTT。智能灯设备需要订阅Topic:/al123456789/light/user/set,才能接收指令。接收指令后,需要开发执行指令的逻辑方法。

    设备端SDK开发详情,请参见设备接入Link SDK

配置消息转发解析器

设置消息转发解析器,将手机App发布的指令流转到智能灯的Topic中。

  1. 登录物联网平台控制台

  2. 实例概览页面,选择目标环境,找到对应的实例,单击实例ID或备注名称。

    重要

    目前仅开通企业版实例服务的地域下,执行此步骤。其他地域,请跳过此步骤。地域及实例的支持说明,请参见实例概述

    实例概览
  3. 在左侧导航栏,选择消息转发 > 云产品流转,依次执行以下操作,完成消息转发的解析器配置

添加数据源

以下操作中参数配置说明,请参见添加待流转的数据源

  1. 单击数据源页签,执行以下步骤,添加数据源。

    重要

    若当前页面显示旧版功能,先单击右上角体验新版,进入新版功能页面,再单击数据源页签。

    1. 单击创建数据源

    2. 在弹出的创建数据源对话框,输入数据源名称,例如:AppData

    3. 单击确定

  2. AppData页面,单击添加Topic

  3. 添加Topic对话框,选择需要处理的消息Topic,然后单击确定

    本示例中,选择手机App设备ControlApp的Topic/al987654321/ControlApp/user/command,获取消息中的目标设备的名称TargetDevice,消息时间戳TimestampSwitch三个字段的值。

    image

配置数据目的

以下操作中参数配置说明,请参见添加转发到的数据目的

  1. 返回云产品流转页面,单击数据目的页签。

  2. 单击创建数据目的

  3. 在弹出的对话框中,输入数据目的名称,例如:OtherTopic,选择产品智能灯

    image
  4. 单击确定

配置并启动解析器

以下操作中参数配置说明,请参见配置解析器

  1. 单击解析器页签,执行以下操作,添加解析器。

    1. 单击创建解析器

    2. 在弹出的对话框中,输入解析器名称,例如:DataParser

    3. 单击确定

  2. DataParser页面,关联数据源。

    1. 在配置向导的数据源下,单击关联数据源

    2. 在弹出的对话框中,单击数据源下拉列表,选择已创建的数据源AppData

    3. 单击确定

  3. DataParser页面,单击配置向导的数据目的,关联数据目的。

    1. 单击数据目的列表右上方的关联数据目的

    2. 在弹出的对话框中,单击数据目的下拉列表,选择已创建的数据目的OtherTopic

    3. 单击确定

    4. 在数据目的列表,查看并保存数据目的ID,例如为1000

      后续解析脚本中,需使用此处的数据目的ID

  4. DataParser页面,单击配置向导的解析器脚本,完成脚本配置。

    1. 在脚本输入框,输入解析脚本,将智能灯设备具有订阅权限的Topic:/al123456789/light/user/set作为接收手机App指令的Topic。

      脚本配置说明,请参见脚本语法。流转数据的函数说明,请参见writeIotTopic()函数

      //通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。
      var data = payload("json");
      //指定设备时,需获取设备名称。本示例中TargetDevice值为智能灯设备light。
      var dn = data.TargetDevice;
      //智能灯设备接收手机App指令的Topic。
      var topic_set = "/al123456789/"+dn+"/user/set";
      //智能灯设备接收手机App设备的Topic数据。
      writeIotTopic(1000, topic_set, data)
    2. 单击脚本输入框下方保存

    3. 单击调试,在右侧面板,选择产品和设备,输入Topic和Payload数据,验证脚本可执行。

      本示例参数如下:

      image

      运行结果如下,表示脚本执行成功。

      action: 
          transmit to republish[destinationId=1000], data:{"Switch":0,"Timestamp":1557750407000,"TargetDevice":"light"}
      variables: 
          data : {"Switch":0,"Timestamp":1557750407000,"TargetDevice":"light"}
          topic_set : /al123456789/light/user/set
          dn : light
    4. 在右侧面板左下方,单击关闭

    5. 单击脚本输入框下方发布

  5. 返回云产品流转页面的解析器页签,单击解析器DataParser对应操作列的启动

  6. 单击确认,启动解析器。

设备间进行通信

  1. 手机App用户通过扫码将App与智能灯绑定。

    当App向您的服务器发送绑定某设备的请求后,您的服务器将返回绑定成功的智能灯设备名称(deviceName)。本示例中,智能灯设备名称为light。

  2. 手机App用户通过App发送控制指令。

    1. 手机App通过自定义Topic发送指令,如本示例中,App对应的发送指令Topic:/al987654321/ControlApp/user/command

    2. 物联网平台再根据您定义的消息转发解析器,将指令信息发送给智能灯的Topic,如本示例中定义的Topic为:/al123456789/light/user/set

    3. 智能灯接收到指令后,执行相关操作。

    说明

    手机App也可以向您的服务器发送解绑设备的请求。解绑后,该手机App将不再控制该智能灯。