Добрый день.
Есть такая задача - управлять одноцветными лентами  - вкл/выкл плюс диммирование - возвратными выключателями, подключенными к входам WD14 и реализовано должно быть на движке правил. Судя по документации штатного определения типа нажатий у WD14 нет. Я не программист, так что, по сути, изобретаю велосипед. Отсюда вопрос - будет ли работать такой код?
//выполнение операции по типу нажатия клавиши
function PressAction(trigger,device,deviceBri){
  var timerLongPress = null;
  var timeOfLongPress = 300;
  var isLongPress = false;
  var ruleName1 = "rule1_" + trigger.replace("/", "_");
  var ruleName2 = "rule2_" + trigger.replace("/", "_");
  var tickerName = "ticker_" + ruleName;
  var Direction = true; //направление диммирования true - вверх, false - вниз
  var dBri;
  var deviceB = Array.isArray(deviceBri);//проверка задано ли более одного канала
  if (deviceB) {
	//унификация параметра яркости на всех каналах
	dBri = dev[deviceBri[0]];
	for (var k = 0, k < deviceBri.length, k++){
	  dev[deviceBri[k]] = dBri; 
	}
  } else {
	//задан один канал
	dBri = dev[deviceBri];
  }
  //определение направления диммирования
  if (dBri = 100){
	  Direction = false;
  }
  //определение типа нажатия
  defineRule(ruleName1, {
	whenChanged: trigger,
	then: then: function(newValue, devName, cellName) 
	  if (newValue){
		if (timerLongPress != null){
		  clearTimeout(timerLongPress);
		}
		timerLongPress = setTimeout(function (){
		  isLongPress = true;
		}, timeOfLongPress);
		if (isLongPress){
		  //тип нажатия longpress, включаем итерацию
		  startTicker(tickerName, 100);
		}
	  } else {
		//тип нажатия Click
		if (!isLongPress){
			////проверка задано ли более одного канала
			var deviceC = Array.isArray(device);
			if (deviceC){
			  var j;
			  var dOn = false;
			  for (j = 0; j < device.length; j++){
				if (dev[device[j]]) {
				dOn = true;
				}					
			  }
			  //если любой из каналов включен, отключаем все
			  if (dOn){
				for (j = 0; j < device.length; j++){
				  if (dev[device[j]]) {
				    dev[device[j]] = false;	
				  }					
			    }  
			  } else {
				//поскольку все каналы отключены, включаем все
				for (j = 0; j < device.length; j++){
				  if (dev[device[j]]) {
				    dev[device[j]] = true;	
				  }					
			    }
			  }
			} else {
			//задан один канал, производим переключение
			dev[device] = !dev[device];
			}
		}
	  }
	});
  //изменение яркости по longpress
  defineRule(ruleName2,{
	when: function () { return timers.tickerName.firing; },
	then: function () {
	  //проверка задано ли более одного канала
	  var deviceB = Array.isArray(deviceBri);
	  var i;
	  if (deviceB){
		//изменение яркости на каждом канале согласно направления
		for (var l = 0, l < deviceBri.length, l++){
		  i = dev[deviceBri[l]];
		  if (Direction){
		    if (i < 100 && trigger) {
              i++
              dev[deviceBri[l]] = i
		    } else {
              timers.tickerName.stop();
		    }
	      } else {
		    if (i > 0 && trigger) {
              i--
              dev[deviceBri[j]] = i
		    } else {
            timers.tickerName.stop();
		    }
		  }
		}
	  } else {
		//задан один канал
	    i = dev[deviceBri];
	    if (Direction){
		  if (i < 100 && trigger) {
            i++
           dev[deviceBri] = i
		  } else {
            timers.tickerName.stop();
		  }
	    } else {
		  if (i > 0 && trigger) {
            i--
            dev[deviceBri] = i
		  } else {
            timers.tickerName.stop();
		  }
	    }
	  }
	}
  });
}
PressAction(trigger1, target1, target1_bri);
PressAction(trigger2, [target2,target3], [target2_bri,target3_bri]);
Где trigger это вход по типу “/wb-gpio/EXT@IN@", target - канал "wb-led@/controls/Channel @”, target_bri - “wb-led_@/controls/Channel @ Brightness”