水质数据监测
一、项目要求
- 实现 Modbus 协议的传感器采集。
- 实现 MQTT 协议的数据转发。
- 实现本地数据中心的建立。
二、实现 Modbus 协议的传感器采集
1、新建设备
点击设备接入,进入设备管理界面,再点击新建,进入设备创建界面。
进入设备建设界面后。选择 Modbus 设备类型。开启轮询,实现不断从传感器获取数据。设定最大点位,这是设定可以从传感器获取最多不同的数据点位。选择 UART 的工作模式,因为本项目传感器和终端之间是通过串口通信。选择传感器和终端设备相连的串口编号。在设备配置完成后,就可点击提交。(详细的设备配置说明可见: 设备接入)
2、配置点位表
提交完后回到设备管理界面,可以看到我们创建好的设备。然后设备的高级操作中点击点位表配置。
在点位表配置界面我们有两种配置方式:手动单个配置点位与通过点位表批量配置点位
- 手动单个配置点位:首先要点击添加点位,然后开始设置点位参数,下面进行参数说明:
提交后,如果设定正确过段时间即可看到采集的数据。
-
1、设置传感器设备地址。
-
2、设置读取数据的标签。这个标签的设定与后面配置设备规则中对数据处理时是相关的。
-
3、设置读取数据的别名。
-
4、选择 Modbus 功能。因为我们是读取数据,只要用 4 个功能码分别是 01:读取线圈状态;02:读取离散输入;03:读取保持寄存器;04:读取输入寄存器。选择哪个功能码需要根据对应的设备文档。
-
5、选择数据类型和排序。数据类型主要可以分为两类。占 2 个字节的数据类型和占 4 个字节的数据类型。2 个字节的数据类型例如:int16、short、uint16等,它们的数据排序只有两种正序 AB、倒序 BA。还有 4 个字节的数据类型例如:float、uint、int、RAW 等。RAW 类型只有一种排序就是 DCBA。其他 4 字节的类型排序有三种分别是:ABCD、DCBA、CDAB。
-
6、设置读取数据的起始寄存器地址,也就是数据的起始地址。
-
7、读取数量在设定数据类型时就确定好了。与数据类型所占字节数一致。
-
8、设定权重系数。与小数位相关。
-
9、设定采样频率,即多久进行一次数据采集。单位是 ms
-
10、点击保持即可提交设定的点位。
提交后,如果设定正确过段时间即可看到采集的数据。
- 批量配置点位首先要制作点位表,
先建里如下的 excel 表,在表中填入相关数据.其中每一列依次是数据的标签、数据的别名、Modbus 功能码、采样频率、设备地址、起始寄存器地址、寄存器个数(一个寄存器两个字节)、数据类型、排序、权重系数。
点位制作完成之后,点击导入点位表,找到我们建好表的文件,点击打开,然后确定。如果配置正确,大概5秒钟后可以看到采集的数据。
三、实现 MQTT 协议的数据转发
1、创建 MQTT 协议的北向资源
点击左侧的北向资源,进入北向资源创建界面。点击新建,开始新建资源。
选择 MQTT Borker 的资源类型。配置实现mqtt通信的相关配置。点击提交。(相关配置介绍详情可见:北向资源)。
提交之后。我们的北向资源界面就可看到我们创建好的资源。复制好对应资源的 UUID,这个参数在配置规则中有作用。
2、创建mqtt转发规则
回到设备接入界面,在对应设备的高级配置中点击规则配置。
进入规则配置界面,点击新建规则。
编写规则回调代码(lua 语言),编写方法详情可在规则实例中的数据推送实例查看。也可以点击Lua 规范查看相关规则代码编写的实例。编写完规则后即可点击提交。
Actions = {
function(args)
local dataT, err = json:J2T(args);
if err ~= nil then
Throw(err);
return true, args;
end;
local params = {};
for _, value in pairs(dataT) do
params[value.tag] = value.value;
end;
local json = json:T2J({
id = time:TimeMs(),
method = "thing.event.property.post",
params = params
});
Debug(json);
local err = data:ToMqtt("OUTJVENZSGC", json);
if err ~= nil then
Throw(err);
end;
return true, args;
end
};
点击提交后就可以在规则配置界面看到我们新建的规则
在编写规则的 lua 代码中我们如果有写打印转发的数据(Debug(json)),就可以在首页的运行日志部分看到我们转发的数据。
四、实现本地数据中心的建立
1、建立数据模型
点击左侧数据模型,进入到创建模型的界面。点击模型列表的新建,然后会弹出填写模型信息的框,必须输入名称然后点击提交。
我们可以在模型列表中看到新建的数据模型,选中模型,点击新建,开始给模型添加属性。
填写属性的基本信息,如图所示。然后点击确定。然后重复以上操作添加完所有数据模型的属性。
添加完成后,此时我们的数据模型就可以点击发布,点击确定。
模型发布完成之后,我们可以点击模型列表的模型或者数据中心进入到数据中心。复制好对应资源的 UUID,这个参数在配置规则中有作用。
因为还没有对设备配置存储到本地的规则,所以现在的数据模型对应的数据中心还是空的。接下来我们就要对设备创建本地数据中心存储规则。
2、创建本地存储规则
回到设备接入界面,点击规则配置。
在规则配置界面点击新建。
编写规则回调代码(lua 语言),编写方法详情可在规则实例中的数据推送实例中查看。也可以点击Lua 规范查看相关规则代码编写的实例。编写完规则后即可点击提交即可。
Actions = {
function(args)
local dataT, err = json:J2T(args);
if err ~= nil then
Throw(err);
return true, args;
end;
local schemaData = {};
for _, row in ipairs(dataT) do
schemaData[row.tag] = row.value;
end;
local err = rds:Save("SCHEMAZ848ZRDG", {
temp = (schemaData.t1 + schemaData.t2 + schemaData.t3) / 3,
resistivity = schemaData.resistivity,
conductivity = schemaData.conductivity,
dissolved_oxygen = schemaData.dissolved_oxygen,
ph_value = schemaData.ph_value
});
if err ~= nil then
Throw(err);
return 0;
end;
return true, args;
end
};
点击提交后就可以在规则配置界面看到我们新建的规则。
此时再回到我们的数据中心,就可以看到存入本地数据中心的数据。在这个界面可以进行清空数据和导出数据的操作。