Детектирование сложных нажатий. Подбор реле. Оптимальный способ

Здравствуйте, прочитал весь FAQ, но так и не прояснили для себя вопрос с детектированием более продвинутых нажатий (хотя как посмотреть, что из этого более продвинутое). Например, короткое-длинное обычно никому не нужно (говорю за себя, конечно), но очень нужно детектировать время длинного нажатия и исполнять какое-то длительное действие или последовательность действий, пока кнопка нажата. Речь не про шторы. Например, чтобы при удержании кнопки последовательно включались все более дальние зоны, пока кнопку не отпустишь. Либо чтобы на одной клавише одновременно детектировалось и “обычное” длинное нажатие и “долгое” длинное (мастер-выключатель через 5с допустим).

Я так понимаю, что это все-таки можно программно обработать на контроллере, если написать скрипты. Но при этом не очень понимаю, какие реле мне лучше использовать. Или какой путь был бы оптимальным? Например, реле с детектированием нажатий в этом случае для меня - лишний\параллельный\не используемый функционал (все равно на контроллере программировать) или могут быть полезными?

Благодарю за ответы.

Добрый день.

Да, все верно. В документации есть пример — Примеры правил — Wiren Board

По сути — любой модуль, поскольку в любом случае помимо “обычного” длинного нажатия вам придется программно обрабатывать и “долгое” длинное нажатие. В случае с модулями у которых есть счетчик длинных нажатий — написать правило обработки “обычного” длинного нажатия будет немного проще (как в примере по ссылке выше). Для “долгого” длинного нажатия чуть сложнее, нужно будет использовать таймер. А так как в любом случае придется его использовать, то можно взять модуль и без счетчика длинных нажатий.

Приведу небольшой пример. Есть диммер WB-MDM3, все выходы которого отключены. На вход подключена кнопка без фиксации. При нажатии и удержании кнопки — будут поочередно включаться каналы: через 1 секунду — 1 канал, через 2 секунды — 2 канал, через 3 секунды — 3 канал. При повторном нажатии кнопки каналы будут отключаться в той же последовательности с тем же интервалом.

var tickerInterval = 500;
var tickerTime = 0;

function Task(tickerTime) {
  switch(tickerTime) {
    case 1000:
      dev["wb-mdm3_20/K1"] = !dev["wb-mdm3_20/K1"];
      break;
    case 2000:
      dev["wb-mdm3_20/K2"] = !dev["wb-mdm3_20/K2"];
      break;
    case 3000:
      dev["wb-mdm3_20/K3"] = !dev["wb-mdm3_20/K3"];
      break;
  }
}

defineRule({
  asSoonAs: function () {
    return dev["wb-mdm3_20/Input 1"] ;
  },
  then: function () {
    startTicker("timer", tickerInterval);
  }
});

defineRule({
  when: function () { 
    return timers.timer.firing; 
  },
  then: function () {
    if (dev["wb-mdm3_20/Input 1"]) {
      tickerTime += tickerInterval;
      Task(tickerTime);
    } else {
      timers.timer.stop();
      tickerTime = 0;
    }
  }
});

Большое спасибо за подробный пример. Это именно то, чту нужно было. А разница при использовании для вышеописанных целей модуля входов на шине WBIO и реле, которое только на RS485 подключается, есть? Я правильно понимаю, что то, что подключается непосредственно к контроллеру, приоритетнее и быстрее исполняется? Из плюсов отдельного реле только то, что оно может работать отдельно и писать скрипты для простых нажатий чуть легче? А еще его можно разместить где-то в удаленном от контроллера месте. Но если ничего этого не требуется, а писать скрипты все равно надо (контроллер нужен), то правильно ли предполагать, что лучше использовать модуль WBIO-DI-WD-14?.. хотя… я при этом не вижу модулей, которые способны на выходах коммутировать больше 7А. То есть такая возможность тоже только у обособленных реле, получается

Для вышеописанных целей разницы нет. Выбор модуля больше зависит от необходимого функционала, количества входов/выходов, типа подключаемой нагрузки и т.п.
Модуль WBIO-DI-WD-14 так же подойдет для вышеописанного примера.