Перейти к содержанию

Навигация

Rule Examples: различия между версиями

Строка 342: Строка 342:
</syntaxhighlight>
</syntaxhighlight>


== Обработка типов нажатий ==
== Обработка счётчиков нажатий ==
=== Описание ===
Последние версии прошивок устройств Wiren Board могут распознавать типы нажатий подключённых к входам кнопок и транслировать их по [[Modbus]] на контроллер Wiren Board. О том, как устройство распознаёт типы нажатий, читайте в его документации.
 
Для обработки нажатий нужно отслеживать на контроллере состояние счётчика нужного типа нажатия и, при его изменении, выполнять действие.
 
Обработку счётчиков удобно делать на [[wb-rules]], но вы можете использовать любой инструмент для автоматизации, например, [[Node-RED]]. Чтобы ускорить опрос счетчиков, настройте [[RS-485:Configuration via Web Interface#poll-period |период опроса]].
 
=== Примеры ===
В примере мы используем модуль [[WB-MCM8 Modbus Count Inputs | WB-MCM8]] для управления первым каналом диммера [[WB-MDM3 230V Modbus Dimmer | WB-MDM3]]:
# Короткое нажатие включает канал.
# Двойное — выключает канал.
# Длинное — увеличивает яркость.
# Короткое, а затем длинное — уменьшает яркость.
 
Так как изменение яркости требует растянутое во времени действие, то мы используем таймер. Также мы контролируем состояние входа с кнопкой и прекращаем действие при отпускании кнопки.
 
<syntaxhighlight lang="js">
/* ---------------------------- */
/* 1. Single Press Counter: On action*/
/* ---------------------------- */
 
defineRule({
  whenChanged: "wb-mcm8_20/Input 1 Single Press Counter",
  then: function (newValue, devName, cellName) {
    dev["wb-mdm3_58/K1"] = true;
  }
});
 
 
/* ---------------------------- */
/* 2. Double Press Counter: Off action*/
/* ---------------------------- */
 
defineRule({
  whenChanged: "wb-mcm8_20/Input 1 Double Press Counter",
  then: function (newValue, devName, cellName) {
    dev["wb-mdm3_58/K1"] = false;
  }
});
 
 
/* --------------------------------------- */
/* 3. Long Press Counter: Increase brightness */
/* --------------------------------------- */
 
defineRule({
  whenChanged: "wb-mcm8_20/Input 1 Long Press Counter",
  then: function (newValue, devName, cellName) {
    // Start a timer that will increase the value of the control
    startTicker("input1_long_press", 100);
  }
});
 
// A rule that will increase the brightness on a timer
defineRule({
  when: function () { return timers["input1_long_press"].firing; },
  then: function () {
    i = dev["wb-mdm3_58/Channel 1"];
 
    if (i < 100 && dev["wb-mcm8_20/Input 1"]) {
      i++
      dev["wb-mdm3_58/Channel 1"] = i
    } else {
      timers["input1_long_press"].stop();
    }
  }
});
 
 
/* -------------------------------------------- */
/* 4. Shortlong Press Counter: Decrease brightness */
/* -------------------------------------------- */
 
defineRule({
  whenChanged: "wb-mcm8_20/Input 1 Shortlong Press Counter",
  then: function (newValue, devName, cellName) {
    // Start a timer that will decrease the value of the control
    startTicker("input1_shortlong_press", 100);
  }
});
 
// A rule that will decrease the brightness on a timer
defineRule({
  when: function () { return timers["input1_shortlong_press"].firing; },
  then: function () {
    i = dev["wb-mdm3_58/Channel 1"];
 
    if (i > 0 && dev["wb-mcm8_20/Input 1"]) {
      i--
      dev["wb-mdm3_58/Channel 1"] = i
    } else {
      timers["input1_shortlong_press"].stop();
    }
  }
});
 
</syntaxhighlight>
 
=== Универсальный модуль для wb-rules ===
Мы написали модуль для wb-rules [https://github.com/wirenboard/wb-community/tree/main/wb-press-actions wb-press-actions], который облегчает обработку нажатий в ваших скриптах.


== Датчик MSW v.3 ==
== Датчик MSW v.3 ==