Запись уставки в таймер

Добрый день!
Сделал небольшое правило для включения реле по датчику движения с задержкой отключения. Уставку порога срабатывания и уставку задержки отключения вывел в контрол. Уставка срабатывания принимается правилом, а вот уставка таймера нет. При чём если изменить уставку в панельке устройства, потом зайти в правило и ничего не делая записать, то примется то значение, что было в панельке устройства.

defineVirtualDevice("Motion", {
  title: "Детектор движения",
  cells: {
	Set_motion_max: {
      title: "порог включения",
	    type: "value",
	    value : "",
        max: 1000,
        min: 0,
        readonly : false,
 	},
    Set_timer_off: {
      title: "задержка отключения",
	    type: "value",
	    units: ",  c",
 	    value : "",
        max: 100,
        min: 0,
        readonly : false,
 	},
   Motion_state: {
      title: "детекция движения",//для индикации срабатывания 
	    type: "switch",
	    value : false,
        readonly : true,
   },
}});

var timer_1off_s = dev ["Motion"]["Set_timer_off"];
var timer_1off_id = null;

defineRule("Motion_on", {
    whenChanged: "wb-msw-v4_95/Max Motion",
    then: function (newValue, devName, cellName) {
           if (newValue > dev ["Motion"]["Set_motion_max"]){
              dev ["Motion/Motion_state"] = true
              dev ["wb-mr6cu_79/K3"] = true;
                 }  else {
            dev ["Motion/Motion_state"] = false;
        }
}});

defineRule("Motion_off", {
    whenChanged: "Motion/Motion_state",
    then: function (newValue, devName, cellName) {
        if ((newValue == false)&&(dev ["wb-mr6cu_79"]["K3"] == true)){
            if (timer_1off_id) {
            clearTimeout(timer_1off_id);
            }
            timer_1off_id = setTimeout(function () {
                dev ["wb-mr6cu_79/K3"] = false;
                timer_1off_id = null;
            }, timer_1off_s*1000);
        }
}});

Помогите разобраться.

Добрый день.
У вас переменная timer_1off_s определена только один раз при объявлении:

Можно переопределять её значение в правиле Motion_on, либо создать еще одно правило, срабатывающее по изменению контрола Motion/Set_timer_off и менять значение переменной в нем.

1 лайк

Благодарю!
Всё заработало, добавил присвоение уставки при изменении состояния Motion_state.

defineRule("Motion_off", {
    whenChanged: "Motion/Motion_state",
    then: function (newValue, devName, cellName) {
        if ((newValue == false)&&(dev ["wb-mr6cu_79"]["K3"] == true)){
            timer_1off_s = dev ["Motion"]["Set_timer_off"] // Применение уставки таймера
            if (timer_1off_id) {
            clearTimeout(timer_1off_id);
            }
            timer_1off_id = setTimeout(function () {
                dev ["wb-mr6cu_79/K3"] = false;
                timer_1off_id = null;
            }, timer_1off_s*1000);
        }
}});
1 лайк