设备接入-自定义消息收发

更新时间:

使用MQTT协议接入物联网平台的设备,通过向Topic发布消息和订阅Topic的方式和平台进行消息通信。Topic分为系统Topic、物模型Topic和自定义Topic,其中自定义Topic需要用户在控制台定义。 本文为您介绍设备使用自定义Topic与物联网平台进行上下行消息通信,以及物联网平台和业务服务器之间的通信步骤。

重要

提醒:Tuya 物联网平台阿里云版大部分功能兼容现在的阿里云IoT平台设备接入和北向API功能,为了兼容涂鸦IoT设备生态和阿里云IoT设备生态,部分名词叫法有改动,但不影响使用,业务代码可以直接替换使用,即 ProductID=ProductKeyHardwareID=DeviceName

Wi-Fi智能插座案例

本示例中,以一款 Wi-Fi智能插座 产品为例,设备使用MQTT协议接入到IoT平台,通过订阅自定义Topic接收IoT平台下发的指令,通过向自定义Topic发布消息上报电流、电压、功率数据。IoT平台将收到的数据通过AMQP或Kafka转发到用户的业务服务器,业务服务器调用IoT平台提供的北向API向自定义Topic发布消息,设备通过订阅的Topic接收到指令控制智能插座。

wifi插座案例.png

说明

Tuya IoT 平台 开通即用,提供 MQTT接入协议

设备端 服务端 业务程序,由企业自有研发团队负责。

控制台操作步骤

1. 创建产品

在左侧导航栏,选择产品开发,进入产品列表页面,点击右上角的创建产品按钮,进入创建产品页面,输入产品信息,生成唯一产品ID,即 ProductID,下文简称PID。

说明

产品ID(ProductID) 即为阿里云IoT平台中的 ProductKey,原来业务代码可以直接替换使用。

image1.png

输入产品名称,选择直连设备一机一密阿里云IoT自定义、点击下方的创建产品按钮,创建产品,生成产品唯一ID,即ProductID。

image2.png

2. 自定义产品Topic

在左侧导航栏,选择产品开发,进入产品列表页面,选择对应的产品,点击右侧继续开发按钮,进入产品详情。

image5.png

在产品详情的Topic管理页签下,单击自定义Topic,点击新增自定义Topic按钮,增加Topic。

image3.png

本示例中,定义了以下两个Topic类:

  • 设备发布消息Topic:/TbSCo****/${deviceName}/user/devmsg,权限为发布。用于设备向IoT平台发送消息(数据),数据格式用户可以自己定义。

  • 设备订阅消息Topic:/TbSCo****/${deviceName}/user/cloudmsg,权限为订阅。在进行设备端开发时,订阅这个Topic,当云端向下发送消息时,通过该Topic发送消息给设备。

image4.png

3. 添加设备

在左侧导航栏,单击 设备管理 > 设备列表,进入设备管理页面,点击右上角的添加设备按钮。

说明

选择对应的产品,输入设备的唯一硬件ID(HardwareID)。

HardwareID 即为阿里云IoT平台中的 DeviceName,原来业务代码可以直接替换使用。

image6.png

4. 获取设备MQTT连接参数

在左侧导航栏,单击 设备管理 > 设备列表,进入设备管理页面,选择对应的设备,单击查看,进入设备详情。

image7.png

在设备详情页面,点击右上部的连接参数查看,查看MQTT 连接参数

image8.png

5. 配置服务端订阅(可选)

如果您需要在自己的服务器上面监听设备上报的数据、设备在线状态等,创建VPC对等连接和创建服务端订阅

使用Postman模拟设备

1. Postman 简介

‌Postman相信每一个开发者都不陌生,是一个功能强大的接口测试工具‌,主要用于测试HTTP请求,支持各种HTTP请求方法,包括GET、POST、PUT、DELETE等。它可以帮助开发者模拟用户发起的各类HTTP请求,验证响应结果是否符合预期‌。随着MQTT协议逐渐应用在各种应用中,现在Postman也支持调试MQTT协议的调试。

Postman下载地址:https://www.postman.com/downloads/

2. Postman MQTT 配置

Postman主要用于HTTP协议接口的测试,现在也支持WebSocket、Socket.io、GraphQL、gPRC、MQTT协议的调试。Postman打开的时,一般情况下默认的是HTTP协议调试页面,点击左上角的“协议图标”,切换到MQTT协议调试

image9.png

切换到Postman MQTT调试页面后,根据下图配置MQTT参数模拟需要接入的设备,注意前后不要有空格。

image10.png

3. 模拟设备上线

根据上一步Postman MQTT 配置的介绍,将获取的MQTT连接参数根据要求填入输入框,并点击Connect。

重要

‼️ 注意:参数的前后不要有多余的空格,冒号注意要用英文,连不上的情况下多数是前后空格问题!

image11.png

如果如图提示Connected,表示已经使用Postman模拟了一个设备,并使用MQTT协议接入到了IoT平台,刷新设备详情页,可以看到设备已经上线,并展示出上线时间。

image12.png

说明

至此,表示设备已经使用MQTT协议接入到IoT平台,并成功上线。

4. 模拟设备向平台发送数据

4.1. 定义发送的数据协议

Wi-Fi智能插座,定时向IoT平台上报电压、电流两项数据,本示例不使用物模型上报数据,使用自定义数据协议格式上报数据,自定义的协议格式如下:

image13.png

说明

示例:上报数据 05 CC 60 02 49 F0,前 3 字节转换为10进制表示 380000mV,即380V;后三字节转换为10进制表示 150000mA,即150A;

4.2. 确定设备发布Topic

通过自定义产品Topic中的/${ProductID}/${HardwareID}/user/devmsg 自定义Topic,向IoT平台发送数据05 CC 60 02 49 F0

重要

注意:需要将Topic中的 ${ProductID} 和 ${HardwareID} 替换成您自己的 ProductID 和 HardwareID ,例如:/TbSCoh3w***86c1jC/72c3****bab3/user/devmsg 不需要${}

4.3. Postman模拟发送数据

  1. 前提条件:根据模拟设备上线中的配置,先将设备上线;

  2. 切换到Postman的Message页签,输入需要发送的消息和发送的Topic,单击Send发送按钮;

image14.png

  1. 在左侧导航栏,选择日志服务,刷新页面,如果能看到刚刚发送的数据,则表示数据上报成功;

image15.png

说明

设备上报到IoT平台后,开发者可以继续使用消息转发>服务端订阅,将发送到平台的数据,使用Kafka或AMQP转发到开发者的业务服务器,对数据进行处理或使用。

5. 平台向模拟设备发送指令

5.1. 定义平台下发指令协议

Wi-Fi智能插座,需要根据平台指令控制插座开关、需要根据指令查询电压电流参数,本示例不使用物模型上报数据,使用自定义数据协议格式上报数据,自定义的协议格式如下:

指令(1字节)

指令参数(1字节)

参数备注

01

00 或 01

00代表关,01代表开

02

00 或 01 或 02

00查询电压电流,01查询电压,02查询电流

说明

示例:

指令 01 01,第 1 字节01表示功能指令控制开关,第 2 字节01表示参数为开;即01 01表示打开插座开关。

指令 02 00,第 1 字节02表示功能指令查询参数,第 2 字节00表示查询电压电流;即02 00表示查询当前插座的电压电流参数,设备接收到指令后,通过Topic发送电压电流参数

5.2. 确定需要订阅的Topic

通过在自定义产品Topic中定义的/${ProductID}/${HardwareID}/user/cloudmsg,订阅该Topic,接收平台发送给设备的控制指令。

重要

注意:需要将Topic中的 ${ProductID} 和 ${HardwareID} 替换成您自己的 ProductID 和 HardwareID ,例如:/TbSCoh3w***86c1jC/72c3****bab3/user/cloudmsg 不需要${}

5.3. 模拟设备订阅Topic

切换到Postman的 Topics 页签,输入需要订阅的Topic,点击右边的SUBSCRIBE开关,开始订阅,如果下面出现Subscribed,则代表订阅成功,可以去平台设备详情Topic列表查看。

image16.png

在左侧导航栏,单击设备列表找到对应的设备,在设备详情Topic列表页签下,如果出现刚刚订阅的Topic,则代表Topic订阅成功,可以通过该Topic,向设备该送指令。

image17.png

在Postman页面中可以看到发送的指令消息01 01,表示控制指令发送成功,如果是真实设备,可以解析对应的指令,执行相应的逻辑。

image18.png