Ошибка в wb-rules или сбой wb-mqtt-serial?

Почитал аналогичные ветки, ответа не нашел.

В определенный момент времени заметил что скрипт при старте не выполняется, например чтобы при загрузке срабатывало реле

function initStart()
{
log.info("======================= MYSTART ==================== ");
dev["A16-MRWL1"]["K1"] = true;
dev["A16-MRWL1"]["K2"] = true;
dev["A16-MRWL1"]["K3"] = true;

dev["A13-MRWL2"]["K1"] = true;
dev["A13-MRWL2"]["K2"] = true;
dev["A13-MRWL2"]["K3"] = true;

publish("zigbee2mqtt/0x54ef4410001991b7/set", JSON.stringify({ state: "ON" }), 2, false);
publish("zigbee2mqtt/0x04cf8cdf3c8b5021/set", JSON.stringify({ state: "ON" }), 2, false);

}
initStart();

При сохранение скрипта - скрипт срабатывает, реле включаются, сообщение в лог пишется. При перезагрузке ничего не происходит (сообщения приходит, сработки реле нет).

Полез в логи вижу следующее:

Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: INFO: [rule info] =======================MYSTART ====================
Aug 13 09:00:41 wirenboard-AFMIIQX7 kernel: [   61.925319] fec 20b4000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx
Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: failed to SetValue for unexisting control
Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: failed to SetValue for unexisting control
Aug 13 09:00:41 wirenboard-AFMIIQX7 kernel: [   62.089024] RTL871X: RTW_ADAPTIVITY_EN_
Aug 13 09:00:41 wirenboard-AFMIIQX7 kernel: [   62.092795] AUTO, chplan:0x20, Regulation:3,3
Aug 13 09:00:41 wirenboard-AFMIIQX7 kernel: [   62.097261] RTL871X: RTW_ADAPTIVITY_MODE_
Aug 13 09:00:41 wirenboard-AFMIIQX7 kernel: [   62.101136] NORMAL
Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: failed to SetValue for unexisting control
Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: failed to SetValue for unexisting control
Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: failed to SetValue for unexisting control
Aug 13 09:00:41 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: failed to SetValue for unexisting control
Aug 13 09:00:42 wirenboard-AFMIIQX7 wb-rules[2177]: INFO: /usr/share/wb-rules/load_alarms.js is NOT under source root /etc/wb-rules
Aug 13 09:00:42 wirenboard-AFMIIQX7 wb-rules[2177]: ERROR: [rule error] failed to open config file: /etc/wb-rules/alarms.conf
Aug 13 09:00:42 wirenboard-AFMIIQX7 wb-rules[2177]: WARNING: couldn't load /usr/share/wb-rules/load_alarms.js: Error: error error (rc -100)
	anon  native strict preventsyield
	anon /usr/share/wb-rules-system/scripts/lib.js:652
	anon /usr/share/wb-rules/load_alarms.js:1 preventsyield
Aug 13 09:00:42 wirenboard-AFMIIQX7 wb-rules[2177]: INFO: all rule files are loaded
Aug 13 09:00:43 wirenboard-AFMIIQX7 kernel: [   64.005147] fec 20b4000.ethernet eth1: Link is Down
Aug 13 09:00:43 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [serial config] A16-MRWL1 override property "id"
Aug 13 09:00:43 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [serial config] A16-MRWL1 override property "name"
Aug 13 09:00:43 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [serial config] A13-MRWL2 override property "id"
Aug 13 09:00:44 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [serial config] A13-MRWL2 override property "name"
Aug 13 09:00:44 wirenboard-AFMIIQX7 kernel: [   64.652905] RTL871X: nolinked power save leave
Aug 13 09:00:44 wirenboard-AFMIIQX7 kernel: [   64.924544] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Aug 13 09:00:44 wirenboard-AFMIIQX7 systemd[1]: Started KNX Daemon.
Aug 13 09:00:44 wirenboard-AFMIIQX7 kernel: [   65.062930] fec 20b4000.ethernet eth1: Link is Up - 100Mbps/Full - flow control rx/tx
Aug 13 09:00:44 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] connection estabilished with code "0" <success>
Aug 13 09:00:44 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 1)
Aug 13 09:00:44 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 3)
Aug 13 09:00:44 wirenboard-AFMIIQX7 kernel: [   65.211798] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
Aug 13 09:00:44 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 4)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 12)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 18)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [register handler] Register <modbus:16:coil: 1> TRegisterHandler::Flush() failed: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 24)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 32)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 38)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: INFO: [mqtt] subscription succeeded (message id 45)
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 09:00:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2191]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 09:00:46 wirenboard-AFMIIQX7 sshd[2324]: Received SIGHUP; restarting.

Что поправить? Посмотреть? Выдать дополнительную информацию?
Могу дать доступ по SSH

Здравствуйте! Я предполагаю следующую ситуацию. Сервис wb-rules стартует раньше, чем сервис wb-mqtt-serial. Поэтому нужных топиков еще не создано, и выдается сообщение об ошибке. Попробуйте первый раз вызывать правило через таймаут секунд около 10. Вот тут есть пример:
Cron правило, после перезагрузки - #5 от пользователя BrainRoot. Однако интервал в 2000 мс рекомендую заменить на 10000 мс или даже 20000 мс (если не поможет).

Проверил, не помогает. Думаю все таки проблемы в serial тк валятся ошибки. Удвлил 2 из 3 шины, на оставшейся оставил 1,2 устройства, но вижу следующие сообщения.
Скрипты все удалены.

Что порекомендуете сделать?

Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: INFO: [serial device] device modbus:16 is disconnected
Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: INFO: [serial device] device modbus:13 is disconnected
Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: INFO: [serial device] device modbus:16 is disconnected
Aug 13 11:38:05 wirenboard-AFMIIQX7 wb-mqtt-serial[2193]: INFO: [serial device] device modbus:13 is disconnected

при этом управление через WUI корректное.
Устройства располагаются в шкафу с WB, длинна шины не более 30см.

Драйвер wb-mqtt-serial несколько раз пытается прочитать регистры устройства, но безуспешно. Затем помечает устройство как отключенное и опрашивает его реже. Похоже на проблемы с подключением или настройками связи. Первым делом проверить питание, провода, настройки связи, порт. Затем с помощью утилиты modbus_client попробовать прочитать регистры устройства.

Подключение надежное и правильное, разве что если есть проблемы в разъеме штатном.

Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[0D][03][00][80][00][01][85][2E]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!
root@wirenboard-AFMIIQX7:~# modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a16 -t0x03 -r128
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[10][03][00][80][00][01][86][A3]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!
root@wirenboard-AFMIIQX7:~#

Если через modbus_client нет коннекта, то каким образом я через WUI управляю реле?

Прошу прощения, не верно команду ввел в модбас клиенте

root@wirenboard-AFMIIQX7:~# modbus_client --debug -mrtu -b115200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r200 -c 6
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 2)
[0D][03][00][C8][00][06][44][FA]
Waiting for a confirmation…
<0D><03><0C><00><4D><00><52><00><57><00><4C><00><33><00><00><7F>
SUCCESS: read 6 of elements:
Data: 0x004d 0x0052 0x0057 0x004c 0x0033 0x0000
root@wirenboard-AFMIIQX7:~#

Что мне с этим делать? Связь есть, это факт. Тем не менее логи вы сами видели, может быть драйверы/пакеты переустановить? Как это сделать?

Попробуйте скорость понизить до 9600 бод. Ошибки есть?

Перевел шину на 9600, оставил одно устройство которое перевел тоже на 9600 - результат тот же самый.

Так. Давайте тогда по порядку. Какие модули подключаете? К какому порту? Другие модули на этом порту работают?
Давайте оставим один проблемный, подключенным к порту и будем работать с ним. Из конфигрурации в веб-интерфейсе тоже удалите все остальное на этом порту. Как я понял, с помощью утилиты modbus_client все нормально, но при использовании wb-mqtt-serial возникают ошибки. Правильно?
В этом случае, проблема может быть в шаблоне устройства. Вы стандартный шаблон используете? Пришлите, пожалуйста, шаблон проблемного устройства и файл конфигурации wb-mqtt-serial.

Пойдем по порядку. Удалил все устройства, в том числе и gpio, удалил скрипты начинаю подключать по одиночке и смотреть что происходит.

В настоящий момент не подключены устройства вижу в логе только следующие ошибки:

Aug 15 14:37:20 wirenboard-AFMIIQX7 wb-rules[1308]: WARNING: couldn't load /usr/share/wb-rules/load_alarms.js: Error: error error (rc -100)
	anon  native strict preventsyield
	anon /usr/share/wb-rules-system/scripts/lib.js:652
	anon /usr/share/wb-rules/load_alarms.js:1 preventsyield
Aug 15 14:37:21 wirenboard-AFMIIQX7 wb-rules[1308]: INFO: all rule files are loaded

....

Aug 15 14:37:45 wirenboard-AFMIIQX7 wb-mqtt-serial[2154]: ERROR: [serial] Error parsing config file: no devices defined in config. Nothing to do

Начинаю по очереди подключать периферию с просмотром логов.
Что делать с выше обозначенными ошибками?

  1. Сделал возврат к заводским настройкам через WUI.
  2. Физически отключил все устройства кроме боковых модулей (проблематично в собранном шкафу)
  3. Добавил все боковые модули в конфигурацию, прилагаю wb-hardware.conf (3.3 КБ)
  4. Подключил на первой шине первое устройство WB-MRWL в качестве шаблона устройства выбрал родной конфиг wb-mr3 wb-mqtt-serial.conf (1.3 КБ)
  5. Написал простой скрипт для старта реле через 20 секунд после перезагрузки, _start.js (793 Байта)
  6. После перезагрузки вижу в логах все теже ошибки связанные с таймаутом. Пару раз скрипт не отработал, в большей части отрабатывает и реле запускаются.
  7. Поменял шаблон устройств на свой, в котором убрал часть неиспользуемых контролов, прилагаю файл config-wb-hc-mr3.json (761 Байт) . На работе это ни как не сказалось.

Отвалился зигби после возврата к заводским настройкам, будем позже разбираться. Пока интересует проводная связь.

Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [register handler] Register <modbus:16:coil: 1> TRegisterHandler::Flush() failed: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:13: Serial protocol error: request timed out
Aug 15 16:26:04 wirenboard-AFMIIQX7 wb-mqtt-serial[1583]: WARNING: [modbus] failed to read 3 coil(s) @ 0 of device modbus:16: Serial protocol error: request timed out

После танцев с бубнами так и не нашел причину почему с момента старта контроллера происходит какая то турбулентность на RS-485-1 шине расположенной внутри шкафа с контроллером. На второй шине уходящей в поле - датчики, не наблюдаю connected/disconnected и таймауты что на первой шине.

После старта, примерно через 20 секунд ситуация на шине RS-485-1 стабилизируется и скрипты начинают работать корректно. Далее в процессе бывают ошибки с таймаутами и на 1 и 2 шине, но не такие массовые что при перезагрузке контроллера.

В скрипте задержку сделал 30 секунд на включение реле, сейчас работает скрипт корректно, но вопросы и непонимание остались.

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

У нас есть только модуль WB-MRWL3.

Питание интерфейса Modbus-модуля у вас от порта контроллера подключено? Дело может быть в том, что питание на порты контроллера подается не сразу, а после полной загрузки контроллера. Сервис wb-mqtt-serial стартует чуть раньше и пытается опрашивать устройства, на которые еще не подано питание для интерфейса. Отсюда и ошибки. Спустя несколько секунд (после полной загрузки системы) появляется питание на портах контроллера, и устройства начинают работать нормально. Если это мешает, можно запитать Modbus-устройтва не от порта, а непосредственно от блока питания. В этом случае питание на них будет всегда, и ошибок при загрузке быть не должно.

Возможно, следует проверить качество прокладки шины RS-485 или снизить скорость обмена.

1 лайк

Я думаю вы правы, Попробую как буду на объекте подать питание по новой схеме.
Сейчас шина RS1 питание подано с контроллера, RS2 с блока питания и как писал ранее по второй шине не наблюдаю такого что на первой при загрузке контроллера.