Странное поведение MQTT

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Fav0rit
Сообщения: 60
Зарегистрирован: Чт мар 19, 2015 10:27 pm
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Странное поведение MQTT

Сообщение Fav0rit » Ср фев 15, 2017 10:08 pm

Всем доброго дня.

В последнее время на своей Raspberry pi 3 заметил парочку странных вещей с MQTT, дело в том, что в своей доме я достаточно активно использую устройства на этом протоколе обмена, но странности в работе именно с MajorDoMo.
В логах можно видеть такие строчки, то есть таймаут соединения, ошибка сокета и реконнект.
СпойлерПоказать
1487183913: Client MDMClient has exceeded timeout, disconnecting.
1487183913: Socket error on client MDMClient, disconnecting.
1487183913: New connection from 127.0.0.1 on port 1883.
1487183913: Client MDMClient disconnected.
1487183913: New client connected from 127.0.0.1 as MDMClient (c0, k10).
1487183913: Sending CONNACK to MDMClient (0, 0)
1487183913: Received SUBSCRIBE from MDMClient
На данный момент на RPi в качестве MQTT брокера стоит mosquitto версии 1.4.10-0 версия протокола MQTT v3.1
Возможно, на более старших версиях mosquitto проблема не проявлялась, но точно сказать не могу.
Это первое.

Второе, если клиент публикует в MQTT не значение, а, например, слово "OPEN" или "CLOSE" или любое другое, и мы привязываем его к свойству объекта - часто рушится сервис websockets, возможно и mqtt. Перезапуск websockets помогает до следующего нового текстового значения.

Вообще, не знаю как у всех, у меня вебсокеты начинают тормозить к вечеру, то есть часто, приходя с работы и кликая по элементу управления, я начинаю наблюдать серьезные задержки в исполнении команд, перезапуск websockets помогает решить проблему.

Конфиг mosquitto, кому интересно. Фактически дефолтный с чуть более подробными логами:
СпойлерПоказать
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log
log_facility 5
log_type debug
log_type error
log_type warning
log_type notice
#log_type information

include_dir /etc/mosquitto/conf.d
WZV
Сообщения: 3
Зарегистрирован: Пт фев 17, 2017 6:01 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Странное поведение MQTT

Сообщение WZV » Пт фев 17, 2017 6:12 pm

Подскажите, что может быть? Проект: FLProg версия 2.3.1+ардуина 2560 и шилд w5100+ Majordomo на Raspberry PI 2. В скетче кнопка,реле. Поставил на ноутбук Mosquitto, MQTTlens прописал в скетче IP адрес ноутбука всё работает. Как только вставляю в скетч IP адрес Majordomo на Raspberry PI 2, ардуина виснет. Если в скетче оставить IP адрес ноутбука,а в Majordomo прописать IP адрес ноутбука где стоит брокер Mosquitto, то в Majordomo приходит сигнал. Проверяю Raspberry PI 2 стоит брокер Mosquitto, запущен, обновлен.
Вложения
s6393493.jpg
s6393493.jpg (51.5 КБ) 8156 просмотров
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Странное поведение MQTT

Сообщение DimSun75 » Пт фев 17, 2017 8:09 pm

WZV писал(а):Подскажите, что может быть? Проект: FLProg версия 2.3.1+ардуина 2560 и шилд w5100+ Majordomo на Raspberry PI 2. В скетче кнопка,реле. Поставил на ноутбук Mosquitto, MQTTlens прописал в скетче IP адрес ноутбука всё работает. Как только вставляю в скетч IP адрес Majordomo на Raspberry PI 2, ардуина виснет. Если в скетче оставить IP адрес ноутбука,а в Majordomo прописать IP адрес ноутбука где стоит брокер Mosquitto, то в Majordomo приходит сигнал. Проверяю Raspberry PI 2 стоит брокер Mosquitto, запущен, обновлен.
Хорошо бы весь скетч сюда.
WZV
Сообщения: 3
Зарегистрирован: Пт фев 17, 2017 6:01 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Странное поведение MQTT

Сообщение WZV » Сб фев 18, 2017 3:21 pm

Вот скетч.
Вложения
скетч.txt
(8.09 КБ) 734 скачивания
DimSun75
Сообщения: 318
Зарегистрирован: Вс янв 01, 2017 8:32 pm
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 44 раза

Re: Странное поведение MQTT

Сообщение DimSun75 » Сб фев 18, 2017 5:49 pm

С телефона трудно смотреть. Навскидку проблем не увидел. Разве что странный адрес dns. Универсальный совет: надо понять в каком месте ардуинка виснет. Расставить в коде вывод в терминал (да хоть циферки 1, 2, 3... и т.д.) и смотреть куда дошли, а куда нет

Отправлено с моего SM-G850F через Tapatalk
WZV
Сообщения: 3
Зарегистрирован: Пт фев 17, 2017 6:01 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Странное поведение MQTT

Сообщение WZV » Вс фев 19, 2017 10:21 am

Удалил Mosquitto с Raspberry PI 2, ардуина перестала виснуть. Скорей всего дело в брокере Mosquitto на Raspberry PI 2. Он вообще же не настраивается? Может не в ту директорию устанавливается?
voronrom
Сообщения: 25
Зарегистрирован: Вс мар 25, 2018 5:08 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Странное поведение MQTT

Сообщение voronrom » Вт апр 10, 2018 8:12 pm

Всем привет! :).
Нашел какую-то странную особенность поведения MajorDomo и MQTT брокера. Я только недавно стал знакомиться с MD по этому сильно не бейте, может укажите в чем мой касяк.
И так, в своем проекте стараюсь использовать для подключения разного рода датчиков (Ардуиновских) протокол MQTT ну и Ардуино + ESP. Сама инсталляция MD из готового образа для малинки «v3_31i_rus.img», MQTT брокер mosquito. Обнаружил следующее, если к примеру в моем случае открывать / закрывать дверь достаточно быстро, где установлен геркон, что собственно генерит MQTT отправку данных при изменения состояния (0/1), падает подключение MD к MQTT брокеру с ошибкой:
(кусок лога с mosquito)
1523368748: Client MajorDoMo MQTT has exceeded timeout, disconnecting.
1523368748: Socket error on client MajorDoMo MQTT, disconnecting.
1523368748: New connection from 127.0.0.1 on port 1883.
1523368748: Client MajorDoMo MQTT disconnected.
1523368748: New client connected from 127.0.0.1 as MajorDoMo MQTT (c0, k10, u'Мой User').

Причем эксперимент воспроизводимый на 100% Лог, точно сопоставил по времени.
И все бы ничего, но вот странное творится дальше. У меня MD есть объект, к которому привязан переключатель, он не относится к моему геркону, он принадлежит даже другому классу. Вот этот самый переключатель меняет свое состояние. Я сперва не мог понять, как так данный переключатель никто не нажимал, а он взял изменил состояния с выкл. на вкл. В модуле MD MQTT вижу, что в это время, как только возникает ошибка "прилетают" данные по разным веткам MQTT, данный выключатель, всегда срабатывает в 1, есть другой переключатель, который относится к ESP, которая в свою очередь выключена по питанию и не может ничего слать в MQTT, он всегда срабатывает в 0. Подключил на своем ноуте MQTT клиент подписался на мой само изменяющийся топик, и воспроизвожу ошибку, меня еще больше удивило, что в MQTT брокере нет никаких изменений, а MD считает, что брокер прислал изменение и своею очередь переключил переключатель. Стал изучать лог с mosquito и так же НЕ обнаружил, что в брокер получал от датчиков какие либо изменения.
Помогите разобраться куда капать, что крутить???
voronrom
Сообщения: 25
Зарегистрирован: Вс мар 25, 2018 5:08 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Странное поведение MQTT

Сообщение voronrom » Вт апр 10, 2018 10:39 pm

Включил логирование в mosquitto:
log_type debug
log_type error
log_type warning
log_type notice
log_type information

Воспроизвел ошибку, вижу вот:
Sending PUBLISH to MajorDomo MQTT - и понеслась установка некоторых параметров....
Вложения
MQTT3.PNG
MQTT3.PNG (125.6 КБ) 6478 просмотров
Аватара пользователя
Sapizdullin
Сообщения: 408
Зарегистрирован: Сб фев 18, 2017 9:47 am
Откуда: Земля
Благодарил (а): 54 раза
Поблагодарили: 61 раз

Re: Странное поведение MQTT

Сообщение Sapizdullin » Вт апр 10, 2018 11:12 pm

voronrom писал(а):
Вт апр 10, 2018 8:12 pm
Всем привет! :).
Нашел какую-то странную особенность поведения MajorDomo и MQTT брокера. Я только недавно стал знакомиться с MD по этому сильно не бейте, может укажите в чем мой касяк.
У Вас кОсяк в том, что где-то пересекаются данные MQTT. Потому как при отсутствии ошибок в настройках эта связка работает годами. Так что смотрите связки.
Intel(R) Core(TM) i7-6700, Debian 9 "Stretch", Zoneminder, Avreg.
voronrom
Сообщения: 25
Зарегистрирован: Вс мар 25, 2018 5:08 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Странное поведение MQTT

Сообщение voronrom » Ср апр 11, 2018 12:04 pm

Sapizdullin писал(а):
Вт апр 10, 2018 11:12 pm
voronrom писал(а):
Вт апр 10, 2018 8:12 pm
Всем привет! :).
Нашел какую-то странную особенность поведения MajorDomo и MQTT брокера. Я только недавно стал знакомиться с MD по этому сильно не бейте, может укажите в чем мой касяк.
У Вас кОсяк в том, что где-то пересекаются данные MQTT. Потому как при отсутствии ошибок в настройках эта связка работает годами. Так что смотрите связки.
Можно по конкретней, а то, что-то не понимаю, какие связки? на моем скрине видно, что все топики разные. Судя по логам брокера периодически Socket в MQTT от MD так же отваливается с ошибкой, и ошибка само воспроизводится т.е. без моих действий о которых писал выше.
Делаю так: создаю класс, к примеру герконов, в нем свойство value ну и объекты уже по количеству герконов. Далее у каждого объекта свой топик и связка :| в MQTT объект - свойство value. В целом делаю так для каждого датчика. Может, конечно свойство типа value делать для каждого объекта свое??? или достаточно для класса???
Ответить