Увеличить скорость срабатывания Single Press Counter

Помогите увеличить скорость срабатывания.

Контроллер подключен к WB-MR6C v2, на линии больше ничего нет, длинна линии 7-8 см, терминатор на линии стоит.

Одно элементарное правило:

defineRule({
  whenChanged: "wb-mr6c_21/Input 2 Single Press Counter",
  then: function (newValue, devName, cellName) {
    dev["wb-mr6c_21/K2"] = !dev["wb-mr6c_21/K2"];
  }
});

Задержка на срабатывание 1.5-2 секунды.

Загрузка Контроллера минимальная, да и правило:

defineRule({
  whenChanged: "wb-gpio/EXT1_DR5",
  then: function (newValue, devName, cellName) {
    dev["wb-mr6c_21/K2"] = !dev["wb-mr6c_21/K2"];
  }
});

Срабатывает моментально.

Настройки порта:

"baud_rate" : 115200,
"data_bits" : 8,
"enabled" : true,
"parity" : "N",
"path" : "/dev/ttyMOD1",
"read_rate_limit_ms" : 10,
"stop_bits" : 2

Реле WB-MR6C v2 :
Serial: 4264758111
FW Version: 1.19.2

Все опросы кроме Single Press Counter, отключены, вообще все.

Контроллер
Batch No: 6.8.2A/1G/f 527
HW Revision: 6.8.2
Short SN: AQFX5GIC

ПО:
Wiren Board 6.8.2 (s/n AQFX5GIC), release wb-2304 (as testing)
Linux wirenboard-AQFX5GIC 5.10.35-wb133 #1 Tue Feb 21 08:07:14 UTC 2023 armv7l GNU/Linux

apt update && apt upgrade только что

Вроде есть какие-то регистры 113. 114, но документации по ним очень мало.

Думал переходить с WBIO-DI-WD-14 (для выключателей) на WB-MCM8 (как вы рекомндуете на сайте), но видимо там такая же беда.

Ограничения в 4 устройства WBIO-DI-WD-14 иногда не хватает.

Подскажите, возможно ошибка где-то в настройках?

Здравствуйте!

Регистры 113 и 114 здесь не помогут, если их никто не менял.

В логах ничего странного не наблюдается?

Соберите, пожалуйста, диагностический архив.

diag_output_AQFX5GIC_2023-04-05-16.22.34.zip (161,9 КБ)

Отключил две другие линии 485
Остановил z2m, node-red
Уменьшил опросы wb-adc и power_status до одного в час.

Попробовал использовать
/devices/wb-mr6c_21/controls/Input 2 counter
там всё-таки срабатывание по переднему фронту, картину сильно не поменяло.

Бывает что срабатывает быстро, статистику не вел, но по ощущениям один раз из 15-20, остальные с задержкой обычно 1.5 сек (больше 2х секунд, конечно нет), но и 1 секунда задержки на выключателях раздражает.
Еще раз повторюсь, что с WBIO-DI-WD-14, такой проблемы нет. Так что скорость разгорания лампочек (IKEA) можно исключить.

Подскажите пожалуйста есть какие пути увеличения скорости срабатывания?

Здравствуйте. Так и должно быть: команда в устройство посылается вне очереди в момент публикации.

По симптомам похоже, что драйвер по каким-то причинам долго опрашивает реле. Пришлите, пожалуйста, файл с настройками драйвера /etc/wb-mqtt-serial.conf

Из ненормального в логе драйвера ошибки таймаута при опросе устройства с адресом 33 — такое бывает при плохой шине, или если устройство настроено в драйвере, но отключено от шины:

Apr 05 14:48:31 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 3 discrete(s) @ 0 of device modbus:33: Serial protocol error: request timed out
Apr 05 14:53:37 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 3 holding(s) @ 2007 of device modbus:33: Serial protocol error: request timed out
Apr 05 14:54:43 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 3 input(s) @ 32 of device modbus:33: Serial protocol error: request timed out
Apr 05 14:55:57 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 4 holding(s) @ 2007 of device modbus:33: Serial protocol error: request timed out
Apr 05 14:58:41 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 2 holding(s) @ 2007 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:00:16 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 4 holding(s) @ 2007 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:00:24 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 3 input(s) @ 32 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:00:56 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 2 coil(s) @ 7 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:00:59 wirenboard-AQFX5GIC wb-mqtt-serial[22235]: WARNING: [modbus] failed to read 2 coil(s) @ 7 of device modbus:33: Serial protocol error: request timed out

Apr 05 15:02:09 wirenboard-AQFX5GIC wb-mqtt-serial[25986]: WARNING: [modbus] failed to read 3 discrete(s) @ 0 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:06:49 wirenboard-AQFX5GIC wb-mqtt-serial[25986]: WARNING: [modbus] failed to read 4 holding(s) @ 2007 of device modbus:33: Serial protocol error: request timed out

Apr 05 15:27:20 wirenboard-AQFX5GIC wb-mqtt-serial[28446]: WARNING: [modbus] failed to read 3 input(s) @ 32 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:27:47 wirenboard-AQFX5GIC wb-mqtt-serial[28446]: WARNING: [modbus] failed to read 2 coil(s) @ 7 of device modbus:33: Serial protocol error: request timed out
Apr 05 15:27:55 wirenboard-AQFX5GIC wb-mqtt-serial[28446]: WARNING: [modbus] failed to read 2 coil(s) @ 7 of device modbus:33: Serial protocol error: request timed out

wb-mqtt-serial.conf (18,9 КБ)

Устройство 33 (/dev/ttyRS485-1) и 21 (/dev/ttyMOD1) находятся на разных шинах.
На 33 и правда плохая шина.

сейчас в конфиге:

  "enabled" : true,
  "path" : "/dev/ttyRS485-1",

  "enabled" : true,
  "path" : "/dev/ttyRS485-2",

  "enabled" : true,
  "path" : "/dev/ttyMOD1",

и на шине /dev/ttyMOD1 сейчас 2 устройства 21 и 22

НО проблема есть и при:

  "enabled" : false,
  "path" : "/dev/ttyRS485-1",

  "enabled" : false,
  "path" : "/dev/ttyRS485-2",

  "enabled" : true,
  "path" : "/dev/ttyMOD1",

  "enabled" : false,
  "slave_id" : "22"

Уважаемые разработчики обратите внимание, что решение с помощью костылей существует уже 4 месяца:

Решение такое:

  "path" : "/dev/ttyMOD1",
  "read_rate_limit_ms" : 5000, // произвольное большое значение

И затем на нужных портах:

        {
          "enabled" : true,
          "name" : "Input 2 Single Press Counter",
          "read_period_ms" : 100 // низкое быстрое значение
        },

А вот такая настройка поднимет время срабатывания до времени чуть большее чем read_rate_limit_ms:

image

Спасибо, передал разработчикам.
Изучим проблему и выпустим патч.

А можете, пожалуйста, вот что ещё проверить?
Нужно подписаться на wb-mr6c_21/Input 2 Single Press Counter и посмотреть, насколько быстро что-то приходит туда без костыля, а только со штатной конфигурацией.
Примерно вот так:
mosquitto_sub -v -t ‘/devices/wb-mr6c_21/controls/Input 2 Single Press Counter’

Также нужно оптимизировать процесс опроса:

  1. Убрать период опроса всяких малополезных данных вроде серийных номеров
  2. Период опроса данных со счетчиков - если не нужен частый опрос, лучше просто удалить этот параметр
  3. Указать короткий (тот самый "read_period_ms" : 100) для счётчиков кнопок

А можете, пожалуйста, вот что ещё проверить?
Нужно подписаться на wb-mr6c_21/Input 2 Single Press Counter и посмотреть, насколько быстро что-то приходит туда без костыля, а только со штатной конфигурацией.
Примерно вот так:
mosquitto_sub -v -t ‘/devices/wb-mr6c_21/controls/Input 2 Single Press Counter’

Приходят с задержкой 1.5-2 секунды, иногда быстрее.

Также нужно оптимизировать процесс опроса:

  1. Убрать период опроса всяких малополезных данных вроде серийных номеров
  2. Период опроса данных со счетчиков - если не нужен частый опрос, лучше просто удалить этот параметр
  3. Указать короткий (тот самый "read_period_ms" : 100) для счётчиков кнопок

Оптимизирован не то слово :slight_smile:

  1. Одно устройство на шине. Запрос одного Input 2 Single Press Counter. Ну ладно еще состояние 6 каналов реле. Серийный номер не запрашивается на этой шине вообще.
  2. Счетчик на другой шине (на которой 2 устройства, приточка и счетчик), опрашиваются 5 параметров, 3 раз в 2 секунды, 1 раз в 5 секунд еще один раз в 7 секунд.
  3. Везде стояло "in query order". Как только выставляешь "read_period_ms" : 100, проблема уходит (даже при дефолтных "read_rate_limit_ms" : 10)

Видимо проблема возникает как раз когда код пытается создать очередь …

1 - да, проглядел.
2 - сейчас планировщик не слишком хорошо работает с разными длинными интервалами, собственно в той теме про это и было. Серийники, кстати, запрашиваются у диммера, mwac…
Про 3 - собственно, так и нужно. read_rate_limit трогать вообще не надо, достаточно для чувствительных данных указать короткий период (не забывая о том, что он должен быть реалистичным).