温度数据历史记录
VisualGw可将数据进行存储,因为各类设备的存储时间以及设备设备均不同。因此VisualGw设计了仓库管理方案,可以将设备属性添加,自由的对数据进行存储、导出表格。配合NodeRed存储节点,可方便用户更高效的设计存储逻辑。
一、创建数据仓库
1.添加仓库
在"仓库管理"菜单点击添加仓库按钮
在弹出的对话框中添加仓库信息
说明:
仓库名称:唯一仓库标识,多个仓库时,不能重复
仓库类型:用户自定义填写
备注:用户自定义填写
存储条数:单仓库的最大存储条数。如果数据量超过此值,那么数据将会循环覆盖。
系统字段设置:一般默认值,名称可由用户填写,非特殊情况一般不用处理
用户字段设置:填写实际设备/数据的属性,可以添加数值和选项两种数据类型。以温湿度举例,案例中,添加了温度和湿度两种属性。
以温湿度历史数据仓库举例,存储条数是这个仓库的最大存储条数。超过这个值,会循环覆盖。即最新的一条数据会覆盖最老的数据。这是为了避免数据溢出,网关存储容量有限,用户根据实际需求填写
建立好数据仓库后,可在数据仓库子菜单下看菜单。
点击后,即可看到仓库内容。新建立的数据仓库,没有任何信息。需要添加挂载ID,挂载ID就是实际的设备,用户也可以理解成其他数据类型。这里的挂载ID,最终node-red里面也会进行识别,node-red会通过数据仓库信息和挂载ID信息,添加对应的数据。
一般的我们推荐挂载ID就是实际的设备序列号,如图:
001是一个温湿度传感器的modbus id地址,我们填写它,同时也可以添加多个。也可以添加组,添加组后,可以拖动挂载ID。进行分类
创建后,数据默认处于未知状态,数据状态为异常。这个页面,我们称之为”数据面板“
历史数据:
二、node-red读写
1.更新数据面板
使用此节点可以直接更新面板数据。
案例中使用一个mqtt节点写数据,如图
function内容:
msg.payload = {
"model": "温湿度历史数据",
"data": [
{
"mountId": "001",
"dataId": "湿度",
"dataType": "value",
"data": msg.payload.hum,
"dataState":"1"
},
{
"mountId": "001",
"dataId": "温度",
"dataType": "value",
"data": msg.payload.temp,
"dataState":"1"
}
]
}
return msg;
model
: 数据仓库名称,例如:温湿度、设备状态、告警记录等data: 数据数组,可同时写入多组数据 - `mountId`: 挂载点ID - `dataId`: 数据ID,例如:温度、湿度、阈值等 - `dataType`: 数据类型,固定为"value" - `data`: 数值,只支持字符串,若其他数据类型,可用js代码转换 - `dataState`: 数据状态,"1"表示正常,"2"表示异常
执行后:
2.新增历史数据
使用此节点可以直接更新面板数据。
案例中使用一个mqtt节点写数据,如图
function内容:
msg.payload = {
"select": [
{
"dwName": "温湿度历史数据_DATA",
"whereKey": null,
"selectKey": [
{
"key": "mount_id",
"value": "001"
},
{
"key": "temp",
"value": msg.payload.temp
},
{
"key": "hum",
"value": msg.payload.hum
}
]
}
]
}
return msg;
dwName
: 数据仓库名称,格式必须为 [仓库名]_DATA,例如:设备状态_DATA、温湿度_DATA、告警记录_DATA等whereKey
: 条件选项,此节点无需此选项selectKey: 选取字段 - `key`: 字段名称,必须与仓库管理中的字段设置一致,例如:mount_id、data_state、temp等 - `value`: 数值,只支持字符串,若其他数据类型,可用js代码转换
执行后: