Administrator
发布于 2025-10-03 / 45 阅读
0
0

将immortalwrt配置为UPS服务器

场景介绍

目前主流的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 +0800

nut 配置

群辉和绿联云通过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:07

nut服务器运行正常,至此在群辉与绿联云管理页面中就能直接添加网络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'


评论