Случайное удаление девайсов из UI

Здравствуйте! Случайно перепутал вкладки с двумя разными контроллерами, и удалил два modbus устройства из конфига, а затем с вкладки Devices. MQTT топики при это тоже пропали.

Когда заметил, вернул конфиг на место, но вот ни на вкладке Devices, ни в MQTT топиках они не появились. Как лечить? Заранее спасибо!

Добрый день. В самом конфиге /etc/wb-mqtt-serial.conf устройства добавились?
После явного перезапуска

systemctl restart wb-mqtt-serial

Тоже не появляются?

Вот, в конфиге четыре устройства:

systemctl restart wb-mqtt-serial сделал, в девайсах так же всего два:

Покажите все же сам файл /etc/wb-mqtt-serial.conf пожалуйста.

Конфиг
{
  "debug": true,
  "ports": [
    {
      "path": "/dev/ttyRS485-1",
      "devices": [
        {
          "slave_id": "1",
          "name": "Kitchen STR",
          "id": "KitchenSTR",
          "protocol": "modbus",
          "poll_interval": 2000,
          "channels": [
            {
              "name": "Fan speed",
              "type": "range",
              "reg_type": "holding",
              "address": 101,
              "poll_interval": 1000,
              "max": "100"
            },
            {
              "name": "Set Temp Comfort",
              "type": "range",
              "reg_type": "holding",
              "address": 102,
              "scale": 0.02,
              "poll_interval": 1000,
              "max": "40"
            },
            {
              "name": "Room Temp",
              "type": "temperature",
              "reg_type": "input",
              "address": "1002",
              "scale": 0.02,
              "poll_interval": 1000,
              "channel_readonly": true
            },
            {
              "name": "Lock",
              "type": "range",
              "reg_type": "holding",
              "address": "107",
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Mode",
              "type": "range",
              "reg_type": "holding",
              "address": "100",
              "scale": 1,
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Action",
              "type": "range",
              "reg_type": "holding",
              "address": "106",
              "scale": 1,
              "max": "1",
              "poll_interval": 1000
            }
          ],
          "enabled": true,
          "device_max_fail_cycles": 1000
        },
        {
          "slave_id": "2",
          "name": "Drawing STR",
          "id": "DrawingSTR",
          "protocol": "modbus",
          "poll_interval": 2000,
          "channels": [
            {
              "name": "Fan speed",
              "type": "range",
              "reg_type": "holding",
              "address": 101,
              "poll_interval": 1000,
              "max": "100"
            },
            {
              "name": "Set Temp Comfort",
              "type": "range",
              "reg_type": "holding",
              "address": 102,
              "scale": 0.02,
              "poll_interval": 1000,
              "max": "40"
            },
            {
              "name": "Room Temp",
              "type": "temperature",
              "reg_type": "input",
              "address": "1002",
              "scale": 0.02,
              "poll_interval": 1000,
              "channel_readonly": true
            },
            {
              "name": "Lock",
              "type": "range",
              "reg_type": "holding",
              "address": "107",
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Mode",
              "type": "range",
              "reg_type": "holding",
              "address": "100",
              "scale": 1,
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Action",
              "type": "range",
              "reg_type": "holding",
              "address": "106",
              "scale": 1,
              "max": "1",
              "poll_interval": 1000
            }
          ],
          "enabled": true,
          "device_max_fail_cycles": 1000
        },
        {
          "slave_id": "3",
          "name": "Bedroom STR",
          "id": "BedroomSTR",
          "protocol": "modbus",
          "poll_interval": 2000,
          "channels": [
            {
              "name": "Fan speed",
              "type": "range",
              "reg_type": "holding",
              "address": 101,
              "poll_interval": 1000,
              "max": "100"
            },
            {
              "name": "Set Temp Comfort",
              "type": "range",
              "reg_type": "holding",
              "address": 102,
              "scale": 0.02,
              "poll_interval": 1000,
              "max": "40"
            },
            {
              "name": "Room Temp",
              "type": "temperature",
              "reg_type": "input",
              "address": "1002",
              "scale": 0.02,
              "poll_interval": 1000,
              "channel_readonly": true
            },
            {
              "name": "Lock",
              "type": "range",
              "reg_type": "holding",
              "address": "107",
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Mode",
              "type": "range",
              "reg_type": "holding",
              "address": "100",
              "scale": 1,
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Action",
              "type": "range",
              "reg_type": "holding",
              "address": "106",
              "scale": 1,
              "max": "1",
              "poll_interval": 1000
            }
          ],
          "enabled": true,
          "device_max_fail_cycles": 1000
        },
        {
          "slave_id": "4",
          "name": "Nursery STR",
          "id": "NurserySTR",
          "protocol": "modbus",
          "poll_interval": 2000,
          "channels": [
            {
              "name": "Fan speed",
              "type": "range",
              "reg_type": "holding",
              "address": 101,
              "poll_interval": 1000,
              "max": "100"
            },
            {
              "name": "Set Temp Comfort",
              "type": "range",
              "reg_type": "holding",
              "address": 102,
              "scale": 0.02,
              "poll_interval": 1000,
              "max": "40"
            },
            {
              "name": "Room Temp",
              "type": "temperature",
              "reg_type": "input",
              "address": "1002",
              "scale": 0.02,
              "poll_interval": 1000,
              "channel_readonly": true
            },
            {
              "name": "Lock",
              "type": "range",
              "reg_type": "holding",
              "address": "107",
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Mode",
              "type": "range",
              "reg_type": "holding",
              "address": "100",
              "scale": 1,
              "max": "4",
              "poll_interval": 1000
            },
            {
              "name": "Action",
              "type": "range",
              "reg_type": "holding",
              "address": "106",
              "scale": 1,
              "max": "1",
              "poll_interval": 1000
            }
          ],
          "enabled": true,
          "device_max_fail_cycles": 1000
        }
      ],
      "baud_rate": 19200,
      "parity": "E",
      "data_bits": 8,
      "stop_bits": 1,
      "poll_interval": 10000,
      "enabled": true
    },
    {
      "path": "/dev/ttyRS485-2",
      "devices": [],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 2,
      "poll_interval": 10,
      "enabled": false
    },
    {
      "path": "/dev/ttyMOD1",
      "devices": [],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 2,
      "poll_interval": 10,
      "enabled": false
    },
    {
      "path": "/dev/ttyMOD2",
      "devices": [],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 2,
      "poll_interval": 10,
      "enabled": false
    },
    {
      "path": "/dev/ttyMOD3",
      "devices": [],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 2,
      "poll_interval": 10,
      "enabled": false
    }
  ]
}

Так, все устройства присутствуют и включены.
Для диагностики надо:

systemctl restart wb-mqtt-serial && journalctl -u wb-mqtt-serial -f

и посмотреть на вывод - обрабатываются ли отсутствующие.

systemctl restart wb-mqtt-serial && journalctl -u wb-mqtt-serial -f
root@wirenboard-AR2GNSVV:~# systemctl restart wb-mqtt-serial && journalctl -u wb-mqtt-serial -f
-- Logs begin at Thu 2021-03-25 11:33:06 UTC. --
May 14 15:28:56 wirenboard-AR2GNSVV systemd[1]: Stopping LSB: MQTT Driver for serial devices...
May 14 15:28:57 wirenboard-AR2GNSVV wb-mqtt-serial[11429]: start-stop-daemon: warning: failed to kill 11791: No such process
May 14 15:28:57 wirenboard-AR2GNSVV systemd[1]: Stopped LSB: MQTT Driver for serial devices.
May 14 15:28:57 wirenboard-AR2GNSVV systemd[1]: Starting LSB: MQTT Driver for serial devices...
May 14 15:28:57 wirenboard-AR2GNSVV systemd[1]: Started LSB: MQTT Driver for serial devices.
May 17 15:34:19 wirenboard-AR2GNSVV systemd[1]: Stopping LSB: MQTT Driver for serial devices...
May 17 15:34:19 wirenboard-AR2GNSVV wb-mqtt-serial[20201]: start-stop-daemon: warning: failed to kill 11445: No such process
May 17 15:34:19 wirenboard-AR2GNSVV systemd[1]: Stopped LSB: MQTT Driver for serial devices.
May 17 15:34:19 wirenboard-AR2GNSVV systemd[1]: Starting LSB: MQTT Driver for serial devices...
May 17 15:34:19 wirenboard-AR2GNSVV systemd[1]: Started LSB: MQTT Driver for serial devices.

Очевидно что не запущен. Покажите вывод запуска вручную:

/usr/bin/wb-mqtt-serial

Не очень понял, что именно показать

root@wirenboard-AR2GNSVV:~# service wb-mqtt-serial restart
root@wirenboard-AR2GNSVV:~# systemctl status wb-mqtt-serial
● wb-mqtt-serial.service - LSB: MQTT Driver for serial devices
   Loaded: loaded (/etc/init.d/wb-mqtt-serial; generated; vendor preset: enabled)
   Active: active (exited) since Wed 2021-05-19 14:20:00 UTC; 6s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 24198 ExecStop=/etc/init.d/wb-mqtt-serial stop (code=exited, status=0/SUCCESS)
  Process: 24207 ExecStart=/etc/init.d/wb-mqtt-serial start (code=exited, status=0/SUCCESS)

May 19 14:20:00 wirenboard-AR2GNSVV systemd[1]: Starting LSB: MQTT Driver for serial devices...
May 19 14:20:00 wirenboard-AR2GNSVV systemd[1]: Started LSB: MQTT Driver for serial devices.

статус - вышел. То есть (скорей всего) какая-то ошибка в конфиге. Для ее определения - надо запустить вручную процесс

/usr/bin/wb-mqtt-serial

Получилось? Если нет - дайте Anydesk, посмотрю.

Основная проблема - в “непропорциональном” обновлении. То, что при обновлении сгенерировалось в файле службы wb0mqtt-serial.service не могло запустить wb-mqtt-serial=1.57. Верися очень старая.
Поправил в /etc/systemd/system/wb-mqtt-serial.service

ExecStart=/usr/bin/wb-mqtt-serial -c /etc/wb-mqtt-serial.conf

Надо будет учесть при (возможном) обновлении.

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

В общем сейчас serial запускается.

Спасибо! “Непропорциональное обновление” это как? Не очень понял.

Шаблон было лень писать и заливать на WB, устройства просто копипастой json расплодил) На быстродействие это же никак не влияет?

Ну, часть пакетов в системе уже свежие а часть - старые очень. Тот же wb-mqtt-serial сейчас версии 2.7
А у вас стоит 1.57

Совершенно не влияет. Самому serial все равно откуда формировать свои структуры - из внешних файлов (шаблонов) или из одного конфига. Конфиги используются, читаются только в момент запуска.

А как?

Могу ли я сейчас просто на всякий случай сделать так?

apt-get update
apt upgrade

Или может что-то сломаться?

Да, можно. Важно внимательно читать все предупреждения и при предложении заменить конфиг “от разработчика” - оставлять существующий.