Skip to main content

reComputer R1000 与 Node-Red 和 BACnet IP

note

本文档由 AI 翻译。如您发现内容有误或有改进建议,欢迎通过页面下方的评论区,或在以下 Issue 页面中告诉我们:https://github.com/Seeed-Studio/wiki-documents/issues

简介

BACnet IP(基于 IP 的楼宇自动化和控制网络)是一种用于管理和自动化楼宇系统的通信协议。它使来自不同制造商的设备能够在标准 IP 网络上无缝互操作,从而增强系统集成性和灵活性。在楼宇管理系统 (BMS) 中,BACnet IP 的主要优势包括更好的可扩展性、更简单的安装和维护,以及利用现有网络基础设施的能力。BACnet IP 还支持实时数据交换,从而实现更好的楼宇系统监控和控制。这带来了更高的能源效率、更低的运营成本,以及更好的居住舒适性和安全性。

本教程展示了如何使用 Node-RED 在 reComputer R1000 上读取 BACnet 设备数据并进行实时可视化显示。我们在 W10 PC 上使用 BACnet 设备模拟器来模拟真实的 BACnet 设备。reComputer R1000 和 W10 PC 连接到同一台路由器,以确保它们处于同一网络段,然后读取并显示数据。

入门

在开始本项目之前,您需要按照以下说明提前准备好硬件和软件。

硬件准备

reComputer R1000

软件准备

reComputer R1000 随附预装的 Raspberry Pi OS。如果您是第一次启动此设备,请阅读我们的 入门指南。有关 Node-RED 的信息,您可以参考以下文章。建议您在继续阅读本维基之前先查看该指南。在本教程中,我们将连接运行 YABE 房间温度模拟器的主机 PC 和运行 Node-RED 的 reComputer R1000。

节点下载

本教程使用了 "node-bacnet-contrib-extended" 节点、"node-red-contrib-loop" 节点和 "node-red-dashboard" 节点。请在开始之前下载这些节点。有关如何下载节点的信息,您可以参考教程

YABE

请访问此链接并下载 YABE(Yet Another BACnet Explorer)。YABE 是一个多功能工具,可用于模拟和探索 BACnet 设备,非常适合测试和开发用途。下载并安装到您的主机 PC 后,YABE 将用于模拟房间温度数据,我们随后将在 reComputer R1000 上使用 Node-RED 读取和处理这些数据。

启动室内温度控制器模拟器

安装 YABE 后,导航到 add-on 文件夹并双击 bacnet.Room.Simulator 以启动它。

完成后,您需要启动 YABE。

然后,点击 + 号以添加设备,并输入您电脑以太网端口的 IP 地址。点击 "Start"。

note

您可能需要配置以太网端口的 IP 地址,以确保它与 reComputer 和您的电脑处于同一网络域。

之后,您应该能够看到与室内温度模拟器具有相同设备 ID 的设备。

Node-red 读取 BACnet 设备的过程

打开 RoomSimulator 后,您将拥有一个 BACnet 设备。以下步骤可以通过 Node-red 读取设备数据并显示。

第一步:搜索设备

首先,您需要获取 BACnet 设备的位置。您可以使用 "discover-devices" 节点来实现这一点。它可以搜索所有连接到您的 BACnet 设备,并显示 IP 地址和设备编号。

第二步:读取数据

获取设备地址后,您可以与相应设备进行通信。本示例使用 "read-single-device" 来读取设备中的所有数据。该节点需要设备的地址和设备编号。这两条信息可以从第一步中获得。我们可以使用 "function" 节点获取这两条信息并将其输入到 "read-single-device" 节点以读取设备数据。您可以在右侧调试窗口中复制设备 ID 和地址属性的路径,然后将它们分配给 "function" 中的变量,以便准确获取设备的地址和设备编号。

第三步:过滤数据

在第二步中读取了大量数据项。我们需要处理这些数据以获取我们需要的数据项。这里我们提取了三个温度数据,即 "室内温度"、"室外温度" 和 "水温"。与第二步相同,我们在调试窗口中复制相应数据项的路径,然后在 "function" 节点中提取它们。之后,我们就可以使用这三项数据。

  • 以下是过滤数据的代码
var Temperature_Indoor = Number(msg.payload["OBJECT_LIST(76)"][1]["PRESENT_VALUE(85)"]); 
var Temperature_Waterm = Number(msg.payload["OBJECT_LIST(76)"][2]["PRESENT_VALUE(85)"]);
var Temperature_Outdoor = Number(msg.payload["OBJECT_LIST(76)"][3]["PRESENT_VALUE(85)"]);
var msg0 = { payload: Temperature_Indoor };
var msg1 = { payload: Temperature_Waterm };
var msg2 = { payload: Temperature_Outdoor };
return [msg0, msg1, msg2];

第四步:循环读取

我们需要持续从 BACnet 设备获取数据,这需要使用 "loop" 节点。如图所示,我们引入 "loop" 节点以基于第三步加入循环。"loop" 节点有三种循环模式。我们使用 "condition" 模式,在循环条件中输入 "1 == 1" 以实现无限循环。同时,添加一个 "delay" 节点,在循环中引入 2 秒的延迟,以便每 2 秒读取一次数据。

第五步:数据展示

通过以上四个步骤,我们可以持续从 BACnet 设备获取数据。为了使数据变化更加直观,我们可以引入 UI 功能并绘制一个 UI 交互界面来展示数据变化。这可以使用 "node-red-dashboard" 节点来实现。在本示例中,使用 "chart""gauge" 绘制三组折线图和仪表盘。第四步的输出作为 "chart""gauge" 的输入,以实现 BACnet 数据的实时可视化监控。

本节主要介绍如何使用 "node-bacnet-contrib-extended""node-red-dashboard" 节点实现 BACnet 设备数据的可视化读取。有关 "node-bacnet-contrib-extended" 节点的更多使用说明,您可以参考 此教程

技术支持与产品讨论

感谢您选择我们的产品!我们致力于为您提供各种支持,以确保您使用我们的产品时能够获得尽可能顺畅的体验。我们提供多个沟通渠道,以满足不同的偏好和需求。

Loading Comments...