在玩家庭实验室或者折腾服务器的过程中,断电防护一直是个老生常谈但又至关重要的话题。很多朋友都给爱机配上了UPS(不间断电源),但单纯的硬件连接够吗?很多时候,我们更希望能在虚拟化管理平台——比如PVE(Proxmox VE)的界面里,直接看到UPS的剩余电量、负载状态,而不是只能通过SSH进系统敲命令查询。

最近发现一个很实用的方法:利用ChatGPT来辅助修改PVE的脚本,从而实现在Dashboard界面显示UPS信息。这对于不熟悉Shell脚本或者运维开发的朋友来说,简直是福音。下面就简单聊聊这个思路和具体的实现步骤。

为什么要在PVE里看UPS信息?

默认情况下,PVE虽然可以通过NUT(Network UPS Tools)连接UPS,但直观性往往不够。我们需要在Web界面一眼看到:

  • 电池剩余电量:决定还能撑多久。
  • 市电/电池状态:判断是停电了还是正常供电。
  • 负载情况:评估如果此时断电,电池能撑多久。

准备工作:确保UPS已连接

在动手改脚本之前,请确保你的UPS已经通过USB连接到了PVE主机,并且基础的驱动服务已经安装好。通常使用apt install nut即可解决大部分基础连接问题,确保upsc ups@localhost能读取到数据是后续操作的前提。

PVE的Dashboard界面示意图,展示服务器状态的布局

图示:PVE的Dashboard界面布局,我们将在此处添加UPS状态显示

灵魂伴侣:让ChatGPT来写脚本

如果直接去搜索教程,可能会遇到各种版本的脚本,而且大家的UPS品牌、PVE版本都不一样,直接复制粘贴大概率报错。这时候,AI的作用就体现出来了。

你可以直接给ChatGPT发送类似这样的Prompt(提示词):

“我正在使用Proxmox VE 8.x版本,系统已经安装了NUT服务,现在我想在PVE的Web管理界面左侧菜单栏或者Dashboard中添加一个UPS状态显示组件。请帮我写一个Shell脚本,能够读取upsc命令的输出,并将电池电量、负载和状态提取出来,然后通过PVE的API hook机制(或者其他可行方法)在‘节点’概览页面显示。如果需要修改PVE的JS文件,请给出具体修改路径和代码片段。”

这里的关键在于:明确环境(版本、已安装软件)明确需求(显示什么内容、显示在哪里)

修改与部署要点

根据AI生成的方案,通常有两种实现路径:

  1. 纯Shell方案(低风险):生成一个定期执行的脚本,将UPS状态写入节点的Notes备注字段,或者通过修改某个文本文件来展示。这种方式改动小,不容易坏。

NUT软件监控显示的UPS电池电量和负载数据示例

图示:通过NUT工具读取到的UPS数据样例,包含电池剩余电量和实时负载

  1. 修改PVE前端文件(高定制):直接修改/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js等前端文件。注意,这种方式效果最好,但PVE升级后可能会被覆盖,需要重新应用。

在操作时,建议AI生成的脚本代码逻辑中加上错误判断。比如:

# 伪代码示例
UPS_STATUS=$(upsc myups@localhost battery.charge 2>/dev/null)
if [ -z "$UPS_STATUS" ]; then
  echo "无法连接UPS"
else
  echo "$UPS_STATUS%"
fi
``

这样即使UPS断开连接,也不会导致PVE界面报错卡死。

### 遇到问题怎么办?

如果在实施过程中发现脚本没反应,可以按照以下思路排查:

1.  **手动命令测试**:先在终端手动运行`upsc`指令,确认数据能正常打印。
2.  **权限问题**:如果是系统级服务调用脚本,注意NUT服务的用户权限,确保有权限读取USB设备数据。
3.  **浏览器缓存**:如果修改的是JS前端文件,改完后务必**清空浏览器缓存**或者使用无痕模式打开,否则你看到的永远是旧版界面。

### 总结

技术本身不复杂,难的是如何快速适配自己的环境。与其满世界找一篇刚好适合你硬件型号的教程,不如学会利用像ChatGPT这样的AI工具,让它充当你的私人运维开发。只需描述清楚你的PVE版本和需求,一份专属的UPS监控脚本几分钟就能落地。下次断电时,看着PVE界面上的倒计时,心里也会更有底吧。

标签: none

评论已关闭