bash – 折腾(存档) https://blog.sorz.org 已停止更新和维护。该页面为2018年3月创建的存档,其内容可能已过于陈旧、与现状不符,仅作为历史存档用作参考。 Sun, 14 Jan 2018 11:08:20 +0000 zh-CN hourly 1 https://wordpress.org/?v=4.9.4 WR703n OpenWrt 按网络流量闪烁LED /p/flashled/ /p/flashled/#comments Sun, 22 Jul 2012 17:07:28 +0000 http://xierch.tk/?p=347365 #UPDAT130215: 感谢 @dword1511 提醒,闪灯是自带功能直接设置即可:

echo phy0tx > /sys/class/leds/tp-link\:blue\:system/trigger

另外,除了 phy0tx,trigger 还有几个可选值:
[none] default-on timer phy0rx phy0tx phy0assoc phy0radio phy0tpt netdev usbdev

当然本文脚本还是有一定价值的:比如可以一眼区分出 100KiB/s 与 1MiB/s
———-

前几天TB上搞了一个火柴盒形的路由器,TP-Link WR703n
单RJ45口,USB2.0,改外置天线改 64M 内存,改 8M Flash,刷了 OpenWrt 便于折腾。

盒子上只有一颗蓝色 LED,开机后常亮,写了个脚本让它随网络流量闪烁:
以 1Hz 频率闪烁,根据流量调节占空比。无流量时常灭,满带宽时常亮。

下载脚本前,需要安装几个东西:

opkg update
opkg install lmbench-msleep bc

lmbench-msleep用来做毫秒级延时,bc用来计算小数。不是很大,各种依赖加起来几百K吧好像..)

脚本如下,修改好设置保存任意地方,加入rc.local开机自启动就好~

#!/bin/sh
#set -x
export PATH="/bin:/sbin:/usr/sbin:/usr/bin"

IFNAME="eth0"
FULLSPEED=1200  # KiB/s
LED='/sys/class/leds/tp-link:blue:system/brightness'

while [ True ]
do

# Get traffic data:
str=$(ifconfig $IFNAME | grep 'RX bytes')
str=${str#*'RX bytes:'}
str=${str%' ('*}
str=${str%' ('*}
now=$((str/1024))

speed=$((now-last))
if [ "$speed" -gt "$FULLSPEED" ] ; then
        speed="$FULLSPEED"
fi
last="$now"

# Flash LED:
ratio=`echo "scale=3;$speed/$FULLSPEED*1000"|bc`
ontime=${ratio%'.'*}
offtime=$((1000-ontime))
#echo "$ontime"

if [ "$ontime" -gt "0" ] ; then
        echo 255 > "$LED"
        msleep "$ontime"
fi

if [ "$offtime" -gt "0" ] ; then
        echo 0 > "$LED"
        msleep "$offtime"
fi

#sleep 10
done

开头有两处可能要修改的地方:
IFNAME 为接口(interface)名称,ifconfig 里显示的那个,eth0、wlan0、pppoe-xxx 什么的都可以
FULLSPEED 为网络带宽,单位KiB/s,想调低常亮阈值就改小些…
如果不是 WR730n,可能还需要修改 LED

第一次写(超过10行的)bash 脚本,感觉好奇葩啊..各种蛋疼..
估计有的地方有绕圈子了?至少能运行了..要不是8M小路由器舍不得装 Python 我才不用 bash 嘞…

似乎还是狂闪的那种比较好看?但是好麻烦的样子…

]]>
/p/flashled/feed/ 2