Правильный синтакис

Подскажите, как сделать правильно, плз.
Каждые 5 минут проверяю температуру воздуха по крону.
как вытащить правильно показания по воздуху предыдущего цикла?
пробовал типа
в самом начале
var t_old = ‘’ ";
потом внутри cron
t_old = t_real;
t_real = dev[“датчик температуры”] ;
по идее, t_old должна хранить показания предыдущего измерения, но нет - undefined
что я делаю не так?

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

var t_ust = 23;
var t_real_old = "";
defineRule("pi_control_p1", { 
  when: cron("@every 3m"), 
    then: function() {
      if (dev["p1/on"]== true) {
	    var t_real_old = t_real;
        var t_real = dev["wb-mai11_78/IN 3 P Temperature"];
        var t_real_new = t_real;
        var U = dev["wb-dac/EXT1_O1"];
		var err = t_real-t_ust;
// 0.		
            if (Math.abs(err)>12)  { 
              U = Math.round(U+(0.1*err*1000));
              dev["wb-dac/EXT1_O1"] = U;
			  }	
// 1.
            if ( (Math.abs(err)<12) & (Math.abs(err)>5) )  { 
              U = Math.round(U+(0.05*err*1000));
              dev["wb-dac/EXT1_O1"] = U;
              }	        
            if ( ((t_real - t_ust)>1) & (Math.abs(err)<5)) { 
              U = Math.round(U+(0.03*err*1000));       
              dev["wb-dac/EXT1_O1"] = U;
              }              
// 2.   
		    if ( (t_obr < t_ust) || ((t_ust-t_real) > 0.5) ) { 
                U = Math.round(U + (0.075*err*1000));
              	dev["wb-dac/EXT1_O1"] = U;
            }            	             

	    }
    }  
});

Там в пункте 1 в зависимости от подъема и снижения температуры нужно открывать или закрывать клапан теплоносителя.
В этом и затык - в полуавтоматическом режиме (ручная коррекция клапана в нужную сторону) практика показывает приемлемый результат.

У вас переменная t_real_old объявлена и переопределена локально и ей присваивается значение переменной t_real, которая ещё не объявлена. Упрощу пример для понимания:

var t_real_old;
defineRule("rule", { 
 when: cron("@every 1s"), 
   then: function() {
     var t_real_old = t_real;
     var t_real = 1;
     log(t_real_old); // Всегда будет undefined
   }
});
var t_real;
var t_real_old;
defineRule("rule", { 
  when: cron("@every 1s"), 
    then: function() {
      t_real_old = t_real; 
      t_real = 1;
      log(t_real_old); // Первый раз — undefined, второй и последующие — 1
    }
});
var t_real;
var t_real_old;
defineRule("rule", { 
  when: cron("@every 1s"), 
    then: function() {
      t_real = 1;
      t_real_old = t_real;
      log(t_real_old); // Всегда будет 1
    }
});
1 Like

Хотел ведь объявить переменную t_real тоже перед циклом cron, но не сделал этого. На грабли наступил, записал.
Спасибо!