Max
Max

Reputation: 33

node red array / how to "use" specific place

in node red i collect values with "Collector" the collector sends me an "Object" with all pairs of values when one of them is updated:

{ "mqtt/1/": "-127.00", "mqtt/0/": "41.94" }

with "json" and after with "stringsplit" i got an array of f.e. 9 values: array [9] (can be up to 80 pairs of values)!

[ "{", "mqtt/1/", ":", "-127.00", ",", "mqtt/0/", ":", "41.61", "}" ]

now i want to have a function node which compares the Value (-127.00) from the Topic (mqtt/1/) with the Value (41.61) from the Topic (mqtt/0/). this i working ...BUT only if i know which is the first topic/value and which is the second...

var outputMsgs = msg.payload;
var top1=outputMsgs[1];
var val1=outputMsgs[3];
var top2=outputMsgs[5];
var val2=outputMsgs[7];
msg = {payload: val1}
var msg2 = {payload: val2}
if (val1>val2)
{var msgOUT={payload: "BIGGER"};}
return [msg, msg2, msgOUT];

But the Problem is, that sometimes "mqtt/1/" comes first, sometimes "mqtt/0/" and values will be switched. So now, maybe somebody can help to write a function to pick the right value with the right topic to compare them in the next step.

Maybe is there a Way to look if the topic contains 0, 1 ...80, and then save it in this order in a array???

Thank you in advance!

Upvotes: 0

Views: 5122

Answers (1)

knolleary
knolleary

Reputation: 10117

If the initial msg.payload is truly a javascript object as you describe, ie:

msg.payload = { "mqtt/1/": "-127.00", "mqtt/0/": "41.94" }

then you can reference the two values as:

var value1 = msg.payload["mqtt/1/"];
var value1 = msg.payload["mqtt/2/"];

If msg.payload is actual a JSON string, then pass the message through a JSON node first to convert it to the object.

There is no need to try splitting the string yourself and parsing the content.

Upvotes: 1

Related Questions