# Rainbird control from node-red

**URL:** <https://discourse.nodered.org/t/rainbird-control-from-node-red/92880>\
**Category:** General\
**Created:** [3 November 2024 09:35 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880 "2024-11-03T09:35:29Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sirhc](https://avatars.discourse-cdn.com/v4/letter/s/b77776/32.png) [@Sirhc](https://discourse.nodered.org/u/Sirhc)\
**Post date:** [3 November 2024 09:35 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/1 "2024-11-03T09:35:30Z")

</div>

Hello

I have successfully installed [node-rainbird - npm](https://www.npmjs.com/package/node-rainbird) and using it in node-red.

The example on how to use the package states:

> const RainBirdClass = require('node-rainbird');
> 
> let rainbird = new RainBirdClass("_your\_ip\_address_", "_your\_password_");
> 
> rainbird.setDebug(); // Only set this for verbose logging information
> 
> rainbird  
> .stopIrrigation()  
> .then(console.log)  
> .catch(console.error);

I can run this on my machine using node.js and return the message successfully to console. But how do I return the console.log into a msg.payload instead in a node-red function?

In my function I tried:

> const RainBirdClass = require('node-rainbird');
> 
> let rainbird = new RainBirdClass("MY\_IP", "MY\_PASSWORD");
> 
> let temp = rainbird.getSerialNumber();  
> msg.payload = temp;  
> return msg;

but I get an empty payload :\

---

<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:** [3 November 2024 09:40 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/2 "2024-11-03T09:40:00Z")

</div>

> [@Sirhc](#):
>
> In my function I tried:
> 
> > const RainBirdClass = require('node-rainbird');

The function node does not support `require` - use the setup tab

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

This article should help: [Use any npm module in Node-RED • FlowFuse](https://flowfuse.com/blog/2023/06/import-modules/)

---

<div class="post-metadata">

**Author:** ![Sirhc](https://avatars.discourse-cdn.com/v4/letter/s/b77776/32.png) [@Sirhc](https://discourse.nodered.org/u/Sirhc)\
**Post date:** [3 November 2024 09:41 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/3 "2024-11-03T09:41:07Z")

</div>

Sorry I pasted my function wrong

I have

> var rainbird = new RainBirdClass("MY\_IP", "MY\_PASSWORD");
> 
> let temp = rainbird.getSerialNumber();
> 
> msg.payload = temp;  
> return msg;

---

<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:** [3 November 2024 09:42 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/4 "2024-11-03T09:42:10Z")

</div>

Add `node.warn({ RainBirdClass })` to the start of the function, fire a msg into it then inspect the debug sidebar - what do you see?

---

<div class="post-metadata">

**Author:** ![Sirhc](https://avatars.discourse-cdn.com/v4/letter/s/b77776/32.png) [@Sirhc](https://discourse.nodered.org/u/Sirhc)\
**Post date:** [3 November 2024 09:43 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/5 "2024-11-03T09:43:14Z")

</div>

> [@Steve-Mcl](#):
>
> node.warn({ RainBirdClass })

I see this:

![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/0/8/08091a160e5215d37e04d7f71720bec89ada3918.png)

---

<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:** [3 November 2024 09:48 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/6 "2024-11-03T09:48:12Z")

</div>

Then your solution is

```auto
const rainbird = new RainBirdClass("MY_IP", "MY_PASSWORD");
msg.payload = await rainbird.getSerialNumber();
return msg

```

The functions in the README dont say they return a promise but a quick glance at the package reveals they return a `request` promise. Therefore you eaither need to `await` or do the `then().catch`

If you want to do promise chain then its like this...

```auto
const rainbird = new RainBirdClass.RainBirdClass("MY_IP", "MY_PASSWORD");
rainbird.getSerialNumber().then(result => {
    msg.payload = result
    node.send(msg)
}).catch(err => {
    node.error(err, msg)
})

```

---

<div class="post-metadata">

**Author:** ![Sirhc](https://avatars.discourse-cdn.com/v4/letter/s/b77776/32.png) [@Sirhc](https://discourse.nodered.org/u/Sirhc)\
**Post date:** [3 November 2024 10:53 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/7 "2024-11-03T10:53:41Z")

</div>

> [@Steve-Mcl](#):
>
> ```auto
> rainbird.getSerialNumber().then(result => {
> msg.payload = result
> node.send(msg)
> }).catch(err => {
> node.error(err, msg)
> })
> 
> ```

Thank you very much!

---

<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:** [17 November 2024 10:54 UTC](https://discourse.nodered.org/t/rainbird-control-from-node-red/92880/8 "2024-11-17T10:54:30Z")

</div>

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