#!/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
else
if ! internet_ok then
set_led 0 255
else
if is_night then
set_led 0 0
else
set_led 255 0
fi
fi
fi
sleep "$INTERVAL"
done
|