使用IOT-Tree Server中的RESTful模块为前端开发提供数据Api

在上一篇文章 使用IOT-Tree Server和InfluxDB对采集数据进行记录 中,我们使用IOT-Tree Server中的InfluxDB模块和配置流程,实现了对监控设备接入数据标签的历史记录。

此文章是上述文章的后续,会接着介绍如何查询InfluxDB的历史数据,并且讲述如何使用这些数据------通过提供RESTful接口,把IOT-Tree Server变成了典型的后台系统。通过RESTful Api对前端提供调用接口。整个过程几乎不需要写程序,并且可以在几分钟之内完成。

如果你对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 V2 1"这个节点,左边节点列表下方出现这个节点的子节点,选中"Read By Tags"拖拽到绘图区,如图:

此节点是InfluxDB的子节点,双击打开我们可以看到,选择Measurement的下拉选择框会列举出对应数据源的所有内容,我们选择"mytable1"这是上一篇文章我们在"JS函数"节点中,使用JS语言转换JSON数据时使用的名称。

接着我们可以选择一个或多个有历史记录的标签,并每个配置对应一个变量值Var------这个会成为输出JSON对应的属性值。如下:

完成之后,我们需要验证一下这个节点,最简单的是在此节点前方放置一个"手动触发器",result输出端子配置一个"调试"节点,点击手动触发器,触发消息,就可以在调试节点中看到结果,如下:

展开调试里面的消息payload,可以看到输出数据:

至此,我们就完成了读取标签历史数据的节点配置。那么接下来,我们如何使得这些数据能够支持外部访问呢?这是一个物联网系统最基本的需求。

2 配置RESTful Api接口

2.1 RESTful模块配置

IOT-Tree Server消息流新增了一个RESTful模块。我们在"网络"分类下面,选择RESTful服务节点,拖拽到绘制区。双击打开编辑对话框,填写Module Name=m1。确定之后,如下:

选中此节点,列表下方出现子节点,"请求","应答"。各自拖拽添加,如下:

其中,请求应答应该配对使用------内部使用相同的Api名称即可。双击打开"请求 1"节点,填写

Api Name=api1

填写完成之后,再次打开对话框,注意里面的Access Path,这是外部RESTful访问URL,其中localhost可以在你部署环境使用nginx等软件做域名映射转换而修改(在此不做展开说明了):

http://localhost:9090/watertank/_mn_restful_m/save/m1/api1

确定,然后双击打开"应答 1",在Api Name下拉框选择api1,最终形成配对的请求和应答,效果如下:

其中,"请求1"节点在上述的URL被访问收到信息时,就会触发消息输出。我们只需要在这个后面接收处理消息,然后把结果输出到"应答1"节点,就会自动完成RESTful的处理和响应过程。

2.2 组合历史数据和实时数据

为了方便前端UI展示,我们准备一个请求能够同时获取"Read By Tags 1"的历史数据和部分标签的当前实时数据。因此我们选择"接入与设备"分类下的"标签数据读取"节点,放入绘制区,双击打开对话框修改如下内容:

注意:我们把节点标题改成了"rt",这个会在后面被使用。结果如下:

我们双击上方的"Read By Tags 1"节点,把里面的标题改成"his"。然后,在分类"功能"下面选择"JS函数"拖拽添加在his和rt后方。如图:

很明显,我们要使用这个JS函数对his和rt两个节点的输出做组合形成一个JSON消息并输出。双击"JS函数 2"节点,修改标题=合并JSON,并点击"初始化JS"框,填写节点初始化变量:

javascript 复制代码
var cached_ob={}

此代码会在节点中运行一次,并且可以在"运行JS"框中被使用。

选择"运行JS"框:填写如下JS代码:

javascript 复制代码
let t = from_node.getTitle() ;
cached_ob[t] = payload;

return cached_ob;

这个代码根据消息来源节点的标题作为key,把消息负载payload存入cached_ob中,然后返回输出这个对象,达到消息组合的效果。如果我们把前面的his和rt两个节点作为输入,那么组合后的消息格式为:

javascript 复制代码
{
   rt: {...} //rt节点消息
   his: {...} //his节点消息
}

2.3 完成RESTful消息网络

我们把整个过程连接起来,就完成了配置过程,如图:

既简单又轻松,对吧

3 测试总结

3.1 测试

我们使用浏览器REST客户端插件进行测试,如下:

注意,我们"请求 1"节点设置了json_object作为输入,所以请求必须是{}结构。或者我们可以设置请求时间参数:

javascript 复制代码
{"start_dt":1769862684323,"end_dt":1769862784323}

运行效果如下:

3.2 总结

可以发现,使用IOT-Tree Server要为相关的应用开发提供后端Api几乎不费吹灰之力。

这里有个建议,如果你没有前端支持但要完成前端数据展示功能,可以使用AI。因为当前LLM对于前端的代码生成支持的非常好。你完全可以把上述的Api输出数据扔给AI,然后让它给你做出一个前端界面。

相关推荐
才盛智能科技4 小时前
元K:自助KTV行业AI生态领航者
大数据·人工智能·物联网·自助ktv系统·才盛云自助ktv系统
csg11075 小时前
PIC单片机驱动BH1750光照传感器,轻松获取环境光照数据
单片机·嵌入式硬件·物联网
Acrelhuang5 小时前
工厂配电升级优选 安科瑞智能断路器安全提效又节能-安科瑞黄安南
大数据·运维·开发语言·人工智能·物联网
柱子jason5 小时前
使用IOT-Tree Server和InfluxDB对采集数据进行记录
物联网
三佛科技-1341638421221 小时前
LP3716NCK 隔离型12V1A 12W茶炉板电源方案典型应用电路与设计关键
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
雪兽软件1 天前
物联网 (IoT) 关键内容介绍
物联网
帅次1 天前
系统分析师-信息物理系统分析与设计
stm32·单片机·嵌入式硬件·mcu·物联网·iot·rtdbs
才盛智能科技1 天前
歪麦霸王餐&元K(才盛云)签订战略合作
大数据·人工智能·物联网·自助ktv系统·才盛云
北京耐用通信1 天前
极简部署,稳定通信:耐达讯自动化Profibus光纤链路模块赋能物流自动化喷码效率提升
人工智能·物联网·网络协议·自动化·信息与通信