侧边栏壁纸
博主头像
浪哥的学习笔记博主等级

有船就能顺利过河

  • 累计撰写 7 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

绿联 DX4600 黑群晖 面板LED灯位控制

浪哥的学习笔记
2024-07-21 / 0 评论 / 0 点赞 / 1013 阅读 / 6327 字
温馨提示:
本文最后更新于 2024-07-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

去年购入绿联DX4600,原生是基于opwrt底层的魔改系统,入门使用也没什么问题。今年6月官方发布基于debian的新系统,体验了一下是按照群晖的逻辑来的,谁料系统极度不完整,问题多多。于是就想干脆直接黑裙不就解决了吗,再怎么说,群晖的口碑大家都是好评的。关于绿联盲操安装黑裙,可以参考这个文章:DX4600安装可以核显硬解的黑群晖(保姆级教程)

我是使用的RROrg/rr: Redpill Recovery (arpl-i18n) (github.com)引导文件。

请更新RR版本到24.6.9及以上,更新 i2c-i801.ko 对 Ice Lake-N, Alder Lake-P/M, Raptor Lake-S, Meteor Lake-P/SoC-S/PCH-S, Birch Stream 的兼容(only epyc7002)。led控制工具只能在root权限下运行。

同时支持以下设备:

- UGREEN DX4600 Pro

- UGREEN DXP2800

- UGREEN DXP4800 Plus

- UGREEN DXP6800 Pro

- UGREEN DXP8800 Plus

一、前置条件:

1.RR引导中

如果没设置过模块,默认是全选。

2.检查验证

SSH登陆NAS,并切换到root帐号:

sudo -i   # 输入你帐户密码

检查加载的i2c模块:

lsmod | grep i2c

i2c_algo_bit 16384 1 i915

i2c_i801 28672 0

二、功能实现

电源:常亮白灯;

LAN灯:5分种ping一下网关,连通白灯,失败红色闪烁;

DISK灯:检查有几个硬盘,对应的灯位亮绿灯,如果温度超过50度,红色闪烁;

(可以自定义按自己心情改色)

计划任务-新增-计划中的任务-用户自定义的脚本

任务名称 ugreen_led         用户账号为 root

计划中勾选 在同一天内继续运行,第5分钟重复一次。

任务设置-运行命令 中粘贴以下脚本:

如果不要输出,请注释掉所有echo行

#!/bin/bash

#set -x

# 初始化设备状态数组
devices=(w x x x x x x x x x)
# 初始化设备映射
map=(power netdev disk1 disk2 disk3 disk4 disk5 disk6 disk7 disk8)

# 检查网络状态
gw=$(ip route | awk '/default/ { print $3 }')
if ping -q -c 1 -W 1 $gw >/dev/null; then
    devices[1]=w
else
    devices[1]=r
fi


# 将 sataX 映射到硬件设备
declare -A hwmap

echo "映射设备中..."
for devpath in /sys/block/sata*; do
    dev=$(basename $devpath)
    hctl=$(basename $(readlink $devpath/device))
    hwmap[$dev]=${hctl:0:1}
    echo "将 $dev 映射到 ${hctl:0:1}"
done

# 打印硬件映射 (hwmap) 以供验证
echo "硬件映射 (hwmap):"
for key in "${!hwmap[@]}"; do
    echo "$key: ${hwmap[$key]}"
done

# 检查硬盘状态并更新设备状态数组,方法一(如果硬盘全部支持SMART功能)
#echo "检查磁盘状态中..."
#for dev in "${!hwmap[@]}"; do
    # 使用 smartctl 检查硬盘状态
#    if smartctl -H /dev/$dev &> /dev/null; then
#        status="ONLINE"
#    else
#        status="OFFLINE"
#    fi
#    index=$((${hwmap[$dev]} + 2))
#    echo "设备 $dev 状态 $status 映射到索引 $index"
#
#    if [ $status = "ONLINE" ]; then
#        devices[$index]=g
#    else
#        devices[$index]=x
#    fi
#done

# 检查硬盘状态并更新设备状态数组,方法二
echo "检查磁盘状态中..."
for dev in "${!hwmap[@]}"; do
    # 使用 udevadm 检查硬盘状态
    if udevadm info --query=all --name=/dev/$dev &> /dev/null; then
        status="ONLINE"
    else
        status="OFFLINE"
    fi
    index=$((${hwmap[$dev]} + 2))
    echo "设备 $dev 状态 $status 映射到索引 $index"

    if [ $status = "ONLINE" ]; then
        devices[$index]=g
    else
        devices[$index]=x
    fi
done

# 根据硬盘温度设置disk灯状态,50度高温红色闪烁提醒
for i in "${!hwmap[@]}"; do
    index=$((${hwmap[$i]} + 2))
    hdd_temp=$(cat /run/synostorage/disks/sata$((${hwmap[$i]} + 1))/temperature)
    if [ "$hdd_temp" -ge 50 ]; then
        devices[$index]=r
    else
        devices[$index]=g
    fi
done

# 打印设备状态数组(可选,用于调试)
#echo "设备状态数组:${devices[@]}"

# 输出最终设备状态并控制 LED 灯
echo "最终设备状态:"
for i in "${!devices[@]}"; do
    echo "$i: ${devices[$i]}"
    case "${devices[$i]}" in
        w)
            echo "设置 ${map[$i]} 为白色常亮"
            ugreen_leds_cli ${map[$i]} -color 255 255 255 -on -brightness 64
            ;;
        g)
            echo "设置 ${map[$i]} 为绿色常亮"
            ugreen_leds_cli ${map[$i]} -color 0 255 0 -on -brightness 64
            ;;
        r)
            echo "设置 ${map[$i]} 为红色闪烁"
            ugreen_leds_cli ${map[$i]} -color 255 0 0 -blink 400 600 -brightness 64
            ;;
        x)
            echo "关闭 ${map[$i]}"
            ugreen_leds_cli ${map[$i]} -off
            ;;
    esac
done

参考

https://github.com/meyergru/ugreen_dxp8800_leds_controller

https://github.com/miskcoo/ugreen_dx4600_leds_controller

https://blog.miskcoo.com/2024/05/ugreen-dx4600-pro-led-controller

https://gist.github.com/Kerryliu/c380bb6b3b69be5671105fc23e19b7e8

https://imnks.com/10101.html

0

评论区