不止是关灯:H3C NX30 Pro+OpenWrt的LED玩法,还能当状态指示灯用
H3C NX30 Pro+OpenWrt的LED高阶玩法:从状态监控到智能交互
深夜调试网络时,路由器面板上那枚忽明忽暗的LED灯突然开始规律性闪烁——这不是设备故障,而是你精心设计的网络健康可视化系统正在工作。对于OpenWrt玩家而言,H3C NX30 Pro的指示灯远不止是装饰性光源,通过深度定制,它可以变身为实时反映系统状态的"硬件仪表盘"。
1. LED控制原理与硬件准备
1.1 理解NX30 Pro的LED架构
H3C NX30 Pro采用双色LED设计,硬件层面通过GPIO引脚控制:
nx30pro:green:绿色指示灯,默认表示正常运行nx30pro:red:红色指示灯,通常用于报警状态
通过SSH登录设备后,可以查看LED控制接口:
ls /sys/class/leds/ cat /sys/class/leds/nx30pro\:green/trigger典型输出显示当前触发模式为default-on,表示常亮状态。OpenWrt支持的触发模式包括:
| 触发模式 | 效果描述 | 典型应用场景 |
|---|---|---|
| none | 完全手动控制 | 自定义脚本控制 |
| timer | 定时闪烁 | 心跳指示灯 |
| heartbeat | 心跳式闪烁 | 系统活动监控 |
| netdev | 网络活动触发 | 流量监控 |
1.2 基础控制命令实践
手动控制LED状态的几种方式:
立即开关控制:
# 开启绿灯 echo 1 > /sys/class/leds/nx30pro\:green/brightness # 关闭绿灯 echo 0 > /sys/class/leds/nx30pro\:green/brightness # 切换红灯状态(需root权限) echo $((1-$(cat /sys/class/leds/nx30pro\:red/brightness))) > /sys/class/leds/nx30pro\:red/brightness模式切换示例:
# 设置为心跳模式 echo heartbeat > /sys/class/leds/nx30pro\:green/trigger # 恢复默认常亮 echo default-on > /sys/class/leds/nx30pro\:green/trigger注意:部分LED操作可能需要先解除原有触发绑定,使用
echo none > trigger后再设置新参数。
2. 状态监控可视化方案
2.1 网络连通性监控脚本
创建/usr/bin/network_monitor.sh实现断网报警:
#!/bin/bash # 检测间隔(秒) INTERVAL=30 # 测试目标(建议选择稳定服务器) TARGET="223.5.5.5" while true; do if ping -c 1 -W 2 $TARGET >/dev/null; then # 网络正常-绿灯常亮 echo default-on > /sys/class/leds/nx30pro\:green/trigger echo 0 > /sys/class/leds/nx30pro\:red/brightness else # 网络异常-红灯闪烁 echo none > /sys/class/leds/nx30pro\:green/trigger echo timer > /sys/class/leds/nx30pro\:red/trigger echo 100 > /sys/class/leds/nx30pro\:red/delay_on echo 100 > /sys/class/leds/nx30pro\:red/delay_off fi sleep $INTERVAL done设置开机自启:
chmod +x /usr/bin/network_monitor.sh (crontab -l; echo "@reboot /usr/bin/network_monitor.sh &") | crontab -2.2 CPU负载可视化方案
通过LED颜色变化反映系统负载状态:
#!/bin/bash # 负载阈值设置 LOW_LOAD=0.3 HIGH_LOAD=1.5 while true; do load=$(cat /proc/loadavg | awk '{print $1}') cores=$(nproc) normalized_load=$(echo "$load / $cores" | bc -l) if (( $(echo "$normalized_load < $LOW_LOAD" | bc -l) )); then # 低负载-绿灯慢闪 echo timer > /sys/class/leds/nx30pro\:green/trigger echo 1000 > /sys/class/leds/nx30pro\:green/delay_on echo 1000 > /sys/class/leds/nx30pro\:green/delay_off elif (( $(echo "$normalized_load < $HIGH_LOAD" | bc -l) )); then # 正常负载-绿灯常亮 echo default-on > /sys/class/leds/nx30pro\:green/trigger else # 高负载-黄灯快闪(红绿交替) echo none > /sys/class/leds/nx30pro\:green/trigger for i in {1..5}; do echo 1 > /sys/class/leds/nx30pro\:green/brightness echo 1 > /sys/class/leds/nx30pro\:red/brightness sleep 0.1 echo 0 > /sys/class/leds/nx30pro\:green/brightness echo 0 > /sys/class/leds/nx30pro\:red/brightness sleep 0.1 done fi sleep 5 done3. 服务集成与高级交互
3.1 AdGuard Home拦截反馈
当广告拦截发生时,让LED闪烁提示:
#!/bin/bash # 监控AdGuard Home日志 tail -Fn0 /opt/AdGuardHome/AdGuardHome.yaml | grep --line-buffered "query was blocked" | while read line; do # 红灯快速闪烁3次表示拦截事件 for i in {1..3}; do echo 1 > /sys/class/leds/nx30pro\:red/brightness sleep 0.1 echo 0 > /sys/class/leds/nx30pro\:red/brightness sleep 0.1 done done3.2 网络流量模式识别
通过LED展示实时网络活动模式:
#!/bin/bash # 流量采样间隔(秒) INTERVAL=2 # 流量阈值(KB/s) HIGH_TRAFFIC=500 while true; do rx1=$(cat /sys/class/net/br-lan/statistics/rx_bytes) tx1=$(cat /sys/class/net/br-lan/statistics/tx_bytes) sleep $INTERVAL rx2=$(cat /sys/class/net/br-lan/statistics/rx_bytes) tx2=$(cat /sys/class/net/br-lan/statistics/tx_bytes) rx_rate=$(( (rx2 - rx1) / INTERVAL / 1024 )) tx_rate=$(( (tx2 - tx1) / INTERVAL / 1024 )) if [ $rx_rate -gt $HIGH_TRAFFIC ] || [ $tx_rate -gt $HIGH_TRAFFIC ]; then # 高速流量-双色交替闪烁 echo none > /sys/class/leds/nx30pro\:green/trigger echo none > /sys/class/leds/nx30pro\:red/trigger for i in {1..3}; do echo 1 > /sys/class/leds/nx30pro\:green/brightness echo 0 > /sys/class/leds/nx30pro\:red/brightness sleep 0.2 echo 0 > /sys/class/leds/nx30pro\:green/brightness echo 1 > /sys/class/leds/nx30pro\:red/brightness sleep 0.2 done echo default-on > /sys/class/leds/nx30pro\:green/trigger echo 0 > /sys/class/leds/nx30pro\:red/brightness fi done4. 系统集成与优化技巧
4.1 多脚本协同管理
当运行多个LED控制脚本时,建议使用进程管理工具:
# 安装supervisor opkg update opkg install supervisor # 配置示例 /etc/supervisor.d/led_scripts.ini [program:network_monitor] command=/usr/bin/network_monitor.sh autostart=true autorestart=true [program:load_monitor] command=/usr/bin/load_monitor.sh autostart=true autorestart=true4.2 LED状态查询接口
创建简易HTTP接口查询当前LED状态:
# 安装lighttpd和PHP opkg install lighttpd lighttpd-mod-cgi php7-cgi # 创建 /www/cgi-bin/led_status #!/bin/sh echo "Content-type: application/json" echo "" echo '{ "green": "'$(cat /sys/class/leds/nx30pro\:green/trigger)'", "red": "'$(cat /sys/class/leds/nx30pro\:red/trigger)'" }'4.3 物理按钮复用
利用NX30 Pro的Reset按钮实现交互控制:
#!/bin/bash # 监控按钮事件 while true; do # 模拟按钮按下检测(需根据实际GPIO调整) if [ $(cat /sys/class/gpio/gpioXX/value) -eq 0 ]; then # 长按3秒触发LED模式切换 sleep 3 if [ $(cat /sys/class/gpio/gpioXX/value) -eq 0 ]; then current=$(cat /sys/class/leds/nx30pro\:green/trigger | awk -F'[' '{print $2}' | cut -d']' -f1) case "$current" in "default-on") new="heartbeat" ;; "heartbeat") new="timer" ;; *) new="default-on" ;; esac echo $new > /sys/class/leds/nx30pro\:green/trigger fi fi sleep 0.1 done在办公室环境中,我的NX30 Pro通过红灯闪烁频率来指示会议时段网络负载状态,绿色呼吸效果表示正常运行,而突然的黄色闪烁则提醒我可能有异常连接出现。这种非侵入式的状态反馈方式,既保持了专业设备的简洁外观,又提供了丰富的状态信息。
