新闻中心
PRESS CENTER本文主要实现的功能是:使用EG系列网关间隔10秒采集Modbus TCP设备的数据,并将数据存入Influxdb数据库(EG系列网关插入TF卡后会自动安装Influxdb数据库)。然后每分钟从Influxdb数据库读取6条数据打包上报到服务器。
本文选择EG8200作为演示载体,但文档所述方法适用于EG系列所有网关。
注:使用时序数据库需插入TF卡
第一步:连接数据库
第二步:创建数据库
第三步:选择数据库
第四步:将数据写入数据库
第五步:从数据库中读取数据
第六步:数据格式化
第七步:数据上报
第一步:连接数据库
首次连接Influxdb数据库时,按照默认的配置即可,无需修改配置参数。如下所示:
第二步:创建数据库
创建数据库需要使用到sql语句 CREATE DATABASE myDatabase ,这条语句的意思是创建一个名字叫做myDatabase的数据库。如图所示,日志窗口打印[empty],表示数据库创建成功:
第三步:选择数据库
第二步创建了一个名字叫做myDatabase的数据库,现在需要使用这个数据库,将Influxdb的配置项Database设置为myDatabase,表示以后的操作目标都是myDatabase数据库。
第四步:将数据写入数据库
Modbus TCP数据采集此处不做过多赘述,可参考其他案例介绍
从节点库选择一个写时序数据库节点,选择已经添加好的的数据库配置信息,将数据要存储的表名填写在Measurement,这里使用myTable作为表名:
第五步:从数据库中读取数据
通过函数计算节点构造sql读取指令,读取最近的6条数据:
上图中使用到的函数代码:
if (global.get("startTime") == undefined || global.get("startTime") == null) global.set("startTime", new Date().getTime()) var startTime = global.get("startTime") var temp = new Date(startTime).toISOString() var table = "myTable" msg.query = "SELECT * FROM" + " \"" + table + "\" " + " WHERE time > '" + temp + "' LIMIT 6" return msg; |
第六步:数据格式化
使用函数计算节点将数据封装成Json格式:
上图中使用到的函数代码:
function dateFormat(fmt, timestamp) { let ret; const opt = { "Y+": timestamp.getFullYear().toString(), // 年 "m+": (timestamp.getMonth() + 1).toString(),// 月 "d+": timestamp.getDate().toString(), // 日 "H+": timestamp.getHours().toString(), // 时 "M+": timestamp.getMinutes().toString(), // 分 "S+": timestamp.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; } // const fmt = dateFormat("YYYY-mm-dd HH:MM:SS", new Date()) var dataList = msg.payload if (dataList.length == 0) { node.error("数据库无数据请检查") return } dataList.forEach(item => item.time = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(item.time))) global.set("startTime", new Date(dataList[dataList.length - 1].time).getTime() + 1000) msg.payload = JSON.stringify(dataList) return msg |
第七步:数据上报
MQTT数据发布此处不做过多赘述,可参考其他案例介绍
流程源码/原文(https://iotrouter.yuque.com/zn3vdn/eg8000/dzy0yqzsc9529hy5)
网关的流程支持以Json格式导入导出,方便与其他人分享做好的流程。本章节的流程Json文件如下,复制后在菜单栏右上角选择导入粘贴即可,导出同理。
注意
MQTT配置节点导出时,不会携带用户名和密码。因此导入时需要重新录入用户名和密码