Подскажите, как сделать правильно, плз.
Каждые 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 лайк
Хотел ведь объявить переменную t_real тоже перед циклом cron, но не сделал этого. На грабли наступил, записал.
Спасибо!