Checking status change after a given delay

Folks,

Need a bit of help here.

I'm checking a GPIO change of state. When a change of state happens, I need to wait for a predetermined amount of time, check again and only take action if the status change is the same after that specific period of time has elapsed.

I kind of know that setTimeDelay needs to be used, but couldn't figure out how to use it to achieve my objective - I'm being confused by the callback arrangements and how they work.

Thanks in advance.

If you are doing it in a function node then it is setTimeout that you need to use
https://www.w3schools.com/jsref/met_win_settimeout.asp
However I think node-red-contrib-debounce will do exactly what you want without resorting to a function node.

Hi Colin,

Thanks for your reply.

It's actually not to debounce a switch - I'm doing this with a GPIO node with a configurable debounce period.

This is to trigger a provisioning routing after a key has been pressed more than a given amount of seconds.

Thanks again ..

Ahmed.

What is the difference? The debounce node will do what you asked.
If it is the fact that it debounces the Off signal too then you can add a Switch node after the debounce so only On signals get through.

setTimeout() and setInterval() functions allow you to execute a piece of JavaScript code/function at a certain point in the future. setInterval repeats the call, setTimeout only runs it once.

JavaScript setTimeout(expression, timeout); runs the code/function once after the timeout. It is a time based code execution method that will execute script only one time when the interval is reached, and not repeat again unless you gear it to loop the script by nesting the setTimeout object inside of the function it calls to run. If geared to loop, it will keep firing at the interval unless you call clearTimeout(). If you want something to happen one time after some seconds Then use setTimeout... because it only executes one time when the interval is reached.

setTimeout(function() {
  console.log('Wait 3 seconds and I appear just once');
}, 3000);

setInterval(expression, timeout); runs the code/function repeatedly, with the length of the timeout between each repeat. It is a time interval based code execution method that has the native ability to repeatedly run specified script when the interval is reached. It should not be nested into its callback function by the script author to make it loop, since it loops by default. It will keep firing at the interval unless you call clearInterval(). If you want to loop code for animations or clocks Then use setInterval.

setInterval(function() {
  console.log('Every 3 seconds I appear on your console');
}, 3000)