如何使用 NUT 禁用 UPS 节能?

如何使用 NUT 禁用 UPS 节能?

我安装了 Proline 650 UPS(串行)

额外详细信息:UPS 与单个 12v SLA 电池进行串行连接。(它未列在 NUT 兼容性列表中,但在编译 NUT-scanner 后检测到它可以与 blazer_ser 驱动程序配合使用。它似乎运行完美,如果我让 ups-monitor 运行,当 UPS 使用电池供电 30 秒或一分钟或更长时间时,服务器将自动关闭。操作系统:Debian 7 Wheezy。硬件是单个低功耗无头 i5 服务器,配备 1 个 3.5 英寸硬盘。

问题

UPS 在大约 5 分钟后自动关闭,而报告的电池容量仍为 65%(可能低估了容量,因为我刚刚安装了新电池),并且在关闭负载之前,NUT 报告的电池电压为 12.1v。无论服务器是否轮询 UPS,也无论负载轻还是无负载,UPS 都会在大约 5 分钟后自动关闭。(在某些测试中,我直接从线路电源为服务器供电,以避免 UPS 执行节能时意外断电)

我原本以为,NUT 每隔几秒钟轮询一次 UPS 以获取状态更新,UPS 就会意识到有一台计算机依赖它,但 UPS 并不聪明。UPS 显示服务器消耗了最大输出容量的 12%,它似乎认为这是“无负载”。UPS 关闭负载后,电池端子(单个 12v 电池)的电压空载电压约为 12.6v,表明它仍几乎充满电。

这种自动关机行为是在 NUT 文档中称为 energy_saving(电池.节能)。

blazer_ser 驱动程序似乎没有提供禁用 energy_saving 的方法。没有办法让 UPS 负载输出保持开启,这似乎很疯狂。UPS 怎么能被宣传为提供 x 量的电力,但却过早关闭,而没有简单的方法在软件中纠正这种行为?

这是我的状态输出

$ upsc[电子邮件保护]
电池充电:100
电池电压:13.60
电池电压高:13.00
电池电压低:10.40
电池电压标称值:12.0
设备类型:ups
驱动程序名称:blazer_ser
驱动程序.参数.轮询间隔:2
驱动程序.参数.端口: /dev/ttyS0
驱动程序版本:2.6.4
驱动程序.版本.内部: 1.55
输入电流标称值:3.0
输入频率:50.1
输入频率标称值:50
输入电压:221.0
输入电压故障:221.0
输入电压标称值:220
输出电压:221.0
ups.beeper.status:已启用
ups.延迟关机: 30
ups.delay.启动: 180
ups.负载: 12
ups.状态:OL
ups.温度: 25.0
ups.type: 离线/在线互动

我也运行了upsrw -u admin -p mypass -s -l nutdev1,但没有节能或类似的选项。只有像 beeper.toggle(经过测试,按预期工作)和其他基本的东西。有一个即时关闭负载的选项。它起作用了。有一个加载选项,我尝试反复调用它,希望延迟节能倒计时,但没有用。还有一个关机禁用选项,但这也没有帮助。

欢迎提出任何建议。我想到了一些我不太喜欢的事情:

  • 我尝试禁用节能功能,尽管没有列出该选项 upscmd -u upsadmin1 -p mypass nutdev1 battery.energysave Unexpected response from upsd: ERR CMD-NOT-SUPPORTED
  • 尝试其他驱动程序
  • 更换另一个 UPS(不保证其他本地 UPS 可以与 NUT 配合良好)
  • 为了被视为负载而连接更多负载(浪费电力)
  • 通过电子方式入侵 UPS 以欺骗其负载检测(浪费时间)

似乎必须有一个简单的软件解决方案,这就是我询问的原因。

================

根据 BillThor 的建议,我更新了我的 upsmon.conf 文件:

$ grep -v'^#'/etc/nut/upsmon.conf
监视器[电子邮件保护]1 foo2 bar2 主人
最低供给量 1

SHUTDOWNCMD“/usr/bin/logger 假关机”

轮询频率 5
轮询频率警报 5
主机同步 15
死亡时间 15
电源关闭标志 /etc/killpower

 NOTIFYFLAG 在线 SYSLOG+WALL
 通知标志 ONBATT SYSLOG+WALL
 通知标志 LOWBATT SYSLOG+WALL
 通知标志 FSD SYSLOG+WALL
 通知标志 COMMOK SYSLOG+WALL
 NOTIFYFLAG 命令 SYSLOG+WALL
 NOTIFYFLAG 关闭 SYSLOG+WALL
 通知标志 REPLBATT SYSLOG+WALL
 通知标志 NOCOMM SYSLOG+WALL
 NOTIFYFLAG NOPARENT SYSLOG+WALL

RBWARNTIME 43200
无通信警告时间 300

最终延迟 5

我连续 3 次打开 UPS(无线路电源),但未充电。电池容量和电压没有变化。从未发生过 LB 状态。以下是系统日志

12 月 2 日 07:08:00 t upsmon[2000]: 启动成功
十二月 2 07:08:00 t upsd[1942]: 用户[电子邮件保护]登录 UPS [nutdev1]
十二月 2 07:08:30 t upsmon[2002]: UPS[电子邮件保护]电池
12 月 2 日 07:13:34 t blazer_ser[1939]: 与 UPS 的通信丢失:状态读取失败!
12 月 2 日 07:13:36 t upsd[1942]: UPS [nutdev1] 的数据已过时 - 检查驱动程序
十二月 2 07:13:40 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时
十二月 2 07:13:40 t upsmon[2002]: 与 UPS 通信[电子邮件保护]丢失的
十二月 2 07:13:45 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时
十二月 2 07:13:50 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时
十二月 2 07:13:55 t upsmon[2002]: 轮询 UPS [[电子邮件保护]] 失败 - 数据过时
十二月 2 07:13:55 t upsd[1942]: 客户端[电子邮件保护]在 UPS 上设置 FSD [nutdev1]
12 月 2 日 07:13:55 t upsmon[2002]: 正在执行自动断电关机
十二月 2 07:13:55 t upsmon[2002]: 自动注销并关机程序
十二月 2 07:14:00 t logger: 假关机
十二月 2 07:17:31 t blazer_ser[1939]: 与 UPS 的通信已重新建立
12 月 2 日 07:17:31 t upsd[1942]: UPS [nutdev1] 数据不再过时
12 月 2 日 07:22:38 t blazer_ser[1939]: 与 UPS 的通信丢失:状态读取失败!
12 月 2 日 07:22:40 t upsd[1942]: UPS [nutdev1] 的数据已过时 - 检查驱动程序
十二月 2 07:25:23 t blazer_ser[1939]: 与 UPS 的通信已重新建立
12 月 2 日 07:25:23 t upsd[1942]: UPS [nutdev1] 数据不再过时
12月2日 07:29:54 t upsd[1942]:即时命令:[电子邮件保护]在 nutdev1 上执行了关机停止
十二月 2 07:29:55 t blazer_ser[1939]: instcmd: 命令 [shutdown.stop] 已处理
12月2日 07:30:17 t upsd[1942]:即时命令:[电子邮件保护]在 nutdev1 上执行了关机停止
十二月 2 07:30:18 t blazer_ser[1939]: instcmd: 命令 [shutdown.stop] 已处理
12月2日 07:30:25 t upsd[1942]:即时命令:[电子邮件保护]在 nutdev1 上执行了关机停止
十二月 2 07:30:26 t blazer_ser[1939]: instcmd: 命令 [shutdown.stop] 已处理
12 月 2 日 07:30:31 t blazer_ser[1939]: 与 UPS 的通信丢失:状态读取失败!
12 月 2 日 07:30:33 t upsd[1942]: UPS [nutdev1] 的数据已过时 - 检查驱动程序
十二月 2 07:31:32 t blazer_ser[1939]: 与 UPS 的通信已重新建立
12 月 2 日 07:31:32 t upsd[1942]: UPS [nutdev1] 数据不再过时

如您所见,我尝试通过运行此命令来清除 FSD 标志/状态(该命令可以成功立即关闭负载或切换蜂鸣器) upscmd -u upsadmin1 -p mypass nutdev1 shutdown.stop 但它并没有清除 FSD 状态。

以下是一些状态信息(我删除了不相关的行)

#我在 07:08:30 后拔掉电源后立即运行了此程序
$ upsc[电子邮件保护]
电池充电:69
电池电压:12.20
ups.延迟关机: 30
ups.delay.启动: 180
ups.负载: 0
ups.状态:OB

**$ 日期 && upsc[电子邮件保护]**
2014 年 12 月 2 日星期二 07:11:29 EST
电池充电:65
电池电压:12.10
ups.延迟关机: 30
ups.delay.启动: 180
ups.负载: 0
ups.状态:OB

#此后,除 ups.status 外,这些字段均未发生任何变化

**日期 && upsc[电子邮件保护]**
2014 年 12 月 2 日星期二 07:12:29 EST
电池充电:65
电池电压:12.10
ups.状态:OB

$ 日期 && upsc[电子邮件保护]
2014 年 12 月 2 日星期二 07:18:26 EST
电池充电:65
电池电压:12.10
ups.状态: FSD OB
ups.温度: 25.0

#还有几个,都一模一样,最后

**$ 日期 && upsc[电子邮件保护]**
2014 年 12 月 2 日星期二 07:30:28 EST
电池充电:65
电池电压:12.10
ups.状态: FSD OB

$ 日期 && upsc[电子邮件保护]
2014 年 12 月 2 日星期二 07:31:11 EST
错误:数据过时

这些是我的 UPS 支持的即时命令

**upscmd -u upsadmin1 -p mypass -l nutdev1**
UPS 支持的即时命令 [nutdev1]:

beeper.toggle - 切换 UPS 蜂鸣器 **有效**
load.off - 立即关闭负载 **有效**
load.on - 立即打开负载**似乎什么也不做**
shutdown.return - 关闭负载并在电源恢复时返回
shutdown.stayoff - 关闭负载并保持关闭状态
shutdown.stop - 停止正在进行的关机 **不会阻止关机或删除 FSD 标志**
test.battery.start-开始电池测试
test.battery.start.deep - 开始深度电池测试
test.battery.start.quick - 开始快速电池测试
test.battery.stop - 停止电池测试

现在我尝试了更多的可能性。我尝试运行 test.battery.start.quick 来重新校准电池,负载为 35%。它使用电池运行了一两分钟,然后切换回线路电源。然后我又有了两个想法。我尝试禁用蜂鸣器,希望 UPS 能够保持开启状态,但它在 5 分钟后照常自动关闭。然后我有了另一个想法。我拔掉电源插头,然后运行 ​​test.battery.start,希望我可以无限期地运行“电池测试”。但 UPS 仍然在 5 分钟后关闭。

基本上,这个 UPS 只适合关机,其他就没什么用了。我要再买一个 UPS。

答案1

除非您使用 中的命令upssched.conf,否则 NUT 应等到 UPS 报告电池电量不足后再关机。请检查以确保那里没有安排任何事项。

一旦 NUT 开始关机,它将触发 UPS 在超时后重新开机。这是为了确保在 UPS 电池耗尽之前恢复供电时服务器能够重新启动。时间指定FINALDELAYupsmon.conf

您可能希望启用 中所有事件的所有通知日志记录upsmon.conf。这可以让您确定系统为何这么快关闭。以下是我使用的设置:

NOTIFYFLAG ONBATT   SYSLOG+WALL
NOTIFYFLAG ONLINE   SYSLOG+WALL
NOTIFYFLAG FSD      SYSLOG+WALL
NOTIFYFLAG SHUTDOWN SYSLOG+WALL

NOTIFYFLAG LOWBATT  SYSLOG
NOTIFYFLAG REPLBATT SYSLOG

NOTIFYFLAG COMMOK   SYSLOG
NOTIFYFLAG COMMBAD  SYSLOG+WALL
NOTIFYFLAG NOCOMM   SYSLOG+WALL
NOTIFYFLAG NOPARENT SYSLOG+WALL

如果 NUT 根据计时器脚本关闭,那么这就是我希望在日志中看到的行。看来 UPS 在 5 分钟后停止通信,并且 NUT 正在做最后的 FSD(强制关闭)。这就是我希望它做的事情。五分钟应该足够长,表明电力不太可能很快恢复。

Dec  2 07:13:55 t upsd[1942]: Client [email protected] set FSD on UPS [nutdev1]

我希望 NUT 用来shutdown.return向 UPS 发出关机信号。一旦电源恢复,UPS 就会重新启动,如果在关机完成之前电源恢复,UPS 会短暂关机。

我希望ups.delay.shutdownups.delay.start是 UPS 关机重启周期的可调参数。 ups.delay.shutdown应留出时间让服务器完成关机周期,可能需要增加。 ups.delay.start应为电源恢复后电源稳定所需的时间。它还留出一些时间让电池在施加负载之前重新充电。

通常情况下,您不会希望在关机前将电池电量耗尽。您希望有足够的电池来再运行一两个周期,以防电量再次下降。

答案2

许多 UPS 都有低负载自动关机功能。如果负载低于 UPS 额定负载的 10%,则它将在 5 分钟后关机。我的 Proline UPS 也存在同样的问题。只要在 UPS 上增加负载,它就不会关机。我知道,如果你想节省电池电量,这有点违反直觉。

我找不到可以关闭该功能的软件设置。它似乎被硬编码到固件中。

我在负载侧安装了一个 sonoff 智能开关,并对其进行编程,使其每 4 分钟开启 10% 的负载 10 秒。虽然不是很优雅,但可以让 UPS 保持运行。

相关内容