В документации в табличке указаны значения.
Скрипт - это правило, написанное на wb-rules. То есть для парсинга топиков используются тоже wb-rules.
Не думаю, что с этим может быть связано.
В документации в табличке указаны значения.
Скрипт - это правило, написанное на wb-rules. То есть для парсинга топиков используются тоже wb-rules.
Не думаю, что с этим может быть связано.
В документации в табличке указаны значения.
В данный момент настройки соответствуют указанным в таблице, поэтому я и спрашиваю, насколько нужно замедлить?
В данный момент единственное устройство, которое я оставил - датчик WB-MSWv3. К сожалению, нагрузку на процессор или хотя бы потребление конкретного процесса я вывести в виде графика не могу, но визуально наблюдаю скачки нагрузки у процесса wb-rules, то есть проблема сохраняется.
Я верно понимаю, что на стенде подобное поведение получить не удалось?
Я не знаю точно насколько. Попробуйте для теста увеличить минимальный интервал в 2 раза, в 5 раз.
Чего-то явно проблемного с зависанием правил на некоторое время получить пока не получается.
Переделал на 1 раз в минуту. Данные приходят 6 раз, судя по всему, по каждому из показателей.
Вот пример (пэйлод я обрезал):
Sep 08 17:08:07 wirenboard-AMWQEWLS npm[29934]: Zigbee2MQTT:info 2022-09-08 17:08:07: MQTT publish: topic 'zigbee2mqtt/WB-MSW-v3_badroom', payload '{"co2":1031,...
Sep 08 17:08:09 wirenboard-AMWQEWLS npm[29934]: Zigbee2MQTT:info 2022-09-08 17:08:09: MQTT publish: topic 'zigbee2mqtt/WB-MSW-v3_badroom', payload '{"co2":1031,...
Sep 08 17:08:09 wirenboard-AMWQEWLS npm[29934]: Zigbee2MQTT:info 2022-09-08 17:08:09: MQTT publish: topic 'zigbee2mqtt/WB-MSW-v3_badroom', payload '{"co2":1031,...
Sep 08 17:08:09 wirenboard-AMWQEWLS npm[29934]: Zigbee2MQTT:info 2022-09-08 17:08:09: MQTT publish: topic 'zigbee2mqtt/WB-MSW-v3_badroom', payload '{"co2":1031,...
Sep 08 17:08:09 wirenboard-AMWQEWLS npm[29934]: Zigbee2MQTT:info 2022-09-08 17:08:09: MQTT publish: topic 'zigbee2mqtt/WB-MSW-v3_badroom', payload '{"co2":1031,...
Sep 08 17:08:16 wirenboard-AMWQEWLS npm[29934]: Zigbee2MQTT:info 2022-09-08 17:08:16: MQTT publish: topic 'zigbee2mqtt/WB-MSW-v3_badroom', payload '{"co2":1031,...
Соответственно top в момент, когда приходят данные, показывает высокую нагрузку на wb-rules (>50%), потом примерно 40 секунд низкой нагрузки (<10%). Пока идёт нагрузка - правила работают с задержкой (зависают).
Да, наблюдаю похожее поведение. После отправки команды на включение светодиодов начинают приходить данные с датчика WB-MSW Zigbee v3. В это время наблюдается относительно большая загрузка правил. Но выполняться правила совсем не перестают (тестирую правда на контроллере Wirenboard 7). Думаю, что с этим пока ничего не сделать. Попробуйте отправлять команды датчику не одновременно, а через интервал времени:
publish('zigbee2mqtt/0x04cd15fffea0b238/set', JSON.stringify({"state_l2": "OFF"}), 2, false);
setTimeout( function () {
publish('zigbee2mqtt/0x04cd15fffea0b238/set', JSON.stringify({"state_l1": "OFF"}), 2, false);
}, 2000);
“Относительно большая нагрузка правил” на WB7 превращается в “тормозят правила” на WB6.
Причем правила тормозят не только при отправке команд, а, как я писал выше, каждый раз, когда мне приходят данные от датчика.
Подведу предварительный итог.
Симптомы: при активной обработке сообщений от зигби-устройств резко растет загрузка процесса wb-rules. Когда нагрузка заканчивается - правила, которые должны были сработать во время “зависания”, отрабатывают.
Решение: отсутствует.
Я нашёл еще одну тему, кажется, со сходными симптомами: Большая задержка при обработке событий от zigbee2mqtt
Очень не хочется к этому апеллировать, но как так получается, я купил устройства с заявленной поддержкой от производителя (датчик, плата и контроллер - все производство WirenBoard) на ощутимую сумму, но от поддержки я получаю ответ: “Думаю, что с этим пока ничего не сделать”? Что мне теперь с этим датчиком делать, отключить, убрать в коробку и радоваться, что дополнительные кнопки, включающие свет, или вытяжка в санузле работают без задержек?
Проверил еще на контроллере WB6.7. Создал правило, в котором раз в пять секунд отправляю команды датчику и делаю запись в лог. Правило отрабатывает стабильно, хоть загрузка процессора иногда и возрастает.
В том, что правило отрабатывает корректно, сомнений нет, проблемы начинаются после.
Я снял небольшое видео, иллюстрирующее проблему, о которой я говорил выше: пока wb-zigbee разбирает сообщение, он так грузит wb-rules, что другие правила не срабатывают.
Видео не поместилось, поэтому ссылка: Запись экрана 1 от 14 сентября.avi — Яндекс.Диск.
Что происходит:
(вообще весь экшн с 20й секунды)
открыто окно с виджетами - нас интересует виджет “коридор”, где “Основной” (свет) триггерит смену состояния “Дополнительного”
defineRule("hall_2nd_light", {
whenChanged: "wb-mr6c_26/K1",
then: function (newValue, devName, cellName) {
dev["wb-mr6cu_84"]["K1"] = dev["wb-mr6c_26"]["K1"];
}
});
Открыто окно “Устройства”, где, собственно WB-MSW-v3 zigbee и его состояние.
Открыта консоль с top и консоль, в которой я периодически запрашиваю статус zigbee2mqtt
В момент, когда приходят события от датчика (сейчас это происходит раз в минуту), растет потребление %CPU сервисом wb-rules. В этот же момент, я выключаю “Основной” свет в коридоре и жду. Проходит несколько секунд прежде, чем срабатывает правило. Чуть позже, когда процесс wb-rules начинает “отпускать”, видно, что срабатывание этого правила занимает > 1 с.
Я пребываю в уверенности, что такое поведение контроллера автоматизации является ошибкой. Иными словами, так быть не должно, верно?
Да, наблюдаю похожее поведение: при получении данных от датчика выполнение правил немного (около секунды) подтормаживает.
Попробуйте еще изменить политику процессора, будет ли улучшение: Wb-rules грузит процессор - #2 от пользователя EvgenyBoger
Нет, явного улучшения не произошло, при получении данных от датчика выполнение правил подтормаживает на несколько секунд.
Спрошу совета у разработчиков.
@webconn Что еще можно посоветовать пользователю, чтобы не было задержки в выполнении правил при получении сообщений от zigbee-устройств?
Попробуйте все-таки настроить датчик, чтобы сообщения приходили не чаще, чем раз в 5-10 с, увеличив параметры:
Также можно попробовать отключить веб-интерфейс zigbee2mqtt для снижения потребления ресурсов: Подключение устройств Zigbee к контроллеру Wiren Board — Wiren Board
Веб-интерфейс zigbee2mqtt отключен. Я видел в документации предупреждение, поэтому включал его только под конкретные цели, затем отключал.
Попытался “размазать” отправку датчиком сообщений по времени, но не получилось. Насколько я понимаю, каждый канал отправляет теперь данные раз в минуту. Но, они делают это с паузой в секунду между собой (не получилось добавить паузу в 10 секунд между ними), то есть я получаю 6 сообщений подряд, что все равно грузит.
Я понимаю, что конкретно сейчас есть всего пара решений:
Но, может, хотя бы удастся определить точную причину и предложить системное решение?
Если такие большие задержки только при подключенном датчике WB-MSW Zigbee v3, то для проверки - удалить все правила с контроллера, кроме одного минимального, управляющего датчиком. Так как у меня при этом задержки небольшие - около 1 с.
Также можно попробовать удалить пакет wb-zigbee2mqtt и проверить нагрузку на процессор без него. Но без этого пакета парсить топики zigbee2mqtt нужно будет самостоятельно и для этого также потребуются ресурсы.
Даже в рамках этого обсуждения, проблема воспроизводилась и на WB-MSW Zigbee v3, и на двигателях для штор, которые во время движения активно слали сообщения.
Более того, мне кажется, мы уже выяснили, что проблема не в отправке сообщения в zigbee, а в приёме при большом количестве сообщений в секунду.
Если такие большие задержки только при подключенном датчике WB-MSW Zigbee v3, то для проверки - удалить все правила с контроллера, кроме одного минимального, управляющего датчиком. Так как у меня при этом задержки небольшие - около 1 с.
Без изменений. Нагрузка сохраняется и при удаленных правилах, кроме управляющего датчиком, и при удаленных вообще.
Также можно попробовать удалить пакет wb-zigbee2mqtt и проверить нагрузку на процессор без него. Но без этого пакета парсить топики zigbee2mqtt нужно будет самостоятельно и для этого также потребуются ресурсы.
При удаленном пакете wb-zigbee2mqtt - нагрузки нет.
Вообще получается, что код обработки сообщений из топиков zigbee2mqtt и грузит процесс. С этим будут что-то делать или мне необходимо решать этот вопрос самостоятельно?
Запишу ваше обращение, чтобы обратить на это внимание разработчиков.
Пока не планируем что-то переделывать, так как не удается воспроизвести точно такое же поведение. Та задержка, которую наблюдаю - сейчас неизбежна, но и не так критична.
Ок, я понял. Задержка в несколько секунд, которую я демонстрировал на скринкасте, для wirenboard является некритичной.
Я не считаю, что вопрос решён, но обсуждать больше нечего, спасибо.
Мы не сможем исправить то, что не получается воспроизвести. Сообщите еще раз минимальную конфигурацию оборудования и пришлите полностью ваше правило, чтобы воспроизвести задержку в несколько секунд.
Также могу предложить вам скидку на покупку контроллера Wirenboard 7, на нем обработка должна производиться быстрее.
WB-6.6
WBE2R-R-ZIGBEE v.1
WB-MSW v.3 Zigbee или любое другое устройство, поддерживаемое в zigbee2mqtt
Задержка проявляется при получении сообщений от zigbee-устройств и не зависит от каких-либо правил, кроме правила, разбирающего json из топиков zigbee2mqtt и публикующего значения в соответствующие топики устройств.
Сама по себе задержка может проявиться в течении нескольких часов после перезапуска контроллера.
defineRule("WB-MSW-v3_badroom_rules_CO2", {
whenChanged: "WB-MSW-v3_badroom/co2",
then: function(newValue, devName, cellName) {
log(newValue + " ppm");
var co2_good = newValue <= 1000;
var co2_okay = newValue > 1000 && newValue <= 2500;
var co2_bad = newValue > 2500;
if(co2_good) {
// no lights
publish('zigbee2mqtt/WB-MSW-v3_badroom/set', JSON.stringify({"state_l1": "OFF"}), 2, false);
publish('zigbee2mqtt/WB-MSW-v3_badroom/set', JSON.stringify({"state_l2": "OFF"}), 2, false);
}
else if(co2_okay) {
// green
publish('zigbee2mqtt/WB-MSW-v3_badroom/set', JSON.stringify({"state_l1": "OFF"}), 2, false);
publish('zigbee2mqtt/WB-MSW-v3_badroom/set', JSON.stringify({"state_l2": "ON"}), 2, false);
}
else if(co2_okay) {
// red
publish('zigbee2mqtt/WB-MSW-v3_badroom/set', JSON.stringify({"state_l1": "ON"}), 2, false);
publish('zigbee2mqtt/WB-MSW-v3_badroom/set', JSON.stringify({"state_l2": "OFF"}), 2, false);
}
}
});
Никак не получается воспроизвести. В одном правиле у меня выводятся сообщения в лог раз в две секунды для проверки, что другие правила отрабатывают. В другом правиле ваш код. Предполагаю, что в коде есть опечатка в последнем else if(co2_okay) {
нужно заменить на co2_bad
для правильной индикации.
Видео прилагаю.
Попробуйте обновить пакет zigbee2mqtt до версии 1.25.2 из нашего репозитория. Я тестировал на ней.
Предлагаю попробовать сбросить контроллер к заводским настройкам с помощью самого нового образа и настроить все еще раз заново.