了解如何使用 Node-RED 函数

导航至

工业物联网 (IIoT)、自动化和集成领域,复杂性经常出现。有时您会遇到不符合规范的数据或需要超出现成可用性的定制流程。

幸运的是,当使用 Node-RED 时,您会获得一个 Node-RED 函数节点,允许您编写自定义 JavaScript 代码。函数节点使您能够处理复杂的数据转换、执行个性化逻辑,并在您的流程中无缝集成不同的组件。

这篇文章将定义 Node-RED 函数,并提供一个如何在您的流程中使用它们的示例。此外,您还将获得一份可以使用 Node-RED 函数的方式列表。

什么是 Node-RED?

Node-RED 是一个开源的、基于流程的、可视化编程工具,用于连接硬件设备、API 和在线服务。它提供了一个基于浏览器的界面,允许您使用节点创建流程。然后,您将使用可视化链接连接代表各种任务或组件的节点。

我们主要在 物联网 和家庭自动化领域中使用 Node-RED。它通过提供一个拖放界面来创建自动化逻辑、数据处理管道以及各种系统之间的通信,从而简化了不同设备和服务的集成。

node that follows you

Node-RED 中的函数是什么?

在 Node-RED 中,函数是一个节点,允许您编写自定义 JavaScript 代码来处理和操作流程中的消息数据。当内置节点不提供您需要的特定功能,或者当您想要执行自定义数据转换或逻辑时,可以使用函数节点。

节点将消息数据作为 JavaScript 对象 msg 传递,您可以使用属性 msg.payload 访问消息的主体。函数节点应返回一个或多个消息对象。但是,如果您想停止流程,该函数可以不返回任何内容。

如何创建 Node-RED 函数?

在创建 Node-RED 函数之前,请确保您已安装并在 Web 浏览器中运行 Node-RED 实例。在此处连接到您的本地实例。

在编辑器的左侧,您会找到按不同类别分组的节点列表。

在函数类别下,您将看到一个函数节点,您将单击并将其拖动到画布流程中。您将在此处自定义您的流程。

要自定义函数,请双击 function 节点以打开配置窗口。

create Node-RED function

您可以在 名称 字段下调整函数的名称。该名称是在工作区上显示的描述性标签。根据节点的动作标记节点是一个好习惯。

在名称字段下方,有不同的选项卡,您将使用这些选项卡根据上下文配置和编写 JavaScript 逻辑。

如果您有任何想要在节点启动时运行的逻辑,您可以使用 启动时 选项卡来编写相关的 JavaScript 代码。该代码将只运行一次。停止时 选项卡是您编写仅在停止或重新部署节点时才应运行的代码的位置。

现在,消息时 选项卡是您的大部分逻辑所在的位置。

简单函数示例

为了查看函数节点的实际效果,我们将创建一个流程,该流程注入华氏温度值,然后让函数将其转换为摄氏温度。

将三个节点拖动到工作区。从注入节点开始。双击节点以配置其属性,方法是给它一个描述性名称,并将 msg.payload 更改为数字并给它一个值。

接下来,添加一个函数节点。双击节点以打开编辑器。给函数节点一个描述性名称,并添加以下逻辑来转换注入的温度值。这是一个同步函数的示例,因为代码行将按顺序执行。

// Get the input temperature in Fahrenheit from msg.payload
var fahrenheit = msg.payload;

// Convert Fahrenheit to Celsius
var celsius = (fahrenheit - 32) * (5 / 9);

// Store the result in msg.payload
msg.payload = celsius;

// Return the modified message
return msg;

最后,添加一个调试节点,以在调试侧边栏上显示消息有效负载。您还可以将其配置为在 Node-RED 实例的终端中输出消息有效负载。

以下是在您注入 79 华氏度温度时的流程输出。

flow output when you inject a temperature of 79 degrees Fahrenheit

在 Node-RED 中使用异步函数

异步任务是不立即完成的操作,而是在调用后稍后返回其结果。一些示例包括进行 API 调用、读取文件或与数据库交互。

在函数需要在继续之前执行此类异步任务的情况下,请勿返回消息对象。相反,函数必须使用 node.send() 方法来传输预期的消息。此方法接受与函数返回的参数集类似的参数集。

function 节点主动克隆您传递给 node.send 的每个消息对象,从而防止意外更改可能在函数中重用的消息对象。

您应该注意,当函数节点参与涉及消息的异步工作时,运行时不会固有地辨别消息处理何时结束。因此,函数节点应主动调用 node.done()。调用 node.done 允许您的运行时准确地跟踪消息在系统中传输的过程。

在每次流程重新部署时解决任何挂起的请求或关闭活动连接是在函数中使用异步回调代码时的良好做法。您可以在 停止时 选项卡中编写清理逻辑,该逻辑将在节点关闭期间运行。

或者,您可以像这样在您的函数中加入一个 close 事件处理程序

node.on('close', function() {

    // Implement any necessary tidy-up for asynchronous code here, such as shutting down connections.
});

如何在 Node-RED 中使用函数?

Node-RED 函数用途广泛,您可以在基于流程的自动化和集成项目中将其用于各种任务。Node-RED 函数的一些常见用例包括

  • 数据转换——这可能包括转换时间戳、提取特定字段或重新格式化数据以与其他系统兼容。

  • 数据过滤和验证——您可以使用函数来过滤掉不相关的数据。您还可以根据特定标准验证传入数据,然后再允许其通过流程。

  • 条件逻辑——如果您需要根据传入数据做出决策,函数可以实现条件逻辑。例如,您可能会根据某些条件以不同的方式路由数据,或者根据某些值触发特定操作。

  • 数学和统计运算——函数可以对数据执行数学计算或统计运算。这对于诸如聚合数据、计算平均值、确定最大值或最小值等任务很有用。

  • 文本处理——函数可以操作文本数据。您可以搜索模式、替换文本、截断字符串、将单词大写以及执行其他与文本相关的任务。

  • 日期和时间操作——如果您的流程处理时间戳或与日期相关的数据,函数可以帮助您根据需要操作和格式化日期和时间。

  • 错误处理——您可以在函数中实现错误处理机制。例如,如果流程的某一部分发生错误,您可能希望修改错误消息或格式,然后再将其传递到下一个节点。

  • 动态内容——您可以在函数中生成动态内容,例如构建动态 URL、生成个性化消息或构建动态查询。

  • 自定义逻辑——有时您的流程可能需要非常特定的逻辑,而使用现有节点无法实现。函数允许您实现此自定义逻辑。

  • 多步骤处理——在某些情况下,您可能需要在传入数据上执行一系列步骤。函数可以促进单个节点内的多步骤处理,从而降低流程的复杂性。

为什么要使用函数?

无论您是监控 IoT 设备、跟踪传感器读数还是分析性能指标,Node-RED 函数都能让您超越预构建解决方案的界限。函数节点允许您将自定义逻辑、数据掌握和创造力注入到您的流程中。

当您拥抱 Node-RED 函数的变革力量时,请考虑使用 InfluxDB 将您的数据持久性提升到新的水平。借助 InfluxDB,您不仅仅是存储时间序列数据,您还在打开更深入了解时间趋势和模式的大门。

其他资源

这篇文章由 Mercy Kibet 撰写。Mercy 是一位全栈开发人员,热衷于学习和撰写关于新兴和有趣的科技堆栈的文章。