Node-RED (BETA)

!!!信息“上游(Atronia)——自动同步” 来源:https://wiki.atronia.eu/SENSBLUE_ATLAS/Node-RED 修订版:2025年(2026-07-14T16:37:56Z)

Node-RED 简化流程

流节点-RED

这些易于部署的流程旨在通过在用户与堆栈之间增加抽象层,加快i.Cee²在任何场景中的集成速度。这通过使用子流实现,子流包含功能所需的代码,并在必要时可以进行修改,从而暴露出一个“隐藏”更复杂集成的节点。

1. 导入 Flow 到 Example 文件夹

要导入流程并将其添加到 Node-RED 示例文件夹,请执行以下操作:

1.1 首先将 i.Cee² 文件夹复制到带有权限的文件夹,即 /pi

1.2 使用命令将文件夹复制到 Node-RED 的 examples 文件夹

sudocp -r/$PATH/i.Cee² /usr/lib/node_modules/node-red/node_modules/@node-red/nodes/examples/
 Simplified Flows

模拟输入

该流程实现了模拟端口AI1..AI4 通过 MQTT 和 theNode-RED Dashboard 2.0。系统分为两个主要子流:模拟输入,用于读取 AI1 到 AI4 的通道,以及模拟输出,用于配置/读取 AO1 和 AO2 通道。主要逻辑被封装在子流中,允许在其他标签页或项目中重复使用。

2. 主要组件

组成部分 功能
模拟输入 负责请求AI1的子流......AI4读数、接收结果,以及将数值转发到指标/界面和实时话题。
模拟输出 子流负责发送AO1/AO2电流、同步滑块/规范以及读取输出当前状态。
模拟演示 主标签页,实例化两个子流并显示仪表盘控件。
MQTT broker i.Cee² 本地经纪人,地址:127.0.0.1:1883
Dashboard 2.0 模拟演示移植页面

3. 子流模拟输入

3.1 函数

模拟输入子流允许选择应读取哪些AI通道以及每个通道应以何种单元/类型操作:电压(电压)或电流(电流)。子流有四个输出,每个通道分别是:AI1、AI2、AI3 和 AI4。

3.2 ENV 变量

变量 类型 默认值 描述
阅读AI1 布尔 确实如此 启用/禁用通道AI1的读取。
AI1_type 电压 AI1读数类型:电压电流
readAI2 布尔 确实如此 启用/禁用通道AI2的读取。
AI2_type 电压 AI2读数类型:电压电流
readAI3 布尔 确实如此 启用/禁用通道AI3的读取。
AI3_type 电压 AI3读数类型:电压电流
readAI4 布尔 确实如此 启用/禁用通道AI4的读取。
AI4_type 电压 AI4读数类型:电压电流

3.3 AI 通道获取

示例请求 payload:

{
 “id”<span 类=“p”>: 1780000000000
 “origin”<span 类=“p”>: “Dev”<span 类=“p”>,
 “task” {
 “taskParams”<span 类=“p”的 >: {
 “AI1” { <span 类=“nt”>“action”<span 类=“p”>: “READ” },
 “AI2”:<span 类=“w”> { “action” “READ” },
 “AI3” { “action”<span 类=“p”>: “READ” },
 “AI4”:<span 类=“w”> { “action”<span 类=“p”>: “READ” }
 }
 }
}

如果没有频道处于激活状态,函数会发出“未选中 AI 频道”的警告,并不会发送消息。

3.4 配置 AI 模式

集采集模式允许将模拟信道配置发送到analogInputs/config/in。函数 Set AIX 模式仅为活跃通道创建任务参数,并将每个通道设置为:

{
 “mode” “single”
 “类型”<span 类=“p”>: “voltage”
}

它还通过 flow.set(“AI_config”, taskParams)保存配置。如果配置类型既非电压也非电流,函数将电压作为备用并发出警告。 class=“mw-heading mw-heading3”>

4.亚流模拟输出

4.1 函数

子流模拟输出控制并监控两个模拟电流输出:AO1和AO2。它有一个输入,用于仪表盘的滑块,还有两个输出,一个用于AO1,另一个用于AO2。

4.2 ENV 变量

变量 类型 默认值 描述
AO1_enabled 布尔 确实如此 启用/禁用输出AO1。
AO1_current 5.5 AO1的初始/默认电流(mA)。
AO2_enabled 布尔 确实如此 启用/禁用输出AO2。
AO2_current 5.5 AO2的初始/默认电流(mA)。

函数集电流输出接收来自滑块的消息,范围在0到20 mA之间。无效值会在调试面板中以警告被拒绝。

Payload sent 到 analogOutputs/config/in

{
 “id”<span 类=“p”>: 1780000000000
 “origin”<span 类=“p”>: “APP”
 “task” {
 “taskParams”<span 类=“p”的 >: {
 “mode” “on”<span 类=“p”>,
 “AO1” { “current”<span 类=“p”>: 5.5 },
 “AO2” { “current”<span 类=“p”>: 5.5 }
 }
 }
}

如果ENV中的某个输出被禁用,则发送到该通道的电流为0。如果两者都被禁用,模式场会切换为关闭

4.5 读取AO

阅读组定期向 analogOutputs/runtime/in

{
 “id”<span 类=“p”>: 1780000000000
 “origin”<span 类=“p”>: “APP”
 “task” {
 “taskParams”<span 类=“p”的 >: {
 “AO1” { “action”<span 类=“p”>: “READ” },
 “AO2” { “action”<span 类=“p”>: “READ” }
 }
 }
}

响应通过 analogOutputs/runtime/out 接收。解析器会提取 AO1.currentAO2.current,并以相应格式准备一个有效载荷,用于写入数据库或进一步处理:

[
 {
 “AO1” 5.5
 “AO2”:<span 类=“w”> 5.5
 }
]

5. 操作流程

5.1 读取模拟输入

  1. 子流模拟输入的注入会触发获取 AIx 通道的功能。
  2. 该函数检查ENV变量中哪些信道是活跃的。
  3. 请求会发布在analogInputs/runtime/in上。
  4. 硬件/服务响应的是模拟输入/运行时/输出
  5. 解析器按通道分离这些值,并更新 AI 计量表。

5.2 模拟输出配置

  1. 用户移动AO1或AO2滑块。
  2. 子流模拟输出接收的值为 msg.topic 等于通道。
  3. 该函数验证电流是否介于0到20毫安之间。
  4. 该值存储在流上下文中。
  5. 配置
  6. 发布在analogOutputs/config/in上。
  7. 换频道的滑杆、轨距和文字同步。

5.3 读取模拟信号

  1. 周期性注入会在analogOutputs/runtime/in上发送AO1和AO2的READ请求。
  2. 系统响应的是模拟输出/运行/输出
  3. 解析器将这些值转换为带有ao1ao2和tag source_tag字段的结构化负载。

6. 验证与保护的实现

面积 验证 错误行为
AI选择 至少一个活跃的AI频道 返回空值并警告“未选中AI频道”。
人工智能类型 只有电压或电流 回到电压。
AO电流 0到20毫安之间的有限数 返回空值并警告“电流无效”。
AO 启用 支票AO1_enabled / AO2_enabled 禁用通道发送电流0。

7. 需求

  • Node-RED 支持子流。
  • @flowfuse/node-red-dashboard 版本 1.30.2.
  • MQTT经纪人。
  • 外部
  • 服务/硬件,能够刺激/响应模拟输入/*模拟输出/*主题。

数字演示

8.

目标

该流程展示了数字端口的控制和监控

Node-RED、MQTT 和 Dashboard 2.0。

它由两个主要的子流组成:

显示
组成部分 功能
数字输入 读出DI1的状态......DI4,然后把它们发送到仪表盘上的LED灯上。
数字输出 操作 DO1..通过开关DO4,并在LED上显示真实状态。
演示数字移植版 数字控件的仪表盘页面。
MQTT broker i.Cee² 本地经纪人,127.0.0.1:1883。

9. 通用架构

数字输入:

Node-RED → digitalInputs/runtime/in → 硬件

硬件→ digitalInputs/runtime/out → Node-RED → DI1 的 LED。DI4

数字输出:

Switches Dashboard → Node-RED → digitalOutputs/runtime/in → Hardware

硬件→ digitalOutputs/runtime/out →Node-RED → LED DO1..DO4

10. MQTT topics

数字
主题 用途
digitalInputs/runtime/in 请求读取数字输入。
digitalInputs/runtime/out 关于DI1的回复......DI4。
digitalOutputs/runtime/in 输出的SET命令或READ请求。
digitalOutputs/runtime/out 与DO1各州的回应......DO4。

11. 数字输入

数字输入子流定期发送读取请求以读取DI1。DI4。

Force Read注射每1秒一次。

Payload sent:

{
 “id”<span 类=“p”>: 1780000000000
 “origin”<span 类=“p”>: “APP”
 “task” {
 “action” “READ”
 }
}

期望响应包含输入的状态:

msg.payload.task.task.result.DI1..DI4

解析器将状态转换为布尔:

国家接收 发送给UI的值
成功而高涨确实如此 确实如此
低成功确实 错误
通道缺失或错误 错误

子流的四个输出端更新DI1、DI2、DI3和DI4的LED灯。

12. 数字输出

数字输出子流允许控制 DO......通过仪表盘上的开关进行DO4。

每个交换机发送:

切换 话题 关于 关掉
DO1 DO1 确实如此 错误
DO2 DO2 确实如此 错误
DO3 DO3 确实如此 错误
DO4 DO4 确实如此 错误

数字输出函数将数值转换为物理状态:

逻辑价值 州派遣
确实如此
错误

命令发送至:

digitalOutputs/runtime/in

13。数字输出的ENV变量

变量 默认值 功能
DO1 确实如此 DO1的初始状态
DO2 确实如此 DO2的初始状态
DO3 确实如此 DO3的初始状态
DO4 确实如此 DO4的初始状态

部署/启动时,一次性注入会用这些值初始化输出。

14. Dashboard

场地 价值
页面 演示数字移植版
路径 /dashboard/page2
主题 阿特罗尼亚
布局 网格

页面上的分组: class=“wikitable mix-table”> 集团 内容 数字输入 LED灯 DI1......DI4 数字输出 开关DO1..DO4和LED灯DO1......DO4

输入LED灯:

价值 颜色
确实如此 绿色
错误 红色

输出LED灯:

价值 颜色
1 绿色
0 红色

15. 操作序列

数字输入

  1. 发送了读取请求。
  2. 硬件响应状态为DI1..DI4。
  3. 解析器将转为真,为假
  4. DI LED已经更新。

数字输出

  1. 启动时,输出使用ENV值。
  2. 用户在仪表盘上更改开关。
  3. 硬件应用状态。
  4. DO LED显示接收到的真实状态。