Занятость каналов WiFi

Утилита, чтобы посмотреть занятость каналов (11.09КиБ) Что делать перед днём программиста как не программировать? Я настраивал точку доступа дома и пытался выбрать более свободный канал. Быстро найти подходящую утилиту под Mac OS X я не смог, поэтому начал её писать на bash. До конца не дописал (хотел ещё обозначить сколько устройств на одном канале висит), то что есть выкладываю — не пропадать же добру!
#!/bin/bash
declare -a dots

TEMP=$(mktemp -t `basename "$0"`)
trap "/bin/rm -f $TEMP" EXIT

if [ -z $1 ]; then
    /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s > $TEMP
else
    /bin/cp "$1" $TEMP
fi

# Если название точки содержит пробел, у нас всё поедет, надо избавиться от названия
# для этого мы меряем с каким отступом идёт первая строка (6 — это длина слова SSID, плюс пробелы)
cutname=`awk 'NR==1 {l=length; gsub(/^ +/, ""); print l-length+6}' $TEMP`

# Название будет отрезано командой cut
while read line; do
    line=($line)

    chs=(${line[2]//,+/ })

    # Берём только каналы 2,4ГГц
    if [ ${chs[0]} -gt 13 ]; then
        continue
    fi

    # Округляем уровень сигнала
    let lvl="(100 + ${line[1]} + 9) / 10"
    # Уровень прозрачности верхней линии
    let alpha="$lvl*10 - (100 + ${line[1]})"

    # Номера каналов
    let start="${chs[0]}-2+1"
    let end="${chs[0]}+2+${chs[1]:-0}*5+1"

    # Набор точек для рисования прямоугольника wifi-точки
    for x in $(seq $start $end); do

        # Прямоугольник закрашивается сплошным…
        for y in $(seq 0 $(($lvl - 1)) ); do 
            dots[$x+$y*100]=10
        done

        # Кроме верхней границы, она закрашивается значением
        # наибольшей насыщенности
        let xy="$x+($y+1)*100"

        if  [[ -z ${dots[$xy]} || ${dots[$xy]} -lt $alpha ]]; then
            dots[$xy]=$alpha
        fi
    done
# отрезаем заголовок, отрезаем название точки, сортируем по уровню сигнала
done < <(tail -n +2 $TEMP | cut -b${cutname}- | sort -rgk2)

# Блоки по насыщенности границы
blocks=(_ ░ ░ ░ ▒ ▒ ▒ ▒ ▒ ▒ █)

# Цвета вертикальной оси
colors=(32 32 32 32 32 33 33 31 31 31 31)

# Счётчик вертикальной оси
lvl=0

declare -i alpha

# Отрисовка шкалы и данных точек
for y in {10..0}; do
    printf "\033[${colors[-$lvl/10]}m% 4d " $lvl
    let lvl="$lvl - 10"

    for x in {0..15}; do
        alpha=${dots[$x+100*$y]}

        if [ $alpha -le 0 ]; then
            echo -n '   '
        else
            b=${blocks[$alpha]}

            echo -ne "\033[37m$b$b$b"
        fi
    done

    echo
done

# Горизонтальная ось
echo -e "\033[30m     -- -- 01 02 03 04 05 06 07 08 09 10 11 12 13"

echo -e "\033[0m"
13 сентября 2011 06:52

Stac (stacmv.ya.ru)
13 сентября 2011, 08:09

С днем рождения, Программист! Успехов тебе и радости от их достижения!

bolk (bolknote.ru)
13 сентября 2011, 08:18, ответ предназначен Stac (stacmv.ya.ru):

Спасибо! :)

Надо написать отдельный пост, что у меня сегодня день рождения :)

Олег Горбунов (инкогнито)
13 сентября 2011, 08:44

Поздравляю со всем сразу :)

bolk (bolknote.ru)
13 сентября 2011, 09:37, ответ предназначен Олегу Горбунову

Спасибо! Сейчас будет пост про ДР :)

nikolay (инкогнито)
13 сентября 2011, 10:10, ответ предназначен bolk (bolknote.ru):

Привет! с днем рождения )

а какую программу под вин7 ты использовал для анализа лучшего канала для домашней сети? у меня дома в районе 15.00 появляется под 20 сетей и иногда (редко, но все же) мой асус вл500гп2 сходит с ума и зависает из-за этого. хочу поэкспериментировать с каналами.

Kildor (kildor.ya.ru)
13 сентября 2011, 10:21, ответ предназначен bolk (bolknote.ru):

С новым годом!

bolk (bolknote.ru)
13 сентября 2011, 10:39, ответ предназначен nikolay

а какую программу под вин7 ты использовал для анализа лучшего канала для домашней сети?
http://bolknote.ru/2011/03/15/~3143/

bolk (bolknote.ru)
13 сентября 2011, 10:39

Спасибо всем!

viy (v-i-y.livejournal.com)
13 сентября 2011, 14:05

Женя, с днем рождения!
У меня с 5 по 8 каналы вообще пробелы, то есть нет столбца – это что значит?

http://banzalik.ru (инкогнито)
13 сентября 2011, 15:33

С днем рождения!

http://www.pimley.net/projects/#airlock
оно?

bolk (bolknote.ru)
13 сентября 2011, 16:06, ответ предназначен viy (v-i-y.livejournal.com):

Не заняты эти каналы никем. Или глючит что-нибудь :))
Женя, с днем рождения!
Спасибо!

bolk (bolknote.ru)
13 сентября 2011, 16:07, ответ предназначен http://banzalik.ru

С днем рождения!
Спасибо!
http://www.pimley.net/projects/#airlock
оно?
Не, надо как у меня на скриншоте.

bolk (bolknote.ru)
14 сентября 2011, 09:03

Себе на заметку. Цикл for в bash бывает ещё такой формы: for (( c=1; c<=5; c++ ))

Дмитрий Бергштейн (dbergstein.blogspot.com)
14 сентября 2011, 12:24, ответ предназначен bolk (bolknote.ru):

Охуительно. На гитхаб не выложите?

andr (andr.mp)
14 сентября 2011, 12:25

с прошедшим :)

bolk (bolknote.ru)
14 сентября 2011, 16:06, ответ предназначен Дмитрий Бергштейн (dbergstein.blogspot.com):

Охуительно. На гитхаб не выложите?
Да тут код-то небольшой. Стоит думаете?

bolk (bolknote.ru)
14 сентября 2011, 16:06, ответ предназначен andr (andr.mp):

с прошедшим :)
Спасибо! :)

bolk (bolknote.ru)
15 сентября 2011, 17:26, ответ предназначен Дмитрий Бергштейн (dbergstein.blogspot.com):

https://github.com/bolknote/shellgames

Дмитрий Бергштейн (dbergstein.blogspot.com)
19 сентября 2011, 00:16, ответ предназначен bolk (bolknote.ru):

Конечно стоит - у меня есть к примеру папка ShellMagic, в которой мой личный репо, и некоторые другие. Такую связку репозитариев удобнее таскать между компами, ну и обновления.

bolk (bolknote.ru)
19 сентября 2011, 08:05, ответ предназначен Дмитрий Бергштейн (dbergstein.blogspot.com):

Я выложил, чуть выше вашего коментария — ссылка.

Дмитрий Бергштейн (dbergstein.blogspot.com)
19 сентября 2011, 23:26, ответ предназначен bolk (bolknote.ru):

Заватчил )

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)