全面解析 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-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 (楠博万)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)

前言 本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大&…

MAC M4安装QT使用国内镜像源在线安装

MAC M4安装QT使用国内镜像源在线安装 一、下载安装包1. 访问[https://www.qt.io/](https://www.qt.io/)下载在线安装包2. 下载结果 二、创建QT账户,安装的时候需要三、安装1. 终端打开安装包2. 指定安装源3. 运行安装完的QT 一、下载安装包 1. 访问https://www.qt.…

No.1十六届蓝桥杯备战|第一个C++程序|cin和cout|命名空间

第一个C程序 基础程序 使用DevC5.4.0 写一个C程序 在屏幕上打印hello world #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } 运行这个C程序 F9->编译 F10->运行 F11->编译运行 mai…

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…

UNI-APP_i18n国际化引入

官方文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/i18n.html vue2中使用 1. 新建文件 locale/index.js import en from ./en.json import zhHans from ./zh-Hans.json import zhHant from ./zh-Hant.json const messages {en,zh-Hans: zhHans,zh-Hant: zhHant }…

【MySQL】第一弹----库的操作及数据类型

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;MySQL &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 一、SQL 语句分类 DDL:数据定…

家用电器销售系统|Java|SSM|JSP|

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

ChatGPT 与 AGI:人工智能的当下与未来走向全解析

在人工智能的浩瀚星空中&#xff0c;AGI&#xff08;通用人工智能&#xff09;无疑是那颗最为璀璨且备受瞩目的星辰。OpenAI 对 AGI 的定义为“在最具经济价值的任务中超越人类的高度自治系统”&#xff0c;并勾勒出其发展的五个阶段&#xff0c;当下我们大多处于以 ChatGPT 为…

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

win11 vs2022 opencv 4.10使用vs Image Watch插件实时可视化内存mat对象

这个本来是非开源工业软件HALCON的一个功能&#xff0c;方便提升图像识别开发效率。原以为opencv没有&#xff0c;需要通过进程间共享内存的方式去实现。 结果在官网帮助文档中发现已经提供了。 opencv 4.10帮助文档https://docs.opencv.org/4.10.0/index.htmlOpenCV Tutorial…

用Python操作字节流中的Excel工作簿

Python能够轻松地从字节流中加载文件&#xff0c;在不依赖于外部存储的情况下直接对其进行读取、修改等复杂操作&#xff0c;并最终将更改后的文档保存回字节串中。这种能力不仅极大地提高了数据处理的灵活性&#xff0c;还确保了数据的安全性和完整性&#xff0c;尤其是在网络…

uni-app微信小程序如何使用高德地图。通过经纬度获取所在城市,涉及到授权获取地理位置权限

高德地图官方是这样介绍的使用方法可以参考&#xff1a;入门指南-微信小程序插件 | 高德地图API 我再介绍一下我得具体应用。 1&#xff0c;首先要在申请高德地图开放平台得账号。然后在这个账号中申请一个应用。类型选择微信小程序。 我的应用 | 高德控制台 获取Key-创建工…

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

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

使用Locust对Redis进行负载测试

1.安装环境 安装redis brew install redis 开启redis服务 brew services start redis 停止redis服务 brew services stop redis 安装Python库 pip install locust redis 2.编写脚本 loadTest.py # codingutf-8 import json import random import time import redis …

C#-使用StbSharp库读写图片

一.StbSharp StbSharp是基于C/Stb图形处理库封装的C#接口,支持多种格式PNG/JPG等图片的处理. GitHub链接: GitHub - StbSharp/StbTrueTypeSharp: C# port of stb_truetype.hhttps://github.com/StbSharp/StbTrueTypeSharp二.使用StbSharp创建高度图 创建一张500*500的高度图PN…

单周期CPU电路设计

1.实验目的 本实验旨在让学生通过设计一个简单的单周期 CPU 电路&#xff0c;深入理解 RISC-V 指令集的子集功能实现&#xff0c;掌握数字电路设计与实现的基本流程&#xff0c;包括指令解析、部件组合、电路设计以及功能仿真等环节&#xff0c;同时培养verilog HDL编程能力和…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(五)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 五、 解释评估&#xff08;Explanation Evaluation&#xff09; 在前面的章节中&#xff0c;我们介绍了不同的解释技术和它们的用途&#…

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量&#xff0c;输出像素到相机的方向&#xff0c;结果归一化 会随着相机移动而改变 Reflection Vector 反射向量&#xff0c;物体表面法线反射到相机的方向&#xff0c;x和y和camera vector相反 配合hdr使用

使用Qt中的模型视图框架

本篇文章让你能够在阅读完之后&#xff0c;掌握Qt的模型视图框架的大致使用方法。 问题引入 在我们开发较小的软件的时候&#xff0c;我们可能不会注意到模型视图框架的作用。 因为我们的同一份的数据可能只会在同一个窗口中显示&#xff0c;不会存在数据在一个窗口中更新&a…

跟着逻辑先生学习FPGA-实战篇第一课 6-1 LED灯闪烁实验

硬件平台&#xff1a;征战Pro开发板 软件平台&#xff1a;Vivado2018.3 仿真软件&#xff1a;Modelsim10.6d 文本编译器&#xff1a;Notepad 征战Pro开发板资料 链接:https://pan.baidu.com/s/1AIcnaGBpNLgFT8GG1yC-cA?pwdx3u8 提取码:x3u8 1 知识背景 LED&#xff0c;又名…