Периодически пропадает связь с mqtt-serial

Добрый день, господа разработчики.

Уже не в первый раз замечаю, что глючит автоматизация моего коттеджа и заставляет нервничать. Вот опять не WB-RULES отвалились, так WB-MQTT-SERIAL. Пришлось снова перезапускать процесс через терминал. Помогите найти причину и может разработать механизм извещения о потере связи с тем или иным процессом. При перезапуске вот что происходит:
image

Добрый день,

посмотрите пожалуйста в лог-файл /var/log/messages и приложите вывод команды

cat /var/log/messages | grep serial | tail -n 20

root@wirenboard-ARAXKJYF:~# cat /var/log/messages | grep serial | tail -n 20
Apr 21 20:35:08 wirenboard-ARAXKJYF user.notice serial: Init: GPINTEN: setup register <modbus_io:191:1:: 10002> <-- 65535
Apr 21 20:35:08 wirenboard-ARAXKJYF user.notice serial: Init: DEFVAL: setup register <modbus_io:191:1:: 10003> <-- 0
Apr 21 20:35:08 wirenboard-ARAXKJYF user.notice serial: Init: INTCON: setup register <modbus_io:191:1:: 10004> <-- 0
Apr 21 20:35:08 wirenboard-ARAXKJYF user.notice serial: Init: IOCON: setup register <modbus_io:191:1:: 10005> <-- 17476
Apr 21 20:35:08 wirenboard-ARAXKJYF user.notice serial: Init: CONFIG-FLAG: setup register <modbus_io:191:1:: 9999> <-- 1
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: IODIR: setup register <modbus_io:185:3:: 10000> <-- 0
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: IPOL: setup register <modbus_io:185:3:: 10001> <-- 0
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: GPINTEN: setup register <modbus_io:185:3:: 10002> <-- 65535
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: DEFVAL: setup register <modbus_io:185:3:: 10003> <-- 0
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: INTCON: setup register <modbus_io:185:3:: 10004> <-- 0
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: IOCON: setup register <modbus_io:185:3:: 10005> <-- 17476
Apr 21 20:35:11 wirenboard-ARAXKJYF user.notice serial: Init: FLAG: setup register <modbus_io:185:3:: 9999> <-- 1
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: ModbusRTU::ReadRegisterRange(): failed to read 16 holding(s) @ 250 of device modbus_io:185:2: Serial protocol error: request timed out
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: IODIR: setup register <modbus_io:185:2:: 10000> <-- 65535
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: IPOL: setup register <modbus_io:185:2:: 10001> <-- 0
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: GPINTEN: setup register <modbus_io:185:2:: 10002> <-- 65535
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: DEFVAL: setup register <modbus_io:185:2:: 10003> <-- 0
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: INTCON: setup register <modbus_io:185:2:: 10004> <-- 0
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: IOCON: setup register <modbus_io:185:2:: 10005> <-- 17476
Apr 21 21:32:58 wirenboard-ARAXKJYF user.notice serial: Init: CONFIG-FLAG: setup register <modbus_io:185:2:: 9999> <-- 1
root@wirenboard-ARAXKJYF:~#

Вот фрагмент log файла в момент зависания и перезагрузки контроллера:

messages2.txt (6,1 КБ)

В первом выводе нет ничего плохого, драйвер работает.

Про какое “зависание” и “перезагрузку” вы дальше говорите, я не очень понимаю. В messages2.txt сообщение об ошибке

Apr 18 21:31:07 wirenboard-ARAXKJYF user.notice serial: FATAL: Serial protocol error: can't write to discrete. Stopping event loops.

Оно значит следующее: вы попытались вручную через MQTT отправить сообщение в топик, который ассоциирован с read-only регистром. Драйвер выругался и завершил работу.

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

так вот нет никаких сбойных модулей, есть попытка записи по MQTT в регистр, который неподдерживает запись. Эта же часть моего сообщения вам понятна?
Итого нужно понять, как так вышло.

Я правильно понял, что вы ничего сами в MQTT не отправляли? Если так, то

  1. Выложите сюда полностью /etc/wb-mqtt-serial.conf (как приложение или внутри тройных обратных апострофов ``` )
  2. С какими сторонними системами или приложениями вы используете Wiren Board? iRidium, openHAB, MQTTDash, что-то ещё?

Я понял, что Вы написали, но мне не легче от этого. Я написал правила для управления модулями и все, больше ничего не подключал из вне. Устройства WB работают какое-то время, потом бац… или wb-rules или wb-mqtt-serial перестают отвечать. Сколько раз я уже тут говорю об этом, но никто не слышит меня. По мне так проблема связана с модулями wbio, а другие устройства wbmrc работают стабильно. А вообще, log файл напичкан кучей не понятной информацией, точнее, она никак не помогает отследить что-либо пока. Да и время слетает к тому же, там это можно увидеть (-3часа) после перезагрузки контроллера.
Делайте что-то уже.

wb-mqtt-serial.conf (8,5 КБ)

Вот еще кусок log файла месяцем ранее, - тогда правила зависли. Может он что-то прояснит.

messages1.txt (1,7 КБ)

Нет, вы не правы.

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

Ещё раз: в этой теме мы решаем проблему с тем, что периодически у вас падает сервис wb-mqtt-serial, иногда он падает даже после перезагрузки. В логе есть запись о том, почему сервис упал:

 Apr 18 21:31:07 wirenboard-ARAXKJYF user.notice serial: FATAL: Serial protocol error: can't write to discrete. Stopping event loops.

Что она значит, я выше написал. Запись в read-only регистр может происходить и из правил. Например, Если вы напишете что-нибудь типа

dev["wb-mr6c_1/Input 1"] = 1 

то драйвер wb-mqtt-serial вылетит как раз с такой же ошибкой из-за попытки записи в read-only регистр.
Поэтому пожалуйста проверьте свои правила. Можете запустить

mosquitto_sub -v -t /devices/+/controls/+/on

чтобы смотреть, что за сообщения отправляются правилами и найти подозрительные.

Если вам непонятно хоть что-то из того, что я написал - задавайте уточняющие вопросы.

Жалобы и сообщения не про падение wb-mqtt-serial я в этой теме буду удалять.

Такое я точно не писал. И ещё учтите, сценарии же работают какое-то время, а сбой происходит не в системе.

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

не понял эту фразу

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

Я имел ввиду что нет зависимости ни от каких событий, когда сбой может произойти. Это и плохо, что отловить ошибку становится крайне проблематично.

А терминал придётся включённым постоянно что-ли держать, чтобы отлавливать ошибку? Там же сессия закончится и вуаля. ???

Евгений, доброй ночи.

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


Позже выяснилось, что файл все же сохранился.

В Devices вручную свет удалось погасить через контрол. После проверил, что датчику движения сработало правило-включился свет и позже через минуту погас.

Пробовал в терминале запустить команду
( mosquitto_sub -v -t /devices/+/controls/+/on)
Чтобы отловить ошибку, и вот что вижу:
image

Последние три действия мною совершенные как раз, что я описал.

В лог-файле:
Apr 25 21:12:00 wirenboard-ARAXKJYF user.warn wb-mqtt-db[3342]: 2018-04-25 21:12:00.223 WARN: Channel data limit is reached: channel wb-w1/28-031644d155ff, row count 10201, limit 10000
Apr 26 00:13:59 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: reloading file: /etc/wb-rules/light.js
Apr 26 00:18:33 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: reloading file: /etc/wb-rules/light.js
Apr 26 00:19:24 wirenboard-ARAXKJYF auth.info sshd[10478]: Accepted password for root from 192.168.0.111 port 58004 ssh2
Apr 26 00:19:24 wirenboard-ARAXKJYF authpriv.info sshd[10478]: pam_unix(sshd:session): session opened for user root by (uid=0)
Apr 26 00:19:24 wirenboard-ARAXKJYF auth.info sshd[10480]: lastlog_openseek: Couldn’t stat /var/log/lastlog: No such file or directory
Apr 26 00:19:24 wirenboard-ARAXKJYF auth.info sshd[10480]: lastlog_openseek: Couldn’t stat /var/log/lastlog: No such file or directory
Apr 26 00:24:20 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: [rule info] ROOM: [LIGHT TIMER IS OUT] Light: OFF
Apr 25 21:26:01 wirenboard-ARAXKJYF user.warn wb-mqtt-db[3342]: 2018-04-25 21:26:01.968 WARN: Group data limit is reached: group all, row count 102001, limit 100000
Apr 26 00:30:50 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: reloading file: /etc/wb-rules/light.js
Apr 26 00:32:53 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: [rule info] [STAIRS 2]: MOVING DETECTOR ACTIVATED… Light: ON
Apr 26 00:33:53 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: [rule info] [STAIRS 2]: Time (1min) is up. Light: OFF
Apr 26 00:36:23 wirenboard-ARAXKJYF user.notice serial: ModbusRTU::ReadRegisterRange(): failed to read 16 coil(s) @ 0 of device modbus_io:185:3: Serial protocol error: request timed out
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: IODIR: setup register <modbus_io:185:3:: 10000> <-- 0
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: IPOL: setup register <modbus_io:185:3:: 10001> <-- 0
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: GPINTEN: setup register <modbus_io:185:3:: 10002> <-- 65535
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: DEFVAL: setup register <modbus_io:185:3:: 10003> <-- 0
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: INTCON: setup register <modbus_io:185:3:: 10004> <-- 0
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: IOCON: setup register <modbus_io:185:3:: 10005> <-- 17476
Apr 26 00:36:29 wirenboard-ARAXKJYF user.notice serial: Init: FLAG: setup register <modbus_io:185:3:: 9999> <-- 1
Apr 26 00:39:48 wirenboard-ARAXKJYF authpriv.info sshd[10131]: pam_unix(sshd:session): session closed for user root
Apr 25 21:44:00 wirenboard-ARAXKJYF user.warn wb-mqtt-db[3342]: 2018-04-25 21:44:00.194 WARN: Channel data limit is reached: channel wb-mr6c_19/Supply voltage, row count 10201, limit 10000
Apr 26 00:53:59 wirenboard-ARAXKJYF daemon.info wb-rules[16975]: INFO: [rule info] ROOM: [LIGHT TIMER IS OUT] Light: OFF
Apr 25 21:54:00 wirenboard-ARAXKJYF user.warn wb-mqtt-db[3342]: 2018-04-25 21:54:00.191 WARN: Channel data limit is reached: channel wb-mr6c_42/Supply voltage, row count 10201, limit 10000

Так это потому, что с первого и со второго раза очень сложно понять, что именно вы хотите сказать.

вот что это значит?

при чём тут это вообще?

не понимаю это

Я не знаю, что ещё и как сказать. Достаточно информации я уже предоставил. Вообщем вы помочь не можете. Может есть у вас ещё специалисты, которые выскажутся или мне звонить уже надо?

Добрый день!

Чтобы мы смогли вам помочь с проблемой, нужны ответы по пунктам:

  1. Что вы делали? (например, “написал правило. Его содержимое прикладываю. Оно включает свет тогда-то и выключает тогда-то. Это правило нормально включало и выключало свет последние N дней”)
  2. Что вы ожидали получить? (например, “чтобы сегодня свет выключится в XX:XX”)
  3. Что вы на самом деле получили? (например, "сегодня свет НЕ выключился в XX:XX ")

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