Gathering detailed insights and metrics for node-red-contrib-buffer-parser
Gathering detailed insights and metrics for node-red-contrib-buffer-parser
Gathering detailed insights and metrics for node-red-contrib-buffer-parser
Gathering detailed insights and metrics for node-red-contrib-buffer-parser
A node-red node to convert values in a buffer, integer array or hex string into many different data type(s). Supports Big/Little Endian, BCD, byte swapping and much more.
npm install node-red-contrib-buffer-parser
Typescript
Module System
Min. Node Version
Node Version
NPM Version
80.6
Supply Chain
100
Quality
76.1
Maintenance
100
Vulnerability
100
License
JavaScript (53.1%)
HTML (46.9%)
Total Downloads
435,306
Last Day
208
Last Week
2,508
Last Month
11,503
Last Year
143,931
MIT License
31 Stars
116 Commits
10 Forks
2 Watchers
2 Branches
1 Contributors
Updated on Jun 13, 2025
Latest Version
3.2.2
Package Id
node-red-contrib-buffer-parser@3.2.2
Unpacked Size
635.63 kB
Size
397.86 kB
File Count
26
NPM Version
8.1.2
Node Version
16.13.2
Cumulative downloads
Total Downloads
Last Day
-5.9%
208
Compared to previous day
Last Week
-4.3%
2,508
Compared to previous week
Last Month
-2.1%
11,503
Compared to previous month
Last Year
-0.2%
143,931
Compared to previous year
3
A pair of Node-RED nodes to convert values to and from buffer/array. Supports Big/Little Endian, BCD, byte swapping and much more.
msg
property (e.g from msg.payload.myInteger
)flow
property (e.g from flow.myInteger
)global
property (e.g from global.myInteger
)msg
property (defaults to msg.payload
)Set-up a specification and convert multiple parts of an array or buffer to...
Specification is either configured by the built in UI or can be set by a msg/flow/global property - permitting fully dynamic setup (e.g. via a dashboard)
The specification format permits random access (e.g. no need for any skips when accessing only first and last elements)
You can specify the same offset many times to convert the same piece of data several times
The data can be byte swapped one or more times. 16, 32 or 64 bit swaps are possible. The byte swaps are done prior to any data conversions like LE or BE functions (sometimes it is necessary to do multiple swaps)
The output can be sent in any msg
property. e.g. you can send results out in msg.my.nested.property
. This has the advantage of leaving the original payload in tact.
Input data can come from any msg property (not limited to msg.payload
)
Input data can be a 16bit array (common plc data format) simplifying working with PLC type data arrays
Input data can be a hex string e.g. 1FE2D7FFBE
Output results can be multiple messages as topic
and payload
Output results can be multiple messages fanned out so that each item in the specification is sent out of its own output (New in V3.1)
Output results can be a single msg style output
=>
in the name to create object.properties e.g. motor1=>power
will end up in msg.payload.motor1.power
.'.value
and other contextual properties included (like the item specification). Use a fat arrow =>
in the name to create object.properties e.g. motor1=>power
will end up in msg.payload.motor1.power
.'.value
property and other contextual properties included (like the item specification)Final values can be masked (e.g. a MASK of 0x7FFF
could be used to remove the MSB or 0b1000000000000001
to keep only MSB and LSB)
Final values can be have a Scale value or a simple Scale Equation (New in V3.1) applied...
0.01
would turn 9710
into 97.1
10
would turn 4.2
into 42
>> 4
would bit shift the value 0x0070
to 0x0007
+ 42
would add an offset of 42 to the final value (New in V3.1)<<
e.g. <<2
would left shift the parsed value 2 places>>
e.g. >>2
would right shift the parsed value 2 places>>>
e.g. >>>2
would zero-fill right shift the parsed value 2 places (returns a 32bit unsigned value)+
e.g. +10
would add 10 to the parsed value-
e.g. -10
would deduct 10 from the parsed value/
e.g. /10
would divide the parsed value by 10*
e.g. *10
would multiply the parsed value by 10**
e.g. **2
would raise the parsed value to the power of 2^
e.g. ^0xf0
would XOR the parsed value with 0xf0==
e.g. ==10
would result in true
if the parsed value was equal to 10!=
e.g. !=10
would result in false
if the parsed value was equal to 10!!
e.g. !!
would result in true
if the parsed value was 1
(same as !!1 == true
)>
e.g. >10
would result in true
if the parsed value was greater than 10<
e.g. <10
would result in true
if the parsed value was less than 10Final values can be have a scale applied (e.g. a scale of 0.01
would turn 9710
into 97.1
or a scale of 10 would turn 50
into 500
)
Built in help
Screen shot - the flow
Screen shot - the output
Flow...
[{"id":"1194a28a.49d0ad","type":"buffer-parser","z":"c70ba4a4.e7fb58","name":"","data":"payload","dataType":"msg","specification":"{\"options\":{\"byteSwap\":[\"swap16\"],\"resultType\":\"value\",\"singleResult\":false,\"msgProperty\":\"payload\"},\"items\":[{\"name\":\"plc1/production/alphabet\",\"type\":\"string\",\"offset\":0,\"length\":26},{\"name\":\"plc1/production/status/count\",\"type\":\"int\",\"offset\":25},{\"name\":\"plc1/production/status/sequence\",\"type\":\"bcd\",\"offset\":4},{\"name\":\"plc1/machine/status/runner/temperature\",\"type\":\"int16le\",\"offset\":26},{\"name\":\"plc1/machine/status/runner/speed\",\"type\":\"int16be\",\"offset\":26},{\"name\":\"plc1/machine/status/running\",\"type\":\"bool\",\"offset\":0,\"offsetbit\":0},{\"name\":\"plc1/machine/status/warning\",\"type\":\"bool\",\"offset\":0,\"offsetbit\":1},{\"name\":\"plc1/machine/status/fault\",\"type\":\"bool\",\"offset\":0,\"offsetbit\":2}]}","specificationType":"json","x":1110,"y":480,"wires":[["858b1ecf.77b58"]]},{"id":"858b1ecf.77b58","type":"debug","z":"c70ba4a4.e7fb58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1350,"y":480,"wires":[]},{"id":"c22cd2e8.52649","type":"inject","z":"c70ba4a4.e7fb58","name":"Fake PLC data 16bit Array","topic":"","payload":"[25185,25699,26213,26727,27241,27755,28013,28783,29297,29811,30325,30839,31353,256,512,768,1024,1280,1536,1792,2048,2304,2560,2816,3072,3597]","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":890,"y":480,"wires":[["1194a28a.49d0ad"]]},{"id":"970db39d.106a6","type":"comment","z":"c70ba4a4.e7fb58","name":"take a array of 16bit values, byte reverse, split out several values and transmit individual messages with topic + payload","info":"","x":1160,"y":440,"wires":[]}]
Screen shot - the flow
Screen shot - the output
Flow...
[{"id":"1523dd03.6332f3","type":"buffer-parser","z":"c70ba4a4.e7fb58","name":"","data":"payload","dataType":"msg","specification":"{\"options\":{\"byteSwap\":[\"swap16\"],\"resultType\":\"object\",\"singleResult\":true,\"msgProperty\":\"data\"},\"items\":[{\"name\":\"alphabet\",\"type\":\"string\",\"offset\":0,\"length\":26},{\"name\":\"single byte pos 4\",\"type\":\"int\",\"offset\":4},{\"name\":\"bcd equiv\",\"type\":\"bcd\",\"offset\":4,\"length\":5},{\"name\":\"Array[6] of int16le\",\"type\":\"int16le\",\"offset\":26,\"length\":6},{\"name\":\"Array[6] of int16be\",\"type\":\"int16be\",\"offset\":26,\"length\":6},{\"name\":\"32 bools\",\"type\":\"bool\",\"offset\":0,\"length\":32},{\"name\":\"Array[4] of 16bits\",\"type\":\"16bit\",\"offset\":0,\"length\":4}]}","specificationType":"json","x":1110,"y":560,"wires":[["a3051c67.b82ad"]]},{"id":"a3051c67.b82ad","type":"debug","z":"c70ba4a4.e7fb58","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"data","targetType":"msg","x":1340,"y":560,"wires":[]},{"id":"9b72f1f5.1aacc","type":"inject","z":"c70ba4a4.e7fb58","name":"Fake PLC data 16bit Array","topic":"","payload":"[25185,25699,26213,26727,27241,27755,28013,28783,29297,29811,30325,30839,31353,256,512,768,1024,1280,1536,1792,2048,2304,2560,2816,3072,3597]","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":890,"y":560,"wires":[["1523dd03.6332f3"]]},{"id":"a9a2dd4c.118f9","type":"comment","z":"c70ba4a4.e7fb58","name":"take a array of 16bit values, byte reverse, split out several values and transmit one message with named objects in msg.data","info":"","x":1180,"y":520,"wires":[]}]
The simplest method is to install via the pallet manager in node red. Simply search for node-red-contrib-buffer-parser then click install
Run the following command in the root directory of your Node-RED install (usually ~/.node-red
or %userprofile%\.node-red
)
npm install node-red-contrib-buffer-parser
Or, install direct from github
npm install steve-mcl/node-red-contrib-buffer-parser
Or clone to a local folder and install using NPM
git clone https://github.com/Steve-Mcl/node-red-contrib-buffer-parser.git
npm install c:/source/node-red-contrib-buffer-parser
none :smile:
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
0 existing vulnerabilities detected
Reason
0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0
Reason
Found 0/30 approved changesets -- score normalized to 0
Reason
no SAST tool detected
Details
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Score
Last Scanned on 2025-06-30
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More