# Node Red Java Script

**URL:** <https://discourse.nodered.org/t/node-red-java-script/14092>\
**Category:** General\
**Created:** [7 August 2019 12:16 UTC](https://discourse.nodered.org/t/node-red-java-script/14092 "2019-08-07T12:16:55Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Partheepan](https://avatars.discourse-cdn.com/v4/letter/p/c0e974/32.png) [@Partheepan](https://discourse.nodered.org/u/Partheepan)\
**Post date:** [7 August 2019 12:16 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/1 "2019-08-07T12:16:55Z")

</div>

Hi,

I want to send the messages received from in node-red to m2x at&t IoT platform which can only be numeric.  
To begin with, I am new to javascript. I have a javascript code which is

var data\_type = {  
none : 0x00,  
led1 : 0x01,  
led2 : 0x02,  
lux\_max : 0x03,  
lux\_min : 0x04,  
lux\_curr : 0x05,  
baro\_max : 0x06,  
baro\_min : 0x07,  
baro\_curr : 0x08,  
temp\_max : 0x09,  
temp\_\_min : 0x0A,  
temp\_curr : 0x0B,  
accel\_max : 0x0C,  
accel\_min : 0x0D,  
accel\_curr : 0x0E,  
configuration : 0x0F,  
gpio\_in : 0x10,  
gpio\_out : 0x11,  
current\_max : 0x12,  
current\_min : 0x13,  
current\_curr : 0x14,  
gps\_latitude : 0x15,  
gps\_longitude : 0x16,  
gps\_time : 0x17,  
gps\_date : 0x18,  
gps\_lock : 0x19,  
qos\_up : 0x1A,  
qos\_dwn : 0x1B,  
rf\_out : 0x1C,  
data\_mark : 0x1D,  
};

var data\_struc = {  
data\_valid : 0,  
block\_start :0,  
temperature : 0,  
x\_pos : 0,  
y\_pos : 0,  
z\_pos : 0,  
baro\_pressure : 0,  
lux : 0,  
pkt\_timer :0,  
rf\_pwr : 0,  
sf\_val : 0,  
rssi\_up : 0,  
snr\_up : 0,  
rssi\_dwn : 0,  
snr\_dwn :0 ,  
lat\_deg : 0 ,  
lat\_min : 0,  
long\_deg : 0,  
long\_min : 0,  
num\_sats : 0 ,  
gps\_status : 0,  
};

context.global.data\_out = context.global.data\_out || data\_struc;  
var pData = context.global.data\_out;

var msg\_pntr = 0;  
var temp = 0;

while (msg\_pntr \< msg.payload.length){  
switch (msg.payload[msg\_pntr]){  
case data\_type.lux\_max:  
case data\_type.lux\_min:  
case data\_type.lux\_curr:  
pData.lux = msg.payload[++msg\_pntr] \<\< 8  
pData.lux |= msg.payload[++msg\_pntr];  
pData.lux = pData.lux \* 0.24;  
msg\_pntr++;  
break;  
case data\_type.baro\_max:  
case data\_type.baro\_min:  
case data\_type.baro\_curr:  
pData.baro\_pressure = msg.payload[++msg\_pntr]\<\<16;  
pData.baro\_pressure |= msg.payload[++msg\_pntr]\<\<8;  
pData.baro\_pressure |= msg.payload[++msg\_pntr];  
pData.baro\_pressure = pData.baro\_pressure \* 0.25;  
msg\_pntr++;  
break;  
case data\_type.accel\_max:  
case data\_type.accel\_min:  
case data\_type.accel\_curr:  
pData.x\_pos = ((msg.payload[++msg\_pntr] \<\< 24) \>\> 24) \* 0.0625;  
pData.y\_pos = ((msg.payload[++msg\_pntr] \<\< 24) \>\> 24) \* 0.0625;  
pData.z\_pos = ((msg.payload[++msg\_pntr] \<\< 24) \>\> 24) \* 0.0625;  
msg\_pntr++;  
break;  
case data\_type.temp\_min:  
case data\_type.temp\_max:  
case data\_type.temp\_curr:  
pData.temperature = msg.payload[++msg\_pntr] \<\< 24;  
pData.temperature |= msg.payload[++msg\_pntr] \<\< 16;  
pData.temperature = (pData.temperature \>\> 16) \* .0625;  
msg\_pntr++;  
break;  
case data\_type.configuration:  
pData.pkt\_timer = msg.payload[++msg\_pntr];  
msg\_pntr++  
break;  
case data\_type.current\_max:  
case data\_type.current\_min:  
case data\_type.current\_curr:  
msg\_pntr++;  
msg\_pntr++;  
msg\_pntr++;  
break;  
case data\_type.gps\_latitude:  
pData.lat\_deg = (msg.payload[++msg\_pntr] \<\< 24) \>\> 24;  
pData.lat\_min = msg.payload[++msg\_pntr];  
temp = msg.payload[++msg\_pntr] \<\< 8  
temp |= msg.payload[++msg\_pntr];  
pData.lat\_min = pData.lat\_min + (temp \* 0.0001);  
msg\_pntr++;  
break;  
case data\_type.gps\_longitude:  
pData.long\_deg = (msg.payload[++msg\_pntr] \<\< 24);  
pData.long\_deg |= (msg.payload[++msg\_pntr] \<\< 16);  
pData.long\_deg = pData.long\_deg \>\> 16;  
pData.long\_min = msg.payload[++msg\_pntr];  
temp = msg.payload[++msg\_pntr] \<\< 8  
temp |= msg.payload[++msg\_pntr];  
pData.long\_min = pData.long\_min + (temp \* 0.0001);  
msg\_pntr++;  
break;  
case data\_type.gps\_time:  
msg\_pntr++;  
msg\_pntr++;  
msg\_pntr++;  
msg\_pntr++;  
break;  
case data\_type.gps\_date:  
msg\_pntr++;  
msg\_pntr++;  
msg\_pntr++;  
msg\_pntr++;  
break;  
case data\_type.gps\_lock:  
msg\_pntr++;  
pData.gps\_status = msg.payload[msg\_pntr] & 0x0F;  
pData.num\_sats = msg.payload[msg\_pntr++] \>\> 4;  
break;  
case data\_type.qos\_up:  
pData.rssi\_up = msg.payload[++msg\_pntr] \<\< 24;  
pData.rssi\_up |= msg.payload[++msg\_pntr] \<\< 16;  
pData.rssi\_up = pData.rssi\_up \>\> 16;  
pData.snr\_up = (msg.payload[++msg\_pntr] \<\< 24) \>\> 24;  
pData.rf\_pwr = (msg.payload[++msg\_pntr] \<\< 24) \>\> 24;  
msg\_pntr++;  
break;  
case data\_type.qos\_dwn:  
pData.rssi\_dwn = msg.payload[++msg\_pntr] \<\< 24;  
pData.rssi\_dwn |= msg.payload[++msg\_pntr] \<\< 16;  
pData.rssi\_dwn = pData.rssi\_dwn \>\> 16;  
pData.snr\_dwn = ((msg.payload[++msg\_pntr] \<\< 24) \>\> 24) / 4;  
msg\_pntr++;  
break;  
case data\_type.rf\_out:  
pData.rf\_pwr = (msg.payload[++msg\_pntr] \<\< 24) \>\> 24;  
msg\_pntr++;  
break;  
case data\_type.data\_mark:  
if (msg\_pntr == 0) {  
pData = data\_struc;  
pData.block\_start = 1;  
msg\_pntr++;  
}  
else if (msg\_pntr == (msg.payload.length - 1) && (pData.block\_start === 1)) {  
pData.data\_valid = 1;  
msg\_pntr++;  
}  
else {  
pData = data\_struc;  
msg\_pntr = msg.payload.length;  
}  
break;  
default:  
pData = data\_struc;  
msg\_pntr = msg.payload.length;  
}  
}

pData.sf\_val = parseInt(msg.datr.replace("SF"," "),10);

context.global.data\_out = pData;

return pData;

And the result for this is in debug dash is

{ "temperature": 24.4375, "\_msgid": "51855b8f.ae7aa4", "x\_pos": -0.25, "y\_pos": 0, "z\_pos": 0.9375, "baro\_pressure": 100101.5, "lux": 550.8, "sf\_val": 12 }

Could you help me in editing this code and just print the temperature numeric and nothing else. Like,

24.4375

---

<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:** [7 August 2019 12:33 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/2 "2019-08-07T12:33:53Z")

</div>

> I have a javascript code which is

You have copied javascript code.

What input data do you get ?

---

<div class="post-metadata">

**Author:** ![Partheepan](https://avatars.discourse-cdn.com/v4/letter/p/c0e974/32.png) [@Partheepan](https://discourse.nodered.org/u/Partheepan)\
**Post date:** [7 August 2019 12:37 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/3 "2019-08-07T12:37:12Z")

</div>

Thanks for the reply.

The input is from mdot evaluation board which has sensors like temperature, humidity, pressure and accelerometer.

Can we just modify the code to just get the temperature numeric.

---

<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:** [7 August 2019 12:42 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/4 "2019-08-07T12:42:40Z")

</div>

I mean input example data.

But sure, you can remove anything that has nothing to do with the temperature.

---

<div class="post-metadata">

**Author:** ![Partheepan](https://avatars.discourse-cdn.com/v4/letter/p/c0e974/32.png) [@Partheepan](https://discourse.nodered.org/u/Partheepan)\
**Post date:** [7 August 2019 12:45 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/5 "2019-08-07T12:45:21Z")

</div>

This is the input data.

{ "tmst": 3297610324, "chan": 7, "rfch": 1, "freq": 867.9, "stat": 1, "modu": "LORA", "datr": "SF12BW125", "codr": "4/5", "lsnr": 10.5, "rssi": -63, "opts": "", "size": 14, "fcnt": 319, "cls": 0, "port": 1, "mhdr": "407714dd00003f01", "appeui": "e4-4d-04-7a-aa-db-e0-78", "deveui": "00-80-00-00-00-00-d9-c1", "ack": false, "adr": false, "gweui": "00-80-00-00-a0-00-2f-bc", "seqn": 319, "time": "2019-08-07T12:53:06.904012Z", "payload": [14, 252, 0, 15, 8, 6, 28, 14, 5, 7, 35, 11, 1, 139], "eui": "00-80-00-00-00-00-d9-c1", "\_msgid": "c53dc386.3ac24" }

You can see the input data as the payload

---

<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:** [8 August 2019 15:00 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/6 "2019-08-08T15:00:29Z")

</div>

Please make sure that you wrap code with back-ticks or triple back-ticks so that it doesn't get mangled.

---

<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:** [8 August 2019 15:09 UTC](https://discourse.nodered.org/t/node-red-java-script/14092/7 "2019-08-08T15:09:25Z")

</div>

I am no hero in terms of buffer stuff, but what you can do is filter the output with a change node:

```auto
[{"id":"1243c00.48a824","type":"inject","z":"2cf143ce.b68414","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":144,"y":476,"wires":[["d180e5c2.0d6be"]]},{"id":"6589a58f.cf7774","type":"function","z":"2cf143ce.b68414","name":"","func":"var data_type = {\nnone : 0x00,\nled1 : 0x01,\nled2 : 0x02,\nlux_max : 0x03,\nlux_min : 0x04,\nlux_curr : 0x05,\nbaro_max : 0x06,\nbaro_min : 0x07,\nbaro_curr : 0x08,\ntemp_max : 0x09,\ntemp__min : 0x0A,\ntemp_curr : 0x0B,\naccel_max : 0x0C,\naccel_min : 0x0D,\naccel_curr : 0x0E,\nconfiguration : 0x0F,\ngpio_in : 0x10,\ngpio_out : 0x11,\ncurrent_max : 0x12,\ncurrent_min : 0x13,\ncurrent_curr : 0x14,\ngps_latitude : 0x15,\ngps_longitude : 0x16,\ngps_time : 0x17,\ngps_date : 0x18,\ngps_lock : 0x19,\nqos_up : 0x1A,\nqos_dwn : 0x1B,\nrf_out : 0x1C,\ndata_mark : 0x1D,\n};\n\nvar data_struc = {\ndata_valid : 0,\nblock_start :0,\ntemperature : 0,\nx_pos : 0,\ny_pos : 0,\nz_pos : 0,\nbaro_pressure : 0,\nlux : 0,\npkt_timer :0,\nrf_pwr : 0,\nsf_val : 0,\nrssi_up : 0,\nsnr_up : 0,\nrssi_dwn : 0,\nsnr_dwn :0 ,\nlat_deg : 0 ,\nlat_min : 0,\nlong_deg : 0,\nlong_min : 0,\nnum_sats : 0 ,\ngps_status : 0,\n};\n\ncontext.global.data_out = context.global.data_out || data_struc;\nvar pData = context.global.data_out;\n\nvar msg_pntr = 0;\nvar temp = 0;\n\nwhile (msg_pntr < msg.payload.length){\nswitch (msg.payload[msg_pntr]){\ncase data_type.lux_max:\ncase data_type.lux_min:\ncase data_type.lux_curr:\npData.lux = msg.payload[++msg_pntr] << 8\npData.lux |= msg.payload[++msg_pntr];\npData.lux = pData.lux * 0.24;\nmsg_pntr++;\nbreak;\ncase data_type.baro_max:\ncase data_type.baro_min:\ncase data_type.baro_curr:\npData.baro_pressure = msg.payload[++msg_pntr]<<16;\npData.baro_pressure |= msg.payload[++msg_pntr]<<8;\npData.baro_pressure |= msg.payload[++msg_pntr];\npData.baro_pressure = pData.baro_pressure * 0.25;\nmsg_pntr++;\nbreak;\ncase data_type.accel_max:\ncase data_type.accel_min:\ncase data_type.accel_curr:\npData.x_pos = ((msg.payload[++msg_pntr] << 24) >> 24) * 0.0625;\npData.y_pos = ((msg.payload[++msg_pntr] << 24) >> 24) * 0.0625;\npData.z_pos = ((msg.payload[++msg_pntr] << 24) >> 24) * 0.0625;\nmsg_pntr++;\nbreak;\ncase data_type.temp_min:\ncase data_type.temp_max:\ncase data_type.temp_curr:\npData.temperature = msg.payload[++msg_pntr] << 24;\npData.temperature |= msg.payload[++msg_pntr] << 16;\npData.temperature = (pData.temperature >> 16) * .0625;\nmsg_pntr++;\nbreak;\ncase data_type.configuration:\npData.pkt_timer = msg.payload[++msg_pntr];\nmsg_pntr++\nbreak;\ncase data_type.current_max:\ncase data_type.current_min:\ncase data_type.current_curr:\nmsg_pntr++;\nmsg_pntr++;\nmsg_pntr++;\nbreak;\ncase data_type.gps_latitude:\npData.lat_deg = (msg.payload[++msg_pntr] << 24) >> 24;\npData.lat_min = msg.payload[++msg_pntr];\ntemp = msg.payload[++msg_pntr] << 8\ntemp |= msg.payload[++msg_pntr];\npData.lat_min = pData.lat_min + (temp * 0.0001);\nmsg_pntr++;\nbreak;\ncase data_type.gps_longitude:\npData.long_deg = (msg.payload[++msg_pntr] << 24);\npData.long_deg |= (msg.payload[++msg_pntr] << 16);\npData.long_deg = pData.long_deg >> 16;\npData.long_min = msg.payload[++msg_pntr];\ntemp = msg.payload[++msg_pntr] << 8\ntemp |= msg.payload[++msg_pntr];\npData.long_min = pData.long_min + (temp * 0.0001);\nmsg_pntr++;\nbreak;\ncase data_type.gps_time:\nmsg_pntr++;\nmsg_pntr++;\nmsg_pntr++;\nmsg_pntr++;\nbreak;\ncase data_type.gps_date:\nmsg_pntr++;\nmsg_pntr++;\nmsg_pntr++;\nmsg_pntr++;\nbreak;\ncase data_type.gps_lock:\nmsg_pntr++;\npData.gps_status = msg.payload[msg_pntr] & 0x0F;\npData.num_sats = msg.payload[msg_pntr++] >> 4;\nbreak;\ncase data_type.qos_up:\npData.rssi_up = msg.payload[++msg_pntr] << 24;\npData.rssi_up |= msg.payload[++msg_pntr] << 16;\npData.rssi_up = pData.rssi_up >> 16;\npData.snr_up = (msg.payload[++msg_pntr] << 24) >> 24;\npData.rf_pwr = (msg.payload[++msg_pntr] << 24) >> 24;\nmsg_pntr++;\nbreak;\ncase data_type.qos_dwn:\npData.rssi_dwn = msg.payload[++msg_pntr] << 24;\npData.rssi_dwn |= msg.payload[++msg_pntr] << 16;\npData.rssi_dwn = pData.rssi_dwn >> 16;\npData.snr_dwn = ((msg.payload[++msg_pntr] << 24) >> 24) / 4;\nmsg_pntr++;\nbreak;\ncase data_type.rf_out:\npData.rf_pwr = (msg.payload[++msg_pntr] << 24) >> 24;\nmsg_pntr++;\nbreak;\ncase data_type.data_mark:\nif (msg_pntr == 0) {\npData = data_struc;\npData.block_start = 1;\nmsg_pntr++;\n}\nelse if (msg_pntr == (msg.payload.length - 1) && (pData.block_start === 1)) {\npData.data_valid = 1;\nmsg_pntr++;\n}\nelse {\npData = data_struc;\nmsg_pntr = msg.payload.length;\n}\nbreak;\ndefault:\npData = data_struc;\nmsg_pntr = msg.payload.length;\n}\n}\n\npData.sf_val = parseInt(msg.datr.replace(\"SF\",\" \"),10);\n\ncontext.global.data_out = pData;\n\nreturn {payload:pData};","outputs":1,"noerr":0,"x":442,"y":476,"wires":[["5ba941ae.ffd0a8"]]},{"id":"d180e5c2.0d6be","type":"function","z":"2cf143ce.b68414","name":"input","func":"return { \"tmst\": 3297610324, \"chan\": 7, \"rfch\": 1, \"freq\": 867.9, \"stat\": 1, \"modu\": \"LORA\", \"datr\": \"SF12BW125\", \"codr\": \"4/5\", \"lsnr\": 10.5, \"rssi\": -63, \"opts\": \"\", \"size\": 14, \"fcnt\": 319, \"cls\": 0, \"port\": 1, \"mhdr\": \"407714dd00003f01\", \"appeui\": \"e4-4d-04-7a-aa-db-e0-78\", \"deveui\": \"00-80-00-00-00-00-d9-c1\", \"ack\": false, \"adr\": false, \"gweui\": \"00-80-00-00-a0-00-2f-bc\", \"seqn\": 319, \"time\": \"2019-08-07T12:53:06.904012Z\", \"payload\": [14, 252, 0, 15, 8, 6, 28, 14, 5, 7, 35, 11, 1, 139], \"eui\": \"00-80-00-00-00-00-d9-c1\", \"_msgid\": \"c53dc386.3ac24\" }\n","outputs":1,"noerr":0,"x":302,"y":476,"wires":[["6589a58f.cf7774"]]},{"id":"def024d2.5743e8","type":"debug","z":"2cf143ce.b68414","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":798,"y":476,"wires":[]},{"id":"5ba941ae.ffd0a8","type":"change","z":"2cf143ce.b68414","name":"get temperature","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":612,"y":476,"wires":[["def024d2.5743e8"]]}]

```

Note that I have changed the function to output msg.payload instead of an object, see bottom of the function: `return {payload:pData};`
