接下来讲的是通过网迅通GW56网关接入华为云平台,通过MQTT实现读取与控制。主要步骤是通过GW56网关脚本编辑,通过Node-Red组帧上发数据至云平台。
实验步骤
登录华为云平台
共建智能世界云底座-华为云 (huaweicloud.com)
登录进去后点击进入控制台
用户首次使用需要实名认证(如果已经实名认证过直接跳过这一步)。
创建实例
点击设备标准接入进入设备接入IoTDA
的页面。
进入后点击购买实例,即可进行进一步的实验
用户需要选择合适的区域范围,并根据自己的需求选择合适的规格配置进行购买
创建产品
创建好实例后,在左侧选择产品
,再选择创建产品
。
所需资源空间默认选择,通信协议选择MQTT模式,其他自拟。
华为云MQTT主题
点击详情配置信息
进入Topic管理,可以看到Topic分类的订阅与发布主题。
实验案例
本次实验使用网迅通GW56网关读取温湿度的值和控制报警灯与风扇。
创建产品
进入模型定义,点击自定义模型,添加服务(service_id)。
添加服务(service_id),可以就理解为组类
点击新增属性,创建温度和湿度。
同理添加添加服务(service_id)为执行器,添加属性为风扇和sos。
定义为可读可写,数据类型可选择布尔型或者枚举型。本次案例使用的是布尔型。
创建设备
创建完产品后,需要创建设备。点击所有设备中注册设备
注册成功,点击详情
可看到MQTT的连接参数,客户端ID(clientld),用户名(username),密码(password),服务器IP(hostname),端口(port)
网迅通GW56网关
进入Node-RED
-
网关通电后网线连接到路由器。
-
打开智能网关配置工具,点击搜索
网关搜索
-
进入脚本配置,可进行网关脚本编辑
能用lua和python
进入可视化编程
-
回到页面,右键网关,可进入可视化编程
配置Modbus通信
利用RS485转USB连接传感器和控制器到电脑,利用配置软件配置设备地址。(网关的串口为com1)
最后得到:
传感器 | 设备地址 | 线圈/寄存器地址 |
---|---|---|
湿度 | 1 | 0 |
温度 | 1 | 1 |
传感器地址
设备 | 设备地址 | 线圈/寄存器地址 |
---|---|---|
4路IO控制器 | 4 | |
ON:SOS | 4 | 0 |
ON:风扇 | 4 | 1 |
连接IO控制器设备的地址
回到Node-red,拉入Modbus-read,和debug,配置读寄存器。
传感器/执行器 | Poll Rate | 数组 |
---|---|---|
温湿度 | 4s | msg.payload[i] |
执行器 | 7s | msg.payload[i] |
modbus配置
温湿度
配置温湿度read节点
(对于监控系统来说,设置合适的Poll Rate非常重要。如果Poll Rate设置得太低(即查询频率太高)。相反,如果Poll Rate设置得太高(即查询频率太低),则可能会导致系统无法及时响应设备状态的变化或数据更新。如果“Poll Rate”被设置为5秒,那么这意味着系统每5秒钟会查询一次设备或传感器的状态或数据。(要在debug中判断系统给传感器赋值的数组是什么类型的)
创建Server
通信连接
温湿度输出
拉入Modbus Read节点读取执行器的状态
拉入在modbus类型中拉入modbus-read和modbus-write,在dashboard中拉入gague(仪表盘)switch(开关),例如sos以下配置:
读写执行器
读执行器的数据配置
写sos的数据
写风扇的数据
了解华为云数据上传与下发格式
设备上报属性数据
发送主题为:$oc/devices/{device_id}/sys/properties/report
数据格式:
MQTT:通过属性上报接口MQTT协议属性上报,上报数据到物联网平台,MQTT属性上报样例如下:
数据格式样例:
{
"services": [
{
"service_id": "温湿度",
"properties": {
"温度": 25
}
},
{
"service_id": "温湿度",
"properties": {
"湿度": 30
}
}
]
}
使用MQTT调试工具测试,数据是否上发成功
查看MQTT连接参数,使用8883端口需要开启SSL/TLS模式
成功连接了之后,发布消息到主题
平台下发属性数据
订阅主题为:$oc/devices/{device_id}/sys/properties/set/request_id={request_id}
不知道request_id可以用#表示
例子:$oc/devices/66a351596e9c0667e02b0568_test/sys/properties/set/#
MQTT测试工具中,订阅主题
云平台手动控制下发属性
平台下发数据格式为:
{
"services":
[
{
"properties":
{"风扇":true},
"service_id":"执行器"
}
]
}
配置MQTT通信
设备上发数据读取
拉入函数节点对温湿度的数据除以10,并组帧数据上传的格式上发至华为云平台。
拉入MQTT发送节点,配置通信。根据设备上报属性数据填写通信参数与主题。
拉入函数节点,根据数据上传格式进行组帧,上传数据到云平台。
同理执行器的操作也一样。
平台下发数据控制
拉入MQTT订阅节点,根据平台下发属性数据填写通信参数与主题。
因为前面配置过通信连接,只需要选择对应的服务端即可
因为要在Modbus Write节点前面注入true(开启)或者false(关闭),才能实现控制,所以我们要解析平台下发的数据。
{
"services":
[
{
"properties":
{"风扇":true},
"service_id":"执行器"
}
]
}
例如此代码:要将解析出{"风扇":true}
拉入函数节点:
报警灯:
风扇:
云平台控制