Files
ThingsBoard/uplink_converter.js
2023-01-17 23:06:23 -06:00

74 lines
1.9 KiB
JavaScript

// Decode an uplink message from a buffer
// payload - array of bytes
// metadata - key/value object
/** Decoder **/
// decode payload to string
//var payloadStr = decodeToString(payload);
// decode payload to JSON
var mapping = {
"b8:27:eb:26:55:c0:01:99": {
"deviceName": "Fee BM",
"customer": "Faskens",
"latitude": 32.1418251,
"longitude": -102.2530966
},
"b8:27:eb:3d:e9:11:01:99": {
"deviceName": "AW Battery",
"customer": "Faskens",
"latitude": 32.090579,
"longitude": -102.244011
}
};
var data = decodeToJson(payload);
var channel = metadata.topic.split("/").slice(-1)[0];
var devicetype = metadata.topic.split("/").slice(4)[0];
var mac = metadata.topic.split("/").slice(5)[0];
var deviceName = mapping[mac].deviceName;
var deviceType = devicetype;
var customerName = mapping[mac].customer;
//var groupName = 'All';
// use assetName and assetType instead of deviceName and deviceType
// to automatically create assets instead of devices.
// var assetName = 'Asset A';
// var assetType = 'building';
// Result object with device/asset attributes/telemetry data
var result = {
// Use deviceName and deviceType or assetName and assetType, but not both.
deviceName: deviceName,
deviceType: deviceType,
// assetName: assetName,
// assetType: assetType,
customerName: customerName,
// groupName: groupName,
attributes: {
latitude: mapping[mac].latitude,
longitude: mapping[mac].longitude,
Type: "colorpin"
},
telemetry: {
}
};
result.telemetry[channel] = data[0].value;
/** Helper functions **/
function decodeToString(payload) {
return String.fromCharCode.apply(String, payload);
}
function decodeToJson(payload) {
// covert payload to string.
var str = decodeToString(payload);
// parse string to JSON
var data = JSON.parse(str);
return data;
}
return result;