Network UPS Tools
本文档描述了如何安装 Network UPS Tools (NUT)。Network UPS Tools 兼容数千种 UPS 型号。您可以查看 硬件兼容性列表 来查看您的 UPS 是否受支持。
安装
配置
NUT 有 3 个相关的守护进程
- 与 UPS 通信的驱动程序。
- 一个服务器 (upsd),它使用驱动程序报告 UPS 的状态。
- 一个监控守护进程 (upsmon),它监控 upsd 服务器并根据接收到的信息采取行动。
其理念是,如果您有多台系统连接到 UPS,其中一台可以通过网络传输 UPS 的状态,而其他系统可以通过运行自己的 upsmon 服务来监控该状态。NUT 拥有详尽的配置文档,但本文将介绍一个简单的设置,在一个系统(常见的桌面配置)中设置 USB UPS 以及相关的服务器和监控器。
驱动程序配置
这里的配置将取决于您的 UPS 类型。请查阅前面提到的硬件兼容性列表,以找到可能适用于您的 UPS 的驱动程序。您可以运行 nut-scanner(8) 工具,它将检测连接到您系统的 NUT 兼容设备。
对于许多通过 USB 连接的 UPS,请使用 usbhid-ups(8) 驱动程序。对于带串行端口的 UPS,请使用 port=/dev/ttySX,其中 X 是串行端口号(例如:/dev/ttyS1)。对于带 USB 端口的 UPS,请使用 port=auto。
/etc/nut/ups.conf
...
[upsname]
driver = usbhid-ups
port = auto
您可以为 UPS 设备命名。请参阅 ups.conf(5)。
使用 upsdrvctl start 以 root 权限启动驱动程序。如果没有错误,您应该会看到如下所示的 usbhid-ups 驱动程序的提示信息。
# upsdrvctl start
Network UPS Tools - Generic HID driver 0.34 (2.4.1) USB communication driver 0.31 Using subdriver: MGE HID 1.12 Detected EATON - Ellipse MAX 1100 [ADKK22008]
如果驱动程序未正常启动,请确保您为硬件选择了正确的驱动程序。您可能需要通过更改 ups.conf 中的 driver= 值来尝试其他驱动程序。
此时,您应该能够 启动/启用 nut-driver-enumerator.service,它将自动创建 nut-driver@<ups name> systemd 服务实例并启动它。
无法声明 USB 设备错误
如果您收到类似的错误消息
Can't claim USB device [XXXX:YYYY]: could not detach kernel driver from interface 0: Operation not permitted Driver failed to start (exit status=1)
或者更笼统的错误消息
USB communication driver 0.33 No matching HID UPS found Driver failed to start (exit status=1)
这很可能是设备访问权限问题。您可以通过指定一个 udev 规则来修复它,该规则将设置正确的组。
/etc/udev/rules.d/50-ups.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="YYYY", GROUP="nut"
其中 XXXX 和 YYYY 是设备制造商和产品 ID。您可以在错误输出([XXXX:YYYY])中看到它们,或者使用 lsusb 命令查看。
nut 组由 nut 包添加。如果您使用了其他安装方法,可能需要更正组。完成此操作后,请运行以下命令重新加载和重新触发 udev 规则:
# udevadm control --reload # udevadm trigger
upsd 配置
默认情况下,upsd 只监听本地主机 tcp/3493,这对于我们的目的来说已经足够了。虽然对于遵循本指南来说不是必需的,但您可以通过编辑 /etc/nut/upsd.conf 来配置 upsd 以超出默认设置。请参阅 upsd.conf(5)。
您需要添加一个用户,以便监控器能够连接到服务器并发出命令。请参阅 upsd.users(5)。
/etc/nut/upsd.users
...
[upsuser]
password = password
upsmon primary
actions = SET
instcmds = ALL
此时,您应该能够 启动/启用 nut-server.service。
如果它已成功启动,您可以运行 upsc upsname 来获取 UPS 的信息。例如,该命令的输出如下:
battery.charge: 100 battery.charge.low: 10 battery.charge.warning: 20 battery.mfr.date: CPS battery.runtime: 5550 battery.runtime.low: 300 battery.type: PbAcid battery.voltage: 13.5 battery.voltage.nominal: 12 device.mfr: CPS device.model: UPS CP1000AVRLCD device.type: ups driver.name: usbhid-ups driver.parameter.pollfreq: 30 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.parameter.synchronous: no driver.version: 2.7.4 driver.version.data: CyberPower HID 0.4 driver.version.internal: 0.41 input.transfer.high: 140 input.transfer.low: 90 input.voltage: 122.0 input.voltage.nominal: 120 output.voltage: 122.0 ups.beeper.status: disabled ups.delay.shutdown: 20 ups.delay.start: 30 ups.load: 0 ups.mfr: CPS ups.model: UPS CP1000AVRLCD ups.productid: 0501 ups.realpower.nominal: 600 ups.status: OL ups.test.result: Done and passed ups.timer.shutdown: -60 ups.timer.start: 0 ups.vendorid: 0764
upsmon 配置
最后一步是配置 upsmon 以监听 upsd 并对事件采取行动。
将以下行添加到 /etc/nut/upsmon.conf:
MONITOR upsname@localhost 1 upsduser password primary
其中 upsname 是 UPS 的名称,upsduser 和 password 是您在 /etc/nut/upsd.users 中设置的用户及其密码。
您还可以配置发送哪些警报、发送到何处、低电量时采取什么操作,以及更多。请参阅 upsmon.conf(5)。
然后 启动/启用 nut-monitor.service。
您的日志应显示 upsmon 已启动并正在监控 UPS。
systemd target
为了让 systemd 服务单元在启动时自动启动,您必须 启用 nut.target 和 nut-driver.target。
NUT-Monitor
NUT-Monitor 是一个图形用户界面,用于监控和管理连接到 Network UPS Tools 服务器的设备。
您可以使用 nut-monitorAUR 包 安装 nut-monitor。
故障排除
CyberPower UPS 持续断开/重连
一些 CyberPower UPS 产品被发现会持续断开/重连,直到驱动程序成功连接到它 [1]。一旦断开/重连循环开始,upsd 就很难使用默认配置建立与 UPS 的连接(这似乎也影响了专有驱动程序)。
为缓解此问题,请 编辑 nut-driver@.service,添加以下配置,然后 启动/启用 nut-driver@cyberpower.service。
/etc/systemd/system/nut-driver@.service.d/override.conf
[Unit] StopWhenUnneeded=no [Service] PIDFile=/run/nut/usbhid-ups-%i.pid Group=nut User=nut RestartSec=10s
此外,请考虑在 UPS 配置中使用 maxretry。
/etc/nut/ups.conf
maxretry = 5
[cyberpower]
driver = "usbhid-ups"
port = "auto"
...
EATON 5E650iUSB 驱动程序启动失败
根据 GitHub 上的一个 issue,内核存在一个 bug,可以使用以下 内核参数 作为临时解决方案:
usbhid.quirks=0x0463:0xffff:0x08
无法声明 USB 设备:实体未找到
当从 nut-driver 收到以下错误时:
Can't claim USB device [XXXX:XXXX]@0/0/0: Entity not found
几位用户报告(例如 [2])重启(断电后再通电)UPS 可以解决此问题。
或者,您可以尝试在 启动 nut-driver@ups_name systemd 服务之前运行 upsdrvctl stop。