Skip to content
Snippets Groups Projects
Commit a26070c1 authored by Adrien van den Bossche's avatar Adrien van den Bossche
Browse files

Add Node-RED LocaPack palette

parent 06e7d93a
No related branches found
No related tags found
No related merge requests found
<script type="text/javascript">
RED.nodes.registerType('Decode Header',{
category: 'locapack',
color: '#a6bbcf',
defaults: {
name: {value:""}
},
inputs:1,
outputs:1,
icon: "file.png",
label: function() {
return this.name||"Decode Header";
}
});
</script>
<script type="text/html" data-template-name="Decode Header">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>
<script type="text/html" data-help-name="Decode Header">
<p>A simple node that converts the message payloads...</p>
</script>
module.exports = function(RED) {
function DecodeLocaPackHeaderNode(config) {
RED.nodes.createNode(this,config);
var node = this;
node.on('input', function(msg) {
var p = {};
var buff = msg.payload.LocaPack.inputBuffer;
var len = 0;
// Get Header Field (hdr)
var hdr = {};
var hdr_raw = buff.readUInt16LE(len);
hdr.protocol_version = (hdr_raw & 0xF000) >> 12 ;
hdr.device_id_size = (hdr_raw & 0x0F00) >> 8;
hdr.packet_type = (hdr_raw & 0x00F0) >> 4;
hdr.movement_id_presence_flag = (hdr_raw & 0x0008) ? true : false;
hdr.timestamp_presence_flag = (hdr_raw & 0x0004) ? true : false;
p.header = hdr;
len += 2;
// Sequence number
p.sequence_number = buff.readUInt16LE(len);
len += 2;
// If the message contains the timestamp field (40 bits)
if (p.header.timestamp_presence_flag ) {
p.timestamp = buff.readUIntLE(len, 5);
len += 5;
}
// If the message contains the movement_id field (8 bits)
if (p.header.movement_id_presence_flag ) {
p.movement_id = parseInt(buff[len]);
len += 1;
}
// If the message contains the device_id field (n bytes)
if (p.header.device_id_size > 0 ) {
var n = p.header.device_id_size;
p.device_id = buff.readUIntLE(len, n);
len += n;
}
// Payload_len field (8 bits)
var payload_len = parseInt(buff[len]);
len += 1;
// payload
p.payload = buff.subarray(len, len+payload_len)
msg.payload["LocaPack"] = p;
node.send(msg);
});
}
RED.nodes.registerType("Decode Header",DecodeLocaPackHeaderNode);
}
<script type="text/javascript">
RED.nodes.registerType('Decode GNSS',{
category: 'locapack',
color: '#a6bbcf',
defaults: {
name: {value:""}
},
inputs:1,
outputs:1,
icon: "file.png",
label: function() {
return this.name||"Decode GNSS";
}
});
</script>
<script type="text/html" data-template-name="Decode GNSS">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>
<script type="text/html" data-help-name="Decode GNSS">
<p>A simple node that converts the message payloads decode_universal_gnss_packet</p>
</script>
module.exports = function(RED) {
function DecodeUniversalGnssPacketNode(config) {
RED.nodes.createNode(this,config);
var node = this;
node.on('input', function(msg) {
var p = {};
var buff = msg.payload.LocaPack.payload;
var len = 0;
// Get Header Field (hdr)
var hdr = {};
var hdr_raw = parseInt(buff[len]);
hdr.altitude_presence_flag = (hdr_raw & 0x80) ? true : false;
hdr.dop_presence_flag = (hdr_raw & 0x40) ? true : false;
p.header = hdr;
len += 1;
// Latitude
p.latitude = buff.readFloatLE(len);
len += 4;
// Longitude
p.longitude = buff.readFloatLE(len);
len += 4;
// If the message contains the altitude field
if (p.header.altitude_presence_flag ) {
p.altitude = buff.readFloatLE(len);
len += 4;
}
// If the message contains the dop field
if (p.header.dop_presence_flag ) {
p.dop = buff.readFloatLE(len);
len += 4;
}
msg.payload.LocaPack["universalGnssPacket"] = p;
node.send(msg);
});
}
RED.nodes.registerType("Decode GNSS",DecodeUniversalGnssPacketNode);
}
{
"name": "red-contrib-locapack",
"version": "0.0.1",
"description": "A node to interact with LocaPack devices using the LocaPack protocol",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Adrien van den Bossche <vandenbo@univ-tlse2.fr>",
"license": "ISC",
"node-red" : {
"nodes": {
"DecodeLocapackHeader": "decode_locapack_header/decode_locapack_header.js",
"DecodeUniversalGnssPacket": "decode_universal_gnss_packet/decode_universal_gnss_packet.js"
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment