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

Проверка наличия телефона в сети

WolfOfTambov

New member
Всем привет.
Имеется ардуино нано + esp-01, роутер и телефон.
Задача. С некоторой периодичностью определять присутствие телефона в сети.

Как вообще это можно сделать?
Первая идея пинговать телефон с есп через AT-команды провалилась, так как телефон перестает пинговаться через несколько минут после блокировки.
Нашел решение, где предлагают программировать саму есп. habr.com/ru/post/357916/
какие еще могут быть решения? может, вообще отказаться от арудино? правда, тогда придется взять другой модуль есп, у которого выходов побольше, т.к. четырех выходов есп-01 мне не хватит
 

WolfOfTambov

New member
Нашел решение, где предлагают программировать саму есп
то есть предлагают использовать список подключений к роутеру, но для меня пока проблема понимать предлагаемый код и в случае необходимости доделывать под себя.

в комментах предлагают код для работы с роутером, но это мне еще меньше понятно, чем код для есп home-assistant.io/components/#presence-detection

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

nikolz

Well-known member
Вроде все разжевано до мелочей. Остаётся только научиться понимать.
проблема глубже.
Остается только понять, что всему надо учиться.
и не методом тыка, а читая учебники по программированию и разбирая примеры.
Вот это и есть основная проблема .
-----------------------
"частое употребление халявы и просмотр телевизора полностью отключают мозги"
 

WolfOfTambov

New member
проблема глубже
чтение учебников и разбор примеров позволяют вам хотя бы в описательном виде предложить способы обнаружения телефона в сети?
если нет, то зачем вы пытаетесь поднять свое чсв? противоречие.
я не программист, у меня проблема с кодингом в ардуине и тем более я не умею в разметку xml, и я задаю вопрос в разделе для новичков. вот тут, кажется, нет противоречия
 

Сергей_Ф

Moderator
Команда форума
@WolfOfTambov вы уже нашли один из самых простых методов обнаружения телефона в сети. В статье он подробно описан для роутера dlink. Если это сложно для вас, то Гугл больше ничем не поможет. Выберите другой способ обнаружения человека в пространстве, в котором сможете разробраться. Или найдите программиста.
 

CodeNameHawk

Moderator
Команда форума
В общем случае, подключиться к роутеру и получить список подключенных устройств.
 

CodeNameHawk

Moderator
Команда форума
На есп установить веб клиента, зайти на адрес роутера со страницей подключенных устройств (скорее всего надо будет ввести пароль) и дальше разобрать полученный ответ.
 

WolfOfTambov

New member
может кто-то объяснить, куда в предложенном по ссылке коде вставлять логин и пароль для входа на роутер?
пароль, я так понимаю, здесь
Код:
  String data = "";
  data.concat(salt);
  // password
  data.concat("bingo_fff#xxx                                           ");
  data = md5(data);
а куда писать логин? и соль. почему в коде char salt[20] = "", а в примере var salt = 'a33403f9';
Код:
// salt
const char* patternSalt = "var salt = \"";
const int patternsaltLen = strlen(patternSalt);
int patternsaltPos = 0;
char salt[20] = "";
int saltLen = sizeof(salt);
int saltPos = 0;

// auth
const char* patternAuthID = "\"&auth_id=";
const int patternAuthIDLen = strlen(patternAuthID);
int patternAuthIDPos = 0;
char authID[20] = "";
int authIDLen = sizeof(authID);
int authIDPos = 0;
 

Алексей.

Active member
проблема глубже.
Остается только понять, что всему надо учиться.
и не методом тыка, а читая учебники по программированию и разбирая примеры.
Вот это и есть основная проблема .
-----------------------
"частое употребление халявы и просмотр телевизора полностью отключают мозги"
С пониманием как раз и неопределенность.
Совсем не понятно для чего запрашивать у роутера информацию о ip, который был когда то активен, для чего привязываться к конкретной модели роутера.
Практически на всех wifi роутерах, с которыми приходилось сталкиваться, есть возможность зарегистрировать (привязать) ip клиента по mac адресу.
Зная какой ip в сети нужно искать, на esp просто по ARP для заданного ip адреса разрешаем mac, устройства при получении адреса и так светят в сеть своими адресами используя gratuitous ARP, но устройство может покинуть сеть, принудительным запросом как раз и можем получить отклик от реального устройства.
 

nikolz

Well-known member
С пониманием как раз и неопределенность.
Совсем не понятно для чего запрашивать у роутера информацию о ip, который был когда то активен, для чего привязываться к конкретной модели роутера.
Практически на всех wifi роутерах, с которыми приходилось сталкиваться, есть возможность зарегистрировать (привязать) ip клиента по mac адресу.
Зная какой ip в сети нужно искать, на esp просто по ARP для заданного ip адреса разрешаем mac, устройства при получении адреса и так светят в сеть своими адресами используя gratuitous ARP, но устройство может покинуть сеть, принудительным запросом как раз и можем получить отклик от реального устройства.
кто вам это все сказал?
роутер любой
----------------------------
Ваша задача в начале темы не совсем корректна
телефон - это не wifi
да на телефоне можно поднять протокол wifi но тогда это не телефон а просто устройство с wifi в режиме либо AP либо STA
есп тоже устройство и тоже с этими режимами
а роутер это устройство с режимом лишь точки доступа
---------------------
если же телефон то это уже протокол ...G
А это уже совсем другое.
Поэтому попробуйте уточнить условие решаемой задачи - медленно и подробно.
и задайте конкретный вопрос по ESP.
Если у Вас вопросы общетеоретические, то ответы на них вы найдете в интернет.
Там все давно уже разжевано.
 

Алексей.

Active member
кто вам это все сказал?
роутер любой
ТС в первом посте говорит, что нашел решение и ссылается на статью на хабре, в которой у роутера д-линк запрашивается список wifi клиентов. В той же статье автор говорит, что запросы для получения списка клиентов у разных моделей роутеров могут отличаться. Видимо он не знал что роутер любой, это меня и удивило.
Если решили проверять наличие телефона в сети, то почему не используются средства для этого предназначенные, а используются запросы к третьему устройству, в данном случае к роутеру.
Чем не подходит ARP не понятно.
 

Сергей_Ф

Moderator
Команда форума
@Алексей. Вы правы, Алексей. Скорее всего подходит, но... Никого не хочу обидеть, но вы в разделе для начинающих. Тут никак не хотят понимать направления, тут нужен сам код на АрдуиноИДЕ. И желательно с пояснениями. Ну и привязка по ip-не совсем удобный способ, имхо.
 

Алексей.

Active member
Ну и привязка по ip-не совсем удобный способ, имхо.
Если не ip то что? Пока что то ничего не придумывается :)
Произвольное устройство в сети должно иметь только уникальный mac в рамках этой сети. Список ip адресов, которые светились в этой сети (отправляли gratuitous arp), на esp ограничен таблицей
static struct etharp_entry arp_table[ARP_TABLE_SIZE];
количество записей всего 10, если устройств много, в arp_table можно не обнаружить искомое устройство, кроме этого, если устройство уже выключено, запись в таблице говорит что устройство недавно было в сети.
Отправив принудительно arp запрос(ы) должны получить отклик от устройства, если оно в сети.
 

nikolz

Well-known member
ESP8266 это воще очень убогое устройство для работы в качестве точки доступа так как у него всегда одинаковый канал для приемника и передатчика. а также малый буфер для поддержания открытых каналов обмена.
Поэтому полагаю решать задачу универсально бесперспективно.
--------------------
Вариант конкретного решения может быть по схеме запрос-ответ по протоколу UDP. Быстро и экономно.
 

CodeNameHawk

Moderator
Команда форума
nikolz, Автор хочет определять наличие телефона дома, а сделать это проще всего, проверив подключен ли телефон к роутеру или нет.
 

nikolz

Well-known member
nikolz, Автор хочет определять наличие телефона дома, а сделать это проще всего, проверив подключен ли телефон к роутеру или нет.
что Вы понимаете под "определить наличие телефона в сети"?
что значит "подключен к сети"?
И почему именно дома, а не на работе? В чем разница?
 

WolfOfTambov

New member
что Вы понимаете под "определить наличие телефона в сети"?
что значит "подключен к сети"?
И почему именно дома, а не на работе? В чем разница?
есть устройство на ардуине. оно должно работать, когда я дома, и не работать, когда меня дома нет. решил, что определять это надежнее всего по наличию подключения моего телефона к роутеру.
"подключен к сети" у меня - это подключен к сети роутера.
 
Сверху Снизу