保姆级教程:在树莓派上用Node-RED连接Home Assistant,实时监控CPU温度与内存
树莓派硬件监控实战:用Node-RED与Home Assistant打造可视化仪表盘
当你第一次看到树莓派主板上的那颗LED灯规律闪烁时,是否好奇过这颗微型计算机内部的运行状态?CPU此刻的温度是多少?内存使用是否接近临界值?这些隐藏在命令行背后的数据,其实可以通过可视化的方式直观呈现。本文将带你用Node-RED和Home Assistant这两个神器,在树莓派上搭建一个实时硬件监控系统,无需编写复杂代码,只需拖拽节点就能创建专业级的监控仪表盘。
1. 环境准备与基础配置
在开始之前,确保你的树莓派已经安装以下组件:
- 最新版Raspberry Pi OS(原Raspbian)
- Node-RED(可通过
sudo apt install nodered安装) - Home Assistant(推荐使用官方安装脚本)
关键组件版本要求:
| 组件 | 最低版本 | 推荐版本 |
|---|---|---|
| Node-RED | 2.0 | 3.0+ |
| Home Assistant | 2023.1 | 2023.7+ |
提示:如果尚未安装Home Assistant,可以使用以下命令快速部署:
curl -Lo install.sh https://raw.githubusercontent.com/home-assistant/supervised-installer/master/install.sh bash install.sh
登录Home Assistant控制台(通常地址为http://树莓派IP:8123),在左侧面板点击"配置"→"系统"→"硬件",确认能够看到CPU温度、内存占用等基础监控项。这些原生传感器将成为我们数据可视化的基础来源。
2. 获取Home Assistant API访问凭证
要让Node-RED与Home Assistant通信,需要创建一个长期有效的访问令牌:
- 在Home Assistant界面点击左下角用户头像
- 滚动到页面底部选择"创建令牌"
- 输入描述性名称(如"Node-RED监控")
- 点击确定后立即复制生成的令牌字符串
重要:令牌只显示一次,请妥善保存。若遗失需重新生成。
这个令牌相当于系统的万能钥匙,我们将它配置到Node-RED的Home Assistant节点中。打开Node-RED编辑器(通常运行在1880端口),按照以下步骤操作:
// 示例配置对象 { "name": "Home Assistant Server", "url": "http://localhost:8123", "access_token": "你的长令牌字符串", "verify_ssl": false }在Node-RED流程编辑器中,从左侧面板拖拽"home assistant"节点到工作区,双击节点后点击服务器配置旁的铅笔图标,填入上述信息。
3. 构建硬件监控数据流
现在我们来搭建核心监控流程,主要使用三类节点:
- server-state-changed:监听硬件状态变化
- function:数据格式转换
- ui_gauge/ui_chart:可视化展示
3.1 CPU温度监控实现
从节点面板依次拖拽以下节点并连线:
server-state-changed节点(配置实体ID为sensor.cpu_temp)function节点(添加以下处理逻辑):// 将原始数据转换为适合仪表盘显示的格式 msg.payload = { value: Math.round(msg.payload.state), topic: msg.payload.attributes.unit_of_measurement }; return msg;ui_gauge节点(类型选择"gage",设置量程0-100℃)
温度仪表盘关键参数:
- 颜色分段:绿色(<60℃)、黄色(60-80℃)、红色(>80℃)
- 单位显示:℃
- 刷新频率:默认5秒
3.2 内存占用监控方案
对于内存监控,我们采用饼图形式展示使用比例:
// 内存数据转换函数 const totalMem = 3839; // 树莓派4B总内存MB数 msg.payload = { value: Math.round((msg.payload.state / totalMem) * 100), label: `${msg.payload.state}MB` }; return msg;配置ui_gauge节点为"donut"类型,设置:
- 量程:0-100%
- 分段阈值:30%和70%
- 动态标签显示当前使用量
4. 高级可视化技巧
4.1 历史趋势图表配置
添加ui_chart节点来展示温度变化曲线:
{ "chartType": "line", "legend": false, "xformat": "HH:mm:ss", "interpolate": "linear", "ymin": "20", "ymax": "90", "removeOlder": "1", "removeOlderUnit": "3600" }专业建议:对于高频监控数据,可以添加
batch节点进行数据采样,避免图表刷新卡顿。
4.2 移动端适配方案
Node-RED的仪表盘默认支持响应式布局,但我们可以通过CSS注入优化移动端显示:
/* 在Dashboard页面的site属性中添加 */ @media (max-width: 768px) { .ui-gauge { min-width: 120px !important; } }5. 异常报警与自动化扩展
当温度超过安全阈值时,可以扩展流程实现邮件通知:
- 添加
switch节点判断温度值 - 连接
email节点配置SMTP服务 - 添加
delay节点避免重复报警
// 温度报警逻辑 if (msg.payload > 80) { msg.topic = "CPU高温警报"; msg.payload = `当前温度${msg.payload}℃,请检查散热!`; return msg; }对于更复杂的监控场景,可以考虑:
- 将数据持久化到InfluxDB
- 集成Telegram机器人通知
- 添加系统负载关联分析
6. 性能优化实践
在长期运行中,建议实施以下优化措施:
节点配置调整:
- 设置合理的轮询间隔(非关键数据可设为30秒)
- 禁用不需要的调试输出
- 使用
exec节点直接读取/sys/class/thermal数据作为备用方案
系统级优化:
# 调整Node-RED内存限制 sudo nano /etc/default/nodered修改以下参数:
NODE_OPTIONS="--max-old-space-size=256"经过这些步骤,你的树莓派将拥有一个实时、美观且低资源占用的硬件监控系统。无论是放在工作室作为状态看板,还是集成到智能家居的中控系统,这个方案都能提供可靠的数据可视化支持。
