Проблема с сохранением правил

Контроллер зависает, но теперь работает заметно дольше 15 минут.
Оставляю на эксперимент с подключенными двумя портами rs485. Складывается впечатление, что зависает при подключении дополнительного порта rs485.
Прошу ответить на предыдущий вопрос.

Да, верно. надо определить с чем связано:
Если устройство переставить по линии ближе к контроллеру - ошибки пропадают?

До датчиков не более 50м, можно на расстоянии 25м попробовать это самая ближайшая.
Если смотреть логи то и диммер (один из 3х) в шкафу такую же ошибку выдает но реже чем датчики. Там шлейф связи не более 4х метров.
Линия чистая проверял с датчика до датчика все провода отсоединяя.
Думаю контроллер глючный или устройства.

Прошивки устройств обновляли?

датчики не обновлял
все куплено в этом году весной

вот это сделал Новые версии системного ПО для Wiren Board 6

Обновите на всякий случай прошивку
https://wirenboard.com/wiki/WB_Modbus_Devices_Firmware_Update

По моему ничего не работает или инструкция написана неверно

root@wirenboard-AE3UHZCX:~# wb-mcu-fw-updater update-all
2020-10-17 00:59:42,820 Will probe all devices defined in /etc/wb-mqtt-serial.conf
2020-10-17 00:59:42,825 Unhandled exception!
Traceback (most recent call last):
File “/usr/bin/wb-mcu-fw-updater”, line 181, in
args.func(args)
File “/usr/bin/wb-mcu-fw-updater”, line 76, in update_all
update_monitor._update_all(force=args.force)
File “/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py”, line 232, in _update_all
alive, in_bootloader, dummy_records = probe_all_devices(CONFIG[‘SERIAL_DRIVER_CONFIG_FNAME’])
File “/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py”, line 209, in probe_all_devices
for port, port_params in get_devices_on_driver(driver_config_fname).items():
File “/usr/lib/python3/dist-packages/wb_mcu_fw_updater/update_monitor.py”, line 80, in get_devices_on_driver
config_dict = json.load(open(driver_config_fname, ‘r’))
File “/usr/lib/python3.5/json/init.py”, line 265, in load
return loads(fp.read(),
File “/usr/lib/python3.5/encodings/ascii.py”, line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xd0 in position 4671: ordinal not in range(128)
root@wirenboard-AE3UHZCX:~#

root@wirenboard-AE3UHZCX:~# dpkg -s wb-mcu-fw-updater || (apt update && apt install wb-mcu-fw-updater)
Package: wb-mcu-fw-updater
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 21
Maintainer: Vladimir Romanov v.romanov@wirenboard.ru
Architecture: all
Version: 1.0.2
Depends: python3:any, python3-wb-mcu-fw-updater (>= 1.0.2)
Conffiles:
/etc/wb-mcu-fw-updater.conf 4008ae3e26f35ecdbb3e64fbb8825ec8
Description: Wiren Board modbus devices firmware update tool (python 3)
root@wirenboard-AE3UHZCX:~#

а покажите содержимое /etc/wb-mqtt-seria.conf пожалуйста

{
    "debug": false,
    "ports": [
        {
            "path": "/dev/ttyRS485-1",
            "devices": [
                {
                    "slave_id": "201",
                    "device_type": "WB-MR6C",
                    "name": "R201",
                    "id": "R201",
                    "setup": [],
                    "poll_interval": 10,
                    "delay_ms": 10,
                    "enabled": true
                },
                {
                    "slave_id": "202",
                    "device_type": "WB-MR6C",
                    "name": "R202",
                    "id": "R202",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10,
                    "enabled": true
                },
                {
                    "slave_id": "203",
                    "device_type": "WB-MR6C",
                    "name": "R203",
                    "id": "R203",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10,
                    "enabled": false
                },
                {
                    "slave_id": "204",
                    "device_type": "WB-MR3",
                    "name": "R204",
                    "id": "R204",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10,
                    "enabled": true
                },
                {
                    "slave_id": "206",
                    "device_type": "WB-MRPS6",
                    "name": "R206",
                    "id": "R206",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10,
                    "enabled": true
                },
                {
                    "slave_id": "207",
                    "device_type": "WB-MRPS6",
                    "name": "R207",
                    "id": "R207",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                },
                {
                    "slave_id": "208",
                    "device_type": "WB-MR6C",
                    "name": "R208",
                    "id": "R208",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                },
                {
                    "slave_id": "209",
                    "device_type": "WB-MR6C",
                    "name": "R209",
                    "id": "R209",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                },
                {
                    "slave_id": "50",
                    "device_type": "WB-MDM3",
                    "name": "DIM50",
                    "id": "DIM50",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                },
                {
                    "slave_id": "51",
                    "device_type": "WB-MDM3",
                    "name": "DIM51",
                    "id": "DIM51",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                },
                {
                    "slave_id": "52",
                    "device_type": "WB-MDM3",
                    "name": "DIM52",
                    "id": "DIM52",
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                },
                {
                    "slave_id": "200",
                    "device_type": "WB-MR6C",
                    "name": "R200",
                    "id": "R200",
                    "enabled": false,
                    "poll_interval": 10,
                    "setup": [],
                    "delay_ms": 10
                }
            ],
            "baud_rate": 115200,
            "parity": "N",
            "data_bits": 8,
            "stop_bits": 2,
            "poll_interval": 10,
            "enabled": true,
            "response_timeout_ms": 50,
            "guard_interval_us": 0
        },
        {
            "path": "/dev/ttyRS485-2",
            "devices": [
                {
                    "slave_id": "80",
                    "device_type": "WB-MSW v.3",
                    "name": "D80 (DD na Kuhne)",
                    "id": "D80",
                    "poll_interval": 20,
                    "setup": [
                        {
                            "address": "282",
                            "title": "Ширина временного окна",
                            "value": "0"
                        }
                    ],
                    "delay_ms": 100,
                    "enabled": true
                },
                {
                    "slave_id": "82",
                    "device_type": "WB-MSW v.3",
                    "id": "D82",
                    "poll_interval": 20,
                    "setup": [],
                    "delay_ms": 100,
                    "enabled": true,
                    "channels": [],
                    "name": "D82 (DD v Kabinete)"
                },
                {
                    "slave_id": "83",
                    "device_type": "WB-MSW v.3",
                    "name": "D83 (DD v Stolovoy)",
                    "id": "D83",
                    "poll_interval": 20,
                    "setup": [
                        {
                            "address": "282",
                            "title": "Ширина временного окна",
                            "value": "0"
                        }
                    ],
                    "delay_ms": 100,
                    "enabled": true
                },
                {
                    "slave_id": "84",
                    "device_type": "WB-MSW v.3",
                    "name": "D84 (DD v s/u 1et)",
                    "id": "D84",
                    "poll_interval": 20,
                    "setup": [
                        {
                            "address": "282",
                            "title": "Ширина временного окна",
                            "value": "0"
                        }
                    ],
                    "delay_ms": 100,
                    "enabled": true
                },
                {
                    "slave_id": "86",
                    "device_type": "WB-MSW v.3",
                    "name": "D86 (DD v Prihojey)",
                    "id": "D86",
                    "poll_interval": 20,
                    "setup": [
                        {
                            "address": "282",
                            "title": "Ширина временного окна",
                            "value": "0"
                        }
                    ],
                    "delay_ms": 100,
                    "enabled": true
                },
                {
                    "slave_id": "87",
                    "device_type": "WB-MSW v.3",
                    "name": "D87 (DD v Gost)",
                    "id": "D87",
                    "poll_interval": 20,
                    "setup": [
                        {
                            "address": "2820",
                            "title": "Ширина временного окна",
                            "value": "1"
                        }
                    ],
                    "delay_ms": 100,
                    "enabled": true
                }
            ],
            "baud_rate": 19200,
            "parity": "E",
            "data_bits": 8,
            "stop_bits": 1,
            "poll_interval": 10,
            "enabled": true,
            "response_timeout_ms": 50,
            "guard_interval_us": 0
        },
        {
            "path": "/dev/ttyMOD1",
            "devices": [
                {
                    "slave_id": "81",
                    "device_type": "WB-MSW v.3",
                    "name": "D81 (DD v holle 2et)",
                    "id": "D81",
                    "poll_interval": 300,
                    "setup": [
                        {
                            "address": "282",
                            "title": "Ширина временного окна",
                            "value": "0"
                        }
                    ],
                    "delay_ms": 300,
                    "enabled": true
                },
                {
                    "slave_id": "85",
                    "device_type": "WB-MSW v.3",
                    "name": "D85 (DD v s/u 2et)",
                    "id": "D85",
                    "poll_interval": 300,
                    "setup": [
                        {
                            "address": "282",
                            "title": "Ширина временного окна",
                            "value": "0"
                        }
                    ],
                    "delay_ms": 300,
                    "enabled": true
                }
            ],
            "baud_rate": 19200,
            "parity": "E",
            "data_bits": 8,
            "stop_bits": 1,
            "poll_interval": 300,
            "enabled": false,
            "response_timeout_ms": 300,
            "guard_interval_us": 0
        },
        {
            "path": "/dev/ttyMOD2",
            "devices": [],
            "baud_rate": 19200,
            "parity": "E",
            "data_bits": 8,
            "stop_bits": 1,
            "poll_interval": 10,
            "enabled": false
        },
        {
            "path": "/dev/ttyMOD3",
            "devices": [],
            "port_type": "serial",
            "baud_rate": 9600,
            "parity": "N",
            "data_bits": 8,
            "stop_bits": 2,
            "poll_interval": 10,
            "enabled": false,
            "type": null,
            "response_timeout_ms": 500,
            "guard_interval_us": 0
        }
    ]
}

В приведенном wb-mqtt-seria.conf
на позиции 4671 находится
“title”: “Ширина временного окна”,
Для проверки содал такую же setup-секцию.

Воспроизводится…
Чтобы сейчас обойти баг - надо либо изменить назавния setup-секций (заменить русский английским) либо запустить wb-mcu-fw-updater для устройств с указанием адресов вручную.

Заменил латинскими буквами.
15 минут и выполнение сценарий зависает
не помогло.

Контроллер WB6 - это недоработанное устройство, которое не может себя диагностировать на стадии изменения конфигурации, создания сценарий и т.д.

Этот контроллер допускает действия, которые могут привести к неработоспособности сценарий.

Я впервые сталкиваюсь с такой проблемой на контроллерах. WB6 подкупил попробовать поработать лишь наличием нескольких портов RS485.

Кто-нибудь может мне расшифровать строку лога и почему истекает время запроса??
Oct 18 23:40:14 wirenboard-AE3UHZCX user.notice serial: ModbusRTU::ReadRegisterRange(): failed to read 2 input(s) @ 0 of device modbus:81: Serial protocol error: request timed out

Стоит отметить, что проблемы возникают только при использовании датчиков WB-MSW v.3. С другими устройствами проблем нет. Время зависания зависит от количества WB-MSW v.3. Если подключено с десяток то сценарии живут минут 15. Если пару датчиков то пол дня.

Ок, обновление выполнилось? Ошибки какие-нибудь были?

Это про обновление?

Контроллер честно обо всем пишет в логи. Задача “диагностики” - это показать состояния, интерпретировать их компьютер не умеет.

Да. Программа не может быть “умнее” человека. Если администратор вносит какие-то изменения - то он прав по-умолчанию. То есть считается что настройки верны.

Буквально написано: Ошибка ожидания ответа.
Расшифровываю: Мастер отправляет запрос и ждет реакции (ответа) слейва.
Время ожидания ограничено

response_timeout_ms

Если за установленное время ответ не получен - генерируется ошибка.
Почему не получен?

  • слейв не получил запрос (помеха, неправильный CRC)
  • слейв не ответил на запрос
  • ответ не получен мастером (помеха, неправильный CRC).

Диагностика обычно сводится к подключению устройства непосредственно к контроллеру (коротким, гарантированно работающим проводом).

Давайте я подключусь с помошью тимвьювера, например - и попробуем воспроизвести - посмотреть у вас.

готов предоставить доступ, напишите когда и как состыкуемся это сделать

прием

Сегодня до обеда на объекте.
Возможно подключение через тимвьювер?

Добрый день. Да, могу.

как мне отправить данные подключения?