• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
что Вы понимаете под "определить наличие телефона в сети"?
что значит "подключен к сети"?
И почему именно дома, а не на работе? В чем разница?
есть устройство на ардуине. оно должно работать, когда я дома, и не работать, когда меня дома нет. решил, что определять это надежнее всего по наличию подключения моего телефона к роутеру.
"подключен к сети" у меня - это подключен к сети роутера.
 
Сверху Снизу