在多个wifi环境中如何根据信号强度自动接入



  • 书房和客厅各有一个wifi热点,经常移动widora到这两个地方,感觉手动加入wifi很不方便,想找个办法让widora在开机时候根据信号强度大小自动选择接入,借用了一下connect2ap的代码,对前面部分做了一下修改并改名为auto2ap, 如下:

    ------------------------- auto2ap.sh ----------------------------

    #!/bin/sh
    #----- SSIDs and PASSWDs -------
    SSID1=ChinaNet-Midas1
    PASS1=xxxxxxxxxxxx
    SSID2=ChinaNet-Midas2
    PASS2=xxxxxxxxxxxx

    #-------- default ssid ---------
    ussid=$SSID1
    upass=$PASS1
    #---=--- signal density --------
    SIG_SSID1=0
    SIG_SSID2=0

    OUTPUT=""

    until [ -n "$MY_SSID" ];do
    #------- search WIFI ---------------
    iwpriv ra0 set SiteSurvey=0
    sleep 5
    OUTPUT=iwpriv ra0 get_site_survey| grep '^[0-9]'
    ##---------- get ssids ---------------
    MY_SSID=echo "$OUTPUT" | grep -E 'ChinaNet-Midas1|ChinaNet-Midas2' #--NO blank beside '|'
    echo "$MY_SSID"
    done

    SSID1_STR=echo "$MY_SSID" | grep ChinaNet-Midas1
    SSID2_STR=echo "$MY_SSID" | grep ChinaNet-Midas2

    #----------- compare signal density -------
    if [ -n "$SSID1_STR" ];then
    SIG_SSID1=echo "$SSID1_STR" | awk '{ print $6 }'
    echo '----- ChinaNet-Midas1 found! -----'
    fi

    if [ -n "$SSID2_STR" ];then
    SIG_SSID2=echo "$SSID2_STR" | awk '{ print $6 }'
    echo '----- ChinaNet2cPv found! -----'
    fi

    echo 'SIG_SSID1='"$SIG_SSID1"
    echo 'SIG_SSID2='"$SIG_SSID2"

    if [ $SIG_SSID1 -gt $SIG_SSID2 ];then
    echo "SIG_SSID1 > SIG_SSID2"
    ussid=$SSID1
    upass=$PASS1
    else
    echo "SIG_SSID1 <= SIG_SSID2"
    ussid=$SSID2
    upass=$PASS2
    fi

    echo ussid="$ussid"
    echo upass="$upass"

    #----------- 以下部分保持不变 ----------
    while read line
    .......

    把这个脚本放入 /etc/rc.local中,使其在开机时执行:
    ....
    /bin/auto2ap.sh
    /etc/init.d/network restart
    ......

    试验了一下可以正常工作,不过只能在开机时自动加入, 移动的时候无法自动切换。 抛砖引玉,希望大神们给出更好的方法。