MQTT и WirenBoard

Проблемы/вопросы, связанные с запуском под различными платформами и конфигурациями.

Модератор: immortal

Ответить
excun
Сообщения: 9
Зарегистрирован: Чт ноя 13, 2014 10:13 pm
Благодарил (а): 0
Поблагодарили: 0

MQTT и WirenBoard

Сообщение excun » Вт мар 24, 2015 3:17 pm

Добрый день!
Мучаюсь уже какой день. Есть связка клиент MQTT на MDM и WirenBoard. C MDM на WB команды передаются сразу, без задержки, в обратную сторону с задержкой 5-8 минут.
То есть например нажимается кнопка выключателя или отрабатывает PIR датчик, на WB событие отрабатывает сразу через mosquitto_sub видно что соответствующее свойство поменяло свое значение, на MDM это значение обновляется через значительный промежуток времени.
В чем может быть дело? в каком направлении капать?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: MQTT и WirenBoard

Сообщение sergejey » Вт мар 24, 2015 7:53 pm

Странное поведение... можно попробовать запустить отдельно cycle_mqtt и посмотреть, что там происходит. Там в принципе, ничего специфичного для wirenboard не делалось -- стандартная подписка на MQTT-брокера и как только он данные присылает, так они в системе и обновляются.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
excun
Сообщения: 9
Зарегистрирован: Чт ноя 13, 2014 10:13 pm
Благодарил (а): 0
Поблагодарили: 0

Re: MQTT и WirenBoard

Сообщение excun » Вт мар 24, 2015 8:19 pm

При запуске cycle_mqtt.php происходит последовательный опрос серверной части wb
015-03-24 20:14:50 Topic:/devices/noolite_tx_0xe2e/controls/bind/meta/order 6
2015-03-24 20:14:51 Topic:/devices/noolite_tx_0xe2e/controls/switch 0
2015-03-24 20:14:52 Topic:/devices/noolite_tx_0xe2e/controls/switch/meta/type pushbutton
2015-03-24 20:14:53 Topic:/devices/noolite_tx_0xe2e/controls/switch/meta/order 4
2015-03-24 20:14:54 Topic:/devices/noolite_tx_0xe2e/controls/slowstop 0
2015-03-24 20:14:55 Topic:/devices/noolite_tx_0xe2e/controls/slowstop/meta/type pushbutton
2015-03-24 20:14:56 Topic:/devices/noolite_tx_0xe2e/controls/slowstop/meta/order 10
Команда на включение в логах не отразилась не как, хотя сама команда ушла и выполнилась(само событие зафиксировал на отметке 2015-03-24 20:17:56 через 3 минуты)
При это если выполнить mosquitto_sub -h X.X.X.X -v -t /devices/# на MDM то показ отрабатывает вполне корректно
excun
Сообщения: 9
Зарегистрирован: Чт ноя 13, 2014 10:13 pm
Благодарил (а): 0
Поблагодарили: 0

Re: MQTT и WirenBoard

Сообщение excun » Ср мар 25, 2015 1:06 pm

Сергей, провел эксперимент. Развернул чистую инсталляцию, подцепил сторонний брокер, прописал subscription path строго на одно значение(temp/random), как результат все меняется, все работает. Вторым этапом поменял subscription path на широкую маску, перезапустил процесс и послал на брокер контрольное значение, в результате mosquitto_pub, показал что значение поменялось, а MDM не отрабатывает(значение изменилось более чем через 10 минут).
Вопрос в следующем, есть ли возможность как то ограничить список с которым работает клиент mqtt на MDM? Такое ощущение что клиент в синхронном режиме обрабатывает входной поток и при больших объемах идут соответственно задержки
P.S. Настроить подписку для WB c учетом более узкой маски не представляется возможным, так как используется несколько разных устройств(как силовые блоки, так и датчики)
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: MQTT и WirenBoard

Сообщение sergejey » Ср мар 25, 2015 6:21 pm

excun писал(а):Сергей, провел эксперимент. Развернул чистую инсталляцию, подцепил сторонний брокер, прописал subscription path строго на одно значение(temp/random), как результат все меняется, все работает. Вторым этапом поменял subscription path на широкую маску, перезапустил процесс и послал на брокер контрольное значение, в результате mosquitto_pub, показал что значение поменялось, а MDM не отрабатывает(значение изменилось более чем через 10 минут).
Вопрос в следующем, есть ли возможность как то ограничить список с которым работает клиент mqtt на MDM? Такое ощущение что клиент в синхронном режиме обрабатывает входной поток и при больших объемах идут соответственно задержки
P.S. Настроить подписку для WB c учетом более узкой маски не представляется возможным, так как используется несколько разных устройств(как силовые блоки, так и датчики)
Клиент реализован с помощью библиотеке phpMQTT (https://github.com/bluerhinos/phpMQTT), в которую я, если честно, не лазил.
Если взять исходник /scripts/cycle_mqtt.php , то там оно устроено вот так:

Изображение

1. Коннект
2. Подписка
3. Обработка сообщения

Если в логе majordomo сообщение появляется гораздо позже, то тут два варианта:
1. Клиент не вызывает procmsg в момент сообщения, а почему-то вызывает его гораздо позже
2. Большая задержка с обработкой сообщения, т.к. сначало оно обрабатывается, а потом пишется в лог

Чтобы исключить номер 2 можно попробовать поменять местами эти две строчки и посмотреть снова лог
Изображение

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
excun
Сообщения: 9
Зарегистрирован: Чт ноя 13, 2014 10:13 pm
Благодарил (а): 0
Поблагодарили: 0

Re: MQTT и WirenBoard

Сообщение excun » Чт мар 26, 2015 8:15 pm

Сергей, спасибо. На том уровне количества устройств nooLite сделать получилось
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: MQTT и WirenBoard

Сообщение sergejey » Пт мар 27, 2015 1:59 pm

excun писал(а):Сергей, спасибо. На том уровне количества устройств nooLite сделать получилось
Так, а в чём в итоге дело было?

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
excun
Сообщения: 9
Зарегистрирован: Чт ноя 13, 2014 10:13 pm
Благодарил (а): 0
Поблагодарили: 0

Re: MQTT и WirenBoard

Сообщение excun » Сб мар 28, 2015 1:16 pm

В конструкции while ($mqtt_client->proc()) {...} у вас используется задержка в 1 секунду sleep(1), как следствие на больших массивах данных получаемых с брокера получаем задержку перед выполнением. Я модифицировал код следующем образом:
$previousMillis = 0;
while ($mqtt_client->proc()) {
$currentMillis = round(microtime(1) * 10000);
if ($currentMillis - $previousMillis > 10000) {
$previousMillis = $currentMillis;
setGlobal((str_replace('.php', '', basename(__FILE__))) . 'Run', time(), 1);

if (file_exists('./reboot') || $_GET['onetime']) {
$db->Disconnect();
exit;
}
}
}
На данный момент задержка считывания не превышает секунды
SergVl
Сообщения: 1
Зарегистрирован: Вс апр 12, 2015 12:24 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: MQTT и WirenBoard

Сообщение SergVl » Вс апр 12, 2015 1:01 pm

Добрый день!
Как отключить автоматическую публикацию значений в настройках MQTT, а то у меня их набралось на 11 страниц (удаляю их, но они занова публикуются).
Ответить