SANTAK TGBOX-850 在 Linux 下的 UPS 部署踩坑记

为了保障数据安全,UPS 必不可少。两年前 50 不包邮捡到的 SANTAK MT500 Pro 从上一台服务器服役至今已经老化,正好我也希望不再使用基于 Java 的比较封闭的 Winpower 作为监测软件,而是希望使用更加开放的方案。因此我购入了一台 SANTAK TGBOX-850。

简述

UPS 规格为 850VA,510W。而我服务器的处理器为单路 E5-2678 v3,加上里面的数块硬盘,实测日常功率为 100W 上下,满载功率为 250W 作用。除此之外,UPS 还需要保障 PoEAC 路由器和 AP 的供电,因此日常负载约为 150W。对于它而言是十分轻松的。

由于服务器放在家中,显然我并不希望在断电时持续蜂鸣,好在 TGBOX 可以通过长按电源键 11 秒来切换静音模式。

SANTAK TGBOX-850 宣称支持 Windows、macOS 的原生电源管理,并支持 Synology 和 QNAP 的 NAS 平台。到手后发现它使用的协议为 USB HID 电源设备协议,因此看起来应当可以轻松支持 Linux 平台。

UPS 外观

第一步!

UPS 的安装十分简单,只需把 UPS 的电源线插入插座,然后将 USB Type-B 的数据线接入服务器的 USB 接口即可。

然后我尝试使用 Winpower 连接 UPS,但在检测到 UPS 连接后数秒就会出现通讯中断的提示。

Winpower 通讯中断

致电山特后,山特技术人员给出的答复是 TGBOX 不支持和 Winpower 进行通讯,询问 Linux 下是否有通讯软件时,技术人员表示不支持 Linux,随后表示将给我发送带有 Windows 下诊断工具的一封邮件。

显然我不认为它无法在 Linux 下使用。从邮件内容看来,山特和 Eaton 集团的关系似乎非同一般。打开邮件后发现,技术人员发送给我的工具实际上是 Eaton UPS Companion。测试发现该工具可以正常读取 UPS 的信息。

从而我转变了思路,UPS Companion 支持的 Eaton UPS 型号有 Eaton 3S 等。只要寻求和 Eaton 3S 一致的解决方案即可使用。于是我们决定使用 Network UPS Tools

Network UPS Tools

由于我的服务器运行 Proxmox VE,直接在 Debian 下安装即可:

apt update
apt install nut

NUT 的配置位于 /etc/nut/ 下,首先我们配置 ups.conf,它的配置十分简单,我们只需要将 MODE 配置为 standalone 即可:

MODE=standalone

standalone 模式主要用于单机单 UPS 场景。
然后我们在 upsd.conf 下配置监听端口:

LISTEN 127.0.0.1 3493
LISTEN ::1 3493

由于 NUT 使用标准的 C/S 模型,因此它也需要鉴权以确保安全性。所以我们在 upsd.users 下定义用户:

[用户名]
password=密码
upsmon master

接下来配置 ups.conf,这里描述我们 UPS 的型号等信息:

[tgbox850]
    driver=usbhid-ups
    port=auto
    vendorid=0463
    desc="SANTAK TGBOX-850 UPS"

NUT 原生提供了 usbhid-ups 的驱动,这里 vendorid 其实可以不填。
这里还可以通过 override. 前缀来覆盖掉一些配置默认值,例如,如果需要 UPS 在 60% 电量时触发低电量,我们可以:

override.battery.charge.low = 60

最后,我们可以配置 upsmon.conf

MONITOR tgbox850@localhost 1 用户名 密码 master
SHUTDOWNCMD "/etc/nut/shutdown"
POWERDOWNFLAG /etc/nut/killpower

其中 /etc/nut/shutdown 即为关机脚本,我们可以在里面添加我们需要的内容。例如:

#!/bin/sh
/sbin/shutdown -h +0

/etc/killpower 是一个 flag,当系统即将触发关机时,该文件会出现。

最后,我们使用 systemctl enable nut-driver nut-server nut-monitor 令其开机自启,systemctl start nut-driver nut-server nut-monitor 启动即可。

踩坑

我们的 UPS 有时可能会出现 Communication lost 的问题。
解决方法是在 /etc/nut/ups.conf 中设置:

pollinterval = 1

之后如果有时间,我可能会实践一下 Web UI 和机器人通知。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注