关于OECT修改指示灯状态(实现RGB效果)

想法的由来

最近很多人入手了价格很便宜矿渣OEC(T),加上各大UP主出的各种教程视频,这个运行只有5W左右功耗的小玩意,可能是很多人触碰NAS领域的第一台机子

受到UP主:好用斋

视频:OEC Turbo修改指示灯颜色~_哔哩哔哩_bilibili的启发

以及恩山论坛的一篇文章:话ophub大佬的OEC-Turbo armbian改灯光,关灯。-京东云、网心云、玩客云等PCDN云设备-恩山无线论坛 - Powered by Discuz!

原理概述

固件驱动解析

如果是刷了ophub大佬的armbian系统(amlogic-s9xxx-armbian/README.cn.md at main · ophub/amlogic-s9xxx-armbian)

那么就会在系统目录/sys/class/leds/目录下

有这样四个文件夹

blue-led

green-led

mmc0::

red-led

其中颜色-LED文件夹类型就是对应了3种RGB原色

cd至其中一个文件夹,例如blue-led,里面的文件又分别会有

brightness

device

max_brightness

power

subsystem

trigger

uevent

其中brightness是临时文件,也是控制灯光开关的文件1为开启,0为关闭

max_brightness则为亮度文件,对应文件夹颜色的亮度取值范围为0.01-1(例如百分之65亮度就是0.65)

三原色原理

RGB模型中的三原色指的是红色(Red)、绿色(Green)和蓝色(Blue)。 这三种颜色可以通过不同的亮度和强度混合,形成几乎所有的颜色。 RGB色彩混合遵循加色原理。 当红、绿、蓝三种颜色的光线以不同比例混合时,会形成新的颜色。 例如,红色和绿色光线混合会形成黄色,红色和蓝色混合会形成洋红色,绿色和蓝色混合会形成青色。 当三种颜色的光线以最大强度混合时,会形成白色。

图例如下:

编写脚本

原理搞清楚了,那就方便了,需要注意的是因为brightness是临时的虚拟文件,不允许直接修改

当输入nano brightness时会发现下面提示,写锁定

[ Error writing lock file ./.brightness.swp: Permission denied ]

所以需要造一个变量写进去

关闭LED:

echo 0 | sudo tee /sys/class/leds/green-led/brightness
echo 0 | sudo tee /sys/class/leds/blue-led/brightness
echo 0 | sudo tee /sys/class/leds/red-led/brightness

开启LED:开启led命令请单条复制,全部直接复制运行会叠加成为白色的灯

echo 1 | sudo tee /sys/class/leds/green-led/brightness
echo 1 | sudo tee /sys/class/leds/blue-led/brightness
echo 1 | sudo tee /sys/class/leds/red-led/brightness  

开机自动关灯脚本(如果不需要关灯,请直接跳到下一个标题)

根据恩山论坛的大佬给的控灯脚本

恩山的原帖是因为关机重启后灯光控制似乎在某个系统版本种中会失效

所以恩山大佬做出了一个开机自动关灯的脚本服务

原文内容如下

1:创建一个关灯脚本

sudo nano /usr/local/bin/led-off.sh


粘贴以下内容:

#!/bin/bash

# 关闭所有 LED
echo 0 | sudo tee /sys/class/leds/blue:/brightness /sys/class/leds/green:/brightness /sys/class/leds/red:/brightness /sys/class/leds/mmc0::/brightness >/dev/null


保存并退出(Ctrl + O → Enter → Ctrl + X)

然后赋予执行权限:

sudo chmod +x /usr/local/bin/led-off.sh


2:创建一个 systemd 服务文件

sudo nano /etc/systemd/system/led-off.service


粘贴以下内容:

[Unit]
Description=Turn off all LEDs after system boot
After=multi-user.target  # 确保在系统完全启动后执行

[Service]
Type=oneshot
ExecStart=/usr/local/bin/led-off.sh

[Install]
WantedBy=multi-user.target


保存并退出(Ctrl + O → Enter → Ctrl + X)。

3:启用并启动该服务
重新加载 systemd 配置

sudo systemctl daemon-reload


设置开机自启

sudo systemctl enable led-off.service


立即启动一次

sudo systemctl start led-off.service


4:重启测试。

reboot

RGB自动变色脚本编写

1、首先,创建一个新的 LED 控制脚本

sudo nano /usr/local/bin/led-rgb-cycle.sh

粘贴以下内容

#!/bin/bash

# 定义7种颜色组合 (R, G, B)
colors=(
    "1 0 0"   # 红色
    "0 1 0"   # 绿色
    "0 0 1"   # 蓝色
    "1 1 0"   # 黄色
    "1 0 1"   # 紫色
    "0 1 1"   # 青色
    "1 1 1"   # 白色
)

# 颜色切换间隔时间(秒)
interval=1

# 无限循环显示颜色
while true; do
    for color in "${colors[@]}"; do
        # 解析RGB值
        read r g b <<< "$color"
        
        # 设置各LED亮度
        echo $r | sudo tee /sys/class/leds/red-led/brightness >/dev/null
        echo $g | sudo tee /sys/class/leds/green-led/brightness >/dev/null
        echo $b | sudo tee /sys/class/leds/blue-led/brightness >/dev/null
        
        # 关闭mmc0指示灯(如果需要)
        echo 0 | sudo tee /sys/class/leds/mmc0::/brightness >/dev/null
        
        # 等待指定时间
        sleep $interval
    done
done

保存并退出(Ctrl + O → Enter → Ctrl + X)

2、创建对应的 systemd 服务文件

sudo nano /etc/systemd/system/led-rgb-cycle.service

然后粘贴以下内容

[Unit]
Description=Cycle through RGB LED colors
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/local/bin/led-rgb-cycle.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

保存并退出(Ctrl + O → Enter → Ctrl + X)

3、执行以下命令应用配置

# 赋予脚本执行权限
sudo chmod +x /usr/local/bin/led-rgb-cycle.sh

如果之前创建过led-off服务,先禁用它(没创建的不需要执行)

# 如果之前创建过led-off服务,先禁用它
sudo systemctl disable led-off.service
sudo systemctl stop led-off.service

启用并启动新服务

# 启用并启动新服务
sudo systemctl daemon-reload
sudo systemctl enable led-rgb-cycle.service
sudo systemctl start led-rgb-cycle.service

到这里你可以看看你的OECT灯光是否已经闪起来了

如果要停止效果,可以执行

sudo systemctl stop led-rgb-cycle.service
reboot

补充说明

1、以上脚本的适用范围

目前已知适用于ophub大佬的armbian固件,从B站视频OEC Turbo修改指示灯颜色~_哔哩哔哩_bilibili中评论区我可以看出目前istoreos目前是在目录下没有灯控文件夹的

2、当命令执行错误时先去找找自己对应的文件夹

我的系统版本为v25.11.0 for RK.Wxy-Oect running Armbian Linux 6.1.115-rk35xx-ophub

执行命令

cd /sys/class/leds
ls

输出的结果为

blue-led  green-led  mmc0::  red-led

请自己执行以下以上命令有些系统版本的文件夹命名为

green:  blue:  red:

此时路径对应应把脚本中路径修改('blue-led'→'green:')

如关灯命令

关闭LED:
echo 0 | sudo tee /sys/class/leds/green:/brightness
echo 0 | sudo tee /sys/class/leds/blue:/brightness
echo 0 | sudo tee /sys/class/leds/red:/brightness

请仔细审阅文件夹名

OECT的指示灯终归不是专业的RGB编程灯,如果你有更好的脚本优化,欢迎评论。

我这个脚本目前感觉变色的连贯性还不怎么完美