news 2026/7/16 19:42:43

Node-RED 入门指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Node-RED 入门指南

文章目录

  • Node-RED 值得一试
    • 资源推荐
    • 第一节 Node-RED 简介
      • 一、是什么?
      • 二、核心特点
      • 三、核心概念
      • 四、示例:定时获取网络API数据并通知
        • Inject节点配置:
        • HTTP Request节点配置:
        • Function节点配置(数据处理):
      • 五、主要应用场景
      • 六、优势和劣势
      • 总结
    • 第二节 安装 Node-RED
    • 第三节 常用控件介绍

Node-RED 值得一试

第一篇:假如生命只有一百天——Node-RED 入门指南
第二篇:假如生命只有一百天——树莓派的操作与使用
第三篇:假如生命只有一百天——UPS电源篇

资源推荐

Node-RED官网
官方文档:https://nodered.org/docs/
节点库:https://flows.nodered.org/
社区论坛:https://discourse.nodered.org/
通过上述步骤,可快速掌握 Node-RED 的核心功能并实现简单自动化流程。

第一节 Node-RED 简介

一、是什么?

Node-RED是一个基于流程的、可视化的编程工具,最初由 IBM 的 Emerging Technology Services 团队开发,现在是一个由 JS Foundation 托管的开源项目。

它的核心设计理念是:通过连接不同的“节点”来构建应用程序,从而降低编程的门槛,特别是对于物联网(IoT)应用的集成和开发。

您可以把它想象成一个用于连接硬件设备、API 和在线服务的“胶水”或“桥梁”

二、核心特点

  1. 可视化编程

    • 编程不再是写代码,而是在浏览器中通过“拖、放、连”的方式组装节点。
    • 节点代表特定的功能(如输入、输出、处理逻辑),节点之间的连线代表数据流。
  2. 基于流(Flow)

    • 应用程序被构建为“流”。一个流是一系列相互连接的节点,数据从一个节点传递到下一个节点,并在过程中被处理。
  3. 建立在 Node.js 之上

    • Node-RED 本身是一个 Node.js 应用程序,这意味着它轻量、高效,并且可以运行在从树莓派等资源受限的设备到云端服务器的各种平台上。
  4. 丰富的节点库

    • 核心库提供了大量常用节点,如 HTTP、MQTT、TCP、文件操作、功能节点等。
    • 拥有一个庞大且活跃的社区,贡献了数千个第三方节点,可以轻松连接到各种数据库(如 MySQL、MongoDB)、云服务(如 AWS、Azure)、社交平台(如 Twitter、Telegram)和硬件(如 Arduino、Raspberry Pi GPIO)。
  5. 内置编辑器

    • 开箱即用,提供了一个基于 Web 的图形化编辑器。您只需在浏览器中访问相应的地址和端口(通常是http://localhost:1880)即可开始编程。

三、核心概念

要理解 Node-RED,需要掌握以下几个基本概念:

  • 节点:构成流程的基本单元。每个节点都有特定的功能。
    • 输入节点:用于接收数据,如inject(注入)、http in(HTTP 请求)、mqtt in(MQTT 订阅)。
    • 处理节点:用于处理数据,如function(编写 JavaScript 代码)、change(修改变量)、switch(路由判断)。
    • 输出节点:用于发送数据,如debug(调试输出)、http response(HTTP 响应)、mqtt out(MQTT 发布)。
  • :由节点和连线组成的完整应用程序。
  • 消息:在节点之间传递的数据单元。它是一个 JavaScript 对象,最常用的属性是msg.payload,用于承载主要数据。其他常见属性包括msg.topic(主题)等。
  • 连线:连接节点,定义数据的流动方向。
  • 调色板:编辑器中所有可用节点的列表。
  • 工作区:您拖放节点和创建流的地方。
  • 调试侧边栏:用于查看debug节点输出的信息,是开发和排错的重要工具。

四、示例:定时获取网络API数据并通知

创建一个Node-RED流程来定时获取天气数据并发送通知。

  1. 添加必要的节点

您需要以下节点:

  • Inject节点- 用于定时触发
  • HTTP Request节点- 用于调用API
  • Function节点- 用于处理数据
  • Debug节点- 用于查看结果(或Notification节点用于发送通知)
  1. 节点配置
Inject节点配置:
  • Name: “定时触发器”
  • Repeat: 间隔时间(例如:每1小时)
  • Payload类型: timestamp
HTTP Request节点配置:
  • Name: “获取天气数据”
  • Method: GET
  • URL:http://api.openweathermap.org/data/2.5/weather?q=Anhui,CN&appid=108e304a55942ac32751b79764d0e4c&units=metric&lang=zh_cn
  • Return: 解析后的JSON对象
Function节点配置(数据处理):
// 处理天气数据if(msg.statusCode===200){vardata=msg.payload;// 构建通知消息msg.payload={title:`安徽天气报告 -${newDate().toLocaleString()}`,message:`城市:${data.name}天气:${data.weather[0].description}温度:${data.main.temp}°C 体感温度:${data.main.feels_like}°C 最高温度:${data.main.temp_max}°C 最低温度:${data.main.temp_min}°C 湿度:${data.main.humidity}% 气压:${data.main.pressure}hPa 风速:${data.wind.speed}m/s 能见度:${data.visibility/1000}km`};// 保留原始数据用于调试msg.weatherData=data;returnmsg;}else{msg.payload=`获取天气数据失败:${msg.statusCode}`;returnmsg;}
  1. 一步到位——导入完整流程JSON
[{"id":"inject-node","type":"inject","name":"定时触发器","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3600","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":100,"y":100,"wires":[["http-request-node"]]},{"id":"http-request-node","type":"http request","name":"获取天气数据","method":"GET","ret":"obj","paytoqs":"ignore","url":"http://api.openweathermap.org/data/2.5/weather?q=Anhui,CN&appid=108e304a55942ac32751b79764d0e4c&units=metric&lang=zh_cn","tls":"","persist":false,"proxy":"","authType":"","x":280,"y":100,"wires":[["function-node"]]},{"id":"function-node","type":"function","name":"处理天气数据","func":"// 处理天气数据\nif (msg.statusCode === 200) {\n var data = msg.payload;\n \n // 构建通知消息\n msg.payload = {\n title: `安徽天气报告 - ${new Date().toLocaleString()}`,\n message: `城市: ${data.name}\\n天气: ${data.weather[0].description}\\n温度: ${data.main.temp}°C\\n体感温度: ${data.main.feels_like}°C\\n最高温度: ${data.main.temp_max}°C\\n最低温度: ${data.main.temp_min}°C\\n湿度: ${data.main.humidity}%\\n气压: ${data.main.pressure} hPa\\n风速: ${data.wind.speed} m/s\\n能见度: ${data.visibility/1000} km`\n };\n \n // 保留原始数据用于调试\n msg.weatherData = data;\n \n return msg;\n} else {\n msg.payload = `获取天气数据失败: ${msg.statusCode}`;\n return msg;\n}","outputs":1,"timeout":"","x":480,"y":100,"wires":[["debug-node","notification-node"]]},{"id":"debug-node","type":"debug","name":"显示结果","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":680,"y":100,"wires":[]},{"id":"notification-node","type":"debug","name":"发送通知","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":680,"y":160,"wires":[]}]
  1. 部署和使用

  2. 将上述JSON导入Node-RED

  3. 部署流程

  4. 点击Inject节点的手动触发按钮测试

  5. 在调试面板查看结果

  6. 扩展功能

如果您想要实际的通知功能,可以:

  • 添加Email节点发送邮件通知
  • 添加Telegram节点发送到Telegram
  • 添加Pushover节点发送手机推送
  • 添加File节点保存历史数据
    邮件通知

注意事项:

  • API调用频率请遵守OpenWeatherMap的使用限制
  • 建议添加错误处理节点
  • 可以添加多个城市监控
  • 可以添加数据存储功能记录历史天气

五、主要应用场景

  • 物联网:连接传感器、执行器,处理设备数据,是实现 IoT 原型开发和应用的利器。
  • API 集成:快速连接不同的 Web 服务,实现数据聚合和自动化。
  • 家庭自动化:与 Home Assistant 等平台结合,创建复杂的自动化场景。
  • 机器人流程自动化:自动化一些简单的、重复性的电脑操作任务。
  • 快速原型开发:在想法验证阶段,用极快的速度搭建出可工作的原型。
  • 数据处理和转换:作为数据流的 ETL 工具。

六、优势和劣势

优势

  • 极低的入门门槛:非程序员也能快速上手,实现自动化功能。
  • 开发速度快:可视化连接比编写集成代码要快得多。
  • 强大的社区和生态:海量的第三方节点几乎覆盖了所有你能想到的服务。
  • 灵活性和可扩展性:可以通过function节点编写自定义 JavaScript 代码,实现复杂逻辑。

劣势

  • 复杂逻辑管理:当流程变得非常庞大和复杂时,可视化界面可能变得难以维护和理解。
  • 调试挑战:对于深层嵌套的逻辑流,调试可能比传统代码更困难。
  • 版本控制:流程以 JSON 格式存储,虽然可以进行 Git 版本控制,但对比差异不如代码直观。

总结

Node-RED 是一个强大、灵活且易于使用的工具,它通过将编程抽象为连接节点的可视化操作,极大地简化了物联网集成和应用程序自动化的过程。无论您是希望自动化家庭环境的爱好者,还是需要快速集成企业级系统的开发者,Node-RED 都值得一试。

第二节 安装 Node-RED

第三节 常用控件介绍

3.1 inject 介绍

Node-red 控件很多,我们可以根据自己的需要来选择。每个控件官方都带
有详细的说明,接下来介绍一个典型的输入控件——inject。

3.1.1 inject 的说明信息
前边helloworld 的例子中,我们已经认识了输入节点,接下来详细介绍
它。
Node-red 内部自带了对控件的介绍。鼠标悬停在某个控件上,就会出现一
些提示信息,例如:
点击节点时,页面右侧也会出现提示信息

3.2 debug 控件介绍

3.1.1 debug 的说明信息
计算机诞生没多久的时候,有一位程序媛在调试程序时出现故障,拆开继
电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于
是,她诙谐的把程序故障统称为“臭虫(BUG)”,把排除程序故障叫DEBUG,
而这奇怪的“称呼”,后来成为计算机领域的专业行话。从而debug意为排除
程序故障的意思。
Debug 控件最主要的作用,是打印出一些信息,方便程序调试。前边已经多
次使用了debug控件了,相信大家对他已经不陌生了。接下来进行更加详细的
介绍。

3.3 file 控件介绍
File 节点分为两种,功能分别是file in与file out
3.3.1 file 的说明信息
读取文件的内容,输出为字符串或二进制缓冲区。
输入
字符串形式的文件名
如果不在节点配置中设置,则该属性设置为需要读取的文件名。

输出
字符串或数组的输出
文件的内容是一个字符串或二进制缓冲区
文件名
建议配置文件名的选项,可以设置为路径\文件名
错误对象
弃用:如果在节点中启用,当节点遇到读取文件的错误时,它将发送一
条没有有效负载的消息,并且这个错误属性设置为错误细节。这种行为模式
被弃用,默认情况下新的节点也不会启用这种模式。
详细信息
文件名应该是绝对路径,否则应当是node-red进程工作目录的相对路
径。
在Windows上,路径分隔符可能需要转义,例如:\Users\myUser.
可选地,一个文本文件可以被分割成几行,每一行输出一条消息,或者
将二进制文件分割成更小的缓冲块——块大小是依赖于操作系统的,但通常
是64 k(linux/mac)或41 k(Windows)。
当分割成多个消息时,每条消息都有一个“部分的”属性需要设置,这
个“部分”应当形成一个完整的消息序列。
应该使用Catch节点捕获和处理错误。

File out 控件
写消息的载荷到一个文件,或者把内容添加到文件末端,或者替换现有
的内容。或者,删除该文件。
输入
字符串形式的文件名
建议配置文件名的选项,可以设置为路径\文件名
详细信息
每条消息有效负载都将被添加到文件的末尾,可以选择在每条消息之间
附加一个换行符(\n)字符.
如果msg.filename被使用,每次写入后,文件都将被关闭。为了获得最
佳性能,使用一个固定的文件名。
它可以被配置为覆盖整个文件而不是追加。例如,当把二进制数据写入
文件时,比如图像,应该使用这个选项,并且应该禁用追加换行的选项。
或者,可以配置这个节点来删除文件。

3.4 switch 控件介绍
Switch 本意是开关、转换,用在node-red里有点像一个岔路口,node-red
里边有数据流,数据流可能有不同的分支,在“岔路口”管理数据流向的,就
可以是switch控件。控件根据数据的一些属性来判断它的流向。就比如你到了
公共卫生间,你是男生,就去左边的男卫生间;女生去右边的女卫生间。
Switch 控件可以根据数据的topic或是payload,或者其它属性来判断数据该
发给哪一个出口。
Switch 控件属于“function”类型的控件,function一般翻译为功能或者
函数。说到函数可能就会让人想到数学上那些抽象的公式,让人望而却步了。
好在编程中用到的函数跟数学上的不太一样,一般是有一定功能的程序。对,
就是写程序。但是不要怕,程序里的逻辑一般都是很简单的,简单到可以用朴
素的语言描述。比如你在回家的路上,你妈妈告诉你:“要是看到卖包子的,
买6个包子。没有卖包子的话,买4个馒头”。在程序里,可能这么表示这个
逻辑关系

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 19:39:42

计算机毕业设计之基于springboot的大学生就业招聘平台

本文设计并实现了一款基于Spring Boot框架、采用Java语言开发的大学生就业招聘平台,该平台采用B/S架构,前端界面由Vue框架构建,后端服务与数据存储则分别依托Spring Boot和MySQL数据库完成,旨在为大学生与企业之间搭建一个高效、便…

作者头像 李华
网站建设 2026/7/16 19:37:20

CANN/asc-devkit Coshape API文档

Coshape 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/ca…

作者头像 李华
网站建设 2026/7/16 19:37:01

如何轻松导出原神祈愿记录:免费开源工具的完整指南

如何轻松导出原神祈愿记录:免费开源工具的完整指南 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 你是否经常忘记自己抽了多少次祈愿&#x…

作者头像 李华
网站建设 2026/7/16 19:36:46

华为OD机试真题 新系统 2026-07-12 JavaGoC 实现【字符串压缩编码】

目录 题目 思路 Code 题目 题目内容: 给定一个只包含大小写英文字母的字符串,请实现字符串压缩编码功能。 压缩规则如下: 如果字符连续出现次数大于 1,则用字符加上出现次数表示。 如果字符连续出现次数等于 1&#xff0…

作者头像 李华
网站建设 2026/7/16 19:35:33

PingFangSC:免费开源的中文字体终极解决方案

PingFangSC:免费开源的中文字体终极解决方案 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 你是否在为网站的中文排版而烦恼?不同…

作者头像 李华
网站建设 2026/7/16 19:33:52

如何轻松实现音频转字幕?AsrTools语音识别工具完整指南

如何轻松实现音频转字幕?AsrTools语音识别工具完整指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate…

作者头像 李华