OpenWrt 安裝NUT (Network UPS Tools)監控UPS
安裝nut-upsmon
搜尋nut-upsmon和luci-app-nut安裝
重新登入網頁會顯示NUT設定側欄
設定NUT監控
我的UPS server在Synology上,所以設定UPS 從裝置
CLI確認可以讀取UPS並啟用
root@OpenWrt:~# upsc ups@192.168.0.250
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: 2001/09/25
battery.mfr.date: 2023/08/10
battery.runtime: 2324
battery.runtime.low: 120
battery.type: PbAc
/etc/init.d/nut-monitor enable
/etc/init.d/nut-monitor start
監控設定
我將所有通知寫入syslog,另外切換到電池和恢復市電會另外執行指令
執行指令的部分自行建立/etc/config/ups-action執行
而關機指令則維持系統預設
建立/etc/config/ups-action
#!/bin/sh
EVENT="$1"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
LOCK_FILE="/var/run/onbatt_countdown.pid"
case "$EVENT" in
ONBATT)
logger -t nut-action "AC Power outage, on battery"
(
echo $$ > "$LOCK_FILE"
sleep 120
if [ -f "$LOCK_FILE" ]; then
NOW=$(date "+%Y-%m-%d %H:%M:%S")
logger -t nut-action -p authpriv.warn "AC Power not restored after 120s, shutdown system."
echo "[$NOW] ONBATT confirmed after 120s wait." >> /tmp/ups_events.log
rm -f "$LOCK_FILE"
/sbin/poweroff
fi
) &
;;
ONLINE)
logger -t nut-action "AC Power restored"
if [ -f "$LOCK_FILE" ]; then
PID=$(cat "$LOCK_FILE")
rm -f "$LOCK_FILE"
kill -9 "$PID" 2>/dev/null
fi
;;
*)
logger -t nut-action "[NUT EVENT] $TIMESTAMP - Event $EVENT triggered."
;;
esac
exit 0
腳本行為
ONBATT 觸發:印出日誌、記錄背景子程序 PID,並進行 120 秒非阻塞倒數。
ONLINE 中途恢復:精準依據 PID 砍掉背景倒數程序並清理 PID 檔,順利取消關機。
120 秒超時:確認 PID 檔依然存在,寫入確認 Log 後直接呼叫 /sbin/poweroff 執行安全關機。
chmod +x /etc/config/ups-action