Судя по логу - ошибка обращения к брокеру. Надо посмотреть сколько mosquitto ест памяти, CPU. Недавно было похожее - когда он со стороннего сервера через мост “набрал” в свою базу больше 150МБ топиков и симптомы были похожие.
Я перед самим запуском чистил топики, может потер что лишнее… Но пока больше не возникало проблем. Понаблюдаю.
Apr 14 16:11:29 IQ930001 daemon.info wb-rules[1454]: INFO: [wbgo_mqtt] rules-IQ930001-1454: MQTT connection established
Apr 14 16:11:29 IQ930001 daemon.info wb-rules[1454]: WARNING: [wbgo_mqtt] MQTT connection lost
Apr 14 16:11:29 IQ930001 daemon.info wb-rules[1454]: INFO: [wbgo_mqtt] rules-IQ930001-1454: MQTT connection established
Apr 14 16:11:39 IQ930001 daemon.info wb-rules[1454]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0xc45500 false <nil>} [] map[]})
Apr 14 16:11:49 IQ930001 daemon.info wb-rules[1454]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0xc45540 false <nil>} [] map[]})
Apr 14 16:11:59 IQ930001 daemon.info wb-rules[1454]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0xc45580 false <nil>} [] map[]})
Apr 14 16:12:09 IQ930001 daemon.info wb-rules[1454]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0xc455c0 false <nil>} [/devices/+/meta/driver] map[]})
Опять такая же ошибка после перезагрузки контроллера. Состояние mosquitto в БД не сохраняем.
Вы тестировали работу wb-rules 2.6.3 с отключенным persistence?
Поидее не должно влиять, но как только мы выставили persistence false, wb-rules стал нестабильно запускаться при загрузке контроллера.
Добрый день. Вообще - да, проверяли конечно. Сейчас на тестовом контроллере прогоняю.
После перезапуска mosquitto:
Apr 16 10:52:14 IQ170000 daemon.info wb-rules[1813]: INFO: [wbgo_mqtt] rules-IQ170000-1813: MQTT connection established
Apr 16 10:52:14 IQ170000 daemon.info wb-rules[1813]: WARNING: [wbgo_mqtt] MQTT connection lost
Apr 16 10:52:14 IQ170000 daemon.info wb-rules[1813]: INFO: [wbgo_mqtt] rules-IQ170000-1813: MQTT connection established
Apr 16 10:52:24 IQ170000 daemon.info wb-rules[1813]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1845500 false <nil>} [] map[]})
Apr 16 10:52:34 IQ170000 daemon.info wb-rules[1813]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1845540 false <nil>} [] map[]})
Apr 16 10:52:44 IQ170000 daemon.info wb-rules[1813]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x1845580 false <nil>} [] map[]})
Apr 16 10:52:54 IQ170000 daemon.info wb-rules[1813]: ERROR: [wbgo_mqtt] MQTT token wait timeout: *mqtt.SubscribeToken (&{{{{0 0} 0 0 0 0} 0x18455c0 false <nil>} [/devices/+/meta/driver] map[]})
Apr 16 11:00:02 IQ170000 user.notice wb-daemon-watchdogs: wb-rules check failed, reload wb-rules
Apr 16 11:00:34 IQ170000 daemon.info wb-rules[11817]: INFO: driver is created
Apr 16 11:00:34 IQ170000 daemon.info wb-rules[11817]: INFO: [wbgo_mqtt] rules-IQ170000-11817: MQTT connection established
Apr 16 11:00:34 IQ170000 daemon.info wb-rules[11817]: INFO: driver loop is started
Apr 16 11:00:34 IQ170000 daemon.info wb-rules[11817]: INFO: wait for driver to become ready
Apr 16 11:00:36 IQ170000 daemon.info wb-rules[11817]: INFO: driver is ready
Apr 16 11:00:36 IQ170000 daemon.info wb-rules[11817]: INFO: [rule info] using file /var/lib/wirenboard/wbrules-persistent.db for persistent DB
Apr 16 11:00:36 IQ170000 daemon.info wb-rules[11817]: INFO: [wbgo_mqtt] wb-rules-engine-IQ170000-11817: MQTT connection established
Apr 16 11:00:36 IQ170000 daemon.info wb-rules[11817]: INFO: [engine] Starting main loop
Apr 16 11:00:36 IQ170000 daemon.info wb-rules[11817]: INFO: the engine is ready
В конечном счете wb-rules запустился сам, но 7 минут старта как-то очень долго. И аналогично wb-rules иногда запускается при загрузке контроллера.
у меня тоже возникли вопросы почему после рестарта сервиса правил они запустились, но по факту вскоре перестали работать. Я правила не трогал при этом, а занимался настройкой GPIO.
Перед этим еще выполнил:
service wb-mqtt-serial restart // status ok
service wb-homa-gpio restart // status ok
service wb-rules restart // status ok
Фрагмент лог-файла:
messages.txt (27.9 КБ)
Здравствуйте! При остановке mosquitto сервис wb-rules тоже завершил работу. Затем по watchdog сервис был перезапущен. Ожидание срабатывания watchdog и заняло столько времени. Сейчас у wb-rules прописана зависимость от сервиса mosquitto, поэтому так происходит. После остановки mosquitto нужно запускать wb-rules вручную. Разработчики обещали это поправить.
Пока проблема не совсем понятна. Скажите, как воспроизвести?
Правила после рестарта не хотят работать ни в каком виде, в отладочном окне ничего не отображается, да и сценарии не работают, хотя кроны в логе были замечены. force-reload помог запустить правила. Вообщем все трудности я ловлю в новом релизе.
Еще через WEB UI не могу посмотреть правила. Ошибка: Error listing the scripts: MQTT RPC request timed out MqttTimeoutError
Все началось с того, что я обновил через ftp файлы сценариев и увидел, что setTimeout не сработал.
Перезагрузил контроллер - js-файлы видны, но если зайти и сохранить, то та же ошибка по таймауту.
force-reload тока спасает после перезагрузки. Что-то здесь не то
Понятно. А какие сейчас у файлов атрибуты?
-rw-r--r-- 1 root root 184 авг 27 01:04 alarms.conf
-rw-r--r-- 1 root root 516 сен 14 01:11 common.js
-rw-r--r-- 1 root root 1598 сен 14 00:11 custom-home-config.conf
-rw-r--r-- 1 root root 24561 сен 14 01:11 heating.js
-rw-r--r-- 1 root root 31166 сен 14 03:27 light.js
-rw-r--r-- 1 root root 0 сен 11 01:24 test.js
-rw-r--r-- 1 root root 32338 сен 14 01:11 vent.js
-rw-r--r-- 1 root root 3903 сен 14 00:32 water.js
А что wb-rules в свой лог пишет при запуске в процессе загрузки контроллера?
Это где смотреть?
journalctl -u wb-rules --since "10 min ago"
Ну и в журналах по времени запуска.
Обновил файл и запустил команду:
journalctl -u wb-rules --since "10 min ago"
root@wirenboard-ATNO6FBW:~# journalctl -u wb-rules --since "10 min ago"
-- Logs begin at Sun 2021-08-29 16:13:12 +03, end at Tue 2021-09-14 23:20:30 +03. --
сен 14 23:19:30 wirenboard-ATNO6FBW wb-rules[7888]: INFO: reloading file: /etc/wb-rules/light.js
сен 14 23:19:31 wirenboard-ATNO6FBW wb-rules[7888]: INFO: [rule info] Загрузка сценариев освещения wb-rules/light.js
Через UI после сохранения правил опять зависание и ошибка в браузере Error saving the file: MQTT RPC request timed out MqttTimeoutError
Может это происходить из-за повторного переопределения defineRule с тем же дескриптором?
Когда я сохраняю изменения, то дескриптор cron-правила schedule_valve_control
уже существует.
// создадим новое/переопределим cron-правило
var schedule_valve_control = createScheduleRule(hours);
runRule(schedule_valve_control);
// Создание правила управления приточными клапанами по времени
function createScheduleRule( hours ) {
return defineRule('valve_schedule_rule', {
when: cron("0 0 "+ hours.toString() + " * * *"),
then: function () {
var hour = data.time_now();
checkValves(hour);
}
});
}
Какая у вас версия пакета wb-rules? Попробуйте удалить (куда-нибудь скопировать) свои правила и запустить сервис вообще без пользовательских правил. Если будет работать нормально, создайте одно простое правило - проверьте его работу. Потом постепенно добавляйте остальные. Возможно, что правил у вас много и они непростые или, может, с ошибками. Поэтому сервис как-то по-особенному на это реагирует.
Я думаю, что правильно будет так:
// создадим новое/переопределим cron-правило
var schedule_valve_control = createScheduleRule; // переменной присваиваем функцию, скобки и аргументы не нужны
schedule_valve_control (1); //вызываем функцию, не правило, уже с аргументом
Или по-другому:
// создадим новое/переопределим cron-правило
var h = 5;
var schedule_valve_control = createScheduleRule(h); //здесь вызываем функцию на выполнение, поэтому нужен аргумент (существующий и инициализированный)
// runRule(schedule_valve_control); нет необходимости - правило будет создано внутри функции