Таймауты в обмене по RS485

Добрый день!

На шине RS485 висят 24 устройства WB, сторонних нет, все работают. Обмен со всеми есть, в вебе ошибок и красных значений не вижу, ошибок в логе тоже. Если смотреть на любое устройство, то светодиоды обмена по шине сначала моргают 3-4 с, далее 2с горят и так повторяется Такое ощущение, что опрос прерывается на какой-то таймаут. Это здорово заметно когда скриптом по долгому или двойному нажатию включаю/отключаю свет, время выполнения команды плавает: то моментально, то ждем до 5 секунд. Как выяснить в чем причина и убрать эту задержку в опросе*

Добрый день.

Для диагностики проблемы пришлите, пожалуйста, архив с диагностической информацией контроллера. Создание архива описано в документации.

Не получается: ни в вэб, ни в консоле. Появляется ошибка

Start data collecting
Traceback (most recent call last):
File “/usr/lib/python3.9/asyncio/subprocess.py”, line 135, in wait
return await self._transport._wait()
File “/usr/lib/python3.9/asyncio/base_subprocess.py”, line 235, in _wait
return await waiter
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/lib/python3.9/asyncio/tasks.py”, line 492, in wait_for
fut.result()
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/bin/wb-diag-collect”, line 10, in 
sys.exit(main())
File “/usr/share/wb-diag-collect/wb/diag/diag_collect.py”, line 71, in main
asyncio.get_event_loop().run_until_complete(
File “/usr/lib/python3.9/asyncio/base_events.py”, line 642, in run_until_complete
return future.result()
File “/usr/share/wb-diag-collect/wb/diag/collector.py”, line 32, in collect
await self.execute_commands(tmpdir, options[“commands”], options[“timeout”])
File “/usr/share/wb-diag-collect/wb/diag/collector.py”, line 121, in execute_commands
await asyncio.wait_for(proc.wait(), timeout=timeout)
File “/usr/lib/python3.9/asyncio/tasks.py”, line 494, in wait_for
raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError

Рекомендую проверить чем (каким процессом) загружен контроллер.
Например используя top/

Получается system-journal почти всегда на первых строчках

Проверьте не включена ли отладка?
При включённой отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет. От сюда может быть подвисание работы драйвера.

Да, спасибо, помогло, теперь светодиоды постоянно мигают.

Подскажите, как можно минимизировать реакцию на двойное нажатие кнопки, если это реализовано через правила?

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

Скрипт уже есть. Ситуации в том, что срабатывание выходного реле может случиться через 2-3с после нажатия. В ТГ чате коллеги говорят, что так не должно быть, все срабатывает моментально. Что может быть не так?

</>

var lights = [“wb-mr6cv3_153/K1”, “wb-mr6cv3_153/K2”, “wb-mr6cv3_153/K3”,“wb-mr6cv3_153/K4”];

defineRule(“lights_off”,{

whenChanged: [“wb-mr6cv3_144/Input 2 Long Press Counter”],
then: function (newValue, devName, cellName) {
//log(“Переключатель {} нажат! Выключаем…”, cellName);
lights.forEach(function (light) {
//ps[light] = dev[light];
dev[light] = false;
//dev[“wb-mr6cv3_139/K1”] = false;
});
//log(“Выключили.”);
}
});

</>

Это - довольно интересно.
Расскажите пожалуйста как опрашивается канал “wb-mr6cv3_144/Input 2 Long Press Counter”. С какими настройками, либо по быстрому Modbus. Ну и покажите логи.
Также - какое время проходит между началом выполнения функции правила и записью значения в топик модуля реле?
Какое время - между записью (нового) значения в топик - до отправки его в шину?

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

Этот канал опрашивается по быстрому модбасу. Добавил в правило еще вывод сообщения в лог, когда изменился топик выхода реле. Итого от получения значения счетчика до изменения значения топика выходного реле проходит максимум 0,150 с.

К сожалению не могу по логам отследить запись в само реле, там периодически идет чтение и запись, хотя в этом время я переключений не делал. Команды на запись подаются только пользователем (через правила, и т.п.) или это системные вещи?

10-05-2026 16:58:10.374	DEBUG: [port] /dev/ttyRS485-1: ReadFrame: 99 02 01 00 8e e8
10-05-2026 16:58:10.374	DEBUG: [port] /dev/ttyRS485-1: Write: 99 02 00 00 00 08 65 d4
10-05-2026 16:58:10.374	DEBUG: [port] /dev/ttyRS485-1: ReadFrame: 99 01 01 00 7e e8
10-05-2026 16:58:10.374	DEBUG: [port] /dev/ttyRS485-1: Write: 99 01 00 00 00 06 a0 10
10-05-2026 16:58:10.296	DEBUG: [port] /dev/ttyRS485-1: ReadFrame: 99 04 04 00 02 0f 94 47 d2
10-05-2026 16:58:10.296	DEBUG: [port] /dev/ttyRS485-1: Write: 99 04 01 0e 00 02 0d ec
10-05-2026 16:58:10.296	DEBUG: [port] /dev/ttyRS485-1: ReadFrame: 99 04 10 00 08 00 08 00 06 00 02 00 7e 00 04 00 00 00 00 25 31
10-05-2026 16:58:10.296	DEBUG: [port] /dev/ttyRS485-1: Write: 99 04 00 20 00 08 ec 1e
10-05-2026 16:58:10.296	DEBUG: [port] /dev/ttyRS485-1: ReadFrame: 99 04 02 00 01 59 2c
10-05-2026 16:58:10.296	DEBUG: [port] /dev/ttyRS485-1: Write: 99 04 00 04 00 01 6c 13

И еще нашел сообщение в логах:

10-05-2026 16:57:25.223	DEBUG: [port] /dev/ttyRS485-1: Write: 99 04 00 04 00 01 6c 13
10-05-2026 16:57:25.005	DEBUG: [serial client] </dev/ttyRS485-1 115200 8 N 1>1204990: Wait until 1205000
10-05-2026 16:57:23.994	DEBUG: [modbus] Poll time for <modbus:74:input: 8756> is too long: 3 ms (sendTime=1997 us, AverageResponseTime=603 us, RequestDelay=0 us, FrameTimeout=15 ms), limit is 1 ms

Такие сообщения периодически проскакивают по разным устройствам, после них бывает несколько сообщений Wait until… и опрос начинается спустя некоторое время: иногда сразу, иногда через 1с (как выше). С чем может быть связано эти сообщения?