# 四、学习主要节点 在本章中,您将了解 Node-RED 中使用的主要节点。 Node-RED 是一个开源项目,默认情况下提供一些主要节点,但是也可以根据需要从公共库导入和使用节点。 Node-RED 有很多节点。 因此,这本书不足以解释所有这些。 所以,在本章中,让我们挑选主要节点和最常用的基本节点,并学习如何使用它们,在本章中探索这些主题: * 什么是节点? * 如何使用节点 * 从库中获取各种节点 在本章结束时,您将掌握如何在 Node-RED 流编辑器中使用主要节点。 ## 技术要求 要在本章取得进展,你需要具备以下技术要求: * Node-RED (v1.1.0 或更高版本)。 * 本章使用的代码可在**第 04 章**文件夹[https://github.com/PacktPublishing/-Practical-Node-RED-Programming](https://github.com/PacktPublishing/-Practical-Node-RED-Programming)中找到。 ## 什么是节点? 让我们首先了解 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 ](img/Figure_4.1_B16353.jpg) 图 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/](https://nodered.org/docs/)是一个好主意。 节点像 Node-RED 流编辑器上的部件一样排列,只需连接连接线即可使用。 如前所述,除了一些节点之外,您不必自己编写代码。 基本上,流程编辑器有一个框的外观,其中有一个设置窗口。 在设置窗口中,您可以为每个节点设置所需的参数和配置: ![Figure 4.2 – Nodes ](img/Figure_4.2_B16353.jpg) 图 4.2 -节点 这就是您需要了解的关于节点的所有概念。 在下一节中,您将学习如何实际使用节点。 ## 如何使用节点 在本节中,我们将学习如何使用节点。 Node-RED 中的可视化编程与其他可视化编程工具略有不同,因为它使用基于流程的编程。 但请放心,这一点也不难。 如果您实际上创建了一些简单的流,那么您应该能够掌握如何使用 Node-RED 中的节点。 因此,现在让我们使用一些典型的预安装节点创建一个示例流。 树莓派、Windows 和 macOS 系统的环境是相同的。 请使用您最喜欢的环境。 ### 常见类别 让我们介绍用于创建流的节点。 您可以选择所有节点,并将它们从公共类别放置到调色板上。 在公共类别中创建一个包含节点的示例流。 以下四个节点: * **inject**节点 * **complete**节点 * **catch**节点 * **debug**节点 如下图所示放置并连接节点: ![Figure 4.3 – The flow with our common category nodes ](img/Figure_4.3_B16353.jpg) 图 4.3 -常见类别节点的流程 这里的**inject**节点中的数据是简单的 JSON 数据。 双击放置的**inject**节点打开设置面板,设置 JSON 数据。 请参阅以下资料: ```bash {"name":"Taiji"} ``` 您可以在**inject**节点中更改您想要发送的 JSON 数据。 另外,您应该为**完整的**节点设置属性。 打开设置面板并设置一个节点来监视状态。 设置每个节点的参数如下: * The **inject** node: 请将第一个参数设置为**msg。 有效负载**与以下 JSON: {"name": "Taiji"} 你可以在这里设置任意值: ![Figure 4.4 – An inject node for inserting data ](img/Figure_4.4_B16353.jpg) 图 4.4 -插入数据的注入节点 * The **complete** node: 检查**Properties**选项卡的第一个选项,查看**inject**节点的状态: ![Figure 4.5 – A complete node for watching the status ](img/Figure_4.5_B16353.jpg) 图 4.5 -用于监视状态的完整节点 其他节点的属性不需要更改。 设置更改后,需要部署并单击**inject**节点的按钮。 在此之后,您可以在右侧面板的**debug**选项卡中看到 JSON 数据。 你可以从这本书的 GitHub 回购[https://github.com/PacktPublishing/-Practical-Node-RED-Programming/blob/master/Chapter04/common-flows.json](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 ](img/Figure_4.6_B16353.jpg) 图 4.6 -功能类别节点的流程 请按照以下步骤进行流程: 1. 将**inject**节点和**debug**节点放在调色板上。 这两个节点可以使用它们的默认参数。 这里不需要更改设置。 2. 在调色板上放置一个**function**节点。 3. Open the settings panel of the **function** node and enter the following code: ```JS // 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; ``` 4. After coding, click on **Done** to save the settings: ![Figure 4.7 – Function node settings ](img/Figure_4.7_B16353.jpg) 图 4.7 **function** 节点设置 5. 将**switch**节点置于面板上,然后打开**switch**节点的设置面板,设置值规则如下: * The **<** field: **6** * The **>** field: **5** 这应该如下所示: ![Figure 4.8 – The switch node settings ](img/Figure_4.8_B16353.jpg) 图 4.8 -**switch**节点设置 如果输入参数是**5** 或更少,输出路线是**1**,如果输入参数是**6** 以上,输出路线是**2**。 这意味着下一个节点取决于输入参数的数量。 1. Place two **template** nodes on the palette. 前面的函数是**switch**节点,因此数据分割取决于输出的结果。 2. 打开每个**template**节点的设置面板,并在连接到**switch**节点输出路由**1**的首个**template**节点中输入以下代码: ```JS The number is small: {{payload}} ! ``` 添加前面的代码后,**template**节点看起来如下截图所示: ![Figure 4.9](img/Figure_4.9_B16353.jpg) 图 4.9 - 第一个 **template** 节点设置 3. 在第二个 **template** 节点中输入以下代码,该节点连接到 **switch** 节点的输出路由 **2**: ```JS The number is big: {{payload}} ! ``` 它看起来就像下面的截图: ![Figure 4.10](img/Figure_4.10_B16353.jpg) 图 4.10 第二个 **template** 节点设置 4. 将**change**节点放在面板上,打开**change**节点的设置面板,查看**规则**下面的设置框。 5. 请从**to**旁边框中的下拉菜单中选择**string**,并在其旁边的文本框中输入所需的字符串。此处显示**It has been changed to string data!**。请参考以下截图: ![Figure 4.11 – The change node settings ](img/Figure_4.11_B16353.jpg) 图 4.11 -**change**节点设置 6. 更改设置后,需要部署并单击**inject**节点的按钮。 一旦你这样做了,你可以在右边面板的调试选项卡中看到数据,如下所示: ![Figure 4.12 – Showing the results in the debug tab ](img/Figure_4.12_B16353.jpg) 图 4.12 -在调试选项卡中显示结果 第一个调试消息是默认的**inject**节点值,作为时间戳。 第二个是**change**节点后放置的**debug**节点的调试消息。 最后一个取决于随机数,由模板节点格式化。 你可以从这本书的 GitHub 回购[https://github.com/PacktPublishing/-Practical-Node-RED-Programming/blob/master/Chapter04/function-flows.json](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/](https://flows.nodered.org/)。 在下面的截图中,你可以看到 Node-RED 库如何运行: ![Figure 4.13 – Node-RED Library ](img/Figure_4.13_B16353.jpg) 图 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 ](img/Figure_4.14_B16353.jpg) 图 4.14 -打开 User Settings 面板,找到你想要使用的节点 3. 点击**Install**按钮后,将弹出一个窗口,您需要在该窗口中再次点击**Install**按钮。. 当您这样做并且安装完成后,您将看到一个弹出消息,显示**Nodes added to palette**。 这是所有! 您可以看到您在面板中安装的所有节点,如下图所示: ![Figure 4.15 – Nodes you have installed are added to your palette ](img/Figure_4.15_B16353.jpg) 图 4.15 -您已安装的节点被添加到您的调色板 > 提示 : 你可以在 Node-RED Library 网站上搜索有用的节点。 可以通过关键字进行搜索,并根据最近添加的内容、下载数量和评级对结果进行排序。 我建议先按下载数量排序,因为被许多开发者下载的节点可能非常有用:[https://flows.nodered.org/search?type=node&sort=downloads](https://flows.nodered.org/search?type=node&sort=downloads)。 现在,您已经成为了一个优秀的 Node-RED 用户,并且掌握了如何使用使用 Node-RED 流编辑器来创建一些流(应用)。 ## 小结 在本章中,您已经学习了如何在 node - red 流编辑器中使用每个主要节点。 您已经成功创建了 Node-RED 流! 您在这里创建的流步骤是您将来创建各种流需要执行的大部分步骤。 本章的重点是每个节点都有自己独特的特性。 通过像拼图一样将这些组合在一起,我们可以通过创建流创建一个类似于常规编程的应用。 在下一章中,让我们为物联网边缘设备创建一个更实用的示例流(应用)。