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

news2025/1/7 7:25:39

言简意赅的讲解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-red
    ports:
      - "1880:1880"
    volumes:
      - ./data:/data
    restart: 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.coloradmin.cn/o/2271831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、pycharm常用快捷命令和配置【持续更新中】

1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令:pip install requests 安装好了…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器,可以轻松地在 Unity 编辑器中 编辑,搜索&#xf…

用 C++ 创建控制台计算器

本文内容 先决条件创建应用项目验证新应用是否生成并运行编辑代码 显示另外 5 个 C 程序员通常从在命令行上运行的“Hello, world!”应用程序开始。 你将以本文为起点,逐步进阶,加深学习难度:计算器应用。 先决条件 在 Visual Studio 中…

IDEA 撤销 merge 操作(详解)

作为一个开发者,我们都知道Git是一个非常重要的版本控制工具,尤其是在协作开发的过程中。然而,在使用Git的过程中难免会踩一些坑,今天我来给大家分享一个我曾经遇到的问题:在使用IDEA中进行merge操作后如何撤销错误的合…

限时特惠,香港服务器,低至53元/年

家人们谁懂啊!香港服务器这价格简直逆天了,居然比内地的还便宜!就拿阿里云来说,人家最低配置的服务器,价格都很难做到这么亲民。 最低配的就不说了,2 核 4G 的配置,应对日常业务稳稳当当&#x…

EF Core配置及使用

Entity Framework Core是微软官方的ORM框架。 ORM:Object Relational Mapping。让开发者用对象操作的形式操作关系数据库。 EF Core是对于底层ADO.NET Core的封装,因此ADO.NET Core支持的数据库不一定被EF Core支持。 代码创建数据库Code First 建实…

GPT分区 使用parted标准分区划分,以及相邻分区扩容

parted 是一个功能强大的命令行工具,用于创建和管理磁盘分区表和分区。它支持多种分区表类型,如 MBR(msdos)、GPT(GUID Partition Table)等,并且可以处理大容量磁盘。parted 提供了一个交互式界…

【mybatis-plus问题集锦系列】使用mybatis实现数据的基础增删改查

使用mybatis实现数据的基础增删改查,简单的增删改查操作方法步骤 代码实现 pom.xml <dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.…

tlias项目实战笔记

一个小项目写了一个多月&#xff0c;在考试周穿插&#xff0c;终于能有时间来写个小总结了&#xff0c;废话少说&#xff0c;我们直接来步入正题。 一、项目开发规范 1.开发风格Restful 案例是基于当前最为主流的前后端分离模式进行开发。 在前后端分离的开发模式中&#xff…

Arduino Uno简介与使用方法

目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…

go 模拟TCP粘包和拆包,及解决方法

1. 什么是 TCP 粘包与拆包&#xff1f; 粘包&#xff08;Sticky Packet&#xff09; 粘包是指在发送多个小的数据包时&#xff0c;接收端会将这些数据包合并成一个数据包接收。由于 TCP 是面向流的协议&#xff0c;它并不会在每次数据发送时附加边界信息。所以当多个数据包按顺…

新能源电动汽车动力电池技术

新能源电动汽车动力电池技术是新能源汽车发展的核心之一&#xff0c;以下是动力电池技术的一些关键方面&#xff1a; 技术进展 能量密度提升&#xff1a;近年来&#xff0c;动力电池的能量密度有了显著提升&#xff0c;从2010年的100Wh/kg提高到2024年的300Wh/kg。能量密度的…

仓颉笔记——windows11安装启用cangjie语言,并使用vscode编写“你好,世界”

2025年1月1日第一篇日记&#xff0c;大家新年好。 去年就大致看了一下&#xff0c;感觉还不错&#xff0c;但一直没上手&#xff0c;这次借着元旦的晚上安装了一下&#xff0c;今年正式开动&#xff0c;公司众多的应用国产化正等着~~ 第一步&#xff1a;准备 官网&#xff1a;…

JVM对象内存结构

1对象内存结构说明 注意&#xff1a; 如果对象为数组对象&#xff0c;在对象头后面有4字节存储数组长度&#xff1b; 1.1对象头 对象头分为Mark Word和Class Pointer两部分&#xff1b; Mark Word&#xff1a;对象基础信息 32位操作系统中占4字节&#xff0c;64位操作系统中占8…

doris:基于 Arrow Flight SQL 的高速数据传输链路

Doris 基于 Arrow Flight SQL 协议实现了高速数据链路&#xff0c;支持多种语言使用 SQL 从 Doris 高速读取大批量数据。 用途​ 从 Doris 加载大批量数据到其他组件&#xff0c;如 Python/Java/Spark/Flink&#xff0c;可以使用基于 Arrow Flight SQL 的 ADBC/JDBC 替代过去…

算法题(25):只出现一次的数字(三)

审题&#xff1a; 该题中有两个元素只出现一次并且其他元素都出现两次&#xff0c;需要返回这两个只出现一次的数&#xff0c;并且不要求返回顺序 思路: 由于对空间复杂度有要求&#xff0c;我们这里不考虑哈希表。我们采用位运算的方法解题 方法&#xff1a;位运算 首先&#…

HTML——75. 内联框架

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>内联框架</title><style type"text/css">iframe{width: 100%;height: 500px;}</style></head><body><!--iframe元素会创建包含…

MotionCtrl: A Unified and Flexible Motion Controller for Video Generation 论文解读

目录 一、概述 二、相关工作 三、前置知识 1、LVDM Introduction 2、LVDM Method 3、LVDM for Short Video Generation 4、Hierarchical LVDM for Long Video Generation 5、训练细节 6、推理过程 四、MotionCtrl 1、CMCM 2、OMCM 3、训练策略 五、实验 一、概述…

vue2实现excel文件预览

一、插件 通过xlsx插件解析excel数据&#xff0c;对解析后的html组件进行渲染展示。 npm install xlsx 二、完整代码 <template><!-- excel文件预览 --><divelement-loading-text"拼命加载中"element-loading-spinner"el-icon-loading"…

uniapp:跳转第三方地图

1.跳转第三方高德地图 //跳转地图 toMap(item){uni.navigateTo({url: (window.location.href https://uri.amap.com/navigation?to${item.lng},${item.lat},${item.shopName}&modecar&policy1&srchttps://gawl.gazhcs.com/wap/index.html&callnative0)}) },…