【搭建Node-RED + MQTT Broker实现AI大模型交互】
搭建Node-RED + MQTT Broker实现AI大模型交互
- 搭建Node-RED + MQTT Broker实现AI大模型交互
- 一、系统架构
- 二、环境准备与安装
- 1. 安装Node.js
- 2. 安装Mosquitto MQTT Broker
- 3. 配置Mosquitto
- 4. 安装Node-RED
- 5. 配置Node-RED监听所有网络接口
- 6. 启动Node-RED
- 三、Node-RED流程配置
- 1. 创建新流程
- 2. 添加并配置MQTT In节点
- 3. 添加并配置处理数据Function节点
- 4. 添加并配置HTTP Request节点
- 5. 添加并配置处理响应Function节点
- 6. 添加并配置MQTT Out节点
- 7. 添加错误处理
- 8. 连接节点
- 9. 部署流程
- 四、测试系统
- 1. 创建测试脚本
- 2. 安装MQTT客户端库
- 3. 运行测试
- 五、在其他Linux客户端使用MQTT与系统交互
- 1. 安装MQTT客户端工具
- 2. 订阅消息(接收响应)
- 3. 发送消息(请求AI处理)
- 4. 使用Python进行交互(可选)
- 六、系统安全与扩展
- 安全配置
- 系统扩展
- 七、故障排除
- 八、总结
搭建Node-RED + MQTT Broker实现AI大模型交互
本文档详细记录了使用Node-RED和MQTT Broker构建一个可与DeepSeek AI大模型交互的物联网平台的完整过程。
一、系统架构
[接收设备消息] --> [处理数据] --> [调用DeepSeek API] --> [处理API响应] --> [MQTT Out]
| ^
| |
v |
[错误消息] --> [错误消息接收] --> [MQTT err]
系统主要组件:
- 设备/客户端:向MQTT Broker发送请求消息
- MQTT Broker:消息代理,处理发布/订阅
- Node-RED:流程编排引擎,处理逻辑和API交互
- DeepSeek API:AI大模型服务
数据流向:
- 设备发布消息到
device/data
主题 - Node-RED订阅并处理消息
- Node-RED调用DeepSeek API
- Node-RED将响应发布到
device/response
主题 - 设备接收响应
二、环境准备与安装
1. 安装Node.js
首先确保安装了Node.js v18或更高版本:
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs
验证安装:
node -v
2. 安装Mosquitto MQTT Broker
apt-get update
apt-get install -y mosquitto mosquitto-clients
3. 配置Mosquitto
创建配置文件,允许匿名连接:
cat > /etc/mosquitto/conf.d/default.conf << EOF
listener 1883
allow_anonymous true
EOF
重启Mosquitto服务:
systemctl restart mosquitto
4. 安装Node-RED
npm install -g --unsafe-perm node-red
5. 配置Node-RED监听所有网络接口
修改配置文件:
cat > /root/.node-red/settings.js << EOF
module.exports = {uiPort: process.env.PORT || 1880,uiHost: "0.0.0.0",
}
EOF
6. 启动Node-RED
nohup node-red > node-red.log 2>&1 &
三、Node-RED流程配置
访问Node-RED界面:http://服务器IP:1880/
1. 创建新流程
- 点击"+"按钮创建新的流程
- 将流程命名为"DeepSeek AI交互"
2. 添加并配置MQTT In节点
- 从节点面板中拖动"mqtt in"节点到工作区
- 双击节点进行配置:
- 服务器:点击编辑按钮添加新的MQTT Broker
- 名称:本地MQTT Broker
- 服务器:localhost
- 端口:1883
- 主题:
device/data
- QoS:2
- 输出:自动检测(JSON对象、字符串或buffer)
- 名称:接收设备消息
- 服务器:点击编辑按钮添加新的MQTT Broker
3. 添加并配置处理数据Function节点
- 从节点面板中拖动"function"节点到工作区
- 双击节点进行配置:
- 名称:处理数据
- 函数代码:
// 处理接收到的设备数据
const deviceData = msg.payload;// 构建发送给DeepSeek API的请求
msg.payload = {"model": "deepseek-chat","messages": [{"role": "system", "content": "你是一个助手。"},{"role": "user", "content": deviceData.message}]
};// 设置请求头
msg.headers = {"Content-Type": "application/json"
};// 设置超时时间为60秒
msg.requestTimeout = 60000;return msg;
4. 添加并配置HTTP Request节点
- 从节点面板中拖动"http request"节点到工作区
- 双击节点进行配置:
- 名称:调用DeepSeek API
- 方法:POST
- URL:
https://api.deepseek.com/chat/completions
- 返回:解析为JSON对象
- 在认证选项卡中:
- 使用:Bearer Authentication
- Token:您的DeepSeek API Token (例如: sk-b30b58c4056e4149872d87eb9228ed54)
- 添加请求头:
- Content-Type: application/json
5. 添加并配置处理响应Function节点
- 从节点面板中拖动"function"节点到工作区
- 双击节点进行配置:
- 名称:处理API响应
- 函数代码:
// 处理DeepSeek API的响应
const response = msg.payload;// 提取AI回复内容
let aiResponse = "";
if (response && response.choices && response.choices.length > 0) {aiResponse = response.choices[0].message.content;
} else {aiResponse = "无法获取有效回复";node.warn("API响应格式不符合预期: " + JSON.stringify(response));
}// 构建回复消息
msg.payload = {"status": "success","response": aiResponse,"timestamp": new Date().toISOString()
};return msg;
6. 添加并配置MQTT Out节点
- 从节点面板中拖动"mqtt out"节点到工作区
- 双击节点进行配置:
- 服务器:选择之前创建的本地MQTT Broker
- 主题:
device/response
- QoS:1
- 保留:否
- 名称:MQTT Out
7. 添加错误处理
-
从节点面板中拖动"catch"节点到工作区
-
双击节点进行配置:
- 名称:错误消息
-
添加处理错误的Function节点:
- 名称:错误消息接收
- 函数代码:
// 记录错误
node.error("处理错误: " + JSON.stringify(msg.error));// 构建错误响应
msg.payload = {"status": "error","message": msg.error ? (msg.error.message || "未知错误") : "处理请求时发生错误","code": msg.statusCode || 500,"timestamp": new Date().toISOString()
};// 设置主题(确保错误消息发送到正确的主题)
msg.topic = "device/error";return msg;
- 添加用于错误的MQTT Out节点:
- 服务器:选择之前创建的本地MQTT Broker
- 主题:
device/error
- QoS:1
- 保留:否
- 名称:MQTT err
8. 连接节点
按照以下顺序连接节点:
- 接收设备消息 → 处理数据
- 处理数据 → 调用DeepSeek API
- 调用DeepSeek API → 处理API响应
- 处理API响应 → MQTT Out
- 错误消息 → 错误消息接收
- 错误消息接收 → MQTT err
9. 部署流程
点击右上角的"部署"按钮使配置生效。
四、测试系统
1. 创建测试脚本
创建一个简单的Node.js脚本来测试系统:
cat > /root/test-mqtt.js << EOF
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://localhost:1883');client.on('connect', function () {console.log('已连接到MQTT Broker');client.subscribe('device/response');client.subscribe('device/error');const testMessage = { deviceId: 'test-001', message: '介绍一下Node-RED的基本功能', timestamp: new Date().toISOString() };console.log('发送测试消息:', testMessage);client.publish('device/data', JSON.stringify(testMessage));
});client.on('message', function (topic, message) {console.log('收到消息,主题:', topic);try { console.log(JSON.parse(message.toString())); } catch(e) { console.log(message.toString()); }
});setTimeout(function() { client.end(); console.log('测试完成,已断开连接');
}, 120000);
EOF
2. 安装MQTT客户端库
npm install mqtt
3. 运行测试
node /root/test-mqtt.js
输出结果示例:
已连接到MQTT Broker
发送测试消息: { deviceId: 'test-001',message: '介绍一下Node-RED的基本功能',timestamp: '2025-05-15T06:51:24.069Z' }
收到消息,主题: device/response
{status: 'success',response: 'Node-RED 是一个基于 Node.js 开发的低代码/可视化编程工具,主要用于连接硬件设备、API 和在线服务,构建物联网(IoT)应用或自动化工作流。其核心特点是通过拖放节点(Nodes)和连线(Flows)快速实现数据流处理,无需深入编码。以下是它的基本功能:\n\n1. 可视化流程编排\n - 节点(Nodes):预置了大量功能模块\n - 连线(Flows):用连线将节点按逻辑顺序连接\n\n2. 丰富的节点类型\n - 输入节点:如 HTTP 请求、MQTT 订阅等\n - 处理节点:函数、延迟、切换等\n - 输出节点:数据库、API 调用、邮件通知等\n\n3. 易于集成和扩展\n - 支持各种协议和服务的集成\n - 可通过npm安装扩展节点',timestamp: '2025-05-15T06:51:42.361Z'
}
测试完成,已断开连接
五、在其他Linux客户端使用MQTT与系统交互
1. 安装MQTT客户端工具
# Debian/Ubuntu系统
sudo apt-get install mosquitto-clients# RHEL/CentOS系统
sudo yum install mosquitto-clients# Arch系统
sudo pacman -S mosquitto
2. 订阅消息(接收响应)
# 订阅响应主题
mosquitto_sub -h 服务器IP -t "device/response" -v# 订阅错误主题
mosquitto_sub -h 服务器IP -t "device/error" -v
3. 发送消息(请求AI处理)
# 发送消息
mosquitto_pub -h 服务器IP -t "device/data" -m '{"deviceId":"linux-001","message":"什么是物联网?","timestamp":"'$(date -Iseconds)'"}'
4. 使用Python进行交互(可选)
import paho.mqtt.client as mqtt
import json
import time
from datetime import datetime# MQTT服务器信息
broker_address = "服务器IP"
port = 1883
pub_topic = "device/data"
sub_topics = ["device/response", "device/error"]# 回调函数 - 连接成功
def on_connect(client, userdata, flags, rc):print("已连接到MQTT Broker")# 订阅主题for topic in sub_topics:client.subscribe(topic)print(f"已订阅主题: {topic}")# 回调函数 - 接收消息
def on_message(client, userdata, msg):print(f"\n收到消息 主题: {msg.topic}")try:payload = json.loads(msg.payload.decode())print(json.dumps(payload, indent=2, ensure_ascii=False))except:print(msg.payload.decode())# 创建客户端
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message# 连接到Broker
client.connect(broker_address, port, 60)# 启动网络循环
client.loop_start()# 发送测试消息
def send_message(message_text):msg = {"deviceId": "python-device-001","message": message_text,"timestamp": datetime.now().isoformat()}print(f"发送消息: {json.dumps(msg, ensure_ascii=False)}")client.publish(pub_topic, json.dumps(msg))# 等待连接建立
time.sleep(1)# 示例查询
send_message("请解释什么是物联网?")# 保持脚本运行以接收响应
try:while True:user_input = input("\n输入问题(输入'exit'退出): ")if user_input.lower() == 'exit':breaksend_message(user_input)time.sleep(1)
except KeyboardInterrupt:print("程序被用户中断")# 断开连接
client.loop_stop()
client.disconnect()
六、系统安全与扩展
安全配置
-
MQTT安全加强
- 添加用户名密码认证:修改
/etc/mosquitto/conf.d/default.conf
- 启用TLS加密:配置证书
- 添加用户名密码认证:修改
-
Node-RED安全加强
- 添加登录认证:修改
settings.js
- 部署HTTPS:配置证书
- 添加登录认证:修改
系统扩展
-
添加Dashboard
- 安装Node-RED Dashboard节点
- 创建可视化界面监控系统
-
添加数据存储
- 连接数据库(MySQL/MongoDB)存储交互历史
-
支持多种AI模型
- 扩展Function节点支持其他AI模型API
-
设备认证与管理
- 开发设备注册和认证机制
七、故障排除
-
无法连接MQTT Broker
- 检查防火墙是否开放1883端口
- 检查Mosquitto服务状态
-
无法访问Node-RED
- 检查防火墙是否开放1880端口
- 检查Node-RED进程是否运行
-
API调用失败
- 检查API Token是否正确
- 检查网络连接和API地址
- 检查HTTP Request节点配置
- 增加请求超时时间
-
消息格式错误
- 确保发送JSON格式消息
- 确保包含message字段
八、总结
通过本文档,我们就完成了一个基于Node-RED和MQTT Broker的AI交互系统搭建,实现了:
- 接收来自设备的MQTT消息
- 处理消息并调用DeepSeek AI API
- 将AI响应通过MQTT返回给设备
- 错误处理和日志记录
这个系统可以作为物联网设备与AI大模型交互的基础平台,可根据实际需求进行扩展和优化。
相关文章:
【搭建Node-RED + MQTT Broker实现AI大模型交互】
搭建Node-RED MQTT Broker实现AI大模型交互 搭建Node-RED MQTT Broker实现AI大模型交互一、系统架构二、环境准备与安装1. 安装Node.js2. 安装Mosquitto MQTT Broker3. 配置Mosquitto4. 安装Node-RED5. 配置Node-RED监听所有网络接口6. 启动Node-RED 三、Node-RED流程配置1. …...
高可靠低纹波国产4644电源芯片在工业设备的应用
摘要 随着工业自动化和智能化的飞速发展,工业设备对于电源芯片的性能和可靠性提出了前所未有的严格要求。电源芯片作为工业设备的核心供电组件,其性能直接影响到整个设备的运行效率和稳定性。本文以国科安芯的ASP4644四通道降压稳压器为例,通…...

面试--HTML
1.src和href的区别 总结来说: <font style"color:rgb(238, 39, 70);background-color:rgb(249, 241, 219);">src</font>用于替换当前元素,指向的资源会嵌入到文档中,例如脚本、图像、框架等。<font style"co…...

SparkSQL操作Mysql-准备mysql环境
我们计划在hadoop001这台设备上安装mysql服务器,(当然也可以重新使用一台全新的虚拟机)。 以下是具体步骤: 使用finalshell连接hadoop001.查看是否已安装MySQL。命令是: rpm -qa|grep mariadb若已安装,需要先做卸载MyS…...
Linux常用方法
1、查看日志后100行 tail -f -n 100 catalina.out 2、ps命令 ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照 ps -ef 显示所有进程信息,连同命令行,ps 与grep 常用组合用法,查找特定进程 ps aux列出目前所有的…...
[c++项目]云备份项目测试
1. 测试概述 测试时间:2024年3月 测试环境:macOS 23.4.0 测试工具:VSCode, CMake, GTest 2. 功能测试 2.1 文件备份功能 测试项预期结果实际结果状态单文件备份成功上传并保存成功✅多文件备份批量上传成功成功✅大文件备份分片上传成功…...

DeepBook 与 CEX 的不同
如果你曾经使用过像币安或 Coinbase 这样的中心化交易所(CEX),你可能已经熟悉了订单簿系统 — — 这是一种撮合买卖双方进行交易的机制。而 DeepBook 是 Sui 上首个完全链上的中央限价订单簿。 那么,是什么让 DeepBook 如此独特&…...

Scrapy框架下地图爬虫的进度监控与优化策略
1. 引言 在互联网数据采集领域,地图数据爬取是一项常见但具有挑战性的任务。由于地图数据通常具有复杂的结构(如POI点、路径信息、动态加载等),使用传统的爬虫技术可能会遇到效率低下、反爬策略限制、任务进度难以监控等问题。 …...

城市扫街人文街头纪实胶片电影感Lr调色预设,DNG/手机适配滤镜!
调色详情 城市扫街人文街头纪实胶片电影感 Lr 调色是通过 Lightroom(Lr)软件,对城市街头抓拍的人文纪实照片进行后期调色处理。旨在赋予照片如同胶片拍摄的质感以及电影般浓厚的叙事氛围,不放过每一个日常又珍贵的瞬间,…...
嵌入式学习笔记 D21:双向链表的基本操作
双向链表的定义与创建双向链表的插入双向链表的查找双向链表的修改双向链表的删除双向链表的逆序MakeFile工具使用 一、双向链表的定义与创建 1.双向链表的定义: 双向链表是在单链表的每个结点中,再设置一个指向其前一个结点的指针域。 struct DOUNode…...

让AI帮我写一个word转pdf的工具
需求分析 前几天,一个美女找我: 阿瑞啊,能不能帮我写个工具,我想把word文件转为pdf格式的 我说:“你直接网上搜啊,网上工具多了去了” 美女说: 网上的要么是需要登录注册会员的,要…...

OrangePi Zero 3学习笔记(Android篇)10 - SPI和从设备
目录 1. 配置内核 2. 修改设备数 3. 修改权限 4. 验证 Zero 3的板子有2个SPI Master接口,其中SPI0接的是板载16MB大小的SPI Nor Flash,SPI1则是导出到26pin的接口上。 spi和i2c有点不同,spi是直接生成spi虚拟设备,所以在dev里…...

基于策略的强化学习方法之近端策略优化(PPO)深度解析
PPO(Proximal Policy Optimization)是一种基于策略梯度的强化学习算法,旨在通过限制策略更新幅度来提升训练稳定性。传统策略梯度方法(如REINFORCE)直接优化策略参数,但易因更新步长过大导致性能震荡或崩溃…...
跨境电商定价革命:亚马逊“逆向提价“策略背后的价值重构逻辑
导言:打破价格魔咒的销量奇迹 2024年Q3亚马逊平台上演商业悖论:在TOP5000卖家中,12%实施5%-15%温和提价的商户,41%实现单量30.4%的季度增长。这一现象颠覆"低价即流量"的电商铁律,揭开新消费时代"价值定…...

文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
https://www.frontiersin.org/journals/immunology/articles/10.3389/fimmu.2023.1145300/full 目标:肿瘤微环境(TME)在子宫内膜癌(EC)的进展中起着重要作用。我们旨在评估EC的TME中的细胞群体。 方法:我们从GEO下载了EC的单细胞RNA测序(scRNA-seq)和空…...

HTML-3.4 表单form
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...
阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)
上一篇文章介绍了如何通过topic操作命令实现与机器人的交互,本篇我们介绍如何通过Message(即topic的下一级)实现与机器人的交互。 和topic一样,首先在一个终端通过ssh命令登录机器人、启动机器人,然后打开另外一个终端…...

【MySQL】服务器配置与管理(相关日志)
🔥个人主页: 中草药 🔥专栏:【MySQL】探秘:数据库世界的瑞士军刀 一、系统变量和选项 当通过mysqld启动数据库服务器时,可以通过选项文件或命令行中提供选项。一般,为了确保服务器在每次运行时…...

【问题】Watt加速github访问速度:好用[特殊字符]
前言 GitHub 是全球知名的代码托管平台,主要用于软件开发,提供 Git 仓库托管、协作工具等功能,经常要用到,但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit(原名 Steam)是由江苏蒸汽凡星科技有限公…...

vue3:十三、分类管理-表格--行内按钮---行删除、批量删除实现功能实现
一、实现效果 增加行内按钮的样式效果,并且可以根绝父组件决定是否显示 增加行内删除功能、批量删除功能 二、增加行内按钮样式 1、增加视图层按钮 由于多个表格都含有按钮功能,所以这里直接在子组件中加入插槽按钮 首先增加表格行<el-table-column></el-table-…...
Web3.0:互联网的去中心化未来
随着互联网技术的不断发展,我们正站在一个新时代的门槛上——Web3.0时代。Web3.0不仅仅是一个技术升级,它更是一种全新的互联网理念,旨在通过去中心化技术重塑网络世界。本文将深入探讨Web3.0的核心概念、技术基础、应用场景以及它对未来的深…...

浏览器设置代理ip后不能上网?浏览器如何改ip地址教程
使用代理IP已成为许多用户保护隐私、绕过地域限制或进行网络测试的常见做法。当浏览器设置代理IP后无法上网时,通常是由于代理配置问题或代理服务器本身不可用。以下是排查和解决问题的详细步骤,以及更改浏览器IP的方法: 一、代理设置后无法上…...
Java应用OOM排查:面试通关“三部曲”心法
开篇点题:OOM——Java应用的“内存爆仓”警报 OOM (OutOfMemoryError) 是啥病?想象一下,你的Java应用程序是一个大仓库,内存就是仓库的存储空间。如果货物(程序运行时创建的对象)越来越多,超出了…...

R语言的专业网站top5推荐
李升伟 以下是学习R语言的五个顶级专业网站推荐,涵盖教程、社区、资源库和最新动态: 1.R项目官网 (r-project.org) R语言的官方网站,提供软件下载、文档、手册和常见问题解答。特别适合初学者和高级用户,是获取R语言核心资源的…...
设计模式系列(03):设计原则(二):DIP、ISP、LoD
本文为设计模式系列第3篇,聚焦依赖倒置、接口隔离、迪米特法则三大设计原则,系统梳理定义、实际业务场景、优缺点、最佳实践与常见误区,适合系统学习与团队协作。 目录 1. 引言2. 依赖倒置原则(DIP)3. 接口隔离原则(ISP)4. 迪米特法则(LoD)5. 常见误区与反例6. 最佳实…...
Java Socket编程完全指南:从基础到实战应用
Socket编程是构建网络应用的基石,Java通过java.net包提供了强大的Socket API。本文将深入解析Java Socket类的核心用法,涵盖TCP/UDP协议实现、多线程通信及性能优化技巧,助您快速掌握网络编程精髓。 一、Socket编程核心概念 1.1 网络通信模型…...

[训练和优化] 3. 模型优化
👋 你好!这里有实用干货与深度分享✨✨ 若有帮助,欢迎: 👍 点赞 | ⭐ 收藏 | 💬 评论 | ➕ 关注 ,解锁更多精彩! 📁 收藏专栏即可第一时间获取最新推送🔔…...
基于FPGA的车速检测系统仿真设计与实现
标题:基于FPGA的车速检测系统仿真设计与实现 内容:1.摘要 本文旨在设计并实现基于FPGA的车速检测系统仿真。随着汽车行业的快速发展,精确的车速检测对于车辆的安全性和性能评估至关重要。本研究采用FPGA作为核心处理单元,结合传感器数据采集与处理技术进…...

无人设备遥控器之无线通讯技术篇
无人设备遥控器的无线通讯技术是确保遥控操作准确、稳定、高效进行的关键。以下是对无人设备遥控器无线通讯技术的详细解析: 一、主要无线通讯技术类型 Wi-Fi通讯技术 原理:基于IEEE 802.11标准,通过无线接入点(AP)…...
Redis(2):Redis + Lua为什么可以实现原子性
Redis 作为一款高性能的键值对存储数据库,与 Lua 脚本相结合,为实现原子性操作提供了强大的解决方案,本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前,我们需要明确原子性的概念…...