网络 UPS 工具
本文档描述了如何安装网络 UPS 工具 (NUT)。网络 UPS 工具兼容数千种型号的 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)
以 root 身份使用 upsdrvctl start
启动驱动程序。如果没有错误,您应该看到类似 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 名称> 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
查看这些 ID。
nut
组由 nut 软件包添加。如果您使用不同的安装方法,您可能需要更正组。完成此操作后,通过运行以下命令重新加载并重新触发 udev 规则
# udevadm control --reload # udevadm trigger
upsd 配置
默认情况下,upsd 仅监听 localhost 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 目标
为了使 systemd 服务单元在启动时启动,您必须启用 nut.target
和 nut-driver.target
。
NUT-Monitor
NUT-Monitor 是一个图形用户界面,用于监控和管理连接到网络 UPS 工具服务器的设备。
您可以使用 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-cyberpower.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 可以解决此问题。