如何禁用NUT的UPS energy_saving?

我已经安装了一台Proline 650 UPS(串行)

额外的细节:UPS与一个12v SLA电池串联。 (在NUT兼容列表中没有列出,但在编译NUT扫描程序后,发现它与blazer_ser驱动程序一起工作,看起来工作正常,如果我离开ups-monitor,运行服务器时会自动closures一直在电池电源30秒或一分钟或任何操作系统:Debian 7 Wheezy硬件是一个单一的,低功耗无头i5服务器与1 3.5“硬盘。

问题

大约5分钟后,UPS自动closures,而报告的电池容量仍然是65%(这可能是估计容量下,因为我刚刚安装了一个新的电池),NUT报告电池电压为12.1v卸下负载。 无论是否由服务器轮询,无论是轻载还是空载,UPS在大约5分钟后都会自动closures。 (我在一些testing过程中直接通过线路电源为服务器供电,以避免UPS进行节能时意外断电)

我期望NUT每隔几秒查询一次UPS的状态更新,UPS会认识到有一台计算机依赖于它,但是UPS并不聪明。 UPS将服务器显示为最大输出容量的12%,似乎认为是“空载”。 在UPSclosures负载后,电池端子(单个12v电池)的电压的空载电压约为12.6v,表明它仍然几乎充满电。

这种自我断电行为在NUT文档中被称为energy_saving (battery.energysave)。

blazer_ser驱动似乎没有提供一种方法来禁用energy_saving。 这看起来很疯狂,没有办法保持UPS负载输出。 UPS如何被宣传为提供x电量但过早closures,没有简单的方法来纠正软件中的行为?

这是我的状态输出

  $ upsc [email protected]
电池电量:100
电池电压:13.60
 battery.voltage.high:13.00
 battery.voltage.low:10.40
 battery.voltage.nominal:12.0
 device.type:ups
 driver.name:blazer_ser
 driver.parameter.pollinterval:2
 driver.parameter.port:/ dev / ttyS0
 driver.version:2.6.4
 driver.version.internal:1.55
 input.current.nominal:3.0
 input.frequency:50.1
 input.frequency.nominal:50
 input.voltage:221.0
 input.voltage.fault:221.0
 input.voltage.nominal:220
 output.voltage:221.0
 ups.beeper.status:启用
 ups.delay.shutdown:30
 ups.delay.start:180
 ups.load:12
 ups.status:OL
温度:25.0
 ups.type:离线/在线交互

我也跑upsrw -u admin -p mypass -s -l nutdev1但是没有upsrw -u admin -p mypass -s -l nutdev1或类似的选项。 只有像beeper.toggle(testing,按预期工作)和其他基本的东西。 有一个即时卸载选项。 有用。 有一个选项的负载,我试图反复调用它希望延迟能量倒计时,但它没有工作。 还有closures禁用选项,这也没有帮助。

欢迎任何build议。 我想到了一些我不喜欢的东西:

  • 我试过禁用节能,即使这个选项没有列出upscmd -u upsadmin1 -p mypass nutdev1 battery.energysave Unexpected response from upsd: ERR CMD-NOT-SUPPORTED
  • 尝试其他驱动程序
  • 获得另一个UPS(不保证其他本地可用UPS与NUT很好地工作)
  • 只是为了考虑负荷而连接更多的负载(浪费电力)
  • 用电子手段破坏UPS以欺骗负载检测(时间不够用)

这似乎是一个简单的软件解决scheme,这就是为什么我问。

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

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

 $ grep -v'^#'/etc/nut/upsmon.conf
 MONITOR [email protected] 1 foo2 bar2 master
 MINSUPPLIES 1

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

 POLLFREQ 5
 POLLFREQALERT 5
 HOSTSYNC 15
死亡15
 POWERDOWNFLAG / etc / killpower

  NOTIFYFLAG ONLINE SYSLOG + WALL
  NOTIFYFLAG ONBATT SYSLOG + WALL
  NOTIFYFLAG LOWBATT SYSLOG + WALL
  NOTIFYFLAG FSD SYSLOG + WALL
  NOTIFYFLAG COMMOK SYSLOG + WALL
  NOTIFYFLAG COMMBAD SYSLOG + WALL
  NOTIFYFLAGclosuresSYSLOG + WALL
  NOTIFYFLAG REPLBATT SYSLOG + WALL
  NOTIFYFLAG NOCOMM SYSLOG + WALL
  NOTIFYFLAG NOPARENT SYSLOG + WALL

 RBWARNTIME 43200
 NOCOMMWARNTIME 300

 FINALDELAY 5

我打开了UPS(没有线路电源)3次,而没有充电。 电池容量和电压没有变化。 状态LB从未发生。 这里是系统日志

 Dec 2 07:08:00 t upsmon [2000]:启动成功
 Dec 2 07:08:00 t upsd [1942]:用户[email protected]到UPS [nutdev1]
 12月2日07:08:30 t upsmon [2002]:电池上的[email protected] UPS
 12月2日07:13:34 t blazer_ser [1939]:与UPS的通信丢失:状态读取失败!
 Dec 2 07:13:36 t upsd [1942]:UPS的数据[nutdev1]陈旧 - 检查驱动程序
 12月2日07:13:40 t upsmon [2002]:民意调查UPS [[email protected]]失败 - 数据陈旧
 12月2日07:13:40 t upsmon [2002]:UPS与[email protected]通信丢失
 12月2日07:13:45 t upsmon [2002]:民意调查UPS [[email protected]]失败 - 数据陈旧
 12月2日07:13:50 t upsmon [2002]:民意调查UPS [[email protected]]失败 - 数据陈旧
 12月2日07:13:55 t upsmon [2002]:民意调查UPS [[email protected]]失败 - 数据陈旧
 Dec 2 07:13:55 t upsd [1942]:客户端[email protected]设置UPS上的FSD [nutdev1]
 12月2日07:13:55 t upsmon [2002]:执行自动断电关机
 12月2日07:13:55 t upsmon [2002]:自动注销和关机程序
 12月2日07:14:00logging器:假closures
 12月2日07:17:31 t blazer_ser [1939]:与UPS的通信重新build立
 Dec 2 07:17:31 t upsd [1942]:UPS [nutdev1]数据不再陈旧
 12月2日07:22:38 t blazer_ser [1939]:与UPS的通信丢失:状态读取失败!
 Dec 2 07:22:40 t upsd [1942]:UPS [nutdev1]的数据陈旧 - 检查驱动程序
 12月2日07:25:23 t blazer_ser [1939]:与UPS的通信重新build立
 Dec 2 07:25:23 t upsd [1942]:UPS [nutdev1]数据不再陈旧
 Dec 2 07:29:54 t upsd [1942]:即时命令:[email protected]在nutdev1上执行了shutdown.stop
 12月2日07:29:55 t blazer_ser [1939]:instcmd:命令[shutdown.stop]处理
 Dec 2 07:30:17 t upsd [1942]:即时命令:[email protected]在nutdev1上执行了shutdown.stop
 12月2日07:30:18 t blazer_ser [1939]:instcmd:命令[shutdown.stop]处理
 Dec 2 07:30:25 t upsd [1942]:即时命令:[email protected]在nutdev1上执行了shutdown.stop
 12月2日07:30:26 t blazer_ser [1939]:instcmd:命令[shutdown.stop]处理
 Dec 2 07:30:31 t blazer_ser [1939]:与UPS的通信丢失:状态读取失败!
 Dec 2 07:30:33 t upsd [1942]:UPS [nutdev1]的数据陈旧 - 检查驱动程序
 12月2日07:31:32 t blazer_ser [1939]:与UPS的通信重新build立
 Dec 2 07:31:32 t upsd [1942]:UPS [nutdev1]数据不再陈旧

正如你所看到的,我试图通过运行这个命令来清除FSD标志/状态(这个命令可以立即成功closures负载,或者切换蜂鸣器) upscmd -u upsadmin1 -p mypass nutdev1 shutdown.stop但是,不清楚FSD状态。

这里有一些状态信息(我删除了不相关的行)

 #07:08:30之后拔掉线路电源后立即执行此操作
 $ upsc [email protected]
电池。充电:69
电池电压:12.20
 ups.delay.shutdown:30
 ups.delay.start:180
 ups.load:0
 ups.status:OB

 ** $ date && upsc [email protected]**
 Tue Dec 2 07:11:29 EST 2014
电池电量:65
电池电压:12.10
 ups.delay.shutdown:30
 ups.delay.start:180
 ups.load:0
 ups.status:OB

 #除了ups.status以外,这些字段中没有一个改变了整个时间

 ** date && upsc [email protected]**
 2014年12月2日星期二07:12:29
电池电量:65
电池电压:12.10
 ups.status:OB

 $ date && upsc [email protected]
星期二12月2日07:18:26东部时间2014年
电池电量:65
电池电压:12.10
 ups.status:FSD OB
温度:25.0

还有几个,都是一样的,最后呢

 ** $ date && upsc [email protected]**
 Tue Dec 2 07:30:28 EST 2014
电池电量:65
电池电压:12.10
 ups.status:FSD OB

 $ date && upsc [email protected]
星期二12月2日07:31:11东部时间2014年
错误:数据陈旧

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

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

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

现在我已经尝试了更多的可能性。 我试着运行test.battery.start.quick重新校准电池,有35%的负载。 它在电池上运行了一两分钟,然后切换回线路电源。 然后我有两个更多的想法。 我试着禁用了蜂鸣器,希望UPS能够继续工作,但是5分钟后它就按照惯例closures了。 然后我有另一个想法。 我拉了电源插头,然后跑了test.battery.start,希望我可以无限期地运行“电池testing”。 但5分钟后,UPS STILLclosures。

基本上这个UPS是closures的好,而不是其他的。 我会得到另一个UPS。

除非在upssched.conf中使用命令, upssched.conf NUT应该等到UPS报告电池电量不足后再closures。 检查确保你没有安排在那里。

一旦NUT开始关机,它会在超时后触发UPS回收。 这是为了确保在UPS电量耗尽之前恢复供电,服务器恢复正常运行。 时间在upsmon.conf指定为upsmon.conf

您可能需要启用upsmon.conf所有事件的所有通知的日志logging。 这可能使您能够确定为什么系统即将closures。 这些是我使用的设置:

 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根据计时器脚本closures,这就是我期望在日志中看到的那种线。 看起来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.delay.shutdownups.delay.start是UPS关机重启周期的可调参数。 ups.delay.shutdown应该允许服务器完成closures周期的时间,并且可能需要增加。 ups.delay.start应该是电源恢复后电源稳定的时间。 在施加负载之前,还允许电池充电一段时间。

通常情况下,在关机之前,您不希望将电池电量降到最低。 你想有足够的电池通过另一个周期或两个,以防止电力再次下降。