Спасибо вроде меньше стало дребезжать.
На всякий случай скину наш код. У нас просто 2 уставки на мин и макс.
И правильно ли я работаю со счетчиком… Есть подозрение что я что то криво сделал… Небольшие дребезги проходят.
//Идея в том, чтобы определить переключение только после того как знчение в течении заданного
// времени находится БОЛЬШЕ уставки.
var devInput = “wb-modbus-1-0/pressure”; // устройство-источник значений.
var maxP = 200; //Значение, превышение которого отслеживаем
var minP = 100;
var debounceTime = 1000; //Время “дребезга” в миллисекундах
var timerId = null; //тут будем сохранять идентификатор таймера
log.info(“start”)
defineRule( “control_pressure” ,{
whenChanged: “wb-modbus-1-0/pressure”,
then: function (newValue, devName, cellName){
log.info(“I’m here!”, newValue)
if(newValue > maxP) { //Если значение БОЛЬШЕ
log.info(“Compare BIGGER”, newValue)
if (timerId){ //Если таймер УЖЕ есть
log.info(“Timer started BEFORE”, newValue)
}
else{ //Запускаем таймер
log.info(“Timer NEED started”, newValue)
timerId = setTimeout(function () { //Начинаем описывать таймер
log.info(“VALUE BIGGER over”, debounceTime, " ms")
//тут можно описать требуемое действие
dev[“wb-gpio”][“A2_OUT”] = true; // on A2 (DO2
timerId = null; //Сбрасываем идентификатор отработавшего таймера
}, debounceTime);
}
}
if(newValue < minP) { //Если значение БОЛЬШЕ
log.info(“Compare LOWER”, newValue)
if (timerId){ //Если таймер УЖЕ есть
log.info(“Timer started BEFORE”, newValue)
}
else{ //Запускаем таймер
log.info(“Timer NEED started”, newValue)
timerId = setTimeout(function () { //Начинаем описывать таймер
log.info(“VALUE LOWER over”, debounceTime, " ms")
//тут можно описать требуемое действие
dev[“wb-gpio”][“A2_OUT”] = false; // on A2 (DO2
timerId = null; //Сбрасываем идентификатор отработавшего таймера
}, debounceTime);
}
}
}
})
···
С уважением,
Ведущий инженер ЦСА
АО «ЭЛКАМ-нефтемаш»
Мыслин Виктор Валерьевич,
тел. +7-951-948-28-85
From: Андрей Радионов через Wiren Board Support [mailto:info@wirenboard.ru]
Sent: Friday, January 8, 2021 8:43 PM
To: Мыслин Виктор Валерьевич
Subject: Re:Debounce
Добрый день.
Надеюсь - я правильно понял задачу, вот код:
//01_08_test_1.js
//Идея в том, чтобы определить переключение только после того как знчение в течении заданного
// времени находится БОЛЬШЕ уставки.
var devInput = "01_08_Test0/test0"; // устройство-источник значений.
var compValue = 10; //Значение, превышение которого отслеживаем
var debounceTime = 2000; //Время "дребезга" в миллисекундах
var timerId = null; //тут будем сохранять идентификатор таймера
log.info("start")
defineRule( "debounceTime" ,{
whenChanged: "01_08_Test0/test0",
then: function (newValue, devName, cellName){
log.info("I’m here!", newValue)
if(newValue > compValue) { //Если значение БОЛЬШЕ
log.info("Compare BIGGER", newValue)
if (timerId){ //Если таймер УЖЕ есть
log.info("Timer started BEFORE", newValue)
}
else{ //Запускаем таймер
log.info("Timer NEED started", newValue)
timerId = setTimeout(function () { //Начинаем описывать таймер
log.info("VALUE BIGGER over", debounceTime, " ms") //тут можно описать требуемое действие
timerId = null; //Сбрасываем идентификатор отработавшего таймера
}, debounceTime);
}
}
else{ //Если значение МЕНЬШЕ уставки
if (timerId){ //Если таймер УЖЕ есть
log.info("Kill timer", timerId);
clearTimeout(timerId); //останавливем таймер
timerId = null; //Сбрасываем идентификатор таймера
}
}
}
})
“log.info” можно удалить или закомментировать
Участники: support (7), Myslin_Viktor_Valere