设备接入-自定义消息收发
使用MQTT协议接入物联网平台的设备,通过向Topic发布消息和订阅Topic的方式和平台进行消息通信。Topic分为系统Topic、物模型Topic和自定义Topic,其中自定义Topic需要用户在控制台定义。 本文为您介绍设备使用自定义Topic与物联网平台进行上下行消息通信,以及物联网平台和业务服务器之间的通信步骤。
提醒:Tuya 物联网平台阿里云版大部分功能兼容现在的阿里云IoT平台设备接入和北向API功能,为了兼容涂鸦IoT设备生态和阿里云IoT设备生态,部分名词叫法有改动,但不影响使用,业务代码可以直接替换使用,即 ProductID=ProductKey,HardwareID=DeviceName 。
Wi-Fi智能插座案例
本示例中,以一款 Wi-Fi智能插座 产品为例,设备使用MQTT协议接入到IoT平台,通过订阅自定义Topic接收IoT平台下发的指令,通过向自定义Topic发布消息上报电流、电压、功率数据。IoT平台将收到的数据通过AMQP或Kafka转发到用户的业务服务器,业务服务器调用IoT平台提供的北向API向自定义Topic发布消息,设备通过订阅的Topic接收到指令控制智能插座。
Tuya IoT 平台 开通即用,提供 MQTT接入协议
设备端 和 服务端 业务程序,由企业自有研发团队负责。
控制台操作步骤
1. 创建产品
在左侧导航栏,选择产品开发,进入产品列表页面,点击右上角的创建产品按钮,进入创建产品页面,输入产品信息,生成唯一产品ID,即 ProductID,下文简称PID。
产品ID(ProductID) 即为阿里云IoT平台中的 ProductKey,原来业务代码可以直接替换使用。
输入产品名称,选择直连设备、一机一密、阿里云IoT自定义、点击下方的创建产品按钮,创建产品,生成产品唯一ID,即ProductID。
2. 自定义产品Topic
在左侧导航栏,选择产品开发,进入产品列表页面,选择对应的产品,点击右侧继续开发按钮,进入产品详情。
在产品详情的Topic管理页签下,单击自定义Topic,点击新增自定义Topic按钮,增加Topic。
本示例中,定义了以下两个Topic类:
设备发布消息Topic:/TbSCo****/${deviceName}/user/devmsg,权限为发布。用于设备向IoT平台发送消息(数据),数据格式用户可以自己定义。
设备订阅消息Topic:/TbSCo****/${deviceName}/user/cloudmsg,权限为订阅。在进行设备端开发时,订阅这个Topic,当云端向下发送消息时,通过该Topic发送消息给设备。
3. 添加设备
在左侧导航栏,单击 设备管理 > 设备列表,进入设备管理页面,点击右上角的添加设备按钮。
选择对应的产品,输入设备的唯一硬件ID(HardwareID)。
HardwareID 即为阿里云IoT平台中的 DeviceName,原来业务代码可以直接替换使用。
4. 获取设备MQTT连接参数
在左侧导航栏,单击 设备管理 > 设备列表,进入设备管理页面,选择对应的设备,单击查看,进入设备详情。
在设备详情页面,点击右上部的连接参数查看,查看MQTT 连接参数
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协议调试
切换到Postman MQTT调试页面后,根据下图配置MQTT参数模拟需要接入的设备,注意前后不要有空格。
3. 模拟设备上线
根据上一步Postman MQTT 配置的介绍,将获取的MQTT连接参数根据要求填入输入框,并点击Connect。
‼️ 注意:参数的前后不要有多余的空格,冒号注意要用英文,连不上的情况下多数是前后空格问题!
如果如图提示Connected,表示已经使用Postman模拟了一个设备,并使用MQTT协议接入到了IoT平台,刷新设备详情页,可以看到设备已经上线,并展示出上线时间。
至此,表示设备已经使用MQTT协议接入到IoT平台,并成功上线。
4. 模拟设备向平台发送数据
4.1. 定义发送的数据协议
Wi-Fi智能插座,定时向IoT平台上报电压、电流两项数据,本示例不使用物模型上报数据,使用自定义数据协议格式上报数据,自定义的协议格式如下:
示例:上报数据 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模拟发送数据
前提条件:根据模拟设备上线中的配置,先将设备上线;
切换到Postman的Message页签,输入需要发送的消息和发送的Topic,单击Send发送按钮;
在左侧导航栏,选择日志服务,刷新页面,如果能看到刚刚发送的数据,则表示数据上报成功;
设备上报到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列表查看。
在左侧导航栏,单击设备列表找到对应的设备,在设备详情Topic列表页签下,如果出现刚刚订阅的Topic,则代表Topic订阅成功,可以通过该Topic,向设备该送指令。
在Postman页面中可以看到发送的指令消息01 01,表示控制指令发送成功,如果是真实设备,可以解析对应的指令,执行相应的逻辑。