针对群晖连接普通UPS(没有通讯功能)的解决方案

发布时间 2023-07-25 10:45:03作者: X5MGC

一、简介:

设备信息:研域M61(处理器:3855U)
DSM版本:7.1
产品型号:DS918+

二、解决关机问题

使用任务计划,利用sh脚本不间断ping其他网络设备来判断市电是否断开。
控制面板 - 服务 - 任务计划 - 新增 - 计划的任务 - 用户定义的脚本
任务名称(自定义)- 用户账号(root)- 计划(日期:每天、时间:00:00~23:55每隔五分钟)- 任务设置(用户定义脚本输入以下代码)
代码如下:

MonitorIP=192.168.1.1
DelayTime=180s

if ping $MonitorIP -c 4 | grep '100% packet loss' > /dev/null
then
 echo "Power off."
 synologset1 sys warn 0x11600036
 sleep $DelayTime
 if ping $MonitorIP -c 4| grep '100% packet loss' > /dev/null
 then
             ehco "Shut down."
 	synologset1 sys warn 0x11600037
 	poweroff
 else
             ehco "Power recovery."
 	synologset1 sys warn 0x11600035
 fi
else
 echo "Power on."
fi

然后确定保存即可

注意:请将顶部IP地址更改为自己想要ping的IP(不推荐主要网络设备,如路由器、电脑等)

三、解决开机问题

  • 在解决这个问题之前,请先将您的群晖设置内和bios网络唤醒功能打开
  • 如果您有使用openwrt或者老毛子等固件的路由器并且设备没有插在UPS可根据网上教程添加一个开机后WOL网络唤醒计划任务即可。

如果您和我一样设备插在了UPS或者设备不支持计划任务shell脚本请看下面:

  • 我目前使用的是树莓派唤醒,因为树莓派是插电就开机的设备(后期会换成esp8266等)
  • 请先保证树莓派和NAS是在同一局域网内

用ssh连接树莓派,安装wakeonlan

sudo apt install wakeonlan

打开/usr/local/bin文件夹

cd /usr/local/bin

创建sh文件,并写入唤醒内容

sudo nano wol.sh

输入以下内容

内容中含有bark推送功能,如果没有或不需要可自行删除

#!/bin/bash

# 检测是否连接到局域网(自行更换自己的网关地址)
ping -c 3 192.168.1.1 > /dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "已连接到局域网"
    
    # 使用WOL唤醒设备
    wakeonlan 00:30:18:50:AC:9D
	#此处mac地址换成自己的nas地址
    echo "已发送唤醒信号给 00:30:18:50:AC:9D"
    
    sleep 300
    
    # 检测是否能够ping通设备(自行更换自己的群晖IP)
    ping -c 2 192.168.1.2 > /dev/null 2>&1
    
    if [ $? -eq 0 ]; then
        echo "设备 192.168.1.2 可以被ping通"
        echo "正在通过curl访问URL通知设备已被唤醒,请注意运行状况..."
        curl -X GET http://这边是你的bark推送链接/NAS设备已被唤醒,请注意运行状况
    else
        echo "设备 192.168.1.2 无法被ping通,等待 300 秒后再次尝试"
        sleep 300
        ping -c 2 192.168.1.2 > /dev/null 2>&1
        
        if [ $? -eq 0 ]; then
            echo "设备 192.168.1.2 可以被ping通"
            echo "正在通过curl访问URL通知设备已被唤醒,请注意运行状况..."
            curl -X GET http://这边是你的bark推送链接/NAS设备已被唤醒,请注意运行状况
        else
            echo "设备 192.168.1.2 无法被ping通"
            echo "正在尝试通过curl访问URL通知未被唤醒,请手动开机..."
            curl -X GET http://这边是你的bark推送链接/NAS未被唤醒,请手动开机
        fi
    fi
else
    echo "未连接到局域网"
fi

echo "脚本执行完成,退出..."
exit 0

完成以上步骤后 CTRL+O 回车保存 CTRL+X退出

赋予可执行权限赋予可执行权限

sudo chmod +X wol.sh

添加sh的开机启动添加sh的开机启动

编辑cron表编辑cron表

sudo crontab -e

在最后一行添加在最后一行添加

@reboot sleep 20 && /usr/local/bin/wol.sh

完成以上步骤后 CTRL+O 回车保存 CTRL+X退出

在此所有步骤已全部完成,请先自行测试再正式启用。