• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Как сделать? Вытаскивать МАК адреса из DHCP пакетов

VIP_Graff

New member
Помогите реализовать идею. Я честно пытался сам получать гуляющие DHCP пакеты, но увы моя каша не работает. От слова совсем.

Цель:
При появлении телефона в сети, включать свет в подъезде.
Хотел реализовать это на ардуинке подключенной к локальной сети через езернет шилд W5100. Меня направили в сторону ESP8266.
Исполнительное устройство: свет на улице, телефон подключается к Wi-Fi немного раньше попадания в освещаемую зону.

Что имеем:
Телефон при обнаружении WiFi, подключается к сети. Получение IP адреса по DHCP.
Готовая библиотека получения DHCP адреса для W5100, но у меня не получается ее переделать в свою библиотеку, чтобы она принимала все DHCP пакеты и возвращала МАК адреса устройства.

Дополнительный аргумент в пользу парсинга МАКов, охранять безопасность сети.
По принципу как с работой RF приемником.

Чтобы можно было построить выражние типа:
PHP:
IF ResivedMAC == 112233445566 OR ResivedMAC == 998877665544 Then
  // включить свет;
ELSEIF ResivedMAC == 889977665544 Then
  // ничего не делать;
ELSE
  // бить тревогу, чужие в сети;
END;
Для новых заглянувщих в тему краткий FAQ идей по реализации:
  • 1. bluetooth и датчик движения - использовать не вариант, из-за большого расстояния, необходимое расстояние только Wi-Fi покрывает.
  • 2. задать статические адреса и постоянно пинговать - выглядит не совсем правильным, из-за постоянно гуляющих запросов, которые будут долбить пока устройство в сети (будет ли себя хорошо чувствовать устройство под постоянной атакой пинга, знаю что айфоны уходят в энергосбережение и не отвечают на пинг)
  • 3. Читал про приложение Tasker, но хотелось бы обойтись без задействования дополнительного ПО
  • 4. Дома используется 3G интернет, "снаружи" доступ отсутствует. Сервера дома - нету. Есть роутер с OpenWRT. Сервера с белым IP - нету.

Я рассматривал эти идеи до создании темы, но нету знаний в реализации задуманного:
  • 1. На роутере стоит OpenWRT. Знаю что можно спарсить оттуда МАК. Что бы роутер "скриптом проверял подключившихся" и передавал команды(или МАКи) на ардуину.
  • 2. Парсить МАКи из ARP пакетов, они то всегда ходят в сети. Но информацию для меня понятную, как это делать не нашел.
  • 3. Парсить МАКи из гуляющих DHCP запросов. Запросы в сети появляются когда устройство подключается или продлевает аренду (Что меня устраивает).
 

Victor

Administrator
Команда форума
На роутере стоит OpenWRT. Знаю что можно спарсить оттуда МАК. Что бы роутер "скриптом проверял подключившихся" и передавал команды(или МАКи) на ардуину
похоже, что это самый простой вариант:
в скрипте на OpenWRT сначала [inline]ping[/inline], чтобы обновить таблицу arp, затем [inline]arp | grep <PHONE-MAC>[/inline], а потом свет включайте через REST запрос на ESP8266 c OpenWRT
 

pvvx

Активный участник сообщества
Надо смотреть WiFi event(7): Probe Request (MAC:xx:xx:xx:xx:xx:xx, RSSI:-37) и телефон соединять с AP модуля не надо.
Как только телефон появится в зоне, если на нем включен WiFi, то на модуле появится (MAC:xx:xx:xx:xx:xx:xx, RSSI:-32) c указанием уровня сигнала.
В Web-свалке ведется лог Probe Request последних 64-х MAC с указанием минимального и максимального уровня приема. Это немного не подходит для алгоритма включения света при появлении в зоне телефонов, но просто исправляется на список по каким телефонным WiFi MAC включать свет :)
 
Последнее редактирование:

pvvx

Активный участник сообщества
А выключать как :)
По силе сигнала. Значит дошел до пункта назначения.
Можно вообще заранее всё узнать - уже давно все перемещения мобильников есть в базах и картах, но частично доступ к этим данным закрыт - не для всех...
 

VIP_Graff

New member
Вот оно. Спасибо. Прям вот то, что хотел и даже немного больше.
Включать по МАС и силе сигнала. Выключать по таймеру. Пропал МАС адрес из радиоэфира на час - приготовиться к следующему включению.
Естественно также необходимо знать уровень освещения. Но это уже другая история.
 
Сверху Снизу