Wb-mqt-serial потерял связь с MQTT

Добрый день!

Сегодня wb-mqtt-serial потерял связь с MQTT и ничего не предпринял. Сервис работал:


root@IQ371000:~# journalctl -u wb-mqtt-serial -f
-- Logs begin at Thu 2016-11-03 17:16:43 UTC. --
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: WARNING: [backend] Unable to publish, no connection to broker
Sep 04 03:07:02 IQ371000 wb-mqtt-serial[5577]: ERROR: [mqtt] disconnect error: MOSQ_ERR_NO_CONN
^C
root@IQ371000:~# service ^C
root@IQ371000:~# ps -aux | grep wb-mqtt-serial
root      2104  0.0  2.0  47736 10640 ?        Ssl  00:36   0:09 /usr/bin/wb-mqtt-serial
root      5089  0.0  0.3   5872  1604 pts/0    S+   09:15   0:00 grep wb-mqtt-serial
root@IQ371000:~# date
Tue Sep  5 09:15:07 UTC 2023
root@IQ371000:~# apt-cache policy wb-mqtt-serial
wb-mqtt-serial:
  Installed: 2.68.6-wb106
  Candidate: 2.68.6-wb106
  Version table:
 *** 2.68.6-wb106 990
        990 http://deb.wirenboard.com/wb6/stretch stable/main armhf Packages
        100 /var/lib/dpkg/status

Здравствуйте.
Расскажите, вносили ли какие-либо изменения перед появлением проблемы?
Пришлите диагностический архив.
Пробовали ли перезагружать драйвер wb-mqtt-serial? Если нет, то перезапустите (после сбора данных для диагностики).

А что в логах самого брокера? Включен ли в брокере persistence?
Прочие сервисы - соединяются и работают?
И можно ли к брокеру подключиться с помощью, например, mossquittio_sub?

В общем хочется выяснить: проблема только в wb-mqtt-serial или у брокера.

mosquitto_sub работал, другие сервисы, например wb-rules тоже работали.
Мост MQTT между контроллером и сервером работал.

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

Диагностический архив чуть позже смогу отправить.

Выключен

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

Контроллер перезагружался в 0:30 по UTC.

релиз wb2207

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

приложен диагностический архив, доступен только сотрудникам поддержки
(87,8 КБ)

К сожалению в архиве логи wb-mqtt-serial только

Sep 05 11:37:51 IQ371000 wb-mqtt-serial[5327]: WARNING: [register handler] failed to write: <modbus:50:coil: 4>: Serial protocol error: request timed out

Есть возможность выгрузить в файл лог за время с перезагрузки контроллера?

Здравствуйте.
Диагностический архив как будто не полный. Пришлите еще раз.
Также хотел был уточнить. В логах есть ошибка:

-- Reboot --
Aug 18 03:20:58 IQ371000 systemd[1]: Started Generates wb-mqtt-serial UI schema for wb-mqtt-confed.
Aug 18 03:22:02 IQ371000 wb-mqtt-serial[570]: ERROR: [serial config] File: /usr/share/wb-mqtt-serial/templates/config-uniel-uch-m141rc.json error: Validation failed.

Данную проблему решали? Или она и сейчас присутствует?

Добрый день!
config-uniel-uch-m141rc - я не знаю что это за устройство, мы его не используем.
Это что-то старое от старого wb-mqtt-serial, удалю.

diag_A2YR2EFN_2023-09-08-12.02.30.zip (64,3 КБ)

Почему-то последний диагностический архив, который я приложил, не скрыт.

Вы каким образом выгружаете диагностический архив? В нем не все необходимые файлы.
Что за устройство у вас под адресом 50 (uniel-uch-m141rc?). По нему куча ошибок. wb-mqtt-serial будет останавливаться по большому числу ошибок.

Михаил, добрый день!

Использую вашу программу wb-diag-collect diag, затем полученный файл (zip архив) отправляю на свой сервер с помощью rsync и затем прикрепляю тут на форуме.

Под адресом 50 устройство mr6c. Вот конфигурация wb-mqtt-serial.

cat /etc/wb-mqtt-serial.conf

{
  "debug": false,
  "ports": [
    {
      "baud_rate": 9600,
      "data_bits": 8,
      "devices": [
        {
          "device_type": "WB-MR6C",
          "enabled": true,
          "slave_id": "50"
        },
        {
          "device_type": "WB-MAP12E fw2",
          "enabled": true,
          "setup": [
            {
              "address": "0x1460",
              "title": "Ch 1 L1 Turns",
              "value": 3000
            },
            {
              "address": "0x1461",
              "title": "Ch 1 L2 Turns",
              "value": 3000
            },
            {
              "address": "0x1462",
              "title": "Ch 1 L3 Turns",
              "value": 3000
            },
            {
              "address": "0x2460",
              "title": "Ch 2 L1 Turns",
              "value": 3000
            },
            {
              "address": "0x2461",
              "title": "Ch 2 L2 Turns",
              "value": 3000
            },
            {
              "address": "0x2462",
              "title": "Ch 2 L3 Turns",
              "value": 3000
            },
            {
              "address": "0x3460",
              "title": "Ch 3 L1 Turns",
              "value": 3000
            },
            {
              "address": "0x3461",
              "title": "Ch 3 L2 Turns",
              "value": 3000
            },
            {
              "address": "0x3462",
              "title": "Ch 3 L3 Turns",
              "value": 3000
            },
            {
              "address": "0x4460",
              "title": "Ch 4 L1 Turns",
              "value": 3000
            },
            {
              "address": "0x4461",
              "title": "Ch 4 L2 Turns",
              "value": 3000
            },
            {
              "address": "0x4462",
              "title": "Ch 4 L3 Turns",
              "value": 3000
            }
          ],
          "slave_id": "171"
        },
        {
          "device_type": "WB-MR6C",
          "enabled": true,
          "slave_id": "51"
        },
        {
          "device_type": "WB-MR3",
          "enabled": true,
          "slave_id": "52"
        }
      ],
      "enabled": true,
      "parity": "N",
      "path": "/dev/ttyRS485-1",
      "stop_bits": 2
    },
    {
      "baud_rate": 9600,
      "data_bits": 8,
      "devices": [
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "203"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "193"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "195"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "218"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "234"
        },
        {
          "device_type": "WB-M1W2",
          "enabled": true,
          "slave_id": "110"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "200"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "236"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "216"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "221"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "239"
        },
        {
          "device_type": "WB-MSW v.3",
          "enabled": true,
          "slave_id": "179"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "213"
        },
        {
          "device_type": "WB-MIR v2",
          "enabled": true,
          "slave_id": "199"
        },
        {
          "device_type": "WB-MSW v.3",
          "enabled": true,
          "slave_id": "177"
        }
      ],
      "enabled": true,
      "parity": "N",
      "path": "/dev/ttyRS485-2",
      "stop_bits": 2
    }
  ]
}

Я не знаю что это и мы такое устройство не используем.

Да, потому что оно отключено.

Это очень плохо, wb-mqtt-serial должно продолжать работать, даже если какое-то устройство отвалилось. Нужно исправлять.

Такой возможности к сожалению нет. Дело в том, что в версиях где-то с 22го года сделана ротация файла messages в messages.1.gz. В целом это не плохо и экономит место на диске, но мы скидываем логи с помощью lsyncd на сервер и логи без указания даты перезаписываются, так как имена файлов совпадают.
Я в своих логах при ротации проставляю дату и храню на контроллере лишь пару файлов, а на сервере уже можно настроить гибко, хоть пару дней, хоть пару месяцев.

Обновитесь до актуального релиза.

Приостановите по данному устройству опрос. Из-за его ошибок в лог больше ничего не влезло. Нужно больше информации.

Я наверное некорректно выразился. Не останавливается сам wb-mqtt-serial, а останавливается опрос устройства при большом числе ошибок.

Утеряна связь с брокером, но статус самого сервиса wb-mqtt-serial не понятен, проверяется командой “systemctl status wb-mqtt-serial”.

Повторю коллегу. Нужны логи брокера.

На проде я обновлять и эксперементировать ради отладки не буду. Не известно, что еще может сломаться.

Я не могу сейчас проверить то что было неделю назад.

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

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