收起左侧

希望加入断 电切换到UPS供电时发送邮件功能

4
回复
95
查看
[ 复制链接 ]

2

主题

4

回帖

0

牛值

江湖小虾

2026-1-26 20:02:02 显示全部楼层 阅读模式

希望加入断 电切换到UPS供电时发送邮件功能,这样就能让用户知道家里停电了。(用的山特的TG BOX 850,把软路由和猫都用UPS供电了,所以不用担心邮件发不出去)

收藏
送赞 1
分享

6

主题

1万

回帖

0

牛值

管理员

社区上线纪念勋章社区共建团荣誉勋章飞牛百度网盘玩家fnOS1.0上线纪念勋章

2026-1-28 14:47:57 显示全部楼层

感谢反馈,这个需求先记录下来,我们会推进评估

0

主题

6

回帖

0

牛值

江湖小虾

2026-1-28 17:25:45 显示全部楼层

我用的CyberPower的UT650EGC,下面是我最近配置的UPS状态用Gotify推送,并且在长时间不恢复供电时卸载外接硬盘,因为**络唤醒,所以最后为了延长UPS使用时间,选择关机

  • 连接数据线,查看UPS名字
upsc -l
  • 输出为 1849591,这个编号不会变,因为配置写在了``/etc/nut/ups.conf`
  • 继续查看配置
upsc 1849591
  • 得到以下内容输出
Init SSL without certificate database
battery.charge: 85
battery.charge.low: 10
battery.charge.warning: 20
battery.mfr.date: CPS
battery.runtime: 741
battery.runtime.low: 300
battery.type: PbAcid
battery.voltage: 13.3
battery.voltage.nominal: 12
device.mfr: CPS
device.model: UT650EGC
device.serial:               
device.type: ups
driver.name: usbhid-ups
driver.parameter.bus: 001
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.product: UT650EGC
driver.parameter.productid: 0501
driver.parameter.synchronous: auto
driver.parameter.vendor: CPS
driver.parameter.vendorid: 0764
driver.version: 2.8.0
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.26 (API: 0x1000109)
input.frequency: 498.0
input.transfer.high: 295
input.transfer.low: 140
input.voltage: 219.0
input.voltage.nominal: 220
output.voltage: 220.0
ups.beeper.status: disabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.load: 31
ups.mfr: CPS
ups.model: UT650EGC
ups.productid: 0501
ups.realpower.nominal: 360
ups.serial:               
ups.status: OL CHRG
ups.test.result: No test initiated
ups.timer.shutdown: -60
ups.timer.start: -60
ups.vendorid: 0764
x.additional.devicetype: USB
  • ups.status为当前UPS状态,OL为市电,OB为UPS供电

NAS监控脚本

背景

  • NAS:配置了WOL,可以通过路由器唤醒
  • 外接硬盘柜:插电后需要手动按一下才能启动
  • 路由器:来电自启
  • UPS:NAS可以读取UPS是否在用电池电量,可以配置UPS收到关机指令后延迟执行的时间

运行逻辑

  • 开机马上运行一次脚本,发送NAS已开机指令
  • 开机后每分钟执行一次脚本,监测UPS状态,如果用了UPS电池的电,发送通知,并倒计时10分钟
  • 10分钟后如果供电恢复,发送通知说关机已取消
  • 10分钟后如果供电未恢复,发送通知并直接关机

脚本代码

  • 新建.sh文件在 /root/ups_monitor.sh
#!/bin/bash

#配置
UPS_NAME="1849591" 
GOTIFY_URL="输入Gotify链接"
GOTIFY_TOKEN="Gotify秘钥" 
MOUNT_POINT="硬盘挂载卷 /vol2"

# 发送通知函数
send_notify() {
    curl -s --max-time 5 -X POST "$GOTIFY_URL?token=$GOTIFY_TOKEN" \
        -F "title=$1" \
        -F "message=$2" \
        -F "priority=$3" > /dev/null
}

# 开机通知
if [ "$1" == "boot" ]; then
    sleep 60
    CURRENT_IP=$(hostname -I | awk '{print $1}')
    send_notify "🟢 CinerNAS启动成功" "IP: $CURRENT_IP
开机时间: $(date)" 5
    exit 0
fi

# 安全锁 (开机5分钟内不执行关机策略)
UPTIME=$(cat /proc/uptime | awk '{print $1}' | cut -d. -f1)
if [ "$UPTIME" -lt 300 ]; then
    exit 0
fi

# 主逻辑
STATUS=$(upsc $UPS_NAME ups.status 2>/dev/null)

if [[ "$STATUS" == *"OB"* ]]; then
  
    # === 定义消息内容 (解决换行问题) ===
    MSG_WARN="CinerNAS将在10分钟后自动关机
如果期间来电,则取消关机"

    MSG_SHUT="断 电已持续10分钟
正在卸载存储卷 /vol1 并关机..."
    send_notify "⚠️ CinerNAS断 电警告" "$MSG_WARN" 8
  
    # 等待 10 分钟
    sleep 600
  
    # 再次检查
    STATUS_RECHECK=$(upsc $UPS_NAME ups.status 2>/dev/null)
    if [[ "$STATUS_RECHECK" == *"OL"* ]]; then
        send_notify "✅ CinerNAS电源已恢复" "取消关机计划。" 5
        exit 0
    fi

    # 还是断 电
    send_notify "🔴 CinerNAS确认执行关机" "$MSG_SHUT" 10
  
    umount -l "$MOUNT_POINT"
  
    sleep 3
    /sbin/shutdown -h now

else
    :
fi
  • 使用crontab来执行定时运行,打开crontab,详细使用说明详见
crontab -e
  • 写入以下指令,其中时间定为 * * * * *是每分钟运行一次,里面是带锁的,防止脚本重复运行
@reboot /root/ups_monitor.sh boot >> /var/log/ups_boot.log 2>&1
* * * * * /usr/bin/flock -n /var/lock/ups_monitor.lock /root/ups_monitor.sh >> /var/log/ups_monitor.log 2>&1

常用命令

  • 杀掉所有 ups_monitir.sh的进程
pkill -f ups_monitor.sh
  • 查看有无后台运行的 ups_monitor.sh
ps -ef | grep ups_monitor.sh
当时记的笔记,可能有些杂乱,仅供参考  详情 回复
2026-1-28 17:28

0

主题

6

回帖

0

牛值

江湖小虾

2026-1-28 17:28:29 显示全部楼层
BI1QAB 发表于 2026-1-28 17:25
我用的CyberPower的UT650EGC,下面是我最近配置的UPS状态用Gotify推送,并且在长时间不恢复供电时卸载外接 ...

当时记的笔记,可能有些杂乱,仅供参考
太厉害了大佬(๑•̀ㅂ•́)و✧,完全够用了,顺着你这个思路我已经解决了  详情 回复
6 天前

2

主题

4

回帖

0

牛值

江湖小虾

6 天前 楼主 显示全部楼层
BI1QAB 发表于 2026-1-28 17:28
当时记的笔记,可能有些杂乱,仅供参考

太厉害了大佬(๑•̀ㅂ•́)و✧,完全够用了,顺着你这个思路我已经解决了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则