Wb-rules через какое то время перестают работать некоторые правила

Есть такой простой скрипт (правило):

defineVirtualDevice('recirk_mode', {
	title:'Режим рециркуляции',
	cells: {
		'Циклический круглосуточный': {
			type:'switch',
			value: false,
			},
      'Циклический дневной': {
			type:'switch',
			value: false,
        	}
	}
});
defineRule("Выбор режима круглосуточный",{
  when: function() {
    return dev['recirk_mode/Циклический круглосуточный'];
  },
  then: function (newValue, devName, cellName) {
    dev["recirk_mode"]["Циклический дневной"] = false;
  }
});

defineRule("Выбор режима дневной",{
  when: function() {
    return dev['recirk_mode/Циклический дневной'];
  },
  then: function (newValue, devName, cellName) {
    dev["recirk_mode"]["Циклический круглосуточный"] = false;
  }
});

по факту он пока ничего не делает в реальности, просто работает как виртуальный переключатель. Задействовать планируется в будущем. Сейчас я его использую для проверки работы движка правил.

Итак, ловим проблему:
Перезагрузка wb-rules, правила работают четко, веб-страница с правилами открывается быстро. Через 1-2 дня переключение перестает работать, т.е. это правило не работает, веб-страница с правилами тоже перестает нормально открываться (показывает загрузку и в итоге пустая).
До этого искал проблему в более сложных правилах, но в итоге уже почти все отключил, за исключением примитивных и всё равно, ситуация не меняется. Сервис wb-rules активен:

# systemctl status wb-rules
● wb-rules.service - MQTT Rule engine for Wiren Board
   Loaded: loaded (/lib/systemd/system/wb-rules.service; disabled; vendor preset
   Active: active (running) since Thu 2022-04-14 23:30:09 MSK; 11h ago
 Main PID: 25669 (wb-rules)
   CGroup: /system.slice/wb-rules.service
           └─25669 /usr/bin/wb-rules -syslog -editdir /etc/wb-rules/ /usr/share/

В итоге перезапускаю, всё начинает работать. Не знаю, куда дальше копать и какие логи смотреть.
При запуске wb-rules такой лог:

апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: WARNING: [rule warning] DAC: EXT5_O3: IIO device not found, skipping
апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: WARNING: [rule warning] DAC: EXT5_O4: IIO device not found, skipping
апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: WARNING: [rule warning] DAC: EXT5_O5: IIO device not found, skipping
апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: WARNING: [rule warning] DAC: EXT5_O6: IIO device not found, skipping
апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: WARNING: [rule warning] DAC: EXT5_O7: IIO device not found, skipping
апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: WARNING: [rule warning] DAC: EXT5_O8: IIO device not found, skipping
апр 15 10:50:18 wirenboard-AUOLFEEE wb-rules[23607]: INFO: system/DTS Version: failed to convert value '', passing raw
апр 15 10:50:19 wirenboard-AUOLFEEE wb-rules[23607]: INFO: [rule info] add your rules to /etc/wb-rules/
апр 15 10:50:19 wirenboard-AUOLFEEE wb-rules[23607]: INFO: /usr/share/wb-rules/load_alarms.js is NOT under source root /etc/wb-rules
апр 15 10:50:19 wirenboard-AUOLFEEE wb-rules[23607]: INFO: all rule files are loaded

Устройств DAC: EXT5_O8: IIO device not found, skipping - по факту нет. Возможно остатки старых конфигураций.
Лог за пару дней попробую приложить, в какой момент повисание, не пойму.
wb-rules_20220413T100734.log (19.2 КБ)

Добрый день.
а почему используете function() вместо whenChanged?

Для отслеживания изменения топика - оптимальней.
Традиционно спрошу: А какой релиз на контроллере?
Возможно (похоже) на тему Ребут на ровном месте - #115 от пользователя KuZia495
А какой объем памяти потребляет wb-rules? после перезапуска и в процессе работы.

По использованию function не могу прокомментировать, нет мне оправданий)
Релиз:

Welcome to Wiren Board 6.8.2 (s/n AUOLFEEE), release wb-2201 (as stable)
Linux wirenboard-AUOLFEEE 5.10.35-wb105 #1 Wed Feb 2 21:09:31 UTC 2022 armv7l GN                                                        U/Linux

В процессе проверки потребления ресурсов возникла очень странная проблема, при вводе команд top и htop ничего не показывает, просто пустой черный экран консоли. Прерываю Ctrl+C и консоль появляется. Это мне вообще не понятно.

Тему читаю.

Я вообще все правила (ещё на WB5) перевёл с whenChanged на cron("@every XXX"), так как часть правил довольно витиеваты и частое (например, срабатывание по изменению напряжения) выполнение потребляет ресурсы.
На whenChanged оставлены только кнопки, правила требующие максимально быстрой реакции.

1 Like

Проанализировал своё правило… Там смысл в том, что при включении одного выключателя, должен выключиться второй, обязательно. Т.е. активен может быть только один. Включаем первый, выключается второй, включаем второй, выключается первый. Выключаем рабочий в текущий момент, тогда выключены оба.
Т.е. смысл правила в том, что в один момент времени либо оба не активны, либо активен один.
Пока увидел решение только таким образом.

Тему дочитал. Пока вывод один, обновиться на тестовую сборку? Правильно понял?

Да, надо прверить, не та ли проблема. Ну и - проконтролируйте ресурсы, возможно все же “течет”.

Здравствуйте!
@Rainstation А какие версии пакетов ПО у вас установлены, при которых воспроизводится проблема? Пришлите, пожалуйста, архив с диагностической информацией или покажите полный вывод команды в консоли контроллера:

dpkg -l

Версии пакетов:
v-packet.txt (36.9 КБ)

А вот сборщик данных вот так висит:

Ок, попробую сменить ветку.


Повторюсь, команда top ничего не выводит
image
Прерываю Ctrl+C
Команда htop, ожидаемо очищается экран и остается черным, пока аналогично не нажмешь Ctrl+c

Дайте наводку, как лучше всего это сделать.

Обновление до тестовой ветки:

Welcome to Wiren Board 6.8.2 (s/n AUOLFEEE), release staging.03811 (as testing)
Linux wirenboard-AUOLFEEE 5.10.35-wb109 #1 Wed Mar 16 07:18:32 UTC 2022 armv7l GNU/Linux

Перезагрузка контроллера, запуск, через два часа…

root@wirenboard-AUOLFEEE:~# systemctl status wb-rules
● wb-rules.service - MQTT Rule engine for Wiren Board
   Loaded: loaded (/lib/systemd/system/wb-rules.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

Перечислю, что настроено дополнительно:

  • MQTT Bridge с другим контроллером рядом (пока отключил, перезапустил wb-rules)
  • сервис tasmota2wb
  • прописанное вручную устройство на modbus рекуператор Турков HECO
  • nodered
  • Правила:
    boiler_control.js (1.0 КБ)
    recirkulation.js (1.1 КБ)
    virtual_switch.js (1.5 КБ)

Больше ничего такого не вижу, что дополнительно может влиять на его работу. Остальные все правила и скрипты отключены.
Данные диагностики:
diag_output_AUOLFEEE_2022-04-15-18.17.46.zip (121.4 КБ)

Покажите весь лог из journald за время 15:05:00 - 15:15:00
Судя по времени сервис был закрыт в это промежуток.

Я правильно понимаю, отсюда лог надо?

Если да, то в этом промежутке такие строки:

15-04-2022 15:12:05.379	System journal (/var/log/journal/74f09575e0cb77ba5ea7e9286086ac7a) is 484.0M, max 479.9M, 0B free.
15-04-2022 15:12:05.379	Time spent on flushing to /var is 402.557ms for 293 entries.
15-04-2022 15:11:58.184	Runtime journal (/run/log/journal/74f09575e0cb77ba5ea7e9286086ac7a) is 6.2M, max 50.1M, 43.8M free.
15-04-2022 15:11:58.182	Journal started

Лучше в командной строке контроллера выполните:

journalctl --since "2022-04-15 15:05" --until "2022-04-15 15:15" > /root/log

А затем пришлите файл /root/log.

Я понимаю ситуацию так. Как видно из статуса, данный сервис у вас сейчас отключен (disabled). То есть при запуске контроллера он не будет автоматически запущен. В логах последняя запись от сервиса wb-rules была апр 15 15:10:17. Также в Fri 2022-04-15 15:10:17 MSK была перезагрузка контроллера. После перезагрузки сервис не запустился, так как он отключен.

Думаю, что надо включить сервис командой:

systemctl enable wb-rules

Перезагрузите контроллер, проверьте статус сервиса. Затем проконтролируйте статус сервиса через некоторое время снова.

log (171.4 КБ)

Да, сервис был отключен. Включил его, статус enabled. Мониторю ситуацию.