路由器网络 UPS 配置与 Linux 客户端使用
categories: 技术 tags: NAS, 路由器路由器网络 UPS 配置与 Linux 客户端使用
25.12 的 OpenWRT 是一个大版本更新,在 UI 和功能方面都有非常大的升级。例如全面拥抱 apk 包管理器、将 DHCP 与 DNS 选项卡分开等。
这个版本中,luci-app-nut 的界面也发生了一些变化,配置的时候差点给我整蒙。这里以山特 BOX650 UPS 为例,记录一下 OpenWRT 服务端和 Ubuntu 客户端的配置过程。
OpenWRT NUT

先认识一下三个选项卡
- 服务器:负责通过 USB 连接 UPS 硬件,获取 UPS 上电量、启动时间等信息,并在某个端口(一般是 3493)上起一个服务,向其他客户端发送这些数据。
- 监控:用于监听服务器发出的数据,当出现数据异常时,监控会对本机做出一些应对,例如安全关机。
- CGI:面向用户,用户可以在 CGI 中直观地查看 UPS 当前的状态信息,并且可以做出一些控制。
三者中最重要的是“服务器”,“监控”和“CGI”都只是锦上添花,顺带配置好。因为一般路由器都不是机械硬盘,不用怕断电啥的。至于 CGI,也不会有谁天天去看,只要配好服务器,想看的时候也可以通过命令看。
服务器

理论上用户名和密码可以随意设置,但考虑到部分 NAS 的兼容性,比如群晖,其网络 UPS 的账户密码是写死的,因此就用 monuser/secret 就行,反正也是局域网使用,不在乎安全性。


驱动程序一栏,先填入一个长名称,随意,我这里填的 apcups,点击添加,才会出现详细配置页面。
该页面看着配置项多,其实核心目的就一个,让服务器能找到你的 UPS,因此只需配置几项必要的选项。
- 驱动器:选择自己适配的,一般是 usbhid-ups
- 端口:auto
关于产品和供应商,你可以使用 lsusb 命令找到
root@IWrt:~# lsusb
Bus 001 Device 002: ID 0463:ffff EATON SANTAK TG-BOX
0463:ffff 中,0463 是供应商 ID,ffff 是产品 ID
如果有这两项,直接填入即可。部分设备还可以通过序列号来识别,序列号可以使用 lsusb -v 查询。
以下是完整的配置文件,其实很短
/etc/config/nut_server
config user
option username 'monuser'
option password 'secret'
list actions 'set'
list actions 'fsd'
option upsmon 'primary'
config listen_address
option address '0.0.0.0'
option port '3493'
config driver 'apcups'
option driver 'usbhid-ups'
option port 'auto'
option productid 'ffff'
option vendorid '0463'
配置好之后,使用 upsc apcups 查看 UPS 的状态,如果有数据输出,则配置完成。
battery.charge: 100
battery.charge.low: 20
battery.runtime: 688
......
监控
“监控”选项中,旧版的“主 UPS”、“辅 UPS”选项已经废弃,取代它们的是“UPS 监视器用户设置”

root@IWrt:/etc/config# cat nut_monitor
config monitor
option upsname 'apcups'
option hostname '127.0.0.1'
option powervalue '1'
option username 'monuser'
option password 'secret'
option type 'secondary'
option port '3493'
CGI

照着来即可,显示名称可以随意配置。
root@IWrt:/etc/config# cat nut_cgi
config upsset
option enable '1'
config host
option upsname 'apcups'
option hostname '127.0.0.1'
option displayname 'BOX650'
option port '3493'
打开 CGI 界面,点击 Statistics,出现 UPS 的信息即可。

Linux 客户端配置
以 Ubuntu 为例,首先安装 nut-client,安装后 nut 为被设置为自启动
❯ sudo apt install nut-client
nut-client 已经是最新版 (2.8.4+really-2)。
摘要:
升级:0,安装:0,卸载:0,不升级:0
进入 nut 配置文件夹
❯ cd /etc/nut/
❯ ls
. .. nut.conf upsmon.conf upssched.conf
nut.conf 中只需要修改 MODE 即可
MODE=netclient
将 nut 设为客户端
然后配置 upsmon.conf
搜索文件中的 MONITOR,将我们的配置写上去 MONITOR apcups@10.0.0.1 1 monuser secret slave
# MONITOR myups@bigserver 1 upswired blah primary
# MONITOR su700@server.example.com 1 monuser secretpass secondary
# MONITOR myups@localhost 1 monuser pass primary # (or secondary)
MONITOR apcups@10.0.0.1 1 monuser secret slave
参数说明:
-
apcpus:这是之前在 OpenWrt 上为 UPS 定义的名称(根据你 upsc 命令的输出,名称是 apcups)。
-
10.0.0.1:请替换为你的 OpenWrt 路由器的实际 IP 地址,例如 10.0.0.1。
-
monuser secret:这是连接远程 NUT 服务器所需的用户名和密码,应与 OpenWrt 中的配置保持一致
-
slave:表示这台设备是作为客户端,它不会控制 UPS 的关机行为,只接收状态信息。
重启 NUT 客户端服务 sudo systemctl restart nut-client,检查服务状态,确保没有报错 sudo systemctl status nut-client
最后,使用 upsc 命令测试能否获取到 UPS 数据
❯ upsc apcups@10.0.0.1
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 20
......
应当与 OpenWRT 上的 nut,输出一致。