1

Temat: Włączanie i wyłączanie jednym przyciskiem wielu AP

Oto skrypt pozwalający włączać i wyłączać na przemian kilka AP jednym przyciskiem. Każde przyciśnięcie zmienia kombinację włączonych i wyłączonych AP.

Skrypt należy wkleić do pliku /etc/hotplug.d/button/wifiswitcher wszystko działa zależnie od ilości zdefiniowanych AP.

#!/bin/sh
# WiFi Switcher - Access Point's sequential switch
# Script version 1.00 Rafal Drzymala 2012
#
# Changelog
#    1.00    RD    First stable code
#
if [ "$BUTTON" == "BTN_1" ] && [ "$ACTION" == "released" ]; then
    SCR=$(basename $0)
    logger -p user.notice -t $SCR "Wifi button pressed"
    WLANS=$(uci show wireless | awk -F[.=] '{if ($3=="mode" && $4=="ap") print $2}')
    STATE=0
    for WLAN in $WLANS; do
        STATE=$(($STATE << 1))
        [ ""$(uci -q get wireless.$WLAN.disabled) == "1" ] && STATE=$(($STATE + 1))
    done
    STATE=$(($STATE + 1))
    MASK=1
    for WLAN in $WLANS; do
        OLD=$(uci -q get wireless.$WLAN.disabled)
        [ OLD == "" ] && OLD="0"
        NEW="1"
        [ $(($STATE & $MASK)) == "0" ] && NEW="0"
        if ! [ $OLD == $NEW ]; then
            uci set wireless.$WLAN.disabled="$NEW"
            logger -p user.notice -t $SCR "Wireless AP $(uci -q get wireless.$WLAN.ssid) turn $([ "$NEW" == "1" ] && echo "off" || echo "on")"
        fi
        MASK=$(($MASK << 1))
    done
    uci commit wireless
    wifi
fi

Dla przykładu posiadam trzy AP

  • A - Główny dla domowników

  • B - Hotspot dla gości kumatych:)

  • C - Hotspot dla gości innych - bardziej ograniczony

Rozpoczynamy od takiego stanu:
A (on), B (on), C (on)
a każda kolejna linia to stan po kolejnym przyciśnięciu przycisku na ruterze:
A (off), B (on), C (on)
A (on), B (off), C (on)
A (off), B (off), C (on)
A (on), B (on), C (off)
A (off), B (on), C (off)
A (on), B (off), C (off)
A (off), B (off), C (off)
A (on), B (on), C (on)

Ten przykładowy skrypt bazuje na przycisku WPS/QSS w moim przypadku (Linksys WRT160NL, TP Link TL-MR3420) widzianym jako BTN_1. Jak rozpoznać przyciski w swoim ruterze doskonale opisał Cezary http://eko.one.pl/?p=openwrt-button

Cezary także opisał http://openrouter.info/forum/viewtopic. … &t=967 jak dodać sieć gościnną.

install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub

2

Odp: Włączanie i wyłączanie jednym przyciskiem wielu AP

Zakradł się błąd w obliczaniu stanu AP:( teraz wszystko działa tak jak zakładałem.

#!/bin/sh
# WiFi Switcher - Access Point's sequential switch
# Script version 1.01 Rafal Drzymala 2012
#
# Changelog
#    1.00    RD    First stable code
#    1.01    RD    Fix state calculate bug. Minor cosmetic changes
#
if [ "$BUTTON" == "BTN_1" ] && [ "$ACTION" == "released" ]; then
    SCR=$(basename $0)
    logger -p user.notice -t $SCR "Wifi button $BUTTON pressed"
    WLANS=$(uci show wireless | awk -F[.=] '{if ($3=="mode" && $4=="ap") print $2}')
    STATE=0
    MASK=1
    for WLAN in $WLANS; do
        OLD=$(uci -q get wireless.$WLAN.disabled)
        [ "$OLD" == "1" ] && STATE=$(($STATE + $MASK))
        MASK=$(($MASK << 1))
    done
    STATE=$(($STATE + 1))
    MASK=1
    for WLAN in $WLANS; do
        SSID=$(uci -q get wireless.$WLAN.ssid)
        OLD=$(uci -q get wireless.$WLAN.disabled)
        [ "$OLD" == "0" ] && OLD=""
        NEW="1"
        [ "$(($STATE & $MASK))" == "0" ] && NEW=""
        if ! [ "$OLD" == "$NEW" ]; then
            uci set wireless.$WLAN.disabled="$NEW"
            NEW=$([ "$NEW" == "1" ] && echo "off" || echo "on")
            logger -p user.notice -t $SCR "Wireless AP $SSID turn $NEW"
        fi
        MASK=$(($MASK << 1))
    done
    uci commit wireless
    wifi
fi
# Done 
install.sh - Aktualizacja systemu, sysinfo.sh - Info.o systemie, openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub