Oшибка при старте сервиса wb-rules


#1

Постоянно при запуске сервиса в логе пишется следующая ошибка:

Feb 3 16:40:11 wb daemon.info wb-rules[17555]: INFO: MQTT connection established
Feb 3 16:40:12 wb daemon.info wb-rules[17555]: ERROR: command ‘/bin/sh -c echo 3 > /sys/class/pwm/pwmchip0/export’ failed with exit status 1

Это что-то у меня не правильно в правилах или …?

aqualx@wb …/data/opt/miflora-mqtt-daemon $ dpkg -s ‘wb-rules’
Package: wb-rules
Status: install ok installed
Priority: optional
Section: misc
Installed-Size: 5854
Maintainer: Ivan Shvedunov ivan4th@gmail.com
Architecture: armel
Version: 1.7
Depends: libc6 (>= 2.13)
Breaks: wb-mqtt-confed (<< 1.0.2)
Conffiles:
/etc/init.d/wb-rules 8e78313c448b8ea3f41d1a698c6db63f
/etc/wb-configs.d/13wb-rules 1236e2e4343d949e0a21de865706c00b
/etc/wb-rules/alarms.conf 2051dd214a6232c5e778c50e52d5fb6a
/etc/wb-rules/rules.js 926c30d0fd63e272f6f9ad370dffb1b0
Description: Wiren Board Rule Engine

PS: WB 5.3 + Debian Stretch


#2

aqualx, добрый день!
Мне кажется, что проблема с новым движком правил (1.7) и старой прошивкой. Это ошибка при инициализации бипера.
Пришлите, пожалуйста вывод команды ls -la /sys/class/pwm/ и ls -la /sys/class/pwm/pwmchip0


#3

aqualx@wb ~ $ ls -la /sys/class/pwm/
total 0
drwxr-xr-x 2 root root 0 Feb 4 12:35 .
drwxr-xr-x 41 root root 0 Feb 4 12:35 …
lrwxrwxrwx 1 root root 0 Feb 4 12:35 pwmchip0 -> …/…/devices/soc0/80000000.apb/80040000.apbx/80064000.pwm/pwm/pwmchip0

aqualx@wb ~ $ ls -la /sys/class/pwm/pwmchip0
lrwxrwxrwx 1 root root 0 Feb 4 12:35 /sys/class/pwm/pwmchip0 -> …/…/devices/soc0/80000000.apb/80040000.apbx/80064000.pwm/pwm/pwmchip0


#4

И, пожалуйста, еще ls -la /sys/devices/soc0/80000000.apb/80040000.apbx/80064000.pwm/pwm/pwmchip0

К этой ошибке приводит правило /usr/share/wb-rules-system/rules/buzzer.js
/Если оно вам мешает, а функциональностью пищалки в контроллере вы не пользуетесь, можете удалить этот файл, сохранив копию.


#5

Не то чтобы мешает, просто иногда сложно понять это твоя ошибка в правиле дала сбой или что-то другое.

aqualx@wb ~ $ ls -la /sys/devices/soc0/80000000.apb/80040000.apbx/80064000.pwm/pwm/pwmchip0
total 0
drwxr-xr-x 4 root root 0 Feb 5 16:18 .
drwxr-xr-x 3 root root 0 Feb 5 00:58 …
lrwxrwxrwx 1 root root 0 Feb 5 16:18 device -> …/…/…/80064000.pwm
–w------- 1 root root 4.0K Feb 5 01:15 export
-r–r--r-- 1 root root 4.0K Feb 5 16:18 npwm
drwxr-xr-x 2 root root 0 Feb 5 16:18 power
drwxr-xr-x 3 root root 0 Feb 5 16:18 pwm3
lrwxrwxrwx 1 root root 0 Feb 5 00:58 subsystem -> …/…/…/…/…/…/…/class/pwm
-rw-r–r-- 1 root root 4.0K Feb 5 00:58 uevent
–w------- 1 root root 4.0K Feb 5 16:18 unexport


#6

Ну, косвенно можно понять, что вы не писали в своих правилах команды
/bin/sh -c echo 3 > /sys/class/pwm/pwmchip0/export
Проверьте, если не сложно, она выполняется у вас в командной строке?
Насколько у вас свежее ПО? Давно делали apt-get update и apt-get upgrade?


#7

root@wb ~ # /bin/sh -c echo 3 > /sys/class/pwm/pwmchip0/export
sh: echo: I/O error

Последний раз удалось сделать полный апдейт сегодня ночью, до этого - начало января. И сегодня данной ошибки в логе пока не видел…
Вот что удалось обновить:

Preparing to unpack …/0-wb-utils_2.1.2_all.deb …
Unpacking wb-utils (2.1.2) over (2.0.3) …
Preparing to unpack …/1-wb-configs_1.79_all.deb …
Unpacking wb-configs (1.79) over (1.78) …
dpkg: warning: unable to delete old directory ‘/etc/udev/wb’: Directory not empty
Preparing to unpack …/2-u-boot-tools_2%3a2017.03+wb-2_all.deb …
Unpacking u-boot-tools (2:2017.03+wb-2) over (2017.03+wb-1) …
Selecting previously unselected package u-boot-tools-wb.
Preparing to unpack …/3-u-boot-tools-wb_2%3a2017.03+wb-2_armel.deb …
Unpacking u-boot-tools-wb (2:2017.03+wb-2) …
Preparing to unpack …/4-wb-hwconf-manager_1.26.0_all.deb …
Unpacking wb-hwconf-manager (1.26.0) over (1.25.1) …
Preparing to unpack …/5-wb-homa-adc_1.14.6_armel.deb …
Unpacking wb-homa-adc (1.14.6) over (1.14.4) …
Preparing to unpack …/6-wb-test-suite_1.15.1_all.deb …
Unpacking wb-test-suite (1.15.1) over (1.15) …
Setting up u-boot-tools-wb (2:2017.03+wb-2) …
Processing triggers for systemd (232-25+deb9u8) …
Setting up u-boot-tools (2:2017.03+wb-2) …
Setting up wb-utils (2.1.2) …
Installing new version of config file /etc/wb_env.sh …
Setting up wb-homa-adc (1.14.6) …
Setting up wb-configs (1.79) …
*** OMINOUS WARNING ***: /etc/hostname is not linked to either hostname.wb or hostname.wb-orig
*** OMINOUS WARNING ***: /etc/network/interfaces is not linked to either interfaces.wb or interfaces.wb-orig
*** OMINOUS WARNING ***: /etc/dnsmasq.conf is not linked to either dnsmasq.conf.wb or dnsmasq.conf.wb-orig
*** OMINOUS WARNING ***: /etc/hostapd.conf is not linked to either hostapd.conf.wb or hostapd.conf.wb-orig
Adding ‘diversion of /etc/fw_env.config to /etc/fw_env.config.wb-orig by wb-configs’
Setting up wb-hwconf-manager (1.26.0) …
Setting up wb-test-suite (1.15.1) …

Вот список всего что стоит на данный момент.

root@wb ~ # apt list --installed | grep wb-

python-wb-common/stretch,stretch,now 1.3.2 all [installed,automatic]
python-wb-io/stretch,now 1.2.3 armel [installed]
u-boot-tools/stretch,stretch,now 2:2017.03+wb-2 all [installed]
u-boot-tools-wb/stretch,now 2:2017.03+wb-2 armel [installed]
wb-adc-tools-mxs/stretch,now 1.0 armel [installed]
wb-configs/stretch,stretch,now 1.79 all [installed]
wb-configs-stretch/stretch,stretch,now 1.79 all [installed]
wb-daemon-watchdogs/stretch,stretch,now 1.1 all [installed]
wb-dt-overlays/stretch,stretch,now 1.3 all [installed]
wb-homa-adc/stretch,now 1.14.6 armel [installed]
wb-homa-gpio/stretch,now 1.19.5 armel [installed]
wb-homa-w1/stretch,now 1.10.1 armel [installed]
wb-hwconf-manager/stretch,stretch,now 1.26.0 all [installed]
wb-mqtt-confed/stretch,now 1.2.2 armel [installed]
wb-mqtt-dac/stretch,stretch,now 1.1.1 all [installed]
wb-mqtt-db/stretch,now 1.7.3 armel [installed]
wb-mqtt-db-cli/stretch,stretch,now 1.2.1 all [installed]
wb-mqtt-homeui/now 2.0~beta8 all [installed,local]
wb-mqtt-serial/stretch,now 1.47.2 armel [installed]
wb-rules/stretch,now 1.7 armel [installed]
wb-rules-system/stretch,stretch,now 1.6.2 all [installed]
wb-test-suite/stretch,stretch,now 1.15.1 all [installed]
wb-utils/stretch,stretch,now 2.1.2 all [installed]


#8

Отлично! А можете посмотреть, ядро какой сборки у вас сейчас?
apt list --installed | grep image


#9

Увы, но не отлично :roll_eyes: Сегодня само-перезапускались правила (отваливается сервис wb-rules) и ошибка снова есть в логе…

aqualx@wb ~ $ apt list --installed | grep image
linux-firmware-image-4.9.22-wb2/stretch,stretch,now 4.9+wb20190126112722 all [installed,automatic]
linux-image-4.9.22-wb2/stretch,now 4.9+wb20190126112722 armel [installed,automatic]
linux-image-wb2/stretch,now 4.9+wb20190126112722 armel [installed]


#10

Может еще подскажете как увидеть полный стек ошибки. В каком-то скрипте, похоже, есть ошибка, т.к. при перезапуске сервиса wb-rules выскакивает еще и такая ошибка:

ERROR: [rule error] ECMAScript error: Error: error error (rc -100) >-anon native strict preventsyield >-ensureCell /usr/share/wb-rules-system/scripts/lib.js:50 >—anon /usr/share/wb-rules-system/scripts/lib.js:60 preventsy

Не понятно в каком скрипте и из-за чего. Все скрипты при сохранении в UI не выдают никаких ошибок.


#11

Насколько я помню, ошибка с баззером некритичная, на работу движка не должна влиять. Вам спасибо за информацию, разберемся.
Сообщение последней ошибки у вас взято из консоли, верно? Оно самое информативное, больше не добиться.
Смотрите, когда совсем непонятно, в каком правиле ошибка, можно поступить следующим образом.

  1. Найдите, как запущен процесс wb-rules
    pgrep -a wb-rules
    Получите что-то похожее на
    445 /usr/bin/wb-rules -syslog -editdir /etc/wb-rules /usr/share/wb-rules-system/rules/ /etc/wb-rules /usr/share/wb-rules/
    Скопируйте команду вызова в буфер обмена.
  2. Остановить сервис wb-rules.
  3. Переместите ваши скрипты из папки /etc/wb-rules куда-нибудь, оставив подозрительный.
  4. Командой из пункта 1 запустите движок. Добавьте ключ -debug
  5. Если все запустилось, то завершаете движок по ^c, и добавляете новый скрипт. И так до победного.

Мне кажется, что у вас в каком-то правиле проблемы с обращением к контролам виртуального устройства вне обработчика событий, в части кода, которая выполняется сразу при старте скрипта. К этому моменту виртуальное устройство может быть еще не создано, например, и вы получаете ошибку.