Страница 17 из 97

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

Добавлено: Пт май 25, 2018 11:54 am
rzag
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), просто мало кто смотрит лог.

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

Добавлено: Пт июн 01, 2018 1:31 pm
corpse
Аналогичная ситуация. Давно не обновлялся, вчера обновил 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.

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

Добавлено: Пт июн 01, 2018 1:44 pm
eeak1
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.*
Или попробуй убери код принудительного реконнекта.

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

Добавлено: Сб июн 02, 2018 8:46 pm
rzag
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. А что такое код принудительного реконекта ?

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

Добавлено: Сб июн 02, 2018 10:51 pm
corpse
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 работал полгода без намёка на подобные проблемы, потом я решил обновить все модули и с этого момента понеслось...

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

Добавлено: Пн июн 04, 2018 9:52 am
eeak1
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

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

Добавлено: Пн июн 04, 2018 9:27 pm
corpse
eeak1 писал(а): Пн июн 04, 2018 9:52 am Реконнекты делаются принудительно, код я давал выше, код введен видимо как костыль. Но по крайней мере mosquitto 1.4 не отваливает после 10 реконнектов, как это делает 1.5.
....
Тоже заметил что периодически в МД прилетают обрывки топиков, база топиков разрастается лавинообразно и все умирает.
Решил проблему радикально: раз в сутки, ночью, перезапуск МД, после чего чистка базы топиков. Вот код скрипта:
Большое спасибо! В ближайшие выходные попробую. Только убивать всё под корень - как-то слишком радикально. Посмотрю, может быть сделаю более лояльный запрос.

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

Добавлено: Пн июн 04, 2018 9:39 pm
eeak1
corpse писал(а): Пн июн 04, 2018 9:27 pm Большое спасибо! В ближайшие выходные попробую. Только убивать всё под корень - как-то слишком радикально. Посмотрю, может быть сделаю более лояльный запрос.
Не, не, там не все радикально чистится, только не привязанные топики. Аналогично нажатию корзины в модуле MQTT.

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

Добавлено: Чт июн 07, 2018 12:31 pm
eeak1
Через Telegram получил от Сергея такой коммент:
как правильно заметили в одном из сообщений — что-то с библиотекой phpmqtt. я в неё не лез, честно говоря. попробуйте поэкспериментировать с последней версией отсюда https://github.com/bluerhinos/phpMQTT и полазить по issues, может кто-то подобное как раз описывал.
В issues бегло не нашел, свежую библиотеку поставил. Пока что эксперементить время нету.
Если кто захочет обновить библиотеку, не забутте закомментить строчку
namespace Bluerhinos;

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

Добавлено: Пт июн 08, 2018 8:39 am
Aven
Там в гитхабе из изменений только поддержка TLS добавилась.