# Whats the best interval node?

**URL:** <https://discourse.nodered.org/t/whats-the-best-interval-node/82329>\
**Category:** General\
**Created:** [25 October 2023 10:57 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329 "2023-10-25T10:57:28Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![Josh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/josh/32/62208_2.png) [@Josh](https://discourse.nodered.org/u/Josh)\
**Post date:** [25 October 2023 10:57 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/1 "2023-10-25T10:57:28Z")

</div>

I want a node where it should do the work of cron but should have interval functionality which cron node lacks.

---

<div class="post-metadata">

**Author:** ![marcus-j-davies](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/marcus-j-davies/32/103435_2.png) [@marcus-j-davies](https://discourse.nodered.org/u/marcus-j-davies)\
**Post date:** [25 October 2023 11:14 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/2 "2023-10-25T11:14:16Z")

</div>

Hi @Josh

My suggestion here is to use the below, but one of our very own mods

[node-red-contrib-cron-plus (node) - Node-RED (nodered.org)](https://flows.nodered.org/node/node-red-contrib-cron-plus)

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [25 October 2023 11:15 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/3 "2023-10-25T11:15:33Z")

</div>

> [@Josh](#):
>
> should have interval functionality which cron node lacks

Can you clarify?

Cron "all about" intervals!

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [25 October 2023 11:33 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/4 "2023-10-25T11:33:15Z")

</div>

> [@Josh](#):
>
> interval functionality

The inject node has this:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/f/3f034d94134bc32533462d7ad0d54d328f954071.png)

CRON+ has lots of options, basically everything that CRON can do:

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/1/7/179580e8462690042547eb6aa5c59a67d42cfc27.png)

and more:  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/d/9/d9014b3c75f64be19b7cd6874fd36dffb02367b1.png)

---

<div class="post-metadata">

**Author:** ![Josh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/josh/32/62208_2.png) [@Josh](https://discourse.nodered.org/u/Josh)\
**Post date:** [25 October 2023 11:33 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/5 "2023-10-25T11:33:20Z")

</div>

Lets say that I have a set the cron node to trigger every 40 seconds.

Let current time be 12:00:00 hrs - The cron node starts , The first trigger will be in 12:00:40 . The second trigger should be (for every 40 seconds) 12:01:20 . But the cron node will trigger only in 12:01:40 .

Let me know if you need more clarity.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [25 October 2023 11:35 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/6 "2023-10-25T11:35:02Z")

</div>

What does ` */40 * * * * *` do for you?

---

<div class="post-metadata">

**Author:** ![Josh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/josh/32/62208_2.png) [@Josh](https://discourse.nodered.org/u/Josh)\
**Post date:** [25 October 2023 11:35 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/7 "2023-10-25T11:35:30Z")

</div>

> The inject node has this:

But I cant dynamically set intervals using inject node ☹

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [25 October 2023 11:36 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/8 "2023-10-25T11:36:30Z")

</div>

> [@Josh](#):
>
> Let current time be 12:00:00 hrs - The cron node starts , The first trigger will be in 12:00:40 . The second trigger should be (for every 40 seconds) 12:01:20 . But the cron node will trigger only in 12:01:40 .

Inject can do that.

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/6/f/6f5e126a43d0eb14682aa48d1015f216d3378653.png)

Enhanced inject has more options (an insane amount! 🙂 )

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/f/c/fc00ad87425b666492a054e1ea1e867cbcaf1b9d.png)  
It is part of the node-red-contrib-sun-position node.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [25 October 2023 11:37 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/9 "2023-10-25T11:37:25Z")

</div>

> [@Josh](#):
>
> But I cant dynamically set intervals using inject node

OK, but I don't think you asked for that at the start.

---

<div class="post-metadata">

**Author:** ![Josh](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/josh/32/62208_2.png) [@Josh](https://discourse.nodered.org/u/Josh)\
**Post date:** [25 October 2023 11:38 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/10 "2023-10-25T11:38:20Z")

</div>

![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/2/6/261432dd5506d0d59a2d4a80d6676bbcac1f6306.png)

As you can clearly see that the sequence is reset every 0th minute or second.

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [25 October 2023 11:40 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/11 "2023-10-25T11:40:57Z")

</div>

> [@Josh](#):
>
> But I cant dynamically set intervals using inject node

Maybe this?

 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/a/d/ad7aaffcda51fb2b0002dc293bf2a5977a199ad5.png)

Also part of node-red-contrib-sun-position

Not tried that but I think you can probably configure it to do it.

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [25 October 2023 11:46 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/12 "2023-10-25T11:46:02Z")

</div>

That's why I asked (I'm not at computer)

In these cases, I do multiple entries set to start 40 secs apart.

Something like

- `*/0 0/3 * * * *`
- `*/20 1/3 * * * *`
- `*/40 0/3 * * * *`

It's a Cron thing.

Other node might be better suited for this scenario.

Or you could DIY it with `setInterval` in a function

---

<div class="post-metadata">

**Author:** ![TotallyInformation](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/totallyinformation/32/31_2.png) [@TotallyInformation](https://discourse.nodered.org/u/TotallyInformation)\
**Post date:** [25 October 2023 12:06 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/13 "2023-10-25T12:06:10Z")

</div>

> [@Steve-Mcl](#):
>
> Or you could DIY it with `setInterval` in a function

```auto
function doTimer(msg1) {
    node.send(msg1)
}

const timers = context.get('timers') || {}
const name = msg.topic

if ('start' in msg) {
    if (timers[name]) {
        clearInterval(timers[name])
    }
    timers[name] = setInterval(doTimer, msg.interval, msg)
}

if ('stop' in msg && timers[name]) {
    clearInterval(timers[name])
}

context.set('timers', timers)

```

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [25 October 2023 12:13 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/14 "2023-10-25T12:13:48Z")

</div>

Another inelegant option is cronplus injecting every 20 seconds (\*/20 \* \* \* \* \* \*) and a function node to discard every other inject.

```auto
let cnt = context.get("counter") ?? 0
cnt += 1
cnt %= 2
context.set("counter", cnt)
if (cnt === 0) return msg;

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [24 December 2023 12:14 UTC](https://discourse.nodered.org/t/whats-the-best-interval-node/82329/15 "2023-12-24T12:14:41Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
