Cudy TR3000 OpenWrt 自定义LED灯
Cudy TR3000旁路由,自定义LED指示灯控制脚本。
一、创建 LED 脚本
执行
1
| nano /usr/bin/led-network-monitor.sh
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| #!/bin/sh
WHITE_LED="/sys/class/leds/white:status/brightness" RED_LED="/sys/class/leds/red:power/brightness"
LAN_BR="br-lan"
PING1="223.5.5.5" PING2="114.114.114.114"
NIGHT_START=18 NIGHT_END=6
INTERVAL=15
sleep 30
[ -e "$WHITE_LED" ] || exit 1 [ -e "$RED_LED" ] || exit 1
set_led() { WHITE="$1" RED="$2" CURRENT_WHITE=$(cat "$WHITE_LED" 2>/dev/null) CURRENT_RED=$(cat "$RED_LED" 2>/dev/null)
if [ "$CURRENT_WHITE" = "$WHITE" ] && \ [ "$CURRENT_RED" = "$RED" ]; then return fi
echo "$WHITE" > "$WHITE_LED" echo "$RED" > "$RED_LED" }
get_hour() { date +%H | sed 's/^0//' }
is_night() { H=$(get_hour) if [ "$H" -ge "$NIGHT_START" ] || \ [ "$H" -lt "$NIGHT_END" ]; then return 0 fi return 1 }
internet_ok() { ping -I "$LAN_BR" -c 1 -W 1 "$PING1" >/dev/null 2>&1 && return 0 ping -I "$LAN_BR" -c 1 -W 1 "$PING2" >/dev/null 2>&1 && return 0 return 1 }
lan_link_ok() { FOUND_PORT=0
for DEV in /sys/class/net/"$LAN_BR"/brif/*; do [ -e "$DEV" ] || continue
PORT_NAME=$(basename "$DEV") CARRIER_FILE="/sys/class/net/$PORT_NAME/carrier" [ -f "$CARRIER_FILE" ] || continue
FOUND_PORT=1 LINK=$(cat "$CARRIER_FILE" 2>/dev/null)
if [ "$LINK" = "1" ]; then return 0 fi done
[ "$FOUND_PORT" = "0" ] && return 0 return 1 }
while true; do if ! lan_link_ok; then set_led 0 255 elif ! internet_ok; then set_led 0 255 elif is_night; then set_led 0 0 else set_led 255 0 fi
sleep "$INTERVAL" done
|
赋予执行权限
1
| chmod +x /usr/bin/led-network-monitor.sh
|
二、建立 OpenWrt 后台服务
创建
1
| nano /etc/init.d/led-network
|
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/sh /etc/rc.common START=99 USE_PROCD=1
start_service() { procd_open_instance procd_set_param command /usr/bin/led-network-monitor.sh procd_set_param respawn procd_close_instance }
|
赋予执行权限
1
| chmod +x /etc/init.d/led-network
|
设置开机自动启动
1
| /etc/init.d/led-network enable
|