场景介绍
目前主流的NAS系统都支持UPS功能,基本实现了即插即用,不过多台设备共用UPS就比较复杂。虽然大部分厂商的NAS都支持通过nut协议添加远程UPS,但是它们普遍通过硬编码nut认证用户名、密码、UPS名称等方式进行了排他性设计,导致UPS无法跨品牌共享,所以索性将UPS插到immortalwrt物理机上,将immortalwrt配置为UPS服务器进行控制。
我的UPS是APC BK650M2-CH,两台NAS设备分别为绿联云DX4600(已升级 UGOS PRO系统)以及HP Proliant Microserver Gen8 (黑群晖)。这两台NAS设备以及immortalwrt软路由、交换机都需要连接到UPS,避免断电时UPS失联。
apcupsd 配置
opkg update
opkg install apcupsd然后修改配置文件
# 备份原配置
cp /etc/apcupsd/apcupsd.conf /etc/apcupsd/apcupsd.conf.backup
# 创建新的配置文件
cat > /etc/apcupsd/apcupsd.conf << 'EOF'
## apcupsd.conf v1.1 ##
#
# Configuration for APC Back-UPS BK650M2-CH USB UPS
# General configuration
UPSNAME apc-ups
UPSCABLE usb
UPSTYPE usb
DEVICE
# Lock file and directories
LOCKFILE /var/lock
SCRIPTDIR /etc/apcupsd
PWRFAILDIR /var/lock
NOLOGINDIR /etc
# Power failure settings
ONBATTERYDELAY 10
BATTERYLEVEL 20
MINUTES 5
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
# Network Information Server (for NAS clients)
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
# Logging
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 100
STATTIME 60
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0
# UPS mode
UPSCLASS standalone
UPSMODE disable
EOF关键修改说明:
UPSCABLE usb - 改为 USB 电缆类型
UPSTYPE usb - 改为 USB UPS 类型
DEVICE - 留空,让系统自动检测 USB 设备
BATTERYLEVEL 20 - 电池剩余 20% 时关机(更安全)
MINUTES 5 - 电池运行时间少于 5 分钟时关机
NETSERVER on - 启用网络服务供 NAS 连接
NISIP 0.0.0.0 - 监听所有网络接口
最后启用apcupsd服务:
service apcupsd enable
service apcupsd start此时immortalwrt主机已经能正常读取到UPS信息,而且也在监听3551端口:
root@ImmortalWrt:~# apcaccess status
APC : 001,036,0866
DATE : 2025-09-23 15:21:18 +0800
HOSTNAME : ImmortalWrt
VERSION : 3.14.14 (31 May 2016) unknown
UPSNAME : apc-ups
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2025-09-23 15:21:17 +0800
MODEL : Back-UPS BK650M2-CH
STATUS : ONLINE
LINEV : 230.0 Volts
LOADPCT : 19.0 Percent
BCHARGE : 28.0 Percent
TIMELEFT : 9.4 Minutes
MBATTCHG : 20 Percent
MINTIMEL : 5 Minutes
MAXTIME : 0 Seconds
SENSE : Low
LOTRANS : 160.0 Volts
HITRANS : 278.0 Volts
ALARMDEL : 30 Seconds
BATTV : 13.2 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000008
SERIALNO : 9B2238A00880
BATTDATE : 2001-01-01
NOMINV : 220 Volts
NOMBATTV : 12.0 Volts
NOMPOWER : 390 Watts
FIRMWARE : 294803G -292804G
END APC : 2025-09-23 15:21:22 +0800nut 配置
群辉和绿联云通过nut实现UPS共享功能,所以需要在immortalwrt中安装配置nut,需要安装 luci-app-nut 和 nut-driver-apcupsd-ups 。nut-driver-apcupsd-ups 顾名思义就是nut与刚才配置好的apcupsd进行通信的驱动程序,luci-app-nut提供了配置nut的LUCI界面以及一些/etc/init.d脚本用来管理nut服务。这个界面不怎么直观,更推荐直接修改配置文件。
修改/etc/config/nut_server,完成后内容如下:
config listen_address
option address '0.0.0.0'
option port '3493'
config user
option username 'monuser'
option password 'secret'
option upsmon 'master'
list actions 'fsd'
config driver 'ups'
option driver 'apcupsd-ups'
option port 'localhost:3551'
option desc 'APC UPS via apcupsd'
config user
option username 'nut'
option password 'nut'
list actions 'fsd'
option upsmon 'slave'
config driver 'ups0'
option driver 'apcupsd-ups'
option port 'localhost:3551'第一节声明了nut服务器的监听地址和端口,一般不需要修改。
第二、第四节声明了nut用户,分别对应群辉和绿联云。此部分与NAS系统中硬编码内容保持一致。可见不同厂商nut用户名、密码、配置模式不同,所以无法实现直接共享。
第三、五节声明了2个UPS,名称分别为ups和ups0。这两台UPS通过apcupsd-ups驱动连接到localhost:3551。这个操作实际上为一台UPS起了两个名字,因为作为nut客户端时,群辉只会寻找ups,而绿联云只会寻找ups0。
现在启动nut服务:
service nut-server enable
service nut-server restart最后检验下nut配置是否生效。首先列出nut服务器:
root@ImmortalWrt:~# upsc -l
ups
ups0再列出ups0具体信息:
root@ImmortalWrt:~# upsc [email protected]
battery.charge: 99.0
battery.charge.low: 20
battery.date: 2001-01-01
battery.runtime: 1956.0
battery.runtime.low: 300
battery.voltage: 13.5
battery.voltage.nominal: 12.0
device.mfr: APC
device.model: Back-UPS BK650M2-CH
device.serial: 9B2238A00880
device.type: ups
driver.debug: 1
driver.flag.allow_killpower: 0
driver.name: apcupsd-ups
driver.parameter.pollinterval: 10
driver.parameter.port: localhost:3551
driver.parameter.synchronous: auto
driver.state: quiet
driver.version: 2.8.1
driver.version.internal: 0.71
input.sensitivity: L
input.transfer.high: 278.0
input.transfer.low: 160.0
input.transfer.reason: Low line voltage
input.voltage: 230.0
input.voltage.nominal: 220
ups.date: 2025-09-24
ups.firmware: 294803G -292804G
ups.id: apc-ups
ups.load: 20.0
ups.mfr: APC
ups.model: Back-UPS BK650M2-CH
ups.realpower.nominal: 390.0
ups.serial: 9B2238A00880
ups.status: OL
ups.test.result: NO
ups.time: 14:07:07nut服务器运行正常,至此在群辉与绿联云管理页面中就能直接添加网络UPS了。
对于QNAP用户
我没有qnap设备无法测试,不过结合 https://forum.qnap.com/viewtopic.php?t=159585 来看,qnaq也支持nut,其配置信息如下:
用户名:admin
密码:123456
模式:slave
ups名称:qnapups
所以修改/etc/config/nut_server,照葫芦画瓢追加这一段然后重启nut服务应该就行了:
config user
option username 'admin'
option password '123456'
list actions 'fsd'
option upsmon 'slave'
config driver 'qnapups'
option driver 'apcupsd-ups'
option port 'localhost:3551'