DjPrizrak

 
<<< Назад

Роутер на OpenWRT(LEDE) сообщает о подключении и ОТКЛЮЧЕНИИ Wifi устройства.

Аналог встроенной функции Устройства Online.

По ряду причин мне не подошла функция Устройства Online, для определения дома я или нет.
Поискал по форуму, кто как заменяет её, нашел пару инструкций, одна не подошла потому как хорошо определет только момент подключения, но не отключение, вторая не помню чем, но не подошла :-).
Решил поискать другие решения, и нашёл на своем роутере такую програмку как iwinfo которая показывает подключенные wifi устройства и качество сигнала.
Дальше написал элеменарный скриптик для отправки этой информации в majordomo.

На лавры первопроходца не претендую, уверен у большинства продвинутых пользователей что то подобное давно работает, но на форуме такой информации не нашёл и для новичкой как я это не доступно.
Так же возможно кто-то найдёт ошибки, но повторюсь я новичёк, в теме пару месяцев и эта инструкция для таких же новичков.

Итак:
С начало ставим OpenWRT, LEDE или подобные на роутер если ещё нет, и если роутер ПОДДЕРЖИВАЕТ эти прошивки. Инструкции в интернете.
Далее подключаемся по ssh к роутеру. Инструкции в интернете.
Не знаю идет ли программа iwinfo по умолчанию в прошивке для вашего роутера, если нет, можно поставить.
opkg update
opkg install iwinfo
У меня ASUS RT-N16 если что.
Проверить подлюченные устройства можно так.
iwinfo wl0 assoclist где wl0 имя wifi устройства РОУТЕРА. (может быть wlan0)
Узнать его можно в файле wireless. (не факт)
Вот так:
cat /etc/config/wireless
Покажет примерно такое:

config wifi-device 'wl0'
        option type 'broadcom'
        option txantenna '3'
        option rxantenna '3'
        option hwmode '11ng'
        option channel '11'
        option htmode 'HT40'
        option txpower '24'

Создаем сам скрипт, предварительно заменяя IP СЕРВЕРА на свой адрес majordomo. Имена объектов, и мак адреса этих объектов (XX:XX:XX:XX:XX:XX)

tee /etc/online.sh << EOF
#!/bin/sh

md="http://IP СЕРВЕРА/objects/?op=set" #ЗАМЕНИТЬ IP
object1="Victor"    #Объект 1 ЗАМЕНИТЬ например на Admin
object2="Alina"     #Объект 2 ЗАМЕНИТЬ или удалить если один пользователь
property="isHome"   #Свойство которое изменяется на сервере

iwinfo wl0 assoclist > /tmp/iwinfo #Тут меняем wl0 на своё подключение 
if grep -q "XX:XX:XX:XX:XX:XX" /tmp/iwinfo; then
wget -O - -q $md"&object="$object1"&p="$property"&v=1"
else
wget -O - -q $md"&object="$object1"&p="$property"&v=0"
fi
#Для второго пользователя.
if grep -q "XX:XX:XX:XX:XX:XX" /tmp/iwinfo; then
wget -O - -q $md"&object="$object2"&p="$property"&v=1"
else
wget -O - -q $md"&object="$object2"&p="$property"&v=0"
fi
EOF

Делаем скрипт исполняемым, думаю хватит этого.
chmod u+x /etc/online.sh
Осталось заставить его переодически проверять подключения.
В веб интерфейсе роутера есть
Система > Запланированные задания
И добавляем туда
*/5 * * * * . /etc/online.sh
Это заставит проверять устройства раз в пять минут, можно постовить минуту.
*/1 * * * * . /etc/online.sh
Ну и рестарт crontaba
/etc/init.d/cron restart
Всё, значение в моем случае isHome будет меняться автоматически, а с ним уже связан метод alive.
В дальнейшем планирую этим же скриптом передавать доступность интернета и полностью отказаться от цикла ping. А также можно передавать качество сигнала.
Как будто ничего не забыл.

Обсуждение (2) (8)

Смела, Украина

Веб-сайт:
http://mava.com.ua