网络 UPS 工具

出自 ArchWiki

本文档描述了如何安装网络 UPS 工具 (NUT)。网络 UPS 工具兼容数千种型号的 UPS。您可以查看硬件兼容性列表以了解您的 UPS 是否受支持。

安装

安装 nut 软件包。

配置

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"

其中 XXXXYYYY 是设备制造商和产品 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 的名称,而 upsduserpassword 是您在 /etc/nut/upsd.users 中设置的用户及其密码。

您还可以配置发送哪些警报、将警报发送到哪里、电池电量低时采取哪些操作等等。参见 upsmon.conf(5)

然后启动/启用 nut-monitor.service

您的日志应显示 upsmon 正在启动并监控 UPS。

systemd 目标

为了使 systemd 服务单元在启动时启动,您必须启用 nut.targetnut-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 可以解决此问题。

参见