Jump to content
  • 2

запуск скрипта при появлении нового клиента wifi


Vyacheslav Anisimov

Question

Добрый день!

Подскажите пожалуйста, как реализовать сценарий. Хочется, к примеру, включать освещение частного дома, когда я подъезжаю к нему на машине.

Сотовый регистрируется в сети wi-fi, хочется по этому событию выполнять некий скрипт (проверка мак-адреса девайса, http-запрос к серверу умнодома)

Скрипт я способен написать сам, хочется понять, можно ли как-то сгенерировать его вызов по изменению состава wi-fi клиентов сети?

Желательно не путем вызова в кроне скрипта, сканирующего ARP, а именно событием.

Link to comment
Share on other sites

Recommended Posts

  • 1

Начиная с 2.13.A.3.0 появилось событие neighbour.d. По нему можно отследить появление хоста в сети или его уход.

Однако это событие в основном дает только ID. Затем по этому ID нужно сделать запрос в /rci/show/ip/neighbour, оттуда взять L3 адреса, а также mac или via (mac - это mac устройства, via - это mac, под которым оно видно в сети. Они отличаются, если используется повторитель WiFi с MAT: тогда в via стоит MAC повторителя). После этого по mac или по via нужно сделать запрос в /rci/show/associations, и взять оттуда параметры wifi для устройства.

Link to comment
Share on other sites

  • 1

Могу предположить, что топикстартера интересует запуск скрипта из wan.d (или какой там каталог wlan.d? нет доступа к роутеру под рукой что бы посмотреть) который идет в комплекте с opkg.

В этот каталог (который отслеживает появление WiFi устройств) он кладет свой скрипт, далее скрипт проверяет устройство по маку и после удачной проверки шлет на сервер необходимую команду. 

Edited by m__a__l
Link to comment
Share on other sites

  • 1

Внесу свои 5 копеек. Как указано в посте Le ecureuil, для прошивок начиная с 2.13.A.3.0 можно использовать hook-скрипт neighbour.d. Для этого в каталоге /opt/etc/ndm/neighbour.d (если такого каталога нет - создать с правами на выполнение) создадим скрипт, например 010-neighbour.sh следующего содержания:

#!/bin/sh

DEV1="a0:86:c6:8e:47:ef"
DEV2="74:23:44:bd:8f:86"

replacement() {
    case "$1" in
        *$DEV1* ) echo "Device 1";;
        *$DEV2* ) echo "Device 2";;
    esac
}

if [[ "$address" = "ipv4" && "$update" = "none" ]]; then
  #получаем mac устройства по ID
  mac=$(wget -qO - http://127.0.0.1:79/rci/show/ip/neighbour | jq --arg num "$id" '.[$num].mac')
  #проверяем mac на принадлежность нужному нам хосту
  who=$(replacement "$mac")
  [ -z "$who" ] && exit 0
  #публикуем mqtt сообщение типа "Device 1 new" и "Device 1 del" в топик zyxel
  mosquitto_pub -d -t zyxel -m "$who $action" -h 192.168.1.112 -p 1883 -u login -P password > /dev/null
fi

Дадим права на выполнение

chmod +x 010-neighbour.sh

Все. Теперь при появлении / отключении определенных девайсов от сети в mqtt будут публиковаться сообщения типа "Device 1 new" и "Device 1 del". Вместо публикации сообщений mqtt можете запускать выполнение какого-либо скрипта и т.п. на ваше усмотрение.

P.s. Утилиты mosquitto-clients и jq должны быть установлены

opkg install mosquitto-clients jq

 

Edited by Khaninea
Добавлена информация о необходимости установки утилит
Link to comment
Share on other sites

  • 0

Приобретаете IP камеру с внешним доп.интерфейсом - 1DI / 1DO (digital input и output). Цифровые разъемы DI/DO обеспечивают физический интерфейс для отправки и приема цифровых сигналов различных внешних устройств 4 контактный разъем. Про возникновении события сработает оборудование подключенное к данным контактам.
 

Link to comment
Share on other sites

  • 0
В 09.07.2018 в 09:38, vasek00 сказал:

Приобретаете IP камеру с внешним доп.интерфейсом - 1DI / 1DO (digital input и output). Цифровые разъемы DI/DO обеспечивают физический интерфейс для отправки и приема цифровых сигналов различных внешних устройств 4 контактный разъем. Про возникновении события сработает оборудование подключенное к данным контактам.
 

Это вообще не понятно, зачем здесь. Совсем не то. Вроде и не рядом.

Link to comment
Share on other sites

  • 0
22 часа назад, m__a__l сказал:

Могу предположить, что топикстартера интересует запуск скрипта из wan.d (или какой там каталог wlan.d? нет доступа к роутеру под рукой что бы посмотреть) который идет в комплекте с opkg.

В этот каталог (который отслеживает появление WiFi устройств) он кладет свой скрипт, далее скрипт проверяет устройство по маку и после удачной проверки шлет на сервер необходимую команду. 

А вот это похоже на то. Но я не смог найти какого-то описания этого хозяйства. Или примеров. 

Можете помочь?

Я кладу туда скрипт и он будет выполняться в какой момент?

Link to comment
Share on other sites

  • 0
19 минут назад, Vyacheslav Anisimov сказал:

Это вообще не понятно, зачем здесь. Совсем не то. Вроде и не рядом. 

Очень даже рядом, так как задачу умный дом хотелось вам 

Цитата

Хочется, к примеру, включать освещение частного дома, когда я подъезжаю к нему на машине. Сотовый регистрируется в сети wi-fi, хочется по этому событию выполнять некий скрипт (проверка мак-адреса девайса, http-запрос к серверу умнодома).

а не придумывать что-то из подручных средств. Так же для справки любая средняя GSM сигнализация это может делать.

Link to comment
Share on other sites

  • 0
Только что, vasek00 сказал:

Очень даже рядом, так как задачу умный дом хотелось вам 

Вы предлагаете зажигать свет, когда кто-то в поле зрении камеры проедет, я правильно понял?

Нет, мне такое и близко не нужно. 

Link to comment
Share on other sites

  • 0
41 минуту назад, Vyacheslav Anisimov сказал:

Вы предлагаете зажигать свет, когда кто-то в поле зрении камеры проедет, я правильно понял? 

Нет, мне такое и близко не нужно. 

Да самое простое к данным входам подключают IR-датчики и сигнальные реле.

Если хотите с телефона управлять (есть android приложения для смарта/планшета или просто через SMS сообщения) то GSM сигнализация удовлетворит любую вашу прихоть (ну почти любую).

Link to comment
Share on other sites

  • 0
22 минуты назад, vasek00 сказал:

Да самое простое к данным входам подключают IR-датчики и сигнальные реле.

Если хотите с телефона управлять (есть android приложения для смарта/планшета или просто через SMS сообщения) то GSM сигнализация удовлетворит любую вашу прихоть (ну почти любую).

Я выше уже написал, что мне не подходит то, что вы пишите. И gsm-сигнализацию я ставить не собираюсь. Считаю, что сам keenetic прекрасно удовлетворит любую мою прихоть.

Еще раз, для тех, кто не вчитался. Я хочу, что-бы что-то происходило, когда мой смартфон появляется в wi-fi сети. Само происходило, а не по нажатию кнопки. Происходило только при появлении моего смартфона, а не любой проезжающей машины в зоне видимости вашей камеры. Включение света приведено в первом сообщении только для наиболее простого примера. Открытие ворот другой пример.

 

Очень интересно услышать подробностей про wan.d/wlan.d...

Link to comment
Share on other sites

  • 0
50 минут назад, Vyacheslav Anisimov сказал:

Я выше уже написал, что мне не подходит то, что вы пишите. И gsm-сигнализацию я ставить не собираюсь. Считаю, что сам keenetic прекрасно удовлетворит любую мою прихоть.

Еще раз, для тех, кто не вчитался. Я хочу, что-бы что-то происходило, когда мой смартфон появляется в wi-fi сети. Само происходило, а не по нажатию кнопки. Происходило только при появлении моего смартфона, а не любой проезжающей машины в зоне видимости вашей камеры. Включение света приведено в первом сообщении только для наиболее простого примера. Открытие ворот другой пример.

 

Очень интересно услышать подробностей про wan.d/wlan.d...

Где-то на этом форуме украинские кажись товарищи предлагали готовое решение по этому поводу ))))...поискать надо

 

посмотрите тут )))) ...мож оно?

 

Edited by MDP
Link to comment
Share on other sites

  • 0

...на вскидку что в голову приходит, написать скрипт постоянно пингующий зарезервированный IP (домашней сети) вашего смартфона, при удачном прохождении пинга вызываете действие какое-либо

Edited by MDP
Link to comment
Share on other sites

  • 0
1 час назад, Vyacheslav Anisimov сказал:

И gsm-сигнализацию я ставить не собираюсь. Считаю, что сам keenetic прекрасно удовлетворит любую мою прихоть.

Ваше право, если вы так считаете что сам keenetic прекрасно удовлетворит любую мою прихоть - как говорится хозяин барин.

Link to comment
Share on other sites

  • 0
7 часов назад, Vyacheslav Anisimov сказал:

А вот это похоже на то. Но я не смог найти какого-то описания этого хозяйства. Или примеров. 

Можете помочь?

Я кладу туда скрипт и он будет выполняться в какой момент?

У меня сейчас нет физического доступа к keenetic роутерам с opkg, вам я правильно понял нужен именно путь к дирректории, которая выполняет скрипты при активации абонента по wifi, это как раз рядом с кроном, но путь я не помню. 

Должно быть в /opt/etc а вот далее, надеюсь подскажут, предлагаю позвать @TheBB и @zyxmon они наверняка сразу поймут о чем идет речи и подскажут, в какой каталог класть свои скрипты. 

Link to comment
Share on other sites

  • 0
5 часов назад, vasek00 сказал:

Ваше право, если вы так считаете что сам keenetic прекрасно удовлетворит любую мою прихоть - как говорится хозяин барин.

Наверно опять отвечу за топикстартера (на сколько я понял) у него уже есть «умный дом» и управляется с его сайта, ему осталась «простая» вещь, это с роутера скриптом на свой сайт отправить команду, когда по wifi появится устройство с определенным mac. 

Link to comment
Share on other sites

  • 0
7 часов назад, MDP сказал:

Где-то на этом форуме украинские кажись товарищи предлагали готовое решение по этому поводу ))))...поискать надо

 

посмотрите тут )))) ...мож оно?

похоже на то, что я своими руками хочу реализовать )) спасибо, изучу

Link to comment
Share on other sites

  • 0
7 часов назад, MDP сказал:

...на вскидку что в голову приходит, написать скрипт постоянно пингующий зарезервированный IP (домашней сети) вашего смартфона, при удачном прохождении пинга вызываете действие какое-либо

можно программно логиниться на веб-морду роутера в соотв. вкладку. но хочется как-то проще )) 

Link to comment
Share on other sites

  • 0
58 минут назад, m__a__l сказал:

Наверно опять отвечу за топикстартера (на сколько я понял) у него уже есть «умный дом» и управляется с его сайта, ему осталась «простая» вещь, это с роутера скриптом на свой сайт отправить команду, когда по wifi появится устройство с определенным mac. 

Бинго! Все правильно. Спасибо ))

Link to comment
Share on other sites

  • 0
24 минуты назад, TheBB сказал:

Спасибо!

"/opt/etc/ndm/wan.d/ event scripts are executed once a new internet connection is available."

Это ведь исполняется не при появлении нового устройства в сети, а при изменении состояния WAN.

А события при появлении-уходе wi-fi-клиента там в документации нет.

Или я неправильно понял?

Link to comment
Share on other sites

  • 0
3 часа назад, Le ecureuil сказал:

Правильно, такого события (пока?) нет.

Распишите подробно, что вы хотите видеть, а я подумаю как это сделать.

ndm/wlan.d

/opt/etc/ndm/wlan.d/ event scripts are executed once a new wlan client is connected/disconnected.

Variable Description
$mac Mac address
$ip IP address
$state "connected" or "disconnected"
$name Hostname

+ $registered = 0/1

Кажется, как-то так. Если можно еще и уведомлять про выход конкретного клиента из сети, была бы вообще сказка.

Edited by Vyacheslav Anisimov
Link to comment
Share on other sites

  • 0

Воспроизведение звуковой дорожки при появления определенного клиента, отправка на эл. почту письма например...

Link to comment
Share on other sites

  • 0

Если @Vyacheslav Anisimov не против, могу перенести тему в Развитие NDMS.

IMHO, это частный случай подписки на события прошивки. На все случаи жизни hook-скриптов не напасёшься.

 

Link to comment
Share on other sites

  • 0
В 09.07.2018 в 06:33, Vyacheslav Anisimov сказал:

Добрый день!

Подскажите пожалуйста, как реализовать сценарий. Хочется, к примеру, включать освещение частного дома, когда я подъезжаю к нему на машине.

Сотовый регистрируется в сети wi-fi, хочется по этому событию выполнять некий скрипт (проверка мак-адреса девайса, http-запрос к серверу умнодома)

Скрипт я способен написать сам, хочется понять, можно ли как-то сгенерировать его вызов по изменению состава wi-fi клиентов сети?

Желательно не путем вызова в кроне скрипта, сканирующего ARP, а именно событием.

Именно событием относительно устойчиво получалось желаемое на DHCP-сервере.

Link to comment
Share on other sites

  • 0
15 часов назад, Александр Рыжов сказал:

Именно событием относительно устойчиво получалось желаемое на DHCP-сервере.

Выглядит именно тем, что мне нужно.

15 часов назад, Александр Рыжов сказал:

IMHO, это частный случай подписки на события прошивки. На все случаи жизни hook-скриптов не напасёшься.

HTTP-подписка на события выглядит еще более "тем".

Обычно сервер умного дома - отдельный девайс. Тот же расбери, например. И если для получения таких событий не придется лезть в роутер и shell-скрипты писать - это будет сильно удобнее. Инсталляция упрощается у неподготовленных юзеров.

Link to comment
Share on other sites

  • 0
15 часов назад, Александр Рыжов сказал:

Если @Vyacheslav Anisimov не против, могу перенести тему в Развитие NDMS.

Так как выяснили, что такое сейчас неосуществимо, то конечно я не против переноса.

Очень надеюсь на появление такого функционала любым методом - или скриптами или подпиской.

Link to comment
Share on other sites

  • 0

Огромное спасибо! У меня честно говоря пропал энтузиазм после чтения документации )) Хоть я и оказался предельно удивлен быстрой скоростью внесений изменений в прошивку. Все времени не было такой скрипт написать сесть.

Еще один вопрос "для прошивок начиная с 2.13.A.3.0" что именно означает? Эта фича во всех альфах после этого? В бетах? Или в продакшене уже?

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...