Подключено около 55 сериал устройств на 3х линиях и один датчик зигби. Падают правила с ошибкой подключения к брокеру (ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.PublishToken (&{{{{0 0} 0 0 {{} 0} {{} 0}} 0x1984c40 } 50940}) ) при: сохранении/изменении больших файлов правил, перезагрузке контроллера, перезагрузке mosquitto, перезагрузке wb-rules. Возможно они падают и от других действий, но эти мне удалось выявить наверняка. Ошибка проявилась недавно при изменении правила и до этого не возникала, контроллер несколько месяцев работал стабильно с текущими правилами, которые не сильно изменялись.
Метод восстановления нормальной работы, на данный момент, выглядит так: остановка wb-mqtt-serial → рестарт wb-rules (занимает несколько минут) → запуск wb-mqtt-serial. После этих действий контроллер работает без ошибок.
Сбрасывал контроллер к заводским настройкам, но безрезультатно. Прикладываю диагностический архив, текст и скрины логов.
Здравствуйте, проверил все, рекурсивного создания правил нет (могу приложить архив с правилами, если требуется), но самих правил создается достаточно много, возможно проблема в количестве? Еще смущает, что проблема проявилась только недавно после обновления, раньше ее не было
То есть созданием большого массива правил.
Хороший способ убедиться что правила не создаются в процессе - добавить в лог вывод, именно при создании каждого правила.
Если есть способ (метод) позволяющий воспроизвести ошибку не создавая тысячи правил - поделитесь, проверю.
Добрый день! Наблюдаю аналогичную проблему у себя: правила работали (и работают) без сбоев, в Журнале критичных ошибок не было. Изменения вношу периодически, но 90% правил не меняются уже больше года.
Сегодня поставил обновления, после этого решил внести изменения в одно из правил. Изменения не сохранятся, в Журнале появились критические ошибки, связанные с MQTT.
По моим наблюдениям:
если менять небольшие правила (до 100 строк) - изменения сохраняются
если менять правила 100+ строк - процесс сохранения зависает и в Журнале начинают появляться ошибки (см. скрин)
спустя небольшое время после пары-тройки таких попыток сохранить изменения в правилах контроллер сам перезагружается
попробовал удалить все правила и возвращать их частями (включая самые древние, которые не менялись год точно) - отсеять “кривое” правило не удалось, т.к. вернул половину - все работает, попытался сохранить любое большое - ошибки, маленькое - сохранилось. Также и с другой половиной правил
отдельно подчеркну, что во время проверок пробовал “менять” правила по принципу - добавил/удалил пустую строку между функциями - и все равно это приводило к бесконечному процессу сохранения + появлению критических ошибок в журнале
Диагностический архив, к сожалению, пока приложить не смог - т.к. при попытке сделать его через веб процесс не заканчивается ничем, а при попытке через консоль получаю ошибку, связанную с таймаутом (о чем завел отдельный топик )
UPD: спустя 4 часа после публикации данного поста и прекращения попыток сохранять изменения в правилах посмотрел Журнал - ни единой критической ошибки, все штатно, как и было до обнаружения проблемы. А в то время, когда тестировал и пытался сохранять правила - ошибки сыпались обильно. Такое ощущение, что именно сохранение правил на 100+ строк что-то подвешивает так, что mqtt начинает сбоить
Да, симптомы аналогичные, уже словил такое же поведение и на другом контроллере, когда количество модбас устройств выросло с 20 до 35. С большими правилами такие проблемы возникают почти со 100% вероятностью, с малыми действительно все хорошо, но иногда баг ловится даже при сохранении небольших файлов правил. Хорошо, что я не один…
Так же хочу добавить, что баг ловится на контроллерах с большим количеством подключенных модбас устройств (40+ штук), хватает даже одного файла правил в котором создаются более 30 маленьких правил и 5-10 виртуальных устройств, тестировал на другом “свежем” контроллере пока была возможность. Пример правила прикладываю, если поддержка хочет протестировать, то рекомендую использовать для этого инсталляции с большим количеством модбас устройств, видимо их опрос как то влияет на то что брокер падает AutoWatering.js (17,2 КБ)
Еще проводил тесты на контроллере к которому подключены два модбас устройства и 60 зигби устройств, ошибок не возникает, загружал те же правила.
На контроллерах с большим количеством модбас устройств при отключении драйвера wb-serial, правила получается сохранять и редактировать без возникновения каких либо ошибок (в последнее время только так и приходится работать с правилами контроллера - останавливая опрос устройств). После сохранения правил, запускаю опрос и все работает без ошибок.
Сегодня словил ошибку на контроллере с большим количеством зигби устройств и с двумя модбас устройствами (писал ранее, рано радовался) при изменении большого правила. Второе модбас устройство добавил на прошлой неделе, это датчик wb-msw, ранее подобных проблем на данном контроллере не наблюдалось. Вылечилось привычным способом через отключение драйвера wb-mqtt-serial и перезагрузкой wb-rules. Скоро будет возможность протестировать свежий контроллер дома, отпишусь о результатах
Воспроизвести удается не всегда. Иногда при сохранении правила падает, иногда с тем же самым правилом не падает и нормально его обновляет, никакой системы.
Направляю еще немного логов, может как-то прояснит ситуацию:
По текущим результатам - если использовать именно виртуальные устройства, созданные из wb-rules - то публикация в них, более сотни начинает потреблять ресурсы CPU. Простого способа это исправить пожалуй нет.
Подскажите, пожалуйста, а что может быть альтернативой виртуальным устройствам в ситуации, когда какой-то показатель нужно принять/сохранить и учитывать его в разных правилах и функциях?
В моем случае, например, есть два типа самых “обширных” виртуальных устройств это
“расписание”, например работы штор (во сколько открыть шторы, во сколько закрыть, по каждой комнате отдельно)
некие “внешние константы”, например прогноз яндекс.погоды (рассвет, закат, ветер, осадки), обращаюсь к ним из разных правил: от отопления, до подсветок
Спасибо!
Есть несколько вариантов: GitHub - wirenboard/wb-rules: Rule engine for Wiren Board
Но все же я планирую не бросать попытку исправить поведение. Проблема в том что когда движок создает виртуальное устройство - он же выполняет роль драйвера, подписываясь на него.
Я попробовал делать readOnly топики - да, потребление ресурсов снизилось.