reComputer R1000 与 Node-Red 和 BACnet IP
本文档由 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"。
您可能需要配置以太网端口的 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" 节点的更多使用说明,您可以参考 此教程。
技术支持与产品讨论
感谢您选择我们的产品!我们致力于为您提供各种支持,以确保您使用我们的产品时能够获得尽可能顺畅的体验。我们提供多个沟通渠道,以满足不同的偏好和需求。