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

Вопрос Коммуникация между двумя esp8266

Pavlo

New member
Кто подскажет, как лучше напрямую наладить коммуникацию между двумя eps8266 ?
WebSocket - тут нужно, чтобы один модуль выступал сервером, второй выступал клиентом.
А есть что-то, где оба модуля могут напрямую отсылать друг-другу сигнал?
Желательно "мгновенно" и в обе стороны. Т.е. модуль "А" шлет сигнал модулю "Б" и наоборот.

Где и что смотреть?

p.s. тут вроде бы есть какие то старые темы, но там народ друг-другу не отвечает.
 

Pavlo

New member
Собственно задача такая:
Есть 2 выключателя света в разных частях комнаты и одна лампочка.
Если есть соединение с wlan - там все нормально, они могут синхронно включаться по mqtt.

Вроде затея и так понятна, но я всеравно опишу:
- первый выключатель включается/выключается человеком и шлет свое новое состояние mqtt-брокеру.
- второй выключатель подписан на тот-же топик. Соотвественно получает "новое состояние" от брокера и тоже соответственно включается/выключается.

А... если соединение с брокером теряется (бывает иногда), то модули дожны друг-другу слать сигнал напрямую.
Вот и возникает вопрос - насколько быстро один модуль может соедениться с другим в случае, если обнаружена потеря связи с mqtt-брокером?

Думал реализовать такой алгоритм:
1. если есть соединение с mqtt-брокером, то как бы все в порядке.
2. если связь потерялась, модули начинают пытаться соедениться напрямую, чтобы синхронизировать свое текущее состояние.
3. после синхронизации состояния, оба модуля пытаются восстановить соединение с mqtt-брокером.
4. если получилось - см. шаг 1.
5. если не получилось - см. шаг 2.

Сложность тут в том. что попытка подключиться к wlan и mqtt-брокером занимает несколько драгоценных секунд.
Задержка не страшна, если человек выключает свет, т.к. "разрыв" цепи даже в одном месте погасит лампочку.
А вот для влюкчения света, нужно, чтобы были влючены оба выключателя (оба модуля).
И тут задержка при включении света человеком, уже будет раздражать.
 

Pavlo

New member
Если есть другой опыт - кидайте сюда. Буду крайне благодарен.

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

CodeNameHawk

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

Pavlo

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

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

=AK=

New member
Вроде затея и так понятна, но я всеравно опишу:
- первый выключатель включается/выключается человеком и шлет свое новое состояние mqtt-брокеру.
- второй выключатель подписан на тот-же топик. Соотвественно получает "новое состояние" от брокера и тоже соответственно включается/выключается.

А... если соединение с брокером теряется (бывает иногда), то модули дожны друг-другу слать сигнал напрямую.
Вот и возникает вопрос - насколько быстро один модуль может соедениться с другим в случае, если обнаружена потеря связи с mqtt-брокером?
А зачем им соединяться? Это лишнее. Пусть каждый из них, помимо отсылки сообщения в MQTT, бродкастит в локальную сеть сообщение по UDP в какой-то порт. В этом сообщении пусть расписывает состояние лампочки. Одновременно пусть оба слушают этот порт. Один отправил сообщение - другой услышал бродкаст и синxронизировал состояние. И никакй MQTT в этом участия не принимает.
 

Сергей_Ф

Moderator
Команда форума
Esp-выключатель может замкнуть только одну цепь.
Т.е. он не может в "выключеном" состоянии замкнуть другую цепь.
Что вы хотели этим сказать? Что esp будет включать лампочку непосредственно сам? Вроде как без реле он это сделать не сможет. А у реле могут быть как нормально разомкнутые, так и нормально замкнутые контакты. Вот их и нужно скоммутировать как проходной выключатель. В этом случае им не нужно знать в каком состоянии другой esp, а просто включать и выключать реле.
 

Алексей.

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

CodeNameHawk

Moderator
Команда форума
Если делать "правильно", то связь между есп понадобиться, для того, чтобы когда лампочка выключена, выключить первое и второе реле, чтобы току меньше кушало.
Но это можно сделать при восстановлении интернета.
 

Алексей.

Active member
Если делать "правильно", то связь между есп понадобиться, для того, чтобы когда лампочка выключена, выключить первое и второе реле, чтобы току меньше кушало.
Вы считаете правильно если, два модуля могут взаимодействовать, то каждому нужно поставить реле?
Поставить реле одному, чтоб сам его включал/выключал по получению состояния физического выключателя и включал/выключал по получению изменения состояния другого выключателя, которое получено от другого есп - не правильно?
 

Pavlo

New member
Что вы хотели этим сказать? Что esp будет включать лампочку непосредственно сам? Вроде как без реле он это сделать не сможет. А у реле могут быть как нормально разомкнутые, так и нормально замкнутые контакты. Вот их и нужно скоммутировать как проходной выключатель. В этом случае им не нужно знать в каком состоянии другой esp, а просто включать и выключать реле.
Нет-нет, конечно esp-шка с реле.
Я даже больше скажу (я поклонник Sonoff) - речь идет об Sonoff-Touch выключателях.

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

CodeNameHawk

Moderator
Команда форума
Вы считаете правильно если, два модуля могут взаимодействовать, то каждому нужно поставить реле?
Поставить реле одному, чтоб сам его включал/выключал по получению состояния физического выключателя и включал/выключал по получению изменения состояния другого выключателя, которое получено от другого есп - не правильно?
Просто ТС желает моментальную реакцию на включение, чего не обеспечить во время установления связи.
 

Pavlo

New member
Вы считаете правильно если, два модуля могут взаимодействовать, то каждому нужно поставить реле?
Поставить реле одному, чтоб сам его включал/выключал по получению состояния физического выключателя и включал/выключал по получению изменения состояния другого выключателя, которое получено от другого есп - не правильно?
Интересно.
Т.е. в самом-самом плохом случае (если потеряется связь с wlan или mqtt-брокером) получим "временно не рабочий" один выключатель. В то время, как второй будет срабатывать всегда, независимо от наличия связи.
С таким можно "мириться"...
 

CodeNameHawk

Moderator
Команда форума
С таким можно "мириться"...
До поры до времени, пока в темноте со ступенек не скатишься. Некоторые роутеры теряют связь с есп, если сильно загружены.
Автор не очень конкретно описал задачу.
Если стоят проводные выключатели, то достаточно одного есп для отчетности на сайт.
Если делать беспроводную систему управления, то на однoй есп запустите STA+AP,
а второй (и если надо третьей есп (в системе, где от лампочки нет провода к выключателю)) подключитесь к первой. Вторая и третья есп не будyт подключаться к роутеру, будет постоянная связь с первой есп, которая управляет лампочкой, если эфир чистый, должно работать без задержек.
 
Последнее редактирование:

Алексей.

Active member
Т.е. в самом-самом плохом случае (если потеряется связь с wlan или mqtt-брокером) получим "временно не рабочий" один выключатель
Доступ к mqtt есть только у одной есп и она же включает/выключает реле (и смотрит ещё на свой выключатель), другая же сообщает ей что выключатель изменил своё положение, ей (другой) mqtt не нужен. Отключили и-нет, две есп и без него дружат. Чего усложнять то.
 

Pavlo

New member
Если делать беспроводную систему управления, то на однoй есп запустите STA+AP,
а второй (и если надо третьей есп (в системе, где от лампочки нет провода к выключателю)) подключитесь к первой. Вторая и третья есп не будyт подключаться к роутеру, будет постоянная связь с первой есп, которая управляет лампочкой, если эфир чистый, должно работать без задержек.
Есть 2 механических выключателя и одна лампочка. Надо механику на Sonoff-Touch поменять.
Все четко. ;)

Я еще не смотрел, что такое STA+AP, но такой вопрос: первая esp, которая к wlan подключена, разве сможет со второй eps общаться, которая к wlan не подключена?
Я могу ошибаться, но вроде бы, esp-шки могут только один канал связи поддерживать.
Т.е. или wlan, или связь друг-с-другом.
Или я ошибаюсь?
 

Сергей_Ф

Moderator
Команда форума
что мне не нравится в такой схеме, так это то, что реализация проходной схемы неминуемо приведет когда-то к ситуации, когда для того, чтобы выключить свет, нужно будет, чтобы одно реле было под напряжением.
интересно, а зачем вам ВЫКЛЮЧАТЬ свет, если esp без напряжения? Вроде это подразумевает, что в доме отключено электричество :)
 
Сверху Снизу