文章目录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 和在线服务的“胶水”或“桥梁”。二、核心特点可视化编程编程不再是写代码而是在浏览器中通过“拖、放、连”的方式组装节点。节点代表特定的功能如输入、输出、处理逻辑节点之间的连线代表数据流。基于流Flow应用程序被构建为“流”。一个流是一系列相互连接的节点数据从一个节点传递到下一个节点并在过程中被处理。建立在 Node.js 之上Node-RED 本身是一个 Node.js 应用程序这意味着它轻量、高效并且可以运行在从树莓派等资源受限的设备到云端服务器的各种平台上。丰富的节点库核心库提供了大量常用节点如 HTTP、MQTT、TCP、文件操作、功能节点等。拥有一个庞大且活跃的社区贡献了数千个第三方节点可以轻松连接到各种数据库如 MySQL、MongoDB、云服务如 AWS、Azure、社交平台如 Twitter、Telegram和硬件如 Arduino、Raspberry Pi GPIO。内置编辑器开箱即用提供了一个基于 Web 的图形化编辑器。您只需在浏览器中访问相应的地址和端口通常是http://localhost:1880即可开始编程。三、核心概念要理解 Node-RED需要掌握以下几个基本概念节点构成流程的基本单元。每个节点都有特定的功能。输入节点用于接收数据如inject注入、http inHTTP 请求、mqtt inMQTT 订阅。处理节点用于处理数据如function编写 JavaScript 代码、change修改变量、switch路由判断。输出节点用于发送数据如debug调试输出、http responseHTTP 响应、mqtt outMQTT 发布。流由节点和连线组成的完整应用程序。消息在节点之间传递的数据单元。它是一个 JavaScript 对象最常用的属性是msg.payload用于承载主要数据。其他常见属性包括msg.topic主题等。连线连接节点定义数据的流动方向。调色板编辑器中所有可用节点的列表。工作区您拖放节点和创建流的地方。调试侧边栏用于查看debug节点输出的信息是开发和排错的重要工具。四、示例定时获取网络API数据并通知创建一个Node-RED流程来定时获取天气数据并发送通知。添加必要的节点您需要以下节点Inject节点- 用于定时触发HTTP Request节点- 用于调用APIFunction节点- 用于处理数据Debug节点- 用于查看结果或Notification节点用于发送通知节点配置Inject节点配置Name: “定时触发器”Repeat: 间隔时间例如每1小时Payload类型: timestampHTTP Request节点配置Name: “获取天气数据”Method: GETURL:http://api.openweathermap.org/data/2.5/weather?qAnhui,CNappid108e304a55942ac32751b79764d0e4cunitsmetriclangzh_cnReturn: 解析后的JSON对象Function节点配置数据处理// 处理天气数据if(msg.statusCode200){vardatamsg.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.weatherDatadata;returnmsg;}else{msg.payload获取天气数据失败:${msg.statusCode};returnmsg;}一步到位——导入完整流程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?qAnhui,CNappid108e304a55942ac32751b79764d0e4cunitsmetriclangzh_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:[]}]部署和使用将上述JSON导入Node-RED部署流程点击Inject节点的手动触发按钮测试在调试面板查看结果扩展功能如果您想要实际的通知功能可以添加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 out3.3.1 file 的说明信息读取文件的内容输出为字符串或二进制缓冲区。输入字符串形式的文件名如果不在节点配置中设置则该属性设置为需要读取的文件名。输出字符串或数组的输出文件的内容是一个字符串或二进制缓冲区文件名建议配置文件名的选项可以设置为路径\文件名错误对象弃用如果在节点中启用当节点遇到读取文件的错误时它将发送一条没有有效负载的消息并且这个错误属性设置为错误细节。这种行为模式被弃用默认情况下新的节点也不会启用这种模式。详细信息文件名应该是绝对路径否则应当是node-red进程工作目录的相对路径。在Windows上路径分隔符可能需要转义例如\Users\myUser.可选地一个文本文件可以被分割成几行每一行输出一条消息或者将二进制文件分割成更小的缓冲块——块大小是依赖于操作系统的但通常是64 klinux/mac或41 kWindows。当分割成多个消息时每条消息都有一个“部分的”属性需要设置这个“部分”应当形成一个完整的消息序列。应该使用Catch节点捕获和处理错误。File out 控件写消息的载荷到一个文件或者把内容添加到文件末端或者替换现有的内容。或者删除该文件。输入字符串形式的文件名建议配置文件名的选项可以设置为路径\文件名详细信息每条消息有效负载都将被添加到文件的末尾可以选择在每条消息之间附加一个换行符\n字符.如果msg.filename被使用每次写入后文件都将被关闭。为了获得最佳性能使用一个固定的文件名。它可以被配置为覆盖整个文件而不是追加。例如当把二进制数据写入文件时比如图像应该使用这个选项并且应该禁用追加换行的选项。或者可以配置这个节点来删除文件。3.4 switch 控件介绍Switch 本意是开关、转换用在node-red里有点像一个岔路口node-red里边有数据流数据流可能有不同的分支在“岔路口”管理数据流向的就可以是switch控件。控件根据数据的一些属性来判断它的流向。就比如你到了公共卫生间你是男生就去左边的男卫生间女生去右边的女卫生间。Switch 控件可以根据数据的topic或是payload或者其它属性来判断数据该发给哪一个出口。Switch 控件属于“function”类型的控件function一般翻译为功能或者函数。说到函数可能就会让人想到数学上那些抽象的公式让人望而却步了。好在编程中用到的函数跟数学上的不太一样一般是有一定功能的程序。对就是写程序。但是不要怕程序里的逻辑一般都是很简单的简单到可以用朴素的语言描述。比如你在回家的路上你妈妈告诉你“要是看到卖包子的买6个包子。没有卖包子的话买4个馒头”。在程序里可能这么表示这个逻辑关系