Добрый день.
Есть кнопка поключенная к дискретному входу контроллера.
Есть релейный модуль управления шторами одним выходом реле управляющий освещением.
Почитал примеры правил. Написал свое. Проблема - не знаю как убрать дребезг кнопки - при нажатии свет моргает по нескольку раз (((
Код правила:
square_track_timer = null;
square_track_timeout_ms = 100;
Добрый день.
Вообще для входов уже есть антидребезг. Ну и логика не очень понятна - реле переключается по завершению таймера, добавляя 100мс. не лучше сразу проверять налисие таймера, если его нет - переклюсать реле и запускать таймер?
Добрый. Задам возможно глупый вопрос (я в nodejs новичок не говоря уже про ваш движок).
Что в таком случае должна делать функция отложенная по таймеру ?
Сколько раз этот код будет обработан за одно нажатие кнопки ?
Обрабатывает аппаратную кнопку правило “square_track_button”
Я бы переписал его так:
defineRule("square_track_button", {
whenChanged: "wb-gpio/EXT1_IN9",
then: function (newValue, devName, cellName) {
if (newValue = true) { //По переднему фронту
if (!square_track_timer) { //Если таймера нет
dev["wb-gpio"]["EXT4_ON4"] = !dev["wb-gpio"]["EXT4_ON4"]; //переключаем реле
square_track_timer = setTimeout(function () { //запускаем таймер
square_track_timer = null;
}, square_track_timeout_ms);
}
}
}
});
Только очищает идентификатор таймера. Таймер используется в качестве семафора, пока он, таймер выполняется - нажатия на кнопку не обрабатываются совсем.
За одно нажатие - один. За отпускание - еще раз, до строчки
Избыточным - не является. Нам нужно чтобы правило реагировало только на нажатие кнопки.
То есть вызывается оно, правило, при любом изменении сорстояния. При нажатии (замыкании)и при размыкании. Проверяя в каком сейчас состоянии кнопка - реагируем только на замыкание.
UPD!
if (newValue = true) будет истиной всегда. Благодарю что обратили внимание.
именно условие записывается как if (newValue == true)