Блок для ESP8266, Связь с миром по MQTT.

Разработка блока MQTT. FLProg 3.1.2

Создаем свой блок. Вопросы, помощь знатоков.
User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

Блок для ESP8266, Связь с миром по MQTT.

#61

Сообщение User8 » 14.08.2018{, 19:05}

Golan писал(а):
14.08.2018{, 19:03}
А что он делает?
Это режим отправки последнего сообщения подписчику при подключении к брокеру.

Отправлено спустя 2 часа 4 минуты 55 секунд:
Anydy писал(а):
09.08.2018{, 17:14}
Проверьте, я пока что не могу проверить, позже проверю, на выходах должны появляться еденички при успешном подключении и 0 если нет ...
При отключении брокера, сигнал с выхода statMqtt не пропадает.

Аватара пользователя
pipapsix
Лейтенант
Сообщения: 436
Зарегистрирован: 25.10.2016{, 21:26}
Репутация: 15
Откуда: Волгоградская обл.
Имя: СашкаСаняАлександр

Блок для ESP8266, Связь с миром по MQTT.

#62

Сообщение pipapsix » 16.08.2018{, 09:58}

Привет всем/
Не могу вывести данные с esp на экран hd44780. есть решение??
на nextion идут, а на этот нет.

Аватара пользователя
pipapsix
Лейтенант
Сообщения: 436
Зарегистрирован: 25.10.2016{, 21:26}
Репутация: 15
Откуда: Волгоградская обл.
Имя: СашкаСаняАлександр

Блок для ESP8266, Связь с миром по MQTT.

#63

Сообщение pipapsix » 25.08.2018{, 13:03}

Добрый день. Вот что имеем.
Подключён экран нехтион выводится температура с есп , одновременно работает mqtt и передаёт данные, но при отключении брокера, данные на экран перестают идти, пока не включится брокер. Как то не правильно. Есть решение?

Anydy

Блок для ESP8266, Связь с миром по MQTT.

#64

Сообщение Anydy » 25.08.2018{, 18:06}

pipapsix писал(а):
25.08.2018{, 13:03}
при отключении брокера, данные на экран перестают идти, пока не включится брокер.
Все верно ...на данном этапе выполнение всей программы останавливается пока нет связи с брокером. Подумаю как переделать ...но по сути это пример блока, и каждый может его доработать под себя!

Аватара пользователя
pipapsix
Лейтенант
Сообщения: 436
Зарегистрирован: 25.10.2016{, 21:26}
Репутация: 15
Откуда: Волгоградская обл.
Имя: СашкаСаняАлександр

Блок для ESP8266, Связь с миром по MQTT.

#65

Сообщение pipapsix » 25.08.2018{, 20:25}

Anydy писал(а):
25.08.2018{, 18:06}
Все верно ...на данном этапе выполнение всей программы останавливается пока нет связи с брокером. Подумаю как переделать ...но по сути это пример блока, и каждый может его доработать под себя!
Может доделать под себя не в моем случае,ну не дано мне это.
Просто собираю автоматику для инкубатора и вдруг она отключится, хана яйцу.

Anydy

Блок для ESP8266, Связь с миром по MQTT.

#66

Сообщение Anydy » 25.08.2018{, 20:36}

да, я понимаю....не спроста блок в теме "разработка ПБ" ...обязательно сделаю так чтобы связь с брокером или WIFI (GSM) никак не влияла на работу основной программы.

Отправлено спустя 22 минуты 16 секунд:
Подумал немного....тут в любом случае придется прерывать основную программу на время которое нужно для попытки соединения с брокером или сетью....например раз в пять минут на 30 секунд управление передается функции переподключения...
Если устроит такой вариант то это можно сделать.
Так что для надежности придется использовать одну ардуино как связь с MQTT, а другую как основной контроллер.
Может ошибаюсь...знающие люди поправьте ....

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

Блок для ESP8266, Связь с миром по MQTT.

#67

Сообщение User8 » 28.08.2018{, 22:13}

Переделал блок по человечески:
1. Убрал все, что касается wifi. Т.к. wifi теперь можно настраивать в самой flprog.
2. Убрал остановку основного цикла, когда брокер недоступен. Теперь по идее контроллер выполняет основной цикл, даже когда mqtt брокер недоступен.
3. Добавлен нормально работающий выход, на котором будет единица, когда mqtt подключен к брокеру. Он пригодится вместо qos, для отсылки данных сразу после подключения к брокеру, т.к qos лучше не использовать, дабы не забивать память esp.
Вложения
MQTT_ESP_Main_3_0_(CODE).ubi
(245.74 КБ) 102 скачивания

Аватара пользователя
Amator
Рядовой
Сообщения: 23
Зарегистрирован: 11.12.2015{, 12:32}
Репутация: 0
Откуда: Украина г.Краматорск

Блок для ESP8266, Связь с миром по MQTT.

#68

Сообщение Amator » 29.08.2018{, 13:18}

Вы слышали про сервис Cayenne, очень классный и бесплатный, кто может сделать по него блоки, я буду очень признателен
Вот ссылка на обзор
https://mydevices.com/cayenne/features/
И ссылка на приложение https://play.google.com/store/apps/deta ... -mydevices

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для ESP8266, Связь с миром по MQTT.

#69

Сообщение starshoy81 » 29.08.2018{, 21:55}

User8 писал(а):
28.08.2018{, 22:13}
3. Добавлен нормально работающий выход, на котором будет единица, когда mqtt подключен к брокеру. Он пригодится вместо qos, для отсылки данных сразу после подключения к брокеру, т.к qos лучше не использовать, дабы не забивать память esp.
Вместо qos он не пригодится, т.к. qos нужен для контроля доставки сообщений, а не соединения с брокером. Поэтому, кому нужен qos, думайте как его прикрутить.

Вот из документации на москитто https://mosquitto.org/man/mqtt-7.html

Качество обслуживания
MQTT определяет три уровня качества обслуживания (QoS). QoS определяет, насколько сложно брокер / клиент попытается обеспечить получение сообщения. Сообщения могут быть отправлены на любом уровне QoS, и клиенты могут попытаться подписаться на темы на любом уровне QoS. Это означает, что клиент выбирает максимальное QoS, которое он получит. Например, если сообщение опубликовано в QoS 2, и клиент подписывается на QoS 0, сообщение будет доставлено этому клиенту с QoS 0. Если второй клиент также подписан на одну и ту же тему, но с QoS 2, то он получит одно и то же сообщение, но с QoS 2. Для второго примера, если клиент подписан QoS 2 и сообщение опубликовано в QoS 0, клиент получит его на QoS 0.

Более высокие уровни QoS более надежны, но связаны с более высокой задержкой и имеют более высокие требования к пропускной способности.

0: Брокер / клиент отправит сообщение один раз, без подтверждения.

1: Брокер / клиент доставляет сообщение хотя бы один раз, при этом требуется подтверждение.

2: Брокер / клиент отправит сообщение ровно один раз, используя четырехступенчатое подтверждение.

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

Блок для ESP8266, Связь с миром по MQTT.

#70

Сообщение User8 » 29.08.2018{, 22:10}

starshoy81 писал(а):
29.08.2018{, 21:55}
Вместо qos он не пригодится, т.к. qos нужен для контроля доставки сообщений
Я знаком с qos, автор библиотеки не советует использовать qos. Если есть связь с брокером, то сообщение доставится т.к. используется tcp. Если брокер отключен, а в это время отправить сообщение, то оно не доставится, но с помощью выхода блока коннекта к брокеру можно отправлять только когда коннект есть, в таком случае qos не нужен.

Аватара пользователя
ivanpost
Сержант
Сообщения: 140
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Блок для ESP8266, Связь с миром по MQTT.

#71

Сообщение ivanpost » 29.08.2018{, 22:20}

User8, Что за константа clientld ?
Хоть по минимуму комменты в блоке пишите пжлст! :smile38: Я правда сам этим страдаю...
Но гадать - чижило!

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для ESP8266, Связь с миром по MQTT.

#72

Сообщение starshoy81 » 29.08.2018{, 22:21}

Anydy писал(а):
25.08.2018{, 20:58}
Подумал немного....тут в любом случае придется прерывать основную программу на время которое нужно для попытки соединения с брокером или сетью....например раз в пять минут на 30 секунд управление передается функции переподключения...
Если устроит такой вариант то это можно сделать.
Так что для надежности придется использовать одну ардуино как связь с MQTT, а другую как основной контроллер.
Может ошибаюсь...знающие люди поправьте ....
Есп всегда переключается на обработку вифи подключения при проблемах со связью, приостанавливая цикл выполнения загруженного кода.

Аватара пользователя
ivanpost
Сержант
Сообщения: 140
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Блок для ESP8266, Связь с миром по MQTT.

#73

Сообщение ivanpost » 29.08.2018{, 22:29}

starshoy81, Ого? Что значит всегда? Или только для этих блоков? Это откуда информация? Нам просто неприемлемо так... Милисекундные процессы.

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для ESP8266, Связь с миром по MQTT.

#74

Сообщение starshoy81 » 29.08.2018{, 22:35}

User8 писал(а):
29.08.2018{, 22:10}
. Если есть связь с брокером, то сообщение доставится
Брокеру доставится, а подписчику не факт. Для этого и выставляют qos, чтобы подписчик гарантировано получил сообщение.

CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Блок для ESP8266, Связь с миром по MQTT.

#75

Сообщение CraCk » 29.08.2018{, 22:46}

ivanpost писал(а):
29.08.2018{, 22:29}
Ого? Что значит всегда? Или только для этих блоков? Это откуда информация? Нам просто неприемлемо так... Милисекундные процессы.
Я тоже где то на сайте esp8266.ru читал про то что у этих модулей есть такой недостаток. Если использовать как простой датчик температуры то сойдет, а если esp8266 используется для управление чем нибудь то такой вариант не приемлем, пропал wifi зависло управление устройством. Сам не проверял такое. Очень не хватает времени.

Наcчет qos. Обязательно нужен. qos на esp-link точно работает,проверял. Происходит доставка сообщений после воcстановления связи с MQTT.

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

Блок для ESP8266, Связь с миром по MQTT.

#76

Сообщение Golan » 29.08.2018{, 22:54}

CraCk писал(а):
29.08.2018{, 22:46}
пропал wifi зависло управление устройством.
Поддерживаю, только после восстановления связи устройство дорабатывает то что было послано, проверял на серводвижке
Добро не ценится в современном мире, люди от него наглеют!

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

Блок для ESP8266, Связь с миром по MQTT.

#77

Сообщение User8 » 29.08.2018{, 23:01}

ivanpost писал(а):
29.08.2018{, 22:20}
Что за константа clientld?
Это id клиента который видит брокер, подробнее надо спросить у автора темы, это он добавил.
starshoy81 писал(а):
29.08.2018{, 22:35}
Брокеру доставится, а подписчику не факт.
Используя режим retain на блоке публикации, все подписчики получат последнее сообщение при подключении к брокеру.

Отправлено спустя 1 минуту 30 секунд:
Golan писал(а):
29.08.2018{, 22:54}
только после восстановления связи устройство дорабатывает то что было послано
Нужно проверить с последний версией блока, по идее не должен основной цикл останавливаться.

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для ESP8266, Связь с миром по MQTT.

#78

Сообщение starshoy81 » 29.08.2018{, 23:30}

User8 писал(а):
29.08.2018{, 23:03}
Используя режим retain на блоке публикации, все подписчики получат последнее сообщение при подключении к брокеру.
И каждый раз при подключении они будут получать именно это последнее подписанное retain сообщение, а оно может уже измениться у публикатора, но есп отвалилась от роутера и ничего нового не передала. А вы думаете, что всё в порядке - "вот же сообщение в клиенте, что температура 25*" Ретайн так не используют, он для другого предназначен, к тому же большое количество сохранённых сообщений забивает память брокера, что черевато его killом например, на опенврт.

Вот ещё из доков:
Сохраненные сообщения
Все сообщения могут быть сохранены. Это означает, что брокер будет поддерживать сообщение даже после отправки его всем текущим подписчикам. Если будет произведена новая подписка, соответствующая теме сохраненного сообщения, сообщение будет отправлено клиенту. Это полезно как «последний известный хороший» механизм. Если тема обновляется нечасто, то без сохраненного сообщения недавно подписанному клиенту может потребоваться много времени для получения обновления. При сохраненном сообщении клиент получит мгновенное обновление.
ivanpost писал(а):
29.08.2018{, 22:29}
Ого? Что значит всегда? Или только для этих блоков? Это откуда информация? Нам просто неприемлемо так... Милисекундные процессы.
вот с форума 8266 цитата:
Так-же при потере связи на пару секунд, если включена шифрация (WPA и т.д.), то модуль отваливается от AP, но сам об этом не знает. Модуль соображает о потере связи в режиме с ключами WPA и т.д. только если произошла явная потеря сигналов beacon (REASON_BEACON_TIMEOUT) на время более 5 сек. Если менее - то получаем глюко модуль, считающий что он соединен с AP, но сессионный ключ может быть утерян и новой синхронизации не происходит. Так-же есть ещё китай-глюкодром связанный с разными типами шифрации, при их переключении. В итоге ESP8266 на сегодня использовать вообще никак - гарантия что он работает менее 10%. :) Только под строжайшим контролем над ним с молотком... Это итог писанины китайцами закрытого SDK в течении года.

Аватара пользователя
ivanpost
Сержант
Сообщения: 140
Зарегистрирован: 24.09.2016{, 22:26}
Репутация: 4
Откуда: Тольятти
Имя: Иван
Контактная информация:

Блок для ESP8266, Связь с миром по MQTT.

#79

Сообщение ivanpost » 29.08.2018{, 23:44}

starshoy81, Да, я это почитываю. Но это довольно старое сообщение. С тех пор были новые sdk. Правда глючки на связи все равно видны... Но не думал что это сказывается на loop...
Avr ки отлично работают на процессах, где критично 0,10-0,20 сек у меня. Где результат сбоя сразу виден и восстановим только вручную... Как же есп? Все таки оставлять его только на коммуникациях?

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок для ESP8266, Связь с миром по MQTT.

#80

Сообщение starshoy81 » 29.08.2018{, 23:45}

ivanpost, и ещё - после deepsleep есп полностью перезагружается, что занимает примерно 5 сек, в этот момент она ничего кроме загрузки и вифи не делает.

Ответить

Вернуться в «Разработка пользовательских блоков»