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

Как проверить доступна ли точка доступа?

Gdalex

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

aZholtikov

Active member
К сожалению слова отдельно понимаю, но общий смысл не улавливаю. Если Вы напишите код, который сможет в "автомате" менять канал для всех ESP-NOW устройств в сети, когда меняется основной канал WiFi, то Вам поставят памятник! Сообщество ESP-NOW бьется над этим годами... Но всегда есть место гению...
 

aZholtikov

Active member
Ради предотвращения флуда ознакомьтесь на GitHub с моими наработками по ESP-NOW. В части ESP-NOW Mesh сети особенно. Лучшего за 5 лет никто не предложил (вернее я не видел ничего кроме Paintless mesh для Arduino)...
 

Gdalex

New member
Ради предотвращения флуда ознакомьтесь на GitHub с моими наработками по ESP-NOW. В части ESP-NOW Mesh сети особенно. Лучшего за 5 лет никто не предложил (вернее я не видел ничего кроме Paintless mesh для Arduino)...
Я первым делом это сделал! Тут согласен, это пока лучшее из всего, что мне попадалось. (y)
 

Gdalex

New member
К сожалению слова отдельно понимаю, но общий смысл не улавливаю. Если Вы напишите код, который сможет в "автомате" менять канал для всех ESP-NOW устройств в сети, когда меняется основной канал WiFi, то Вам поставят памятник! Сообщество ESP-NOW бьется над этим годами... Но всегда есть место гению...
Поясню свою идею.
Есть головное устройство, которое использует и ESP-NOW для связи с выносными датчиками, и имеет свой WEB-сервер для настроек и отображения текущих параметров. Подключается к WiFi-роутеру для "сношений" с внешним миром.
Есть выносные устройства двух типов: чисто датчик без органов управления и выносной пульт управления с LCD-экраном и кнопками (частично дублирует функции WEB-сервера головного устройства). Связи с внешним миром не имеют, только с головным устройством по ESP-NOW.
Мои измышления (а-ля фантазии) таковы:
1. Головное устройство подключается к роутеру WiFi, получает IP-адрес, знает канал. Инициализирует связь по ESP-NOW с выносными устройствами на полученном канале.
2. Выносные устройства при включении сканируют сеть, находят нужный SSID, узнают его канал, инициируют связь с головным устройством с полученным каналом.
Если смена канала произошла в процессе работы устройств, то тут два варианта:
1. Отлавливать событие DISCONNECT на головном устройстве, послать всем выносным устройством команду, что связь оборвалась. Если роутер просто поменял канал, то при установленном признаке AutoReconnect головное получит новый канал, а выносные отработают сценарий включения с пересканом сетей и получением нового канала.
2. Время от времени проводить повторное сканирование сетей. Но, мне этот вариант не очень нравится.
 
Решений в сети существует 3 ( за 6 лет работы с ESP-NOW больше не нашел).
А вот ещё такое решение, описанное тут: https://randomnerdtutorials.com/esp-now-auto-pairing-esp32-esp8266/
Есть главное устройство, подключённое к интернету через wifi, шлёт данные с датчиков по mqtt. К нему подключаются датчики по esp-now на 1 канале, если не успешно - тогда шлют запросы на всех каналах поочередно и ждут ответа, на каком канале главный ответил, тот устанавливают у себя. Так и связываются. У меня так датчики протечки работают 2 года уже(на аккумуляторах из старой батареи от ноута, ещё не заряжал за это время, это для pvvx;)), канал на роутере автоматически меняется, датчики ищут новый канал и переподключаются, проблем ещё не было.
 

max256

New member
К нему подключаются датчики по esp-now на 1 канале, если не успешно - тогда шлют запросы на всех каналах поочередно и ждут ответа, на каком канале главный ответил, тот устанавливают у себя.
ещё если отправитель в зоне доступа роутера или у принимающего активна точка доступа, можно ориентируясь на одного из них и определить канал через WiFi.scanNetworks.
 

max256

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

max256

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

Ну может вы и правы, я в итоге отказался от esp now ибо esp8266 и esp32 не хотят работать, если esp32 в режиме STA, только точка доступа или комбинированный, а это лишние затраты. В итоге просто esp8266 подключается к роутеру и шлет esp32 udp пакет. Вообще не экономно, но дома могу себе позволить заряжать 18650 у esp8266.
 
Я уже точно не помню цифры, но когда тестировал была цель чтобы от дохлого аккумулятора поработал датчик не менее года. Со всеми вводными вариант с WiFi.scanNetworks не попадал в этот ограничение. Перебор каналов происходит намного быстрее и ощутимо меньше "жрёт".
 
esp8266 и esp32 не хотят работать, если esp32 в режиме STA, только точка доступа или комбинированный, а это лишние затраты.
Это наверное в esp8266 такое ограничение? Потому что между esp32c3 всё отправляется в режиме STA.
Даже в API это написано:
You can send ESP-NOW data via both the Station and the SoftAP interface. Make sure that the interface is enabled before sending ESP-NOW data.
А с 8266 там если не ошибаюсь с MACами какая то заморочка была, в режиме STA и AP они разные вроде, чтобы в STA работало надо от последнего поля MAC при отправке отнимать или добавлять единицу. Кажется так.
 

aZholtikov

Active member
А вот ещё такое решение, описанное тут: https://randomnerdtutorials.com/esp-now-auto-pairing-esp32-esp8266/
Есть главное устройство, подключённое к интернету через wifi, шлёт данные с датчиков по mqtt. К нему подключаются датчики по esp-now на 1 канале, если не успешно - тогда шлют запросы на всех каналах поочередно и ждут ответа, на каком канале главный ответил, тот устанавливают у себя. Так и связываются. У меня так датчики протечки работают 2 года уже(на аккумуляторах из старой батареи от ноута, ещё не заряжал за это время, это для pvvx;)), канал на роутере автоматически меняется, датчики ищут новый канал и переподключаются, проблем ещё не было.
Если использовать датчик на батарейках AAA, такое решение не подходит. Быстро садятся. Как пример у меня есть есть датчик двери/окна на герконе. Сработал, "плюнул в эфир на канале по умолчанию", уснул. Статистически от 2х ААА примерно 1000 срабатываний. Если бы он сканировал эфир перед отправкой он бы "умер" через неделю.
 

aZholtikov

Active member
Это наверное в esp8266 такое ограничение? Потому что между esp32c3 всё отправляется в режиме STA.
Даже в API это написано:
You can send ESP-NOW data via both the Station and the SoftAP interface. Make sure that the interface is enabled before sending ESP-NOW data.
А с 8266 там если не ошибаюсь с MACами какая то заморочка была, в режиме STA и AP они разные вроде, чтобы в STA работало надо от последнего поля MAC при отправке отнимать или добавлять единицу. Кажется так.
Это не ограничения, это некоторая "непрямота" рук... :)
 

aZholtikov

Active member
Поясню свою идею.
Есть головное устройство, которое использует и ESP-NOW для связи с выносными датчиками, и имеет свой WEB-сервер для настроек и отображения текущих параметров. Подключается к WiFi-роутеру для "сношений" с внешним миром.
Есть выносные устройства двух типов: чисто датчик без органов управления и выносной пульт управления с LCD-экраном и кнопками (частично дублирует функции WEB-сервера головного устройства). Связи с внешним миром не имеют, только с головным устройством по ESP-NOW.
Мои измышления (а-ля фантазии) таковы:
1. Головное устройство подключается к роутеру WiFi, получает IP-адрес, знает канал. Инициализирует связь по ESP-NOW с выносными устройствами на полученном канале.
2. Выносные устройства при включении сканируют сеть, находят нужный SSID, узнают его канал, инициируют связь с головным устройством с полученным каналом.
Если смена канала произошла в процессе работы устройств, то тут два варианта:
1. Отлавливать событие DISCONNECT на головном устройстве, послать всем выносным устройством команду, что связь оборвалась. Если роутер просто поменял канал, то при установленном признаке AutoReconnect головное получит новый канал, а выносные отработают сценарий включения с пересканом сетей и получением нового канала.
2. Время от времени проводить повторное сканирование сетей. Но, мне этот вариант не очень нравится.
Если питание от сети, то такое возможно. При батарейном не получится.
+ Это опять же будет работать только если устройства в "прямой" видимости от головного...
Как это должно работать, если к примеру сеть Mesh, от датчика до шлюза "5 концов"... Как при таком решении сеть выстроит маршрут на нужном канале для передачи данных от устройства шлюзу? Сколько устройство будет ожидать построения маршрута / переключения всех промежуточных устройств на нужный канал? А если устройство на батарейках? А если в процессе построения маршрута промежуточному узлу придется переключиться на другой канал для "участия" в маршруте другого узла??? Как выстраивать приоритеты?
Слишком много "если"...
Канал ESP-NOW (особенно в Mesh сети) должен быть фиксированным.
 

aZholtikov

Active member
Есть головное устройство, которое использует и ESP-NOW для связи с выносными датчиками, и имеет свой WEB-сервер для настроек и отображения текущих параметров. Подключается к WiFi-роутеру для "сношений" с внешним миром.
Есть выносные устройства двух типов: чисто датчик без органов управления и выносной пульт управления с LCD-экраном и кнопками (частично дублирует функции WEB-сервера головного устройства). Связи с внешним миром не имеют, только с головным устройством по ESP-NOW.
Не поверите, но именно это у меня и реализовано.
Шлюз ESP-NOW - MQTT (через) LAN. Настройка и управление через HA.
Куча датчиков на батарейках и выключатели/лампочки/и тд от сети.
Отдельное устройство с сенсорным экраном для основных манипуляций (общий статус, статус света, дверей, протечек и тд)... Информационная панель так сказать... Встроена в прихожей в зеркало... :)
 
Сверху Снизу