[Модуль] MQTT (mqtt)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

NightRider
Сообщения: 70
Зарегистрирован: Пт авг 21, 2015 2:27 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: [Модуль] MQTT (mqtt)

Сообщение NightRider » Пн мар 25, 2019 2:25 pm

Обнаружил ошибку. Дело в модуле или нет, пока непонятно. Воспроизводится следующим образом:
1. Создаю новый класс, объект, в нем одно свойство Status
2. В меню управления создаю выключатель, привязываю объект, и его свойство Status
В таком случае при переключении из меню, все хорошо, в историю изменения свойства пишется однократно
3. В модуле MQTT создаю новый топик, в котором привязываюсь к объекту и свойству
Теперь при изменении переключателя в истории уже по два события
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] MQTT (mqtt)

Сообщение nick7zmail » Пн мар 25, 2019 2:53 pm

Не совсем правильно сделано.
Происходит примерно так: Вы переключаете выключателем свойство - сообщение с топиком уходит брокеру, брокер топик рассылает всем подписанным клиентам (в т.ч. МД), значение в свойстве перезаписывается, что и отражается на истории.

Варианта решения 2.
1) обойти стороной подписку (не совсем правильный, т.к. статус скорее всего в этом же топике передаётся при изменении извне.
2) разнести получение статуса и отправку статуса в разные топики (для этого в модуле есть путь write, в котором можно задать топик, отличный от основного)
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
NightRider
Сообщения: 70
Зарегистрирован: Пт авг 21, 2015 2:27 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: [Модуль] MQTT (mqtt)

Сообщение NightRider » Пн мар 25, 2019 3:34 pm

Похоже что сделано немного не так, т.к. поведение (сохранение истории) разное:
1. При записи в админке напрямую в свойство объекта, никакого дублирования в истории нет
2. При переключении выключателя же, дублирование присутствует
Это при прочих равных условиях, описанных в моем предыдущем сообщении. Если бы история всегда дублировалась, вне зависимости от того каким образом свойство изменяется, это было бы логично, по крайней мере.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: [Модуль] MQTT (mqtt)

Сообщение nick7zmail » Вт мар 26, 2019 6:57 am

Аа...тогда проверьте не подвязан ли где нить дополнительно метод помимо свойства (в том же выключателе)...может выключатель меняет свойство, и вызывает при этом метод turnOn или switch к примеру, который тоже меняет свойство?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
NightRider
Сообщения: 70
Зарегистрирован: Пт авг 21, 2015 2:27 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: [Модуль] MQTT (mqtt)

Сообщение NightRider » Вт мар 26, 2019 1:07 pm

Специально проверял с чистого листа: создавал новый объект, выключатель и топик. Методов вообще нет.
Писал в чате MajorDomo, там проверяли, говорят дублирования воспроизводятся. Странно что никто до сих пор этого не заметил.
KIP
Сообщения: 2
Зарегистрирован: Пн янв 28, 2019 8:02 am
Откуда: Томск / Краснодар
Благодарил (а): 0
Поблагодарили: 0

Re: [Модуль] MQTT (mqtt)

Сообщение KIP » Вт мар 26, 2019 1:10 pm

Друзья здравствуйте!
Помогите разобраться с остановками цикла модуля MQTT после январского обновления MJD.
mosquitto работает без сбоев, модуль MQTT MJD также работает без привязки к объектам и свойствам . Брокер и MJD установлены на одном сервере. Цикл модуля начинает останавливается, как только связанных объектов для полученных подписок с короткими сообщениями становиться больше 4-х или строка 1-го топика длинная.
……….
12:16:10 0.18175200 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_mqtt.php --params "a:0:{}" > NUL
12:15:09 0.06970100 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_mqtt.php --params "a:0:{}" > NUL
12:14:07 0.10092500 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_mqtt.php --params "a:0:{}" > NUL
12:13:05 0.94073600 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_mqtt.php --params "a:0:{}" > NUL
12:12:04 0.97858600 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_mqtt.php --params "a:0:{}" > NUL
12:11:03 0.92139000 Closing thread: c:/_majordomo/server/php/php.exe -q ./scripts/cycle_mqtt.php --params "a:0:{}" > NUL
………………………….
В версии MJD до обновления модуль работает без сбоев, после обновления такая вот проблема. Где искать проблему?
nerobot
Сообщения: 4
Зарегистрирован: Пн май 21, 2018 3:49 am
Благодарил (а): 0
Поблагодарили: 1 раз

Re: [Модуль] MQTT (mqtt)

Сообщение nerobot » Чт мар 28, 2019 9:05 pm

а сам модуль сервисные сообщения в протокол не будет кидать?

просто уже есть некоторый стандарт, и это удобно, что многие устройства при старте, или при изменении режимов работы кидают сообщения бродкастом, чтоб остальные подключенные устройства особо не нервничали от того, что вдруг у мажора отвалился модуль. Пусть пишет системное сообщение про себя, что жив-здоров, искренне ваш. А если болеет чем - то уходить из жизни с кодом ошибки в лог топик.
rzag
Сообщения: 32
Зарегистрирован: Вт июн 27, 2017 7:01 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

Re: Предложения по доработке модуля MQTT

Сообщение rzag » Сб мар 30, 2019 2:00 pm

rzag писал(а):
Пт май 25, 2018 11:54 am
eeak1 писал(а):
Пн май 21, 2018 10:06 pm
rzag писал(а):
Вт апр 24, 2018 9:46 pm
Уважаемые, как все-таки решить проблему с постоянным реконнектом ?

вот часть лога москитто:

1524595242: Client majordomo has exceeded timeout, disconnecting.
1524595242: Socket error on client majordomo, disconnecting.
1524595242: New connection from 192.168.1.40 on port 1883.
1524595242: Client majordomo disconnected.
1524595242: New client connected from 192.168.1.40 as majordomo (c0, k10).
1524595287: Client majordomo has exceeded timeout, disconnecting.
1524595287: Socket error on client majordomo, disconnecting.
1524595287: New connection from 192.168.1.40 on port 1883.
1524595287: Client majordomo disconnected.
1524595287: New client connected from 192.168.1.40 as majordomo (c0, k10).
1524595302: Client majordomo has exceeded timeout, disconnecting.
У меня та же беда, каждые 15 секунд реконнект, но т.к. все работало то и не напрягало.
Сегодня обновил mosquitto до 1.5 и сразу все стало хуже. После 10 реконнектов брокер просто перестает опправлять данные на сервер.
Откатился назад на 1.4, полет нормальный.

UPD:
Определил что постоянные реконнекты вызывает этот код:

Код: Выделить всё

if(feof($this->socket)){
    if($this->debug) echo "eof receive going to reconnect for good measure\n";
    fclose($this->socket);
    $this->connect(false);
    if(count($this->topics))
        $this->subscribe($this->topics);        
}
Может быть Сергей прокомментирует, так ли нужны эти искусственные реконнекты ? В новом mosquitto это приводит к проблемам.
Я пока проблему решил увеличением времени кипаливе (кажется так :) )в файле библиотеки, с 10 поменял на большее значение.
Реконекты остались, но происходят не так быстро.
Все равно напрягает, т.к. основная причина не понятна. И бывает, что в момент реконнекта в МД не доходят данные.
Так что жду, что посоветуют умные люди.
Думаю, что реконекты происходят у многих (что приводит к тормозам по работе с протоколом mqtt), просто мало кто смотрит лог.
Почитал форум. Понял, что проблему до сих пор никто не решил.

Менял и сервера пробовал разные версии mosquitto, пытался что-то менять в самой библиотеке phpmqtt - проблема с реконектами остается. При чем все мои тридцать устройств не отваливаются, а mjd - через каждые 5 сек.

По моим наблюдениям происходит это так: mjdm что-то публикует\принимает и сразу рекконект, и так после кождой публикации\приема.
Как результат, в момент рекконекта - не доходят данные в mjdm. Для меня это критично.
Судя по сообщением форума проблема не только у меня.

Классный протокол, но к сожалению, не работает нормально в mjd.
Теперь думаю на что заменить или решение все же есть ?
NightRider
Сообщения: 70
Зарегистрирован: Пт авг 21, 2015 2:27 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: [Модуль] MQTT (mqtt)

Сообщение NightRider » Сб мар 30, 2019 5:12 pm

Проверил у себя, да, после публикации mjd клиентом, происходит переподключение. Ноды же публикуют без реконнектов. Хотя и они переподключаются пару раз в сутки.
Fav0rit
Сообщения: 60
Зарегистрирован: Чт мар 19, 2015 10:27 pm
Благодарил (а): 8 раз
Поблагодарили: 22 раза

Re: [Модуль] MQTT (mqtt)

Сообщение Fav0rit » Вс мар 31, 2019 3:04 am

По моим наблюдениям MQTT вообще работает абы как, причем очень давно, о чем я неоднократно писал и в эту тему. Во-первых постоянные реконнекты, но мне кажется, что при использовании PHP это победить сложно, плюс в последнее время появились какие-то затыки в работе цикла, даже по таймеру самого цикла видны. На практике если я щелкаю выключателем, который отправляет сообщения в MQTT, то некоторый промежуток времени все отображается отлично и без задержек, а потом бац и секунд 30 вообще никакой реакции, хотя сторонний клиент MQTT все отображает правильно.
Ответить