本教程适用于已经在飞牛OS中正确识别 UPS 硬件的情况。

飞牛OS通常会在后台自动加载驱动,无需手动配置 ups.conf

我们的操作重点在于“开启网络广播”,以便让从机共享状态。

环境:

  • 主控 : 飞牛OS,物理连接UPS。

  • 从机: Ubuntu,通过网络同步状态。

  • UPS 型号:APC Back-UPS系列

注:文中所有带有 [ ] 的部分(例如 [主控IP][密码])均为填空项。在实际操作时,请务必将其替换为你自己的真实信息,并且连同中括号本身一起删掉

主控端配置

主控端是指连接UPS USB线的机器。

它的任务是:监听UPS数据并广播给局域网内准入的其他设备。

1. 硬件识别:确认 UPS 身份

在飞牛终端SSH输入以下命令,查看UPS在哪个位置:

ls /dev/bus/usb/00*/00*

或者输入:

lsusb

通常 APC 的 UPS 会显示在类似 /dev/bus/usb/001/002 这样的路径

确认 UPS 是否被系统识别。一般会看到类似 Bus 003 Device 002: ID 051d:0002 American Power Conversion... 的字样。

在飞牛系统中,往往不用默认的 ups,而是一串数字(如1612138)。

所以我们需要输入命令获取它在NUT里的真名:

upsc -l

注意:后续所有配置都要使用这个名字,所以请牢记


2. 修改用户配置文件 upsd.users

在该文件末尾添加一个给从机使用的账号

sudo nano /etc/nut/upsd.users

添加内容:

[upsmon]
    password = "自己设置一个密码"
    upsmon slave

注:不局限于使用upsmon,自己想设置其他账号名也可以,但一定要记得住,后面要用


3. 修改监听配置 upsd.conf

默认只监听本地,必须开启网络监听,从机才能加入连接。

sudo nano /etc/nut/upsd.conf

自己添加一行监听端口:

LISTEN 0.0.0.0 3493

注:0.0.0.0 表示监听所有网口。

NUT 默认的通信端口是 3493。除非 3493 端口被占用,否则建议不要修改端口号。

最后重启飞牛服务:

sudo systemctl restart nut-server

4.放行端口

添加监听端口后一定要在防火墙创建放行规则,否则无法连接


从机端配置

从机是指通过局域网加入共享UPS状态的机器,断电时它会跟着主控端下达的命令一起关机。

1. 安装客户端软件

如果系统版本较旧,需先确认软件源正常,再执行:

sudo apt update
sudo apt install nut-client -y

2. 设置运行模式:nut.conf

sudo nano /etc/nut/nut.conf

找到文本并修改为: MODE=netclient


3. 设置监控指令:upsmon.conf

这是最核心的一步,告诉从机去哪找主控端。

sudo nano /etc/nut/upsmon.conf

翻到最底部,添加一行:

MONITOR [UPS名字]@[主控IP] 1 [账号] [密码] slave

这里的 [账号][密码] 必须与主控端第 2 步在 upsd.users 里设置的完全一致,否则会导致从机无法加入。

重启服务:

sudo systemctl restart nut-client

添加中文脚本

对于我这种英文不太彳亍的人来说,虽然配置好了,但看从机端的UPS状态却如同看天书一样,为了不每次都掏翻译工具,也为了以后方便维护,我们添加一个中文脚本以方便管理。

1. 首先验证一下连接

在从机端输入:

upsc [UPS名字]@[主控端IP]

如果刷出一大堆英文参数,如:battery.charge:,恭喜你,从机端成功加入广播!

2. 一键中文状态脚本

为了直观查看,创建一个 ups_cn.sh 脚本:

为了避免排版混乱,我整理了一个完整命令,直接在终端粘贴就行:

cat << 'EOF' > ~/ups_cn.sh
#!/bin/bash
UPS_NAME="[UPS名字]@[主控端IP]"
echo "--------------------------------------"
echo "        UPS 实时状态 (中文版)          "
echo "--------------------------------------"
upsc $UPS_NAME 2>/dev/null | sed -e 's/battery.charge:/[电池电量]      /g' -e 's/ups.status:/[运行状态]      /g' -e 's/battery.runtime:/[预计续航(秒)]  /g' -e 's/ups.load:/[当前负载(%)]    /g' -e 's/input.voltage:/[输入电压(V)]    /g' -e 's/device.model:/[设备型号]      /g' -e 's/ups.realpower.nominal:/[额定功率(W)]    /g' -e 's/OL CHRG/市电在线 (充电中)/g' -e 's/OL/市电在线/g' -e 's/OB DISCHRG/电池供电 (放电中)/g' -e 's/OB/电池供电/g' | grep -E "电池|状态|续航|负载|电压|型号|功率"
echo "--------------------------------------"
EOF
chmod +x ~/ups_cn.sh

完成后输入命令运行一下:

./ups_cn.sh

可现在我们必须输入 ./ups_cn.sh 才能看,如果哪天忘记岂不是很麻烦,所以我们可以添加这条命令:

sudo ln -s ~/ups_cn.sh /usr/local/bin/ups

这样,以后你无论在哪个文件夹,直接输入 ups 回车就能查看UPS实时状态了。