四、学习主要节点

在本章中,您将了解 Node-RED 中使用的主要节点。 Node-RED 是一个开源项目,默认情况下提供一些主要节点,但是也可以根据需要从公共库导入和使用节点。

Node-RED 有很多节点。 因此,这本书不足以解释所有这些。 所以,在本章中,让我们挑选主要节点和最常用的基本节点,并学习如何使用它们,在本章中探索这些主题:

  • 什么是节点?

  • 如何使用节点

  • 从库中获取各种节点

在本章结束时,您将掌握如何在 Node-RED 流编辑器中使用主要节点。

技术要求

要在本章取得进展,你需要具备以下技术要求:

什么是节点?

让我们首先了解 node - red 中的节点到底是什么。

Node-RED 是一个使用 Graphical User Interface(GUI) 工具编程 Node.js 应用的工具。 Node-RED 还可作为 Node-RED 上编程的软件(Node-RED Flow)的执行环境。

通常,当使用 Node.js 编程时,源代码是用代码编辑器或集成开发环境(IDE)编写的。 可执行文件是通过构建编写的源代码(编译、关联依赖文件等)而生成的。

Node-RED 上的可视化编程基本上遵循相同的过程。 不同之处在于编码部分是将节点放在 node - red 上而不是编辑器上。

在 Node-RED 中,使用 Node.js 编程时使用的基本处理是由称为节点的实现部分提供的。 在普通的面向对象编程中,这些部分通常以公共部分的形式作为库文件提供。

因为 Node-RED 是一个基于 gui 的可视化编程工具,所以这些常见部分不仅仅是库文件。 这些公共部件的形状像盒子,在 Node-RED 中称为节点。 此外,除了某些节点的之外,一般情况下,节点在编程时可以将变量(参数、参数等)设置为节点属性。

换句话说,因为已经有编程部件(节点),编程只需将它们放置在 GUI 中即可完成。 下图比较了纯 Node.js 编程和 Node-RED 中的流创建:

Figure 4.1 – Node-RED versus Node.js programming

图 4.1 - Node-RED 和 Node.js 编程

现在您已经理解了 Node-RED 和节点的概念,让我们进一步研究节点。

正如您在启动 Node-RED 时所看到的,Node-RED 流编辑器默认提供了基本的处理节点。 这称为pre-installed node

预安装节点的典型类别如下:

  • Common:包括将特定数据注入流的节点、判断处理状态的节点、输出调试日志的节点。

  • function:这包括可以直接用 JavaScript 和 HTML 编写的节点,转换参数变量的节点,以及根据这些参数的内容进行条件分支的节点。

  • Network:这包括处理通信所需的协议处理的节点,例如 MQTT、HTTP 和 WebSockets。

当然,这里给出的例子只是少数。 实际上有更多的类别和节点。

重要提示: 预安装的节点也依赖于 Node-RED 版本。 查看有关 Node-RED 版本的官方文档https://nodered.org/docs/是一个好主意。

节点像 Node-RED 流编辑器上的部件一样排列,只需连接连接线即可使用。 如前所述,除了一些节点之外,您不必自己编写代码。

基本上,流程编辑器有一个框的外观,其中有一个设置窗口。 在设置窗口中,您可以为每个节点设置所需的参数和配置:

Figure 4.2 – Nodes

图 4.2 -节点

这就是您需要了解的关于节点的所有概念。 在下一节中,您将学习如何实际使用节点。

如何使用节点

在本节中,我们将学习如何使用节点。

Node-RED 中的可视化编程与其他可视化编程工具略有不同,因为它使用基于流程的编程。 但请放心,这一点也不难。 如果您实际上创建了一些简单的流,那么您应该能够掌握如何使用 Node-RED 中的节点。

因此,现在让我们使用一些典型的预安装节点创建一个示例流。 树莓派、Windows 和 macOS 系统的环境是相同的。 请使用您最喜欢的环境。

常见类别

让我们介绍用于创建流的节点。 您可以选择所有节点,并将它们从公共类别放置到调色板上。

在公共类别中创建一个包含节点的示例流。 以下四个节点:

  • inject节点

  • complete节点

  • catch节点

  • debug节点

如下图所示放置并连接节点:

Figure 4.3 – The flow with our common category nodes

图 4.3 -常见类别节点的流程

这里的inject节点中的数据是简单的 JSON 数据。 双击放置的inject节点打开设置面板,设置 JSON 数据。 请参阅以下资料:

{"name":"Taiji"}

您可以在inject节点中更改您想要发送的 JSON 数据。 另外,您应该为完整的节点设置属性。 打开设置面板并设置一个节点来监视状态。

设置每个节点的参数如下:

  • The inject node:

    请将第一个参数设置为msg。 有效负载与以下 JSON:

    {“name”: “Taiji”}

    你可以在这里设置任意值:

Figure 4.4 – An inject node for inserting data

图 4.4 -插入数据的注入节点

  • The complete node:

    检查Properties选项卡的第一个选项,查看inject节点的状态:

Figure 4.5 – A complete node for watching the status

图 4.5 -用于监视状态的完整节点

其他节点的属性不需要更改。

设置更改后,需要部署并单击inject节点的按钮。 在此之后,您可以在右侧面板的debug选项卡中看到 JSON 数据。

你可以从这本书的 GitHub 回购https://github.com/PacktPublishing/-Practical-Node-RED-Programming/blob/master/Chapter04/common-flows.json得到流的定义。

功能范畴

在本节中,我们将学习如何使用功能类别中的一些主要节点,并将使用这些节点创建流。

使用函数类别中的节点创建示例流。 这里,我们将使用以下 6 个节点:

  • inject节点

  • function节点

  • switch节点

  • change节点

  • template节点

  • debug节点

放置并连接节点,如下图所示:

Figure 4.6 – The flow with function category nodes

图 4.6 -功能类别节点的流程

请按照以下步骤进行流程:

  1. inject节点和debug节点放在调色板上。 这两个节点可以使用它们的默认参数。 这里不需要更改设置。

  2. 在调色板上放置一个function节点。

  3. Open the settings panel of the function node and enter the following code:

    // generate random number
var min = 1 ;
var max = 10 ;
var a = Math.floor( Math.random() * (max + 1 - min) ) +  
  min ;
// set random number to message
msg.payload = a;
// return message
return msg;
  1. After coding, click on Done to save the settings:

    Figure 4.7 – Function node settings

图 4.7 function 节点设置

  1. switch节点置于面板上,然后打开switch节点的设置面板,设置值规则如下:

    • The < field: 6

    • The > field: 5

      这应该如下所示:

Figure 4.8 – The switch node settings

图 4.8 -switch节点设置

如果输入参数是5 或更少,输出路线是1,如果输入参数是6 以上,输出路线是2。 这意味着下一个节点取决于输入参数的数量。

  1. Place two template nodes on the palette.

    前面的函数是switch节点,因此数据分割取决于输出的结果。

  2. 打开每个template节点的设置面板,并在连接到switch节点输出路由1的首个template节点中输入以下代码:

    The number is small: {{payload}} !

添加前面的代码后,template节点看起来如下截图所示:

Figure 4.9

图 4.9 - 第一个 template 节点设置

  1. 在第二个 template 节点中输入以下代码,该节点连接到 switch 节点的输出路由 2

    The number is big: {{payload}} !

它看起来就像下面的截图:

Figure 4.10

图 4.10 第二个 template 节点设置

  1. change节点放在面板上,打开change节点的设置面板,查看规则下面的设置框。

  2. 请从to旁边框中的下拉菜单中选择string,并在其旁边的文本框中输入所需的字符串。此处显示It has been changed to string data!。请参考以下截图:

    Figure 4.11 – The change node settings

    图 4.11 -change节点设置

  3. 更改设置后,需要部署并单击inject节点的按钮。

一旦你这样做了,你可以在右边面板的调试选项卡中看到数据,如下所示:

Figure 4.12 – Showing the results in the debug tab

图 4.12 -在调试选项卡中显示结果

第一个调试消息是默认的inject节点值,作为时间戳。 第二个是change节点后放置的debug节点的调试消息。 最后一个取决于随机数,由模板节点格式化。

你可以从这本书的 GitHub 回购https://github.com/PacktPublishing/-Practical-Node-RED-Programming/blob/master/Chapter04/function-flows.json得到流的定义。

接下来,让我们了解默认情况下没有提供的节点。

从库中获取多个节点

您可以获得由 Node-RED 贡献者开发的中的几个更有吸引力的节点,并将它们安装到 Node-RED 流编辑器中。 您可以找到新的节点,共享您的流,并查看其他人使用 Node-RED 做了什么。 在本节中,我们将学习如何从 Node-RED 库中获取其他几个节点。 让我们首先访问 Node-RED 库站点:https://flows.nodered.org/。 在下面的截图中,你可以看到 Node-RED 库如何运行:

Figure 4.13 – Node-RED Library

图 4.13 - Node-RED Library

在您自己的 Node-RED 环境的流编辑器中使用这个库很容易。 让我们看看如何从库中安装一个节点:

  1. 从侧栏菜单中选择 Manage palette。 您将看到 User Settings面板打开,选择 Palette 选项卡。

  2. 在搜索框中输入watson,或任何其他您想使用的节点名称。找到目标节点后,点击Install按钮:

    Figure 4.14 – Opening the User Settings panel and finding the node you want to use

    图 4.14 -打开 User Settings 面板,找到你想要使用的节点

  3. 点击Install按钮后,将弹出一个窗口,您需要在该窗口中再次点击Install按钮。.

    当您这样做并且安装完成后,您将看到一个弹出消息,显示Nodes added to palette

这是所有! 您可以看到您在面板中安装的所有节点,如下图所示:

Figure 4.15 – Nodes you have installed are added to your palette

图 4.15 -您已安装的节点被添加到您的调色板

提示 : 你可以在 Node-RED Library 网站上搜索有用的节点。 可以通过关键字进行搜索,并根据最近添加的内容、下载数量和评级对结果进行排序。 我建议先按下载数量排序,因为被许多开发者下载的节点可能非常有用:https://flows.nodered.org/search?type=node&sort=downloads

现在,您已经成为了一个优秀的 Node-RED 用户,并且掌握了如何使用使用 Node-RED 流编辑器来创建一些流(应用)。

小结

在本章中,您已经学习了如何在 node - red 流编辑器中使用每个主要节点。 您已经成功创建了 Node-RED 流! 您在这里创建的流步骤是您将来创建各种流需要执行的大部分步骤。

本章的重点是每个节点都有自己独特的特性。 通过像拼图一样将这些组合在一起,我们可以通过创建流创建一个类似于常规编程的应用。

在下一章中,让我们为物联网边缘设备创建一个更实用的示例流(应用)。