使用IOT-Tree Server和InfluxDB对采集数据进行记录

很多IOT-Tree的使用者问我,他们接入很多设备之后,采集的数据历史记录在哪里获取,早期这个问题对我来说有点尴尬:为了能够不让整个软件太复杂,在支持消息流之前,我都建议他们自己建立数据库,然后根据自己的需要读取标签数据做数据记录。

现在不一样了,消息流中的InfluxDB模块相关功能已经比较完善,完全可以使用此模块自动对关心的标签数据进行记录存储。如果你有这样的需求,那就跟着试试吧。

如果你对IOT-Tree Server不了解,可以看如下内容

IOT-Tree Server是个开源物联网软件,可以作为组态软件成为自动化系统的上位软件。她提供了各种设备接入、数据组织管理、数据分享使用、消息流控制逻辑和人机交互多个方面的功能。当然,你也可以仅仅使用这个软件作为数据采集终端或边缘计算的软件。

这是IOT-Tree Server相关的系列文章,你可以参考其他文章更多了解IOT-Tree能给你带来的好处:

使用IOT-Tree Server通过MC协议连接三菱Q系列PLC

使用IOT-Tree Server通过FINS协议连接欧姆龙CP2E-N系列PLC

系列文章还包含IOT-Tree完成一个具体项目的过程,非常详细,如下:

机房自动化监控手把手分享给你 - 10 项目完成总结

1 InfluxDB时序数据库

InfluxDB 是一个开源的时序数据库(Time Series Database, TSDB),专为处理时间戳数据设计,适用于监控、分析、物联网(IoT)和应用性能管理等场景。由 InfluxData 公司开发,采用 Go 语言编写,具有高性能、高压缩率和易用性等特点。

数据库有如下重要的基本构成:

Measurement:类似关系型数据库的表,用于存储相关数据(如 cpu_usage)。

Tags:索引字段,用于高效查询(如 host=server1)------请注意和IOT-Tree的标签Tag区别

Fields:实际存储的数值数据(如 value=0.64),不支持索引。

Timestamp:每条数据必须包含的时间戳。

很明显,InfluxDB非常适合存储IOT-Tree Server接入的设备数据。如果你还没有使用过,建议试试。

1.1 InfluxDB安装配置

InfluxDB安装配置非常简单,就一个influxd.exe文件。启动之后会自动创建数据存储目录,当然也可以配置脚本启动,指定存储数据的位置。具体网络上资料很多,本文不展开讲了。

在实际项目部署中,如果你使用windows系统,建议使用nssm.exe配置此数据库为一个服务,可以随着系统启动自动启动。

2 IOT-Tree Server配置过程

IOT-Tree Server中的项目配置你可以参考上面提到的相关资料。本文假设你已经配置好了一个能够正常运行的项目,现在需要对项目中的部分标签数据进行记录,以方便后续查询使用。

2.1 配置InfluxDB数据源

访问IOT-Tree Server管理主界面(如http://localhost:9090/admin)。在数据源区域点击添加:

弹出的类型选择"InfluxDB",然后进入对应的InfluxDB界面:

其中,URL是对应的InfluxDB地址和端口,Token是访问密钥,Org 和Bucket根据你的配置添加即可。

添加成功之后,点击这个数据源的链接测试按钮,提示成功说明数据源配置完成。

2.2 配置记录消息流

接下来你就可以配置对你关心的采集数据标签进行记录存储。

2.2.1 新建一个消息流

点击新增的"保存记录"消息流,右边出现了此消息流的配置界面。

2.2.2 添加并设置InfluxDB模块

在存储分类下面选择InfluxDB V2节点,拖拽到绘制区,新增InfluxDB节点,如下:

双击新增的"InfluxDB V2 1"节点,在弹出窗口中选择之前新增的数据源,如图:

2.2.3 新增InfluxDB Writer子节点

选中"InfluxDB V2 1"节点,左边列表下方滑出相关的所有子节点,选择"InfluxDB Writer",拖拽到绘图区

InfluxDB Writer节点会根据输入的JSON格式消息自动写数据记录到InfluxDB数据源中。要求的格式如下:

{

measurement:"mm01",

ts:232123123, //时间戳毫秒

fields:[

{n:"field_name",v:3.14},

{n:"field_2",v:true}

]

}

2.2.4 新增设置"标签变化触发器"和格式转换

在"接入和设备"分类中,选择"标签变化触发器",拖拽到区域,双击弹出配置对话框选择我们关心的数据采集标签。

|----------------------------------------------------------------------------|----------------------------------------------------------------------------|
| | |

标签变化触发器可以监听被选择的标签,当项目在运行过程中,标签值发生变化,就会触发JSON格式消息,里面有标签路径,标签值及更新时间毫秒数,格式如下:

{"tag_path":"xxx.xxx.xx","tag_val":3.14,"updt":123456788}

很明显,我们需要对此消息进行格式转换,转换为上面"InfluxDB Writer"需要的输入格式。这里我们使用"JS函数",同样的,在"功能"分类下面,选择"JS函数"节点拖拽到绘制区。

双击打开此节点编辑对话框,在JS编辑区写入如下JS转换代码:

javascript 复制代码
let fd={n:payload.tag_path,v:payload.tag_val}

//return payload for out msg ,null will has no out msg. [] for idx output
return {measurement:"mytable1",ts:payload.updt,fields:[fd]} ;

转换输出数据写入measurement=mytable1(这个类似关系数据库的Table)。如果不存在,InfluxDB会自动建立。而fields里面只有一个数据,数据名称n=tag_path,v=标签值。

2.2.5 关联节点完成流程

到此,我们就可以把这几个节点消息流向进行关联:

这样整个记录流程就完成,启动项目之后,标签变化触发器会根据配置监听的标签自动触发消息,并通过此流程写入到InfluxDB中。

你也可以添加"调试"节点,查看运行过程中消息流的消息。如图:

3 记录结果和总结

3.1 在InfluxDB中查看记录数据

访问InfluxDB管理界面http://localhost:8086。到里面查看数据如下:

3.2 总结后续处理

从上可以看出,使用IOT-Tree Server项目中的消息流和内置的InfluxDB模块节点,可以非常轻松的实现设备数据的采集和历史记录------整个过程也就几分钟的事。

数据已经进入InfluxDB,你可以基于InfluxDB对记录的历史数据进行后续处理和展示。

在后续文章中,我会继续讲述如何使用InfluxDB中的Read By Tags节点查询记录标签的历史数据。并且如何使用RESTful模块节点把实时数据和历史数据进行组合,形成Api给前端展示提供数据接口。------整个过程也是几分钟的事。

相关推荐
三佛科技-1341638421221 小时前
LP3716NCK 隔离型12V1A 12W茶炉板电源方案典型应用电路与设计关键
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
雪兽软件1 天前
物联网 (IoT) 关键内容介绍
物联网
帅次1 天前
系统分析师-信息物理系统分析与设计
stm32·单片机·嵌入式硬件·mcu·物联网·iot·rtdbs
才盛智能科技1 天前
歪麦霸王餐&元K(才盛云)签订战略合作
大数据·人工智能·物联网·自助ktv系统·才盛云
北京耐用通信1 天前
极简部署,稳定通信:耐达讯自动化Profibus光纤链路模块赋能物流自动化喷码效率提升
人工智能·物联网·网络协议·自动化·信息与通信
JQLvopkk1 天前
SpringBoot + MQTT + EMQX:构建高效物联网数据接入平台
spring boot·物联网·struts
会周易的程序员1 天前
openPLC REST API 参考(英译中)
c++·物联网·架构·软件工程·iot
13631676419侯1 天前
智能中控屏方案介绍
物联网·芯片
蓁蓁啊1 天前
CMake无法检测外部库变化的问题
java·javascript·c++·物联网