AI学习记录1
1、Node-RED中Butter是什么?
普通情况下,Butter的核心作用是用来缓冲。比如每秒要写100次硬盘,对系统冲击很大,浪费了大量时间进行写处理,用个buffer缓冲区暂存起来,变成每秒要写10次硬盘,这样就减缓冲击,节约时间,提高了写入的效率。--来自知乎
可以理解为计算机内存中一块“临时容器”,用来存放原始的、未编码的二进制数据。在Node-RED中,当需要处理非文本类的数据时(比如图片、音频、串口字节流、二进制协议数据),就会用到Buffer类型。
一个实际的例子
当使用串口节点读取传感器的二进制数据,或者用文件节点读取图片文件时,得到的结果就是Buffer类型。
- 如果你在“change”节点设置的时候选择buffer类型,Node-RED就会把你输入的内容转换成Buffer对象,供后续节点(如串口、TCP、文件写入节点)直接使用。
典型用途
- 处理串口通信:工业设备、传感器通常以二进制字节流传输数据,需要用Buffer解析;
- 处理文件读写:读取图片、视频、压缩包等二进制文件时,数据会以Buffer形式存在;
- 处理网络二进制协议:比如Modbus、MQTTd的二进制报文、TCP/UDP的原始字节数据。
2、change节点的“移动属性(Move)在实际场景中的具体应用例子。
这个属性的本质是:将消息中某个位置的属性值移动到一个新位置,然后删掉原来位置的属性。
1)适配节点的输入格式
例子:MQTT节点只认msg.payload,但是上游输出的节点是msg.temperature。
2)整理多层嵌套的属性,简化后续处理
例子:上游的节点输出的属性嵌套层级过深,后续需要复杂的表达式进行表达,可以用move进行简化。把msg.apiResponse.device.reading.humidity移动到msg.humidity,后续就可以直接使用msg.humidity,无需使用多层嵌套路径。
3)拆分复合属性,适配不同下游节点
例子:上游消息{ "payload": { "temp": 26, "humi": 60 }, "topic": "sensor/2" }
节点设置:
操作 1:Move msg.payload.temp → msg.temperature
操作 2:Move msg.payload.humi → msg.humidity
处理后:{ "temperature": 26, "humidity": 60, "topic": "sensor/2" }
4)调整HTTP请求/相应的属性结构
HTTP 输入节点(http in)的请求参数存在msg.req.query(GET 参数)或msg.req.body(POST 参数),需要移动到顶层供业务逻辑处理;或 HTTP 响应节点需要把数据移动到msg.payload才能返回给客户端。
例子:提取 HTTP GET 参数到顶层
需求:前端通过http://localhost:1880/api?deviceId=123请求,提取deviceId到msg.deviceId。
Change 节点配置:
操作类型:Move
源属性:msg.req.query.deviceId
目标属性:msg.deviceId
效果:后续节点直接用msg.deviceId判断设备 ID,无需访问msg.req.query。
5)统一多设备/多数据源的消息格式
传感器 A 消息:{ "temp": 24, "device": "A" } → Move msg.temp → msg.temperature
传感器 B 消息:{ "temperature": 25, "device": "B" }(无需移动,格式已统一)
传感器 C 消息:{ "data": { "t": 23 }, "device": "C" } → Move msg.data.t → msg.temperature
效果:后续的 “温度汇总”“报警判断” 节点只需处理msg.temperature,无需区分传感器型号。
6)清理冗余属性,优化消息结构
上游消息:{ "rawData": 80, "timestamp": 1711234567890, "deviceType": "fan", "status": "on" }
需求:把msg.rawData移动到msg.payload,并删除其他冗余属性(Move 会自动删除原属性,配合 Delete 操作清理其他属性)。
Change 节点配置:
操作 1:Move msg.rawData → msg.payload
操作 2:Delete msg.timestamp
操作 3:Delete msg.deviceType
效果:最终消息:{ "payload": 80, "status": "on" }(只保留必要属性)

浙公网安备 33010602011771号