本文以使用手机App控制智能灯为例,介绍基于物联网平台的消息转发中数据流转功能,构建一个M2M设备间通信架构的完整流程。
背景信息
使用手机App控制智能灯的流程:
创建产品和设备
在物联网平台控制台的对应实例下,为手机App注册产品和设备。具体操作,请参见创建产品、单个创建设备。
本示例中,创建产品的产品名称为手机App,所属品类为自定义品类,节点类型为直连设备,其他参数使用默认值。
创建设备的DeviceName为ControlApp。
本示例中,假设手机App的ProductKey为al987654321。
为手机App创建产品和设备后,手机App可以作为一个设备连接到物联网平台。
当手机App用户注册登录时,您的服务器将App的设备信息发送给手机App,手机App即可作为一个设备连接到物联网平台。
添加具有发布权限的自定义Topic,用于发布控制指令。
本示例添加Topic:
/al987654321/ControlApp/user/command
。具体操作,请参见使用自定义Topic通信。开发手机App设备。
本示例中,手机App与物联网平台间的通信协议使用HTTPS。
手机App通过自定义Topic发送给智能灯的控制指令payload数据格式如下:
{ "TargetDevice": "light", "Switch": 0, "Timestamp": 1557750407000 }
设备端SDK开发详情,请参见设备接入Link SDK。
在物联网平台控制台的对应实例下,为智能灯设备创建产品和设备,定义功能等。具体操作,请参见创建产品、批量创建设备、单个添加物模型。
本示例中,创建产品的产品名称为智能灯,所属品类为自定义品类,节点类型为直连设备,其他参数使用默认值。
创建设备的DeviceName为light。
本示例中,假设智能灯的ProductKey为al123456789。
您自行添加物模型功能,例如添加物模型属性开关(Switch),数据类型为布尔型(0是关,1是开),来控制智能灯开关。
添加具有订阅权限的自定义Topic,用于接收手机App下发的控制指令。
本示例添加Topic:
/al123456789/light/user/set
。具体操作,请参见使用自定义Topic通信。开发智能灯设备端,实现智能灯设备连接物联网平台,接收并执行指令等功能。
本示例中,设备与物联网平台间的通信协议使用MQTT。智能灯设备需要订阅Topic:
/al123456789/light/user/set
,才能接收指令。接收指令后,需要开发执行指令的逻辑方法。设备端SDK开发详情,请参见设备接入Link SDK。
配置消息转发解析器
设置消息转发解析器,将手机App发布的指令流转到智能灯的Topic中。
登录物联网平台控制台。
在实例概览页面,选择目标环境,找到对应的实例,单击实例ID或备注名称。
重要目前仅开通企业版实例服务的地域下,执行此步骤。其他地域,请跳过此步骤。地域及实例的支持说明,请参见实例概述。
在左侧导航栏,选择 ,依次执行以下操作,完成消息转发的解析器配置
添加数据源
以下操作中参数配置说明,请参见添加待流转的数据源。
单击数据源页签,执行以下步骤,添加数据源。
重要若当前页面显示旧版功能,先单击右上角体验新版,进入新版功能页面,再单击数据源页签。
单击创建数据源。
在弹出的创建数据源对话框,输入数据源名称,例如:AppData。
单击确定。
在AppData页面,单击添加Topic。
在添加Topic对话框,选择需要处理的消息Topic,然后单击确定。
本示例中,选择手机App设备ControlApp的Topic
/al987654321/ControlApp/user/command
,获取消息中的目标设备的名称TargetDevice,消息时间戳Timestamp和Switch三个字段的值。
配置数据目的
以下操作中参数配置说明,请参见添加转发到的数据目的。
返回云产品流转页面,单击数据目的页签。
单击创建数据目的。
在弹出的对话框中,输入数据目的名称,例如:OtherTopic,选择产品智能灯。
单击确定。
配置并启动解析器
以下操作中参数配置说明,请参见配置解析器。
单击解析器页签,执行以下操作,添加解析器。
单击创建解析器。
在弹出的对话框中,输入解析器名称,例如:DataParser。
单击确定。
在DataParser页面,关联数据源。
在配置向导的数据源下,单击关联数据源。
在弹出的对话框中,单击数据源下拉列表,选择已创建的数据源AppData。
单击确定。
在DataParser页面,单击配置向导的数据目的,关联数据目的。
单击数据目的列表右上方的关联数据目的。
在弹出的对话框中,单击数据目的下拉列表,选择已创建的数据目的OtherTopic。
单击确定。
在数据目的列表,查看并保存数据目的ID,例如为1000。
后续解析脚本中,需使用此处的数据目的ID。
在DataParser页面,单击配置向导的解析器脚本,完成脚本配置。
在脚本输入框,输入解析脚本,将智能灯设备具有订阅权限的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)
单击脚本输入框下方保存。
单击调试,在右侧面板,选择产品和设备,输入Topic和Payload数据,验证脚本可执行。
本示例参数如下:
运行结果如下,表示脚本执行成功。
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
在右侧面板左下方,单击关闭。
单击脚本输入框下方发布。
返回云产品流转页面的解析器页签,单击解析器DataParser对应操作列的启动。
单击确认,启动解析器。
设备间进行通信
手机App用户通过扫码将App与智能灯绑定。
当App向您的服务器发送绑定某设备的请求后,您的服务器将返回绑定成功的智能灯设备名称(deviceName)。本示例中,智能灯设备名称为light。
手机App用户通过App发送控制指令。
手机App通过自定义Topic发送指令,如本示例中,App对应的发送指令Topic:
/al987654321/ControlApp/user/command
。物联网平台再根据您定义的消息转发解析器,将指令信息发送给智能灯的Topic,如本示例中定义的Topic为:
/al123456789/light/user/set
。智能灯接收到指令后,执行相关操作。
说明手机App也可以向您的服务器发送解绑设备的请求。解绑后,该手机App将不再控制该智能灯。