全面解析 Node-RED:功能、Docker 部署与实战示例

言简意赅的讲解Node-RED解决的痛点

Node-RED 是一个基于流的编程工具,专为物联网(IoT)应用而设计。它通过可视化的编程界面,使开发者能够轻松地连接各种硬件设备、API 以及在线服务,构建复杂的应用流程。本文将详细介绍 Node-RED 的功能,并通过 Docker 部署方法进行实战演示,辅以丰富的示例,帮助读者全面掌握 Node-RED 的使用。

什么是 Node-RED

Node-RED 是由 IBM 开发并开源的一个基于 Node.js 的编程工具。它提供了一个基于浏览器的可视化编辑器,允许用户通过拖拽预定义的节点来创建应用程序流程。这种低代码编程方式使得开发者能够快速构建物联网应用、自动化流程以及各种集成服务。

Node-RED 的特点

  • 易用性:无需深入的编程知识,通过可视化界面即可创建复杂的应用流程。
  • 灵活性:支持多种协议和服务的集成,适用于广泛的应用场景。
  • 可扩展性:拥有丰富的节点库,并允许用户自定义节点。
  • 社区支持:活跃的社区提供了大量的资源和支持。

Node-RED 的核心功能

流程编辑器

Node-RED 的核心是其基于浏览器的流程编辑器。用户可以通过拖拽不同类型的节点,并连接它们来定义数据流。每个节点代表一个功能单元,如输入、处理、输出等。

示例:

node-red部署成功

在编辑器中,左侧是节点库,中央是流程画布,右侧是节点配置面板。用户可以通过点击节点库中的节点,将其拖拽到画布上,然后通过线条连接各节点,定义数据流动的路径。

节点系统

Node-RED 拥有丰富的节点系统,每个节点实现特定的功能。节点分为多种类型,包括:

  • 输入节点:接收数据的入口,如 HTTP 输入、MQTT 订阅等。
  • 处理节点:对数据进行处理,如函数节点、转换节点等。
  • 输出节点:将数据输出到目标,如 HTTP 响应、MQTT 发布等。
  • 社交节点:集成第三方服务,如 Twitter、Slack 等。

示例节点:

  • Inject Node:手动触发数据流。
  • Debug Node:用于调试,显示数据流中的信息。
  • Function Node:允许用户编写自定义 JavaScript 代码。

可扩展性

Node-RED 的一个重要优势是其高度可扩展性。用户可以通过 npm 安装额外的节点包,扩展 Node-RED 的功能。目前,社区提供了数千种节点,涵盖各种应用场景。

安装自定义节点:

Node-Red安装节点

Node-Red安装节点

cd ~/.node-red
npm install node-red-node-sqlite

安装完成后,重新启动 Node-RED,即可在节点库中看到新增的 SQLite 节点。

内置调试工具

Node-RED 提供了强大的调试工具,帮助开发者实时监控数据流。通过 Debug Node,用户可以在流程的任意位置输出调试信息,便于排查问题。

使用 Debug Node:

  1. 将 Debug Node 拖拽到画布上。
  2. 连接到需要调试的节点。
  3. 在右侧的调试面板中查看输出信息。

集成多种协议和服务

Node-RED 支持多种通信协议和服务的集成,使其适用于多样化的应用场景。例如:

  • MQTT:用于物联网设备的消息传输。
  • HTTP/HTTPS:用于 Web 服务的集成。
  • WebSockets:实时双向通信。
  • 数据库:如 MongoDB、MySQL 等。
  • 云服务:如 AWS、Azure、Google Cloud 等。

通过 Docker 部署 Node-RED

Docker 是一种轻量级的虚拟化技术,能够简化应用的部署过程。使用 Docker 部署 Node-RED,可以确保环境的一致性,并便于管理和扩展。

Docker 环境准备

在开始部署之前,确保你的系统已经安装了 Docker。可以通过以下命令检查 Docker 是否已安装:

docker --version

如果未安装,请参考 Docker 官方安装指南 进行安装。

拉取 Node-RED 官方镜像

Node-RED 提供了官方的 Docker 镜像,用户可以直接从 Docker Hub 拉取最新版本的镜像。

docker pull nodered/node-red

启动 Node-RED 容器

拉取镜像后,可以使用以下命令启动 Node-RED 容器:

docker run -d -p 1880:1880 --name mynodered nodered/node-red

参数说明:

  • -d:后台运行容器。
  • -p 1880:1880:将主机的 1880 端口映射到容器的 1880 端口。
  • --name mynodered:为容器指定名称。
  • nodered/node-red:指定使用的镜像。

启动成功后,可以通过浏览器访问 http://localhost:1880,进入 Node-RED 的编辑器界面。

持久化存储与配置

为了确保数据的持久性,建议将 Node-RED 的配置和数据目录挂载到主机上。

docker run -d -p 1880:1880 -v ~/nodered/data:/data --name mynodered nodered/node-red

参数说明:

  • -v ~/nodered/data:/data:将主机的 ~/nodered/data 目录挂载到容器的 /data 目录,用于存储配置文件、流程等数据。

使用 Docker Compose 部署

Docker Compose 是一种定义和管理多容器 Docker 应用的工具。通过编写 docker-compose.yml 文件,可以简化 Node-RED 的部署过程。

示例 docker-compose.yml 文件:

version: '3'
services:nodered:image: nodered/node-redports:- "1880:1880"volumes:- ./data:/datarestart: unless-stopped

部署步骤:

  1. 在项目目录下创建 docker-compose.yml 文件,内容如上所示。

  2. 在终端中运行以下命令启动服务:

    docker-compose up -d
    
  3. 服务启动后,同样可以通过 http://localhost:1880 访问 Node-RED。

实战示例

通过几个实际的示例,帮助读者更好地理解和掌握 Node-RED 的使用方法。

示例一:简单的 HTTP 请求处理

目标: 创建一个简单的 HTTP 端点,接收请求并返回响应。

步骤:

  1. 添加 HTTP 输入节点: 拖拽一个 http in 节点到画布,配置方法为 GET,URL 为 /hello

  2. 添加函数节点: 拖拽一个 function 节点,编写以下代码:

    msg.payload = "Hello, Node-RED!";
    return msg;
    
  3. 添加 HTTP 响应节点: 拖拽一个 http response 节点。

  4. 连接节点:http in 节点连接到 function 节点,再连接到 http response 节点。

  5. 部署流程: 点击右上角的“部署”按钮。

  6. 测试: 在浏览器中访问 http://localhost:1880/hello,应看到页面显示 “Hello, Node-RED!”。

流程图示:

http 流程 示意图

示例二:与 MQTT 进行通信

目标: 订阅一个 MQTT 主题,并将接收到的消息输出到调试面板。

步骤:

  1. 添加 MQTT 输入节点: 拖拽一个 mqtt in 节点,配置 MQTT 服务器地址(如 mqtt://broker.hivemq.com:1883),订阅主题为 test/topic
  2. 添加 Debug 节点: 拖拽一个 debug 节点,设置为显示完整消息。
  3. 连接节点:mqtt in 节点连接到 debug 节点。
  4. 部署流程: 点击“部署”。
  5. 发布消息: 使用 MQTT 客户端向 test/topic 主题发布消息。
  6. 查看调试信息: 在右侧的调试面板中查看接收到的消息。

流程图示:

MQTT流程示意图

示例三:集成数据库(如 MongoDB)

目标: 将接收到的 HTTP 请求数据存储到 MongoDB 数据库中。

步骤:

  1. 添加 HTTP 输入节点: 拖拽一个 http in 节点,方法为 POST,URL 为 /add.

  2. 添加函数节点: 拖拽一个 function 节点,处理请求数据:

    const data = {timestamp: new Date(),payload: msg.payload
    };
    msg.payload = data;
    return msg;
    
  3. 添加 MongoDB 节点: 使用 node-red-node-mongodb 提供的 mongodb out 节点,配置 MongoDB 连接。

  4. 添加 HTTP 响应节点: 拖拽一个 http response 节点,返回成功信息。

  5. 连接节点:http in -> function -> mongodb out -> http response.

  6. 部署流程。

  7. 测试: 通过 curl 或 Postman 向 http://localhost:1880/add 发送 POST 请求,携带 JSON 数据。

  8. 验证存储: 在 MongoDB 中查看是否成功存储了数据。

流程图示:

MongoDB流程示意图

示例四:与第三方 API 集成(如天气 API)

目标: 获取当前天气信息,并通过电子邮件发送通知。

步骤:

  1. 添加注入节点: 拖拽一个 inject 节点,设置为定时触发(如每小时一次)。

  2. 添加 HTTP 请求节点: 拖拽一个 http request 节点,配置天气 API 的 URL(如 OpenWeatherMap API)。

  3. 添加函数节点: 处理 API 返回的数据,提取所需信息。

    const weather = JSON.parse(msg.payload);
    msg.payload = `当前天气:${weather.weather[0].description}, 温度:${weather.main.temp}°C`;
    return msg;
    
  4. 添加电子邮件节点: 使用 node-red-node-email 提供的 e-mail 节点,配置邮件服务器和收件人信息。

  5. 连接节点:inject -> http request -> function -> e-mail.

  6. 部署流程。

  7. 验证: 等待定时触发或手动触发 inject 节点,检查邮件是否收到天气通知。

流程图示:

email流程示意图

总结与扩展

本文详细介绍了 Node-RED 的核心功能,并通过 Docker 部署方法进行了实战演示。通过多个实际示例,展示了 Node-RED 在不同应用场景下的强大能力。Node-RED 的可视化编程方式不仅降低了开发门槛,还提高了开发效率,适用于快速原型开发和复杂系统集成。

扩展资源

  • 官方文档:Node-RED Documentation
  • 社区论坛:Node-RED Forum
  • 节点库:Node-RED Library

未来展望

随着物联网和自动化需求的不断增长,Node-RED 将在更多领域发挥其优势。通过不断扩展节点库和优化性能,Node-RED 有望成为连接各种设备和服务的核心平台。


通过上述内容,你就已经基本理解了这个方法,基础用法我也都有展示。如果你能融会贯通,我相信你会很强

Best
Wenhao (楠博万)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500393.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 CSS 的 `::selection` 伪元素来改变 HTML 文本选中时的背景颜色

定义 ::selection 伪元素: 在你的 CSS 文件中,添加 ::selection 伪元素,并设置 background-color 属性来改变选中文本的背景颜色。 示例代码: ::selection {background-color: yellow; /* 你可以根据需要更改颜色 */color: black…

电商项目-数据同步解决方案(四)商品下架同步更新ES索引库数据

商品下架索引库删除数据 一、 需求分析和业务逻辑 商品下架后将商品从索引库中移除。 主要应用技术有: 消息队列-RabbitMQ ,分布式搜索引擎-ElasticSearch,Eureka,Canal,Feign远程调用 (1)在…

HTML5 标签输入框(Tag Input)详解

HTML5 标签输入框(Tag Input)详解 标签输入框(Tag Input)是一种用户界面元素,允许用户输入多个标签或关键词,通常用于表单、搜索框或内容分类等场景。以下是实现标签输入框的详细讲解。 1. 任务概述 标…

创建线程的8种方法

创建线程的8种方法 目录 继承Thread类实现Runnable接口实现Callable接口使用线程池使用ScheduledExecutorService使用Fork/Join框架使用CompletableFuture使用Guava的ListenableFuture总结 1. 继承Thread类 最直接的方式是创建一个继承自Thread类的子类,并重写其r…

计算机网络—————考研复试

第一章、计算机网络体系结构 1. OSI参考模型和TCP/IP模型: OSI与TCP/IP的记忆方法:只需把OSI的七层记住,将应用层、表示层、会话层一起记,到TCP/IP变成应用层。物理层和数据链路层换成网络接口层。把网络层换个字变成网际层。 而…

word运行时错误‘-2147221164(80040154)’ 没有注册类的解决办法

目录 问题描述解决方案 问题描述 解决方案 打开C盘找到路径C:\Users\Administrator\AppData\Roaming\Microsoft\Word\STARTUP或者在everything中搜索“Microsoft\Word\STARTUP”删除NEWebWordAddin.dotm文件即可正确打开word。

虚拟机Centos下安装Mysql完整过程(图文详解)

目录 一. 准备工作 1. 设置虚拟机静态IP 2. 卸载Mysql 3. 给CentOS添加rpm源 二. 安装MySQL 1. 安装mysql服务 2. 启动mysql服务 3. 开启MySQL开机自启动 4. 查看mysql服务状态 5. 查看mysql初始密码 6. 登录mysql ,修改密码 7. 允许外部访问MySQL数据库…

VScode 只能运行c,运行不了c++的解决问题

原文链接:Vscode只能运行c,运行不了c的解决方法 VScode 只能运行c,运行不了c,怎么回事呢,解决问题: 在tasks.json中加上“"-lstdc"”, 这样之后 要重启VScode,点击链接…

driftingblues6靶机

打开靶场 查看页面源代码,最下面有一个注释,提供了一个网址 vmlist.github.io,我们去访问一下 这里是一个github页面,提供攻防虚拟机的下载,对我们解题并没有什么有用的信息,我们再去扫描端口 发现只有80端…

YOLOv5部署到web端(flask+js简单易懂)

文章目录 前言最终实现效果图后端实现 主界面检测函数检测结果显示 前端实现 主界面(index.html)显示图片界面 总结 前言 最近,老板让写一个程序把yolov5检测模型部署到web端,在网页直接进行目标检测。经过1个星期的努力,终于实…

基本算法——聚类

目录 创建工程 加载数据 聚类算法 评估 完整代码 结论 相比于有监督的分类器,聚类的目标是从一组未打标签的数据中识别相似对象组。它可 以用于识别同类群体的代表性样本,找到有用与合适的分组;或者找到不寻常的样本,比如 异…

安装教程:慧集通集成平台(DataLinkX)智能体客户端安装操作(Linux/windows/mac)

1.下载客户端 使用提供的账号登录集成平台后台(https://www.datalinkx.cn/),点击左侧菜单栏【智能体】→【智能体】进入到智能体列表界面,在该界面我们找到功能栏中的下载按钮点击则会弹出下载界面,在该界面我们可以选择不同的系统操作系统来下载对应版…

【Rust自学】8.4. String类型 Pt.2:字节、标量值、字形簇以及字符串的各类操作

8.4.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编…

1、pycharm、python下载与安装

1、去官网下载pycharm 官网:https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间,去下载python 进入官网地址:https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…

静默模式下安装Weblogic 14.1.1.0.0

目录 一、下载weblogic安装包二、安装JDK三、安装weblogic1、创建weblogic用户2、创建weblogic的安装目录3、上传并解压weblogic安装包4、创建 oraInst.loc 文件5、创建 wls.rsp 响应文件6、静默安装weblogic7、创建域8、启动Weblogic9、设置防火墙规则,以便其他服务器访问10、…

Windows安装Confluence详解

Confluence官网下载地址:https://www.atlassian.com/software/confluence/download-archives 建议安装confluence版本下载5.0-7.0之间,比较稳定一点,我安装的是6.8.2版本 centos7系统和阿里云服务安装后太卡了,果断放弃 Conflu…

Unity is running as administrator解决办法

每次打开Unity项目都会有这个弹窗 解决办法: 打开本地安全策略 - 安全选项 ,把 用户账户控制:以管理员批准模式运行所有管理员 用户账户控制:用于内置管理员账户的管理员批准模式 改成已启用就行

springboot+vue实现SSE服务器发送事件

思路 一个基于订阅发布机制的SSE事件。客户端可以请求订阅api(携带客户端id),与服务器建立SSE链接;后续服务器需要推送消息到客户端时,再根据客户端id从已建立链接的会话中找到目标客户端,将消息推送出去。…

【阻塞队列】- ArrayBlockingQueue 的原理-迭代器

文章目录 1. 前言2. 迭代器3. Itrs3.1 参数3.2 迭代器 Itr3.2.1 参数3.2.2 构造器3.2.3 hasNext3.2.4 next3.2.5 remove3.2.6 shutdown3.2.7 removedAt3.2.8 takeIndexWrapped 3.3 doSomeSweeping(tryHandler)3.4 register3.5 takeIndexWrapped3.6 remov…

人工智能与传统编程的主要区别是什么?

传统编程:开发者预先编写软件行为规则,代码基于程序员定义逻辑处理输入并产生确定输出,具有确定性、手动编写规则和结构化逻辑特点,如垃圾邮件分类程序基于预设关键词等规则。AI 编程:从数据中学习而非手动编写规则&am…