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

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

Модератор: immortal

rzag
Сообщения: 32
Зарегистрирован: Вт июн 27, 2017 7:01 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

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

Сообщение 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), просто мало кто смотрит лог.
corpse
Сообщения: 26
Зарегистрирован: Пт ноя 04, 2016 11:56 am
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение corpse » Пт июн 01, 2018 1:31 pm

Аналогичная ситуация. Давно не обновлялся, вчера обновил MD и все модули и MD перестал собирать данные по MQTT. Точнее, после ребута MD пролетает несколько значений в течение пары минут и затем горизонтальная прямая на всех графиках. В логах mosquitto несколько раз прилетает кусок от MD, после чего тишина:

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

1527845884: New connection from 127.0.0.1 on port 1883.
1527845884: New client connected from 127.0.0.1 as md (c1, k10, u'majordomo').
1527846519: Socket error on client md, disconnecting.
eeak1
Сообщения: 51
Зарегистрирован: Чт май 12, 2016 9:13 am
Благодарил (а): 22 раза
Поблагодарили: 11 раз
Контактная информация:

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

Сообщение eeak1 » Пт июн 01, 2018 1:44 pm

corpse писал(а):
Пт июн 01, 2018 1:31 pm
Аналогичная ситуация. Давно не обновлялся, вчера обновил MD и все модули и MD перестал собирать данные по MQTT. Точнее, после ребута MD пролетает несколько значений в течение пары минут и затем горизонтальная прямая на всех графиках. В логах mosquitto несколько раз прилетает кусок от MD, после чего тишина:

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

1527845884: New connection from 127.0.0.1 on port 1883.
1527845884: New client connected from 127.0.0.1 as md (c1, k10, u'majordomo').
1527846519: Socket error on client md, disconnecting.
Откатывайся назад на 1.4.*
Или попробуй убери код принудительного реконнекта.
Алиса живёт на нубуке с закрытой крышкой в Docker контейнере, соседствует с контейнерами nextcloud, plex, mosquitto, и т.д.
ранее в Docker контейнере на Raspberry Pi 4
ранее натив на Raspberry Pi 3
https://www.eeak.biz
rzag
Сообщения: 32
Зарегистрирован: Вт июн 27, 2017 7:01 pm
Благодарил (а): 6 раз
Поблагодарили: 4 раза

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

Сообщение rzag » Сб июн 02, 2018 8:46 pm

eeak1 писал(а):
Пт июн 01, 2018 1:44 pm
corpse писал(а):
Пт июн 01, 2018 1:31 pm
Аналогичная ситуация. Давно не обновлялся, вчера обновил MD и все модули и MD перестал собирать данные по MQTT. Точнее, после ребута MD пролетает несколько значений в течение пары минут и затем горизонтальная прямая на всех графиках. В логах mosquitto несколько раз прилетает кусок от MD, после чего тишина:

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

1527845884: New connection from 127.0.0.1 on port 1883.
1527845884: New client connected from 127.0.0.1 as md (c1, k10, u'majordomo').
1527846519: Socket error on client md, disconnecting.
Откатывайся назад на 1.4.*
Или попробуй убери код принудительного реконнекта.
Даже если вернуться на 1.4, проблему это не решает. Реконекты все равно останутся.
Где-то читал, что проблема в самой библиотеке mqttphp.

P.s. А что такое код принудительного реконекта ?
corpse
Сообщения: 26
Зарегистрирован: Пт ноя 04, 2016 11:56 am
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение corpse » Сб июн 02, 2018 10:51 pm

eeak1 писал(а):
Пт июн 01, 2018 1:44 pm
Откатывайся назад на 1.4.*
Или попробуй убери код принудительного реконнекта.
Откатился на 1.4.10 - проблема осталась, в логах то же самое, плюс заметил, что MD пропускает получение данных по MQTT. Со второны ESP в логах видно, что данные ушли, на клиент на андроиде, подписанный на тот же топик я их получил, а на MD - провал.
Вот тут получение данных, отправляемых раз в минуту:

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

2018-06-03 00:44:09: 17.20 X
2018-06-03 00:21:09: 17.20 X
2018-06-03 00:20:09: 17.30 X
2018-06-03 00:19:09: 17.20 X
2018-06-03 00:18:09: 17.30 X
2018-06-03 00:17:09: 17.20 X
2018-06-03 00:16:09: 17.30 X
2018-06-02 23:51:09: 17.30 X
2018-06-02 23:50:09: 17.40 X 
Провалы в 20 с лишним минут, спустя несколько часов MD просто перестаёт принимать данные в принципе по всем датчикам одновременно. Мол, последние данные пришли 8 часов назад и тишина. Другие клиенты - консольный mosquitto_sub и андроидный mqtt viewer их продолжают исправно получать. Можно и правда - подробнее про реконнекты - где и что в коде попробовать поправить? MD работал полгода без намёка на подобные проблемы, потом я решил обновить все модули и с этого момента понеслось...
eeak1
Сообщения: 51
Зарегистрирован: Чт май 12, 2016 9:13 am
Благодарил (а): 22 раза
Поблагодарили: 11 раз
Контактная информация:

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

Сообщение eeak1 » Пн июн 04, 2018 9:52 am

rzag писал(а):
Сб июн 02, 2018 8:46 pm
Даже если вернуться на 1.4, проблему это не решает. Реконекты все равно останутся.
Где-то читал, что проблема в самой библиотеке mqttphp.

P.s. А что такое код принудительного реконекта ?
Реконнекты делаются принудительно, код я давал выше, код введен видимо как костыль. Но по крайней мере mosquitto 1.4 не отваливает после 10 реконнектов, как это делает 1.5.
corpse писал(а):
Сб июн 02, 2018 10:51 pm

Откатился на 1.4.10 - проблема осталась, в логах то же самое, плюс заметил, что MD пропускает получение данных по MQTT. Со второны ESP в логах видно, что данные ушли, на клиент на андроиде, подписанный на тот же топик я их получил, а на MD - провал.
Вот тут получение данных, отправляемых раз в минуту:

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

2018-06-03 00:44:09: 17.20 X
2018-06-03 00:21:09: 17.20 X
2018-06-03 00:20:09: 17.30 X
2018-06-03 00:19:09: 17.20 X
2018-06-03 00:18:09: 17.30 X
2018-06-03 00:17:09: 17.20 X
2018-06-03 00:16:09: 17.30 X
2018-06-02 23:51:09: 17.30 X
2018-06-02 23:50:09: 17.40 X 
Провалы в 20 с лишним минут, спустя несколько часов MD просто перестаёт принимать данные в принципе по всем датчикам одновременно. Мол, последние данные пришли 8 часов назад и тишина. Другие клиенты - консольный mosquitto_sub и андроидный mqtt viewer их продолжают исправно получать. Можно и правда - подробнее про реконнекты - где и что в коде попробовать поправить? MD работал полгода без намёка на подобные проблемы, потом я решил обновить все модули и с этого момента понеслось...
Тоже заметил что периодически в МД прилетают обрывки топиков, база топиков разрастается лавинообразно и все умирает.
Решил проблему радикально: раз в сутки, ночью, перезапуск МД, после чего чистка базы топиков. Вот код скрипта:

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

$res = SQLSelect("SELECT ID FROM mqtt WHERE LINKED_OBJECT='' AND LINKED_PROPERTY=''");
$total = count($res);
for ($i=0;$i<$total;$i++) {
 	$id = $res[$i]['ID'];
 	$rec = SQLSelectOne("SELECT * FROM mqtt WHERE ID='$id'");
 	SQLExec("DELETE FROM mqtt WHERE ID='".$rec['ID']."'");
}
запускается из крона.

Если хотите поиграться с принудительными реконнектами, закомментируйте код что я давал раннее в файле phpMQTT.php
Алиса живёт на нубуке с закрытой крышкой в Docker контейнере, соседствует с контейнерами nextcloud, plex, mosquitto, и т.д.
ранее в Docker контейнере на Raspberry Pi 4
ранее натив на Raspberry Pi 3
https://www.eeak.biz
corpse
Сообщения: 26
Зарегистрирован: Пт ноя 04, 2016 11:56 am
Благодарил (а): 0
Поблагодарили: 2 раза

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

Сообщение corpse » Пн июн 04, 2018 9:27 pm

eeak1 писал(а):
Пн июн 04, 2018 9:52 am
Реконнекты делаются принудительно, код я давал выше, код введен видимо как костыль. Но по крайней мере mosquitto 1.4 не отваливает после 10 реконнектов, как это делает 1.5.
....
Тоже заметил что периодически в МД прилетают обрывки топиков, база топиков разрастается лавинообразно и все умирает.
Решил проблему радикально: раз в сутки, ночью, перезапуск МД, после чего чистка базы топиков. Вот код скрипта:
Большое спасибо! В ближайшие выходные попробую. Только убивать всё под корень - как-то слишком радикально. Посмотрю, может быть сделаю более лояльный запрос.
eeak1
Сообщения: 51
Зарегистрирован: Чт май 12, 2016 9:13 am
Благодарил (а): 22 раза
Поблагодарили: 11 раз
Контактная информация:

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

Сообщение eeak1 » Пн июн 04, 2018 9:39 pm

corpse писал(а):
Пн июн 04, 2018 9:27 pm
Большое спасибо! В ближайшие выходные попробую. Только убивать всё под корень - как-то слишком радикально. Посмотрю, может быть сделаю более лояльный запрос.
Не, не, там не все радикально чистится, только не привязанные топики. Аналогично нажатию корзины в модуле MQTT.
Алиса живёт на нубуке с закрытой крышкой в Docker контейнере, соседствует с контейнерами nextcloud, plex, mosquitto, и т.д.
ранее в Docker контейнере на Raspberry Pi 4
ранее натив на Raspberry Pi 3
https://www.eeak.biz
eeak1
Сообщения: 51
Зарегистрирован: Чт май 12, 2016 9:13 am
Благодарил (а): 22 раза
Поблагодарили: 11 раз
Контактная информация:

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

Сообщение eeak1 » Чт июн 07, 2018 12:31 pm

Через Telegram получил от Сергея такой коммент:
как правильно заметили в одном из сообщений — что-то с библиотекой phpmqtt. я в неё не лез, честно говоря. попробуйте поэкспериментировать с последней версией отсюда https://github.com/bluerhinos/phpMQTT и полазить по issues, может кто-то подобное как раз описывал.
В issues бегло не нашел, свежую библиотеку поставил. Пока что эксперементить время нету.
Если кто захочет обновить библиотеку, не забутте закомментить строчку
namespace Bluerhinos;
Алиса живёт на нубуке с закрытой крышкой в Docker контейнере, соседствует с контейнерами nextcloud, plex, mosquitto, и т.д.
ранее в Docker контейнере на Raspberry Pi 4
ранее натив на Raspberry Pi 3
https://www.eeak.biz
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

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

Сообщение Aven » Пт июн 08, 2018 8:39 am

Там в гитхабе из изменений только поддержка TLS добавилась.
Ответить