# Split incoming meta-data from Lora in Node-Red

**URL:** <https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265>\
**Category:** General\
**Created:** [18 May 2019 06:01 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265 "2019-05-18T06:01:31Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![smbunn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smbunn/32/8469_2.png) [@smbunn](https://discourse.nodered.org/u/smbunn)\
**Post date:** [18 May 2019 06:01 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/1 "2019-05-18T06:01:32Z")

</div>

I have data coming in from The ThingsNetwork using the TTN connectors. All works just fine but now there are more LoRa gateways around I am seeing the meta-data showing multiple sources.

```auto
[{"gtw_id":"eui-60c5a8fffe71ab20","timestamp":1177433204,
"time":"2019-05-18T05:37:18.649933Z",
"channel":7,"rssi":-125,"snr":-16,"rf_chain":1,
"latitude":-36.84942,"longitude":174.83958},
{"gtw_id":"eui-60c5a8fffe74d3a5","timestamp":1158909916,
"time":",
"channel":7,"rssi":-35,"snr":9.8,"rf_chain":1,
"latitude":-36.85412,"longitude":174.83879,"altitude":98}]

```

What I would like to do is only pull meta-data from my gateway (eui-60c5a8fffe74d3a5). Sometimes for example SNR is accessed as value = msg.metadata.gateways[0].snr; and sometimes it is value = msg.metadata.gateways[1].snr.

As more gateways appear it could be [2], [3] etc. How can I identify which offset in the array to access using a function that can look throughout the array, identify my gateway and from then on only pass thru the offset to my functions.

This is how I am doing it now using switches and duplicated code but I know it could be a lot tidier.

```auto
[{"id":"daa31028.bd4bf","type":"function","z":"62f2b249.fbdf4c","name":"Strip RSSI","func":"var value = msg.metadata.gateways[0].rssi;\nmsg.payload = value;\nmsg.topic = \"RSSI\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":740,"wires":[["9c0e3bce.d88338","94808400.c69198"]]},{"id":"3c712fcf.09dae","type":"function","z":"62f2b249.fbdf4c","name":"Strip SNR","func":"var value = msg.metadata.gateways[0].snr;\nmsg.payload = value;\nmsg.topic = \"snr\";\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":660,"wires":[["eaa62bef.7c1708","ac95c00c.2a26a"]]},{"id":"97c7af2d.7ccd2","type":"switch","z":"62f2b249.fbdf4c","name":"switch1","property":"metadata.gateways[0].gtw_id","propertyType":"msg","rules":[{"t":"eq","v":"eui-60c5a8fffe74d3a5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":440,"y":700,"wires":[["7fcea8f9.1007a8","3c712fcf.09dae","daa31028.bd4bf"]]},{"id":"a19032a9.b784c","type":"switch","z":"62f2b249.fbdf4c","name":"switch3","property":"metadata.gateways[1].gtw_id","propertyType":"msg","rules":[{"t":"eq","v":"eui-60c5a8fffe74d3a5","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":440,"y":820,"wires":[["d007c91e.c0bcb8","fb9be853.7e5528","4b2b94bd.711ddc"]]},{"id":"4b2b94bd.711ddc","type":"function","z":"62f2b249.fbdf4c","name":"Strip RSSI","func":"var value = msg.metadata.gateways[1].rssi;\nmsg.payload = value;\nmsg.topic = \"RSSI\";\nreturn msg;","outputs":1,"noerr":0,"x":690,"y":860,"wires":[["9c0e3bce.d88338"]]},{"id":"fb9be853.7e5528","type":"function","z":"62f2b249.fbdf4c","name":"Strip SNR","func":"var value = msg.metadata.gateways[1].snr;\nmsg.payload = value;\nmsg.topic = \"snr\";\nreturn msg;","outputs":1,"noerr":0,"x":680,"y":800,"wires":[["eaa62bef.7c1708"]]}]

```

 ![node-red1](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/2X/b/b77d126d06c5970fbbce8e4207d8d8c82366c70a.png)

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [18 May 2019 06:32 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/2 "2019-05-18T06:32:48Z")

</div>

Example function:

```auto
input = [
  {
    "gtw_id": "eui-60c5a8fffe71ab20",
    "timestamp": 1177433204,
    "time": "2019-05-18T05:37:18.649933Z",
    "channel": 7,
    "rssi": -125,
    "snr": -16,
    "rf_chain": 1,
    "latitude": -36.84942,
    "longitude": 174.83958
  },
  {
    "gtw_id": "eui-60c5a8fffe74d3a5",
    "timestamp": 1158909916,
    "time": "2019-05-18T05:37:18.649933Z",
    "channel": 7,
    "rssi": -35,
    "snr": 9.8,
    "rf_chain": 1,
    "latitude": -36.85412,
    "longitude": 174.83879,
    "altitude": 98
  }
]

out = input.find(o => o.gtw_id === 'eui-60c5a8fffe74d3a5');
return {payload:out.snr};

```

---

<div class="post-metadata">

**Author:** ![smbunn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smbunn/32/8469_2.png) [@smbunn](https://discourse.nodered.org/u/smbunn)\
**Post date:** [18 May 2019 07:45 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/3 "2019-05-18T07:45:02Z")

</div>

Thanks Bakman2, how do I encapsulate this in a node-red function?  
I am assuming 'input' would be possibly be message.payload but know payload is just the payload itself, not the meta-data.

I tried

```auto
var input = msg.metadata;
out = input.find(o => o.gtw_id === 'eui-60c5a8fffe74d3a5');
return {payload:out.snr};

```

and got

```auto
TypeError: input.find is not a function

```

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [18 May 2019 08:23 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/4 "2019-05-18T08:23:55Z")

</div>

What is the output of msg.metadata?

Perhaps it should be msg.metadata.gateways

---

<div class="post-metadata">

**Author:** ![smbunn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smbunn/32/8469_2.png) [@smbunn](https://discourse.nodered.org/u/smbunn)\
**Post date:** [18 May 2019 08:31 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/5 "2019-05-18T08:31:56Z")

</div>

I got an error message with "msg.metadata" that this was undefined.  
same with msg.metadata,gateways

---

<div class="post-metadata">

**Author:** ![bakman2](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/bakman2/32/6207_2.png) [@bakman2](https://discourse.nodered.org/u/bakman2)\
**Post date:** [18 May 2019 08:32 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/6 "2019-05-18T08:32:52Z")

</div>

So first you have to determine what the input data is. Input-\>debug.

---

<div class="post-metadata">

**Author:** ![smbunn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smbunn/32/8469_2.png) [@smbunn](https://discourse.nodered.org/u/smbunn)\
**Post date:** [18 May 2019 08:37 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/7 "2019-05-18T08:37:06Z")

</div>

Changed the function to

```auto
var gateways = msg.metadata.gateways;
msg.payload = gateways;
return msg;

```

and got

```auto
[{"gtw_id":"eui-60c5a8fffe74d3a5","timestamp":3283714748,"time":"","channel":2,"rssi":-47,"snr":8,"rf_chain":0,"latitude":-36.85412,"longitude":174.83879,"altitude":98}]

```

note that the second gateway seems to have gone for the moment but could return at any time

---

<div class="post-metadata">

**Author:** ![smbunn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smbunn/32/8469_2.png) [@smbunn](https://discourse.nodered.org/u/smbunn)\
**Post date:** [18 May 2019 08:43 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/8 "2019-05-18T08:43:45Z")

</div>

this worked!

```auto
var gateways = msg.metadata.gateways;
out = gateways.find(o => o.gtw_id === 'eui-60c5a8fffe74d3a5');
var value1 = out.snr;
msg.payload = value1;
return msg;

```

---

<div class="post-metadata">

**Author:** ![smbunn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smbunn/32/8469_2.png) [@smbunn](https://discourse.nodered.org/u/smbunn)\
**Post date:** [18 May 2019 09:01 UTC](https://discourse.nodered.org/t/split-incoming-meta-data-from-lora-in-node-red/11265/9 "2019-05-18T09:01:23Z")

</div>

so added

```auto
var gateways = msg.metadata.gateways;
out = gateways.find(o => o.gtw_id === 'eui-60c5a8fffe74d3a5');
var value = out.rssi;
msg.payload = value;
msg.topic = "RSSI";
return msg;

```

and all done and working. Thanks Bakman2
