@ncd-io/node-red-enterprise-sensors 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/DigiParser.js +2 -1
- package/lib/WirelessGateway.js +900 -33
- package/package.json +1 -1
- package/wireless.html +42 -12
- package/wireless.js +119 -3
package/lib/WirelessGateway.js
CHANGED
|
@@ -10,6 +10,12 @@ module.exports = class WirelessSensor{
|
|
|
10
10
|
this.sensor_pool = {};
|
|
11
11
|
this.sensor_types = sensor_types(this);
|
|
12
12
|
this.queue = new Queue(1);
|
|
13
|
+
|
|
14
|
+
//route info and link quality objects
|
|
15
|
+
this.mesh_map = {};
|
|
16
|
+
this.link_quality = {};
|
|
17
|
+
this.query_pool = {};
|
|
18
|
+
|
|
13
19
|
this.payloadType = {
|
|
14
20
|
'122': 'power_up',
|
|
15
21
|
'124': 'config_ack',
|
|
@@ -27,10 +33,21 @@ module.exports = class WirelessSensor{
|
|
|
27
33
|
console.log(e);
|
|
28
34
|
}
|
|
29
35
|
}
|
|
36
|
+
function routeReceiver(frame){
|
|
37
|
+
that.parse_route_information_packet(frame);
|
|
38
|
+
}
|
|
39
|
+
function linkQualtiyReceiver(frame){
|
|
40
|
+
that.parse_link_quality_packet(frame);
|
|
41
|
+
}
|
|
42
|
+
|
|
30
43
|
this.digi.on('receive_packet', receiver);
|
|
44
|
+
this.digi.on('explicit_rx_indicator', linkQualtiyReceiver);
|
|
45
|
+
this.digi.on('route_information_packet', routeReceiver);
|
|
31
46
|
this.on('close', () => {
|
|
32
47
|
//console.log('removing listener');
|
|
33
48
|
this.digi._emitter.removeListener('receive_packet', receiver);
|
|
49
|
+
this.digi._emitter.removeListener('explicit_rx_indicator',linkQualtiyReceiver);
|
|
50
|
+
this.digi._emitter.removeListener('route_information_packet',routeReceiver);
|
|
34
51
|
});
|
|
35
52
|
}
|
|
36
53
|
send_control(type, mac, msg){
|
|
@@ -47,6 +64,64 @@ module.exports = class WirelessSensor{
|
|
|
47
64
|
this._emitter.emit('close');
|
|
48
65
|
this.digi.close();
|
|
49
66
|
}
|
|
67
|
+
|
|
68
|
+
parse_route_information_packet(frame){
|
|
69
|
+
var destination = frame.destination_mac;
|
|
70
|
+
var route_array = this.mesh_map[destination];
|
|
71
|
+
var index = this.query_pool[destination];
|
|
72
|
+
//This is the route packet from the modem
|
|
73
|
+
if(frame.source_mac == frame.responder_mac){
|
|
74
|
+
//Add Gateway MAC as first element of array.
|
|
75
|
+
route_array[0] = frame.source_mac;
|
|
76
|
+
//Add Receiver MAC as second item in array
|
|
77
|
+
route_array[1] = frame.receiver_mac;
|
|
78
|
+
if(frame.receiver_mac == frame.destination_mac){
|
|
79
|
+
//if receiver is the sensor then connection is direct from gateway to receiver so emit route info
|
|
80
|
+
var msg_obj = {};
|
|
81
|
+
msg_obj.route = route_array;
|
|
82
|
+
msg_obj.timestamp = Date.now();
|
|
83
|
+
this._emitter.emit("route_info",msg_obj);
|
|
84
|
+
}
|
|
85
|
+
}else{
|
|
86
|
+
//This is the final route packet
|
|
87
|
+
if(frame.receiver_mac == destination){
|
|
88
|
+
route_array.push(frame.receiver_mac);
|
|
89
|
+
var msg_obj = {};
|
|
90
|
+
msg_obj.route = route_array;
|
|
91
|
+
msg_obj.timestamp = Date.now();
|
|
92
|
+
this._emitter.emit("route_info",msg_obj);
|
|
93
|
+
delete this.query_pool[frame.destination_mac];
|
|
94
|
+
}else{
|
|
95
|
+
// This is an intermediate packet
|
|
96
|
+
if(frame.responder_mac == route_array[this.query_pool[destination]]){
|
|
97
|
+
route_array.push(frame.receiver_mac);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
//increment mesh hops index
|
|
103
|
+
this.query_pool[destination]++;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
parse_link_quality_packet(frame){
|
|
107
|
+
console.log("parse_link_quality_packet: "+frame);
|
|
108
|
+
var msg_obj = {};
|
|
109
|
+
msg_obj.source_address = frame.source_mac;
|
|
110
|
+
msg_obj.destination = toMac(frame.data.slice(0,8));
|
|
111
|
+
msg_obj.payload_size = msbLsb(frame.data[8],frame.data[9]);
|
|
112
|
+
msg_obj.iterations = msbLsb(frame.data[10], frame.data[11]);
|
|
113
|
+
msg_obj.successful_iterations = msbLsb(frame.data[12],frame.data[13]);
|
|
114
|
+
msg_obj.retries = msbLsb(frame.data[14],frame.data[15]);
|
|
115
|
+
msg_obj.result = frame.data[16] == 0 ? "success":"failed"
|
|
116
|
+
msg_obj.max_allowed_retries = frame.data[17];
|
|
117
|
+
msg_obj.max_rssi = 0 - frame.data[18];
|
|
118
|
+
msg_obj.min_rssi = 0 - frame.data[19];
|
|
119
|
+
msg_obj.avg_rssi = 0 - frame.data[20];
|
|
120
|
+
msg_obj.timestamp = Date.now();
|
|
121
|
+
|
|
122
|
+
this._emitter.emit("link_info",msg_obj);
|
|
123
|
+
}
|
|
124
|
+
|
|
50
125
|
parse(frame){
|
|
51
126
|
var type = this.payloadType[frame.data[0]];
|
|
52
127
|
if(typeof this[type] == 'function'){
|
|
@@ -62,7 +137,7 @@ module.exports = class WirelessSensor{
|
|
|
62
137
|
var new_mode = is_new;
|
|
63
138
|
var mode = (type == 'power_up') ? data.mode : ((type == 'sensor_data') ? 'RUN' : ((type == 'config_ack') ? 'ACK' : 'PGM'));
|
|
64
139
|
// #OTF
|
|
65
|
-
var otf_devices = [26,45,48,78,79,80,81,82,84,88,89,91,101,102,519,520,521];
|
|
140
|
+
var otf_devices = [23,26,39,45,48,52,78,79,80,81,82,84,88,89,91,101,102,107,519,520,521,531,537];
|
|
66
141
|
var device_type = msbLsb(frame.data[6], frame.data[7]);
|
|
67
142
|
// var device_type = frame.data[7];
|
|
68
143
|
|
|
@@ -214,7 +289,7 @@ module.exports = class WirelessSensor{
|
|
|
214
289
|
};
|
|
215
290
|
|
|
216
291
|
// #OTF
|
|
217
|
-
var otf_devices = [26,45,48,78,79,80,81,82,84,88,89,91,101,102,519,520,521];
|
|
292
|
+
var otf_devices = [23,26,39,45,48,52,78,79,80,81,82,84,88,89,91,101,102,107,519,520,521,531,537];
|
|
218
293
|
if(otf_devices.includes(parsed.sensor_type)){
|
|
219
294
|
// If the message says FLY and there is not FLY timer in progress.
|
|
220
295
|
if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
|
|
@@ -272,8 +347,8 @@ module.exports = class WirelessSensor{
|
|
|
272
347
|
console.log('Total Expected Packets:');
|
|
273
348
|
console.log(expected_packets);
|
|
274
349
|
// console.log(current_packet in globalDevices[deviceAddr].data);
|
|
275
|
-
// console.log(current_packet
|
|
276
|
-
// console.log(
|
|
350
|
+
// console.log(!(((current_packet&127)-1) in globalDevices[deviceAddr].data));
|
|
351
|
+
// console.log(typeof current_packet in globalDevices[deviceAddr].data);
|
|
277
352
|
if(this.hasOwnProperty('failure_no')){
|
|
278
353
|
this.failure_no = this.failure_no + 1;
|
|
279
354
|
}
|
|
@@ -297,6 +372,10 @@ module.exports = class WirelessSensor{
|
|
|
297
372
|
if(expected_packets == 1){
|
|
298
373
|
this.build_101_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
|
|
299
374
|
} else{
|
|
375
|
+
// console.log('------');
|
|
376
|
+
// console.log(current_packet);
|
|
377
|
+
// console.log(expected_packets);
|
|
378
|
+
// console.log(Object.keys(globalDevices[deviceAddr].data).length);
|
|
300
379
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
301
380
|
}
|
|
302
381
|
|
|
@@ -640,7 +719,7 @@ module.exports = class WirelessSensor{
|
|
|
640
719
|
data: payload.slice(8)
|
|
641
720
|
};
|
|
642
721
|
// #OTF
|
|
643
|
-
}else if(parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 515 || parsed.sensor_type == 519){
|
|
722
|
+
}else if(parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 537){
|
|
644
723
|
parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
|
|
645
724
|
if(!parsed.sensor_data){
|
|
646
725
|
return;
|
|
@@ -1092,6 +1171,12 @@ module.exports = class WirelessSensor{
|
|
|
1092
1171
|
console.log(packet);
|
|
1093
1172
|
return this.config_send(sensor_mac, packet);
|
|
1094
1173
|
}
|
|
1174
|
+
config_set_thermocouple_type_23(sensor_mac, value){
|
|
1175
|
+
console.log('config_set_thermocouple_type_23');
|
|
1176
|
+
let packet = [244, 83, 0, 0, 23, value];
|
|
1177
|
+
console.log(packet);
|
|
1178
|
+
return this.config_send(sensor_mac, packet);
|
|
1179
|
+
}
|
|
1095
1180
|
|
|
1096
1181
|
config_get_delay(sensor_mac){
|
|
1097
1182
|
return new Promise((fulfill, reject) => {
|
|
@@ -1505,6 +1590,123 @@ module.exports = class WirelessSensor{
|
|
|
1505
1590
|
});
|
|
1506
1591
|
});
|
|
1507
1592
|
}
|
|
1593
|
+
route_discover(sensor_mac, opts){
|
|
1594
|
+
var data = [85];
|
|
1595
|
+
var that = this;
|
|
1596
|
+
return new Promise((fulfill, reject) => {
|
|
1597
|
+
that.queue.add(() => {
|
|
1598
|
+
return new Promise((f, r) => {
|
|
1599
|
+
var failed = false;
|
|
1600
|
+
var retries = 0;
|
|
1601
|
+
var tO;
|
|
1602
|
+
function fail(packet){
|
|
1603
|
+
failed = true;
|
|
1604
|
+
clearTimeout(tO);
|
|
1605
|
+
that._emitter.removeListener('receive_packet-'+sensor_mac, pass);
|
|
1606
|
+
that._emitter.removeListener('transmit_status-'+sensor_mac, pass);
|
|
1607
|
+
reject({
|
|
1608
|
+
err: packet,
|
|
1609
|
+
sent: [sensor_mac, data]
|
|
1610
|
+
});
|
|
1611
|
+
r();
|
|
1612
|
+
}
|
|
1613
|
+
function pass(packet){
|
|
1614
|
+
if(failed) return;
|
|
1615
|
+
clearTimeout(tO);
|
|
1616
|
+
fulfill(packet);
|
|
1617
|
+
f();
|
|
1618
|
+
};
|
|
1619
|
+
|
|
1620
|
+
function send(){
|
|
1621
|
+
that.send.transmit_request(mac2bytes(sensor_mac), data, opts).then(function(frame){
|
|
1622
|
+
if(frame.delivery_status == 'Success'){
|
|
1623
|
+
pass(frame);
|
|
1624
|
+
}else{
|
|
1625
|
+
tO = setTimeout(() => {
|
|
1626
|
+
if(retries < 1){
|
|
1627
|
+
retries++;
|
|
1628
|
+
send();
|
|
1629
|
+
}else{
|
|
1630
|
+
fail('Control response timeout');
|
|
1631
|
+
}
|
|
1632
|
+
}, 1000);
|
|
1633
|
+
}
|
|
1634
|
+
}).catch(fail);
|
|
1635
|
+
}
|
|
1636
|
+
that.query_pool[sensor_mac] = 0;
|
|
1637
|
+
if(that.mesh_map.hasOwnProperty(sensor_mac)){
|
|
1638
|
+
delete that.mesh_map[sensor_mac];
|
|
1639
|
+
}
|
|
1640
|
+
that.mesh_map[sensor_mac] = [];
|
|
1641
|
+
if(that.link_quality.hasOwnProperty(sensor_mac)){
|
|
1642
|
+
delete that.link_quality[sensor_mac];
|
|
1643
|
+
}
|
|
1644
|
+
that.link_quality = {};
|
|
1645
|
+
send();
|
|
1646
|
+
});
|
|
1647
|
+
});
|
|
1648
|
+
});
|
|
1649
|
+
}
|
|
1650
|
+
link_test(source_mac,destination_mac,opts){
|
|
1651
|
+
var that = this;
|
|
1652
|
+
return new Promise((fulfill, reject) => {
|
|
1653
|
+
that.queue.add(() => {
|
|
1654
|
+
return new Promise((f, r) => {
|
|
1655
|
+
var failed = false;
|
|
1656
|
+
var retries = 0;
|
|
1657
|
+
var tO;
|
|
1658
|
+
function fail(packet){
|
|
1659
|
+
failed = true;
|
|
1660
|
+
clearTimeout(tO);
|
|
1661
|
+
that._emitter.removeListener('receive_packet-'+source_mac, pass);
|
|
1662
|
+
that._emitter.removeListener('transmit_status-'+source_mac, pass);
|
|
1663
|
+
reject({
|
|
1664
|
+
err: packet,
|
|
1665
|
+
sent: [source_mac]
|
|
1666
|
+
});
|
|
1667
|
+
r();
|
|
1668
|
+
}
|
|
1669
|
+
function pass(packet){
|
|
1670
|
+
if(failed) return;
|
|
1671
|
+
clearTimeout(tO);
|
|
1672
|
+
fulfill(packet);
|
|
1673
|
+
f();
|
|
1674
|
+
};
|
|
1675
|
+
|
|
1676
|
+
function send(){
|
|
1677
|
+
var cluster = [0,20];
|
|
1678
|
+
var profile = [193, 5];
|
|
1679
|
+
var data = [];
|
|
1680
|
+
data.push(...mac2bytes(destination_mac));
|
|
1681
|
+
var payload_size = [0,200];
|
|
1682
|
+
var iterations = [0,200];
|
|
1683
|
+
data.push(...payload_size);
|
|
1684
|
+
data.push(...iterations);
|
|
1685
|
+
|
|
1686
|
+
var hexArray = [];
|
|
1687
|
+
data.forEach((b) => hexArray.push(toHex(b)));
|
|
1688
|
+
|
|
1689
|
+
var opts = {"method":3};
|
|
1690
|
+
that.send.explicit_addressing_command(mac2bytes(source_mac), 230, 230, cluster, profile, data, opts).then(function(frame){
|
|
1691
|
+
if(frame.delivery_status == 'Success'){
|
|
1692
|
+
pass(frame);
|
|
1693
|
+
}else{
|
|
1694
|
+
tO = setTimeout(() => {
|
|
1695
|
+
if(retries < 1){
|
|
1696
|
+
retries++;
|
|
1697
|
+
send();
|
|
1698
|
+
}else{
|
|
1699
|
+
fail('Control response timeout');
|
|
1700
|
+
}
|
|
1701
|
+
}, 1000);
|
|
1702
|
+
}
|
|
1703
|
+
}).catch(fail);
|
|
1704
|
+
}
|
|
1705
|
+
send();
|
|
1706
|
+
});
|
|
1707
|
+
});
|
|
1708
|
+
});
|
|
1709
|
+
}
|
|
1508
1710
|
on(e,cb){this._emitter.on(e,cb);}
|
|
1509
1711
|
};
|
|
1510
1712
|
|
|
@@ -2028,18 +2230,37 @@ function sensor_types(parent){
|
|
|
2028
2230
|
'name': '24-Bit 6-Channel Current Monitor',
|
|
2029
2231
|
parse: (d) => {
|
|
2030
2232
|
return {
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2233
|
+
ct1_rms: d.slice(0, 4).reduce(msbLsb),
|
|
2234
|
+
ct1_peak_1: d.slice(4, 6).reduce(msbLsb),
|
|
2235
|
+
ct1_peak_2: d.slice(6, 8).reduce(msbLsb),
|
|
2236
|
+
ct1_peak_3: d.slice(8, 10).reduce(msbLsb),
|
|
2237
|
+
ct2_rms: d.slice(10, 14).reduce(msbLsb),
|
|
2238
|
+
ct2_peak_1: d.slice(14, 16).reduce(msbLsb),
|
|
2239
|
+
ct2_peak_2: d.slice(16, 18).reduce(msbLsb),
|
|
2240
|
+
ct2_peak_3: d.slice(18, 20).reduce(msbLsb),
|
|
2241
|
+
ct3_rms: d.slice(20, 24).reduce(msbLsb),
|
|
2242
|
+
ct3_peak_1: d.slice(24, 26).reduce(msbLsb),
|
|
2243
|
+
ct3_peak_2: d.slice(26, 28).reduce(msbLsb),
|
|
2244
|
+
ct3_peak_3: d.slice(28, 30).reduce(msbLsb),
|
|
2245
|
+
ct4_rms: d.slice(30, 34).reduce(msbLsb),
|
|
2246
|
+
ct4_peak_1: d.slice(34, 36).reduce(msbLsb),
|
|
2247
|
+
ct4_peak_2: d.slice(36, 38).reduce(msbLsb),
|
|
2248
|
+
ct4_peak_3: d.slice(38, 40).reduce(msbLsb),
|
|
2249
|
+
ct5_rms: d.slice(40, 44).reduce(msbLsb),
|
|
2250
|
+
ct5_peak_1: d.slice(44, 46).reduce(msbLsb),
|
|
2251
|
+
ct5_peak_2: d.slice(46, 48).reduce(msbLsb),
|
|
2252
|
+
ct5_peak_3: d.slice(48, 50).reduce(msbLsb),
|
|
2253
|
+
ct6_rms: d.slice(50, 54).reduce(msbLsb),
|
|
2254
|
+
ct6_peak_1: d.slice(54, 56).reduce(msbLsb),
|
|
2255
|
+
ct6_peak_2: d.slice(56, 58).reduce(msbLsb),
|
|
2256
|
+
ct6_peak_3: d.slice(58, 60).reduce(msbLsb)
|
|
2037
2257
|
};
|
|
2038
2258
|
}
|
|
2039
2259
|
},
|
|
2040
2260
|
'52': {
|
|
2041
2261
|
name: '16-Bit 2-Channel 4-20mA',
|
|
2042
2262
|
parse: (d) => {
|
|
2263
|
+
// This parser may be outdated if a customer has an issue check with Engineering
|
|
2043
2264
|
var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
|
|
2044
2265
|
var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
|
|
2045
2266
|
return {
|
|
@@ -2579,13 +2800,13 @@ function sensor_types(parent){
|
|
|
2579
2800
|
fft_concat[label] = {};
|
|
2580
2801
|
|
|
2581
2802
|
if('x_offset' in en_axis_data){
|
|
2582
|
-
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(
|
|
2803
|
+
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
2583
2804
|
}
|
|
2584
2805
|
if('y_offset' in en_axis_data){
|
|
2585
|
-
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(
|
|
2806
|
+
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
2586
2807
|
}
|
|
2587
2808
|
if('z_offset' in en_axis_data){
|
|
2588
|
-
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(
|
|
2809
|
+
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
2589
2810
|
}
|
|
2590
2811
|
}
|
|
2591
2812
|
var fft_concat_obj = {
|
|
@@ -3193,13 +3414,13 @@ function sensor_types(parent){
|
|
|
3193
3414
|
fft_concat[label] = {};
|
|
3194
3415
|
|
|
3195
3416
|
if('x_offset' in en_axis_data){
|
|
3196
|
-
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(
|
|
3417
|
+
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
3197
3418
|
}
|
|
3198
3419
|
if('y_offset' in en_axis_data){
|
|
3199
|
-
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(
|
|
3420
|
+
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
3200
3421
|
}
|
|
3201
3422
|
if('z_offset' in en_axis_data){
|
|
3202
|
-
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(
|
|
3423
|
+
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
3203
3424
|
}
|
|
3204
3425
|
}
|
|
3205
3426
|
|
|
@@ -3993,13 +4214,13 @@ function sensor_types(parent){
|
|
|
3993
4214
|
fft_concat[label] = {};
|
|
3994
4215
|
|
|
3995
4216
|
if('x_offset' in en_axis_data){
|
|
3996
|
-
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(
|
|
4217
|
+
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
3997
4218
|
}
|
|
3998
4219
|
if('y_offset' in en_axis_data){
|
|
3999
|
-
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(
|
|
4220
|
+
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
4000
4221
|
}
|
|
4001
4222
|
if('z_offset' in en_axis_data){
|
|
4002
|
-
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(
|
|
4223
|
+
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
4003
4224
|
}
|
|
4004
4225
|
}
|
|
4005
4226
|
var fft_concat_obj = {
|
|
@@ -4609,13 +4830,13 @@ function sensor_types(parent){
|
|
|
4609
4830
|
fft_concat[label] = {};
|
|
4610
4831
|
|
|
4611
4832
|
if('x_offset' in en_axis_data){
|
|
4612
|
-
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(
|
|
4833
|
+
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
4613
4834
|
}
|
|
4614
4835
|
if('y_offset' in en_axis_data){
|
|
4615
|
-
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(
|
|
4836
|
+
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
4616
4837
|
}
|
|
4617
4838
|
if('z_offset' in en_axis_data){
|
|
4618
|
-
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(
|
|
4839
|
+
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
4619
4840
|
}
|
|
4620
4841
|
}
|
|
4621
4842
|
var fft_concat_obj = {
|
|
@@ -5036,6 +5257,29 @@ function sensor_types(parent){
|
|
|
5036
5257
|
};
|
|
5037
5258
|
}
|
|
5038
5259
|
},
|
|
5260
|
+
'107': {
|
|
5261
|
+
name: '16-Bit 4-Channel 4-20mA',
|
|
5262
|
+
parse: (d) => {
|
|
5263
|
+
var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
|
|
5264
|
+
var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
|
|
5265
|
+
var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
|
|
5266
|
+
var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
|
|
5267
|
+
var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
|
|
5268
|
+
var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
|
|
5269
|
+
var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
|
|
5270
|
+
var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
|
|
5271
|
+
return {
|
|
5272
|
+
adc1: adc1,
|
|
5273
|
+
adc2: adc2,
|
|
5274
|
+
adc3: adc3,
|
|
5275
|
+
adc4: adc4,
|
|
5276
|
+
ma1: ma1,
|
|
5277
|
+
ma2: ma2,
|
|
5278
|
+
ma3: ma3,
|
|
5279
|
+
ma4: ma4
|
|
5280
|
+
};
|
|
5281
|
+
}
|
|
5282
|
+
},
|
|
5039
5283
|
'200': {
|
|
5040
5284
|
name: '4-20mA Pass Through',
|
|
5041
5285
|
parse: (d) => {
|
|
@@ -5541,13 +5785,13 @@ function sensor_types(parent){
|
|
|
5541
5785
|
fft_concat[label] = {};
|
|
5542
5786
|
|
|
5543
5787
|
if('x_offset' in en_axis_data){
|
|
5544
|
-
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(
|
|
5788
|
+
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
5545
5789
|
}
|
|
5546
5790
|
if('y_offset' in en_axis_data){
|
|
5547
|
-
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(
|
|
5791
|
+
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
5548
5792
|
}
|
|
5549
5793
|
if('z_offset' in en_axis_data){
|
|
5550
|
-
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(
|
|
5794
|
+
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
5551
5795
|
}
|
|
5552
5796
|
}
|
|
5553
5797
|
var fft_concat_obj = {
|
|
@@ -5980,13 +6224,636 @@ function sensor_types(parent){
|
|
|
5980
6224
|
},
|
|
5981
6225
|
'531': {
|
|
5982
6226
|
name: 'Custom Noise Sensor',
|
|
5983
|
-
parse: (d) => {
|
|
5984
|
-
|
|
5985
|
-
|
|
5986
|
-
|
|
5987
|
-
|
|
5988
|
-
|
|
5989
|
-
|
|
6227
|
+
parse: (d, p) => {
|
|
6228
|
+
let firmware = p[1];
|
|
6229
|
+
if(firmware > 1){
|
|
6230
|
+
return {
|
|
6231
|
+
rms_dba: d[0],
|
|
6232
|
+
c1_dba: d[1],
|
|
6233
|
+
c1_freq: d.slice(2, 4).reduce(msbLsb),
|
|
6234
|
+
c2_dba: d[4],
|
|
6235
|
+
c2_freq: d.slice(5, 7).reduce(msbLsb),
|
|
6236
|
+
c3_dba: d[7],
|
|
6237
|
+
c3_freq: d.slice(8, 10).reduce(msbLsb),
|
|
6238
|
+
};
|
|
6239
|
+
}else{
|
|
6240
|
+
return {
|
|
6241
|
+
noise_db: d[0],
|
|
6242
|
+
peak_freq_1: d.slice(1, 3).reduce(msbLsb),
|
|
6243
|
+
peak_freq_2: d.slice(3, 5).reduce(msbLsb),
|
|
6244
|
+
peak_freq_3: d.slice(5, 7).reduce(msbLsb)
|
|
6245
|
+
};
|
|
6246
|
+
}
|
|
6247
|
+
}
|
|
6248
|
+
},
|
|
6249
|
+
'537': {
|
|
6250
|
+
name: 'Type 537 - Custom Standalone Smart Vibration Sensor',
|
|
6251
|
+
parse: (payload, parsed, mac) => {
|
|
6252
|
+
if(payload[7] >> 1 != 0){
|
|
6253
|
+
console.log('Error found');
|
|
6254
|
+
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
6255
|
+
return parsed;
|
|
6256
|
+
}
|
|
6257
|
+
|
|
6258
|
+
if(payload[8] === 1){
|
|
6259
|
+
var deviceAddr = mac;
|
|
6260
|
+
var firmware = payload[1];
|
|
6261
|
+
var hour = payload[11];
|
|
6262
|
+
var minute = payload[12];
|
|
6263
|
+
var expected_packets = payload[15];
|
|
6264
|
+
var current_packet = payload[16];
|
|
6265
|
+
var sdata_start = 17;
|
|
6266
|
+
|
|
6267
|
+
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
6268
|
+
if(expected_packets != 1){
|
|
6269
|
+
// if a packet is already stored with the same packet ID, or if packet ID is 1, or if current packet ID is not one more than last packet ID
|
|
6270
|
+
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
|
|
6271
|
+
console.log('-----');
|
|
6272
|
+
console.log('bad packet breakdown deleting stream');
|
|
6273
|
+
console.log(current_packet);
|
|
6274
|
+
console.log(expected_packets);
|
|
6275
|
+
console.log(current_packet in globalDevices[deviceAddr].data);
|
|
6276
|
+
console.log(current_packet == 1);
|
|
6277
|
+
console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
|
|
6278
|
+
if(this.hasOwnProperty('failure_no')){
|
|
6279
|
+
this.failure_no = this.failure_no + 1;
|
|
6280
|
+
}
|
|
6281
|
+
else{
|
|
6282
|
+
this.failure_no = 1;
|
|
6283
|
+
}
|
|
6284
|
+
if(this.hasOwnProperty('failure_no')){
|
|
6285
|
+
console.log('####falure no');
|
|
6286
|
+
console.log(this.failure_no);
|
|
6287
|
+
}
|
|
6288
|
+
// console.log(globalDevices[deviceAddr].data);
|
|
6289
|
+
delete globalDevices[deviceAddr];
|
|
6290
|
+
if(current_packet != 1){
|
|
6291
|
+
return;
|
|
6292
|
+
} else{
|
|
6293
|
+
|
|
6294
|
+
var mode = payload[8];
|
|
6295
|
+
var odr = payload[9];
|
|
6296
|
+
var en_axis = payload[10] & 7;
|
|
6297
|
+
var fsr = payload[10] >> 5;
|
|
6298
|
+
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
6299
|
+
|
|
6300
|
+
|
|
6301
|
+
switch(odr){
|
|
6302
|
+
case 6:
|
|
6303
|
+
odr = 50;
|
|
6304
|
+
break;
|
|
6305
|
+
case 7:
|
|
6306
|
+
odr = 100;
|
|
6307
|
+
break;
|
|
6308
|
+
case 8:
|
|
6309
|
+
odr = 200;
|
|
6310
|
+
break;
|
|
6311
|
+
case 9:
|
|
6312
|
+
odr = 400;
|
|
6313
|
+
break;
|
|
6314
|
+
case 10:
|
|
6315
|
+
odr = 800;
|
|
6316
|
+
break;
|
|
6317
|
+
case 11:
|
|
6318
|
+
odr = 1600;
|
|
6319
|
+
break;
|
|
6320
|
+
case 12:
|
|
6321
|
+
odr = 3200;
|
|
6322
|
+
break;
|
|
6323
|
+
case 13:
|
|
6324
|
+
odr = 6400;
|
|
6325
|
+
break;
|
|
6326
|
+
case 14:
|
|
6327
|
+
odr = 12800;
|
|
6328
|
+
break;
|
|
6329
|
+
case 15:
|
|
6330
|
+
odr = 25600;
|
|
6331
|
+
break;
|
|
6332
|
+
default:
|
|
6333
|
+
odr = 0;
|
|
6334
|
+
}
|
|
6335
|
+
|
|
6336
|
+
globalDevices[deviceAddr] = {
|
|
6337
|
+
// stream_size: expected_packets,
|
|
6338
|
+
data: {},
|
|
6339
|
+
odr: odr,
|
|
6340
|
+
mo: mode,
|
|
6341
|
+
en_axis: en_axis,
|
|
6342
|
+
fsr: fsr,
|
|
6343
|
+
hour: hour,
|
|
6344
|
+
minute: minute,
|
|
6345
|
+
device_temp: device_temp,
|
|
6346
|
+
}
|
|
6347
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
6348
|
+
return;
|
|
6349
|
+
}
|
|
6350
|
+
}
|
|
6351
|
+
else{
|
|
6352
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
6353
|
+
}
|
|
6354
|
+
}
|
|
6355
|
+
else{
|
|
6356
|
+
var mode = payload[8];
|
|
6357
|
+
var odr = payload[9];
|
|
6358
|
+
var en_axis = payload[10] & 7;
|
|
6359
|
+
var fsr = payload[10] >> 5;
|
|
6360
|
+
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
6361
|
+
|
|
6362
|
+
|
|
6363
|
+
switch(odr){
|
|
6364
|
+
case 6:
|
|
6365
|
+
odr = 50;
|
|
6366
|
+
break;
|
|
6367
|
+
case 7:
|
|
6368
|
+
odr = 100;
|
|
6369
|
+
break;
|
|
6370
|
+
case 8:
|
|
6371
|
+
odr = 200;
|
|
6372
|
+
break;
|
|
6373
|
+
case 9:
|
|
6374
|
+
odr = 400;
|
|
6375
|
+
break;
|
|
6376
|
+
case 10:
|
|
6377
|
+
odr = 800;
|
|
6378
|
+
break;
|
|
6379
|
+
case 11:
|
|
6380
|
+
odr = 1600;
|
|
6381
|
+
break;
|
|
6382
|
+
case 12:
|
|
6383
|
+
odr = 3200;
|
|
6384
|
+
break;
|
|
6385
|
+
case 13:
|
|
6386
|
+
odr = 6400;
|
|
6387
|
+
break;
|
|
6388
|
+
case 14:
|
|
6389
|
+
odr = 12800;
|
|
6390
|
+
break;
|
|
6391
|
+
case 15:
|
|
6392
|
+
odr = 25600;
|
|
6393
|
+
break;
|
|
6394
|
+
default:
|
|
6395
|
+
odr = 0;
|
|
6396
|
+
}
|
|
6397
|
+
|
|
6398
|
+
globalDevices[deviceAddr] = {
|
|
6399
|
+
// stream_size: expected_packets,
|
|
6400
|
+
data: {},
|
|
6401
|
+
odr: odr,
|
|
6402
|
+
mo: mode,
|
|
6403
|
+
en_axis: en_axis,
|
|
6404
|
+
fsr: fsr,
|
|
6405
|
+
hour: hour,
|
|
6406
|
+
minute: minute,
|
|
6407
|
+
device_temp: device_temp,
|
|
6408
|
+
}
|
|
6409
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
6410
|
+
}
|
|
6411
|
+
if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
|
|
6412
|
+
var raw_data = new Array();
|
|
6413
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
6414
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
6415
|
+
}
|
|
6416
|
+
var label = 0;
|
|
6417
|
+
|
|
6418
|
+
var fft = new Array();
|
|
6419
|
+
var fft_concat = {};
|
|
6420
|
+
|
|
6421
|
+
var en_axis_data = {};
|
|
6422
|
+
switch (globalDevices[deviceAddr].en_axis){
|
|
6423
|
+
case 1:
|
|
6424
|
+
en_axis_data.x_offset = 0;
|
|
6425
|
+
en_axis_data.increment = 2;
|
|
6426
|
+
break;
|
|
6427
|
+
case 2:
|
|
6428
|
+
en_axis_data.y_offset = 0;
|
|
6429
|
+
en_axis_data.increment = 2;
|
|
6430
|
+
break;
|
|
6431
|
+
case 3:
|
|
6432
|
+
en_axis_data.x_offset = 0;
|
|
6433
|
+
en_axis_data.y_offset = 2;
|
|
6434
|
+
en_axis_data.increment = 4;
|
|
6435
|
+
break;
|
|
6436
|
+
case 4:
|
|
6437
|
+
en_axis_data.z_offset = 0;
|
|
6438
|
+
en_axis_data.increment = 2;
|
|
6439
|
+
break;
|
|
6440
|
+
case 5:
|
|
6441
|
+
en_axis_data.x_offset = 0;
|
|
6442
|
+
en_axis_data.z_offset = 2;
|
|
6443
|
+
en_axis_data.increment = 4;
|
|
6444
|
+
break;
|
|
6445
|
+
case 6:
|
|
6446
|
+
en_axis_data.y_offset = 0;
|
|
6447
|
+
en_axis_data.z_offset = 2;
|
|
6448
|
+
en_axis_data.increment = 4;
|
|
6449
|
+
break;
|
|
6450
|
+
case 7:
|
|
6451
|
+
en_axis_data.x_offset = 0;
|
|
6452
|
+
en_axis_data.y_offset = 2;
|
|
6453
|
+
en_axis_data.z_offset = 4;
|
|
6454
|
+
en_axis_data.increment = 6;
|
|
6455
|
+
break;
|
|
6456
|
+
default:
|
|
6457
|
+
en_axis_data.increment = 0;
|
|
6458
|
+
}
|
|
6459
|
+
|
|
6460
|
+
var fsr_mult = .00006;
|
|
6461
|
+
var fsr_text = "";
|
|
6462
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
6463
|
+
case 0:
|
|
6464
|
+
fsr_mult = 0.00006;
|
|
6465
|
+
break;
|
|
6466
|
+
case 1:
|
|
6467
|
+
fsr_mult = 0.00012;
|
|
6468
|
+
break;
|
|
6469
|
+
case 2:
|
|
6470
|
+
fsr_mult = 0.00024;
|
|
6471
|
+
break;
|
|
6472
|
+
case 3:
|
|
6473
|
+
fsr_mult = 0.00049;
|
|
6474
|
+
break;
|
|
6475
|
+
}
|
|
6476
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
6477
|
+
case 0:
|
|
6478
|
+
fsr_text = "2g";
|
|
6479
|
+
break;
|
|
6480
|
+
case 1:
|
|
6481
|
+
fsr_text = "4g";
|
|
6482
|
+
break;
|
|
6483
|
+
case 2:
|
|
6484
|
+
fsr_text = "8g";
|
|
6485
|
+
break;
|
|
6486
|
+
case 3:
|
|
6487
|
+
fsr_text = "16g";
|
|
6488
|
+
break;
|
|
6489
|
+
}
|
|
6490
|
+
|
|
6491
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
6492
|
+
label++;
|
|
6493
|
+
|
|
6494
|
+
fft_concat[label] = {};
|
|
6495
|
+
|
|
6496
|
+
if('x_offset' in en_axis_data){
|
|
6497
|
+
fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
6498
|
+
}
|
|
6499
|
+
if('y_offset' in en_axis_data){
|
|
6500
|
+
fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
6501
|
+
}
|
|
6502
|
+
if('z_offset' in en_axis_data){
|
|
6503
|
+
fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
|
|
6504
|
+
}
|
|
6505
|
+
}
|
|
6506
|
+
var fft_concat_obj = {
|
|
6507
|
+
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
6508
|
+
mac_address: deviceAddr,
|
|
6509
|
+
en_axis: globalDevices[deviceAddr].en_axis,
|
|
6510
|
+
fsr: fsr_text,
|
|
6511
|
+
odr: globalDevices[deviceAddr].odr,
|
|
6512
|
+
device_temp: globalDevices[deviceAddr].device_temp,
|
|
6513
|
+
data: fft_concat
|
|
6514
|
+
};
|
|
6515
|
+
sensor_data = fft_concat_obj;
|
|
6516
|
+
delete globalDevices[deviceAddr];
|
|
6517
|
+
if(this.hasOwnProperty('failure_no')){
|
|
6518
|
+
console.log('####falure no');
|
|
6519
|
+
console.log(this.failure_no);
|
|
6520
|
+
}
|
|
6521
|
+
|
|
6522
|
+
return sensor_data;
|
|
6523
|
+
}
|
|
6524
|
+
else{
|
|
6525
|
+
return;
|
|
6526
|
+
}
|
|
6527
|
+
}else{
|
|
6528
|
+
|
|
6529
|
+
var mode = payload[8];
|
|
6530
|
+
var odr = payload[9];
|
|
6531
|
+
var en_axis = payload[10] & 7;
|
|
6532
|
+
var fsr = payload[10] >> 5;
|
|
6533
|
+
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
6534
|
+
|
|
6535
|
+
|
|
6536
|
+
switch(odr){
|
|
6537
|
+
case 6:
|
|
6538
|
+
odr = 50;
|
|
6539
|
+
break;
|
|
6540
|
+
case 7:
|
|
6541
|
+
odr = 100;
|
|
6542
|
+
break;
|
|
6543
|
+
case 8:
|
|
6544
|
+
odr = 200;
|
|
6545
|
+
break;
|
|
6546
|
+
case 9:
|
|
6547
|
+
odr = 400;
|
|
6548
|
+
break;
|
|
6549
|
+
case 10:
|
|
6550
|
+
odr = 800;
|
|
6551
|
+
break;
|
|
6552
|
+
case 11:
|
|
6553
|
+
odr = 1600;
|
|
6554
|
+
break;
|
|
6555
|
+
case 12:
|
|
6556
|
+
odr = 3200;
|
|
6557
|
+
break;
|
|
6558
|
+
case 13:
|
|
6559
|
+
odr = 6400;
|
|
6560
|
+
break;
|
|
6561
|
+
case 14:
|
|
6562
|
+
odr = 12800;
|
|
6563
|
+
break;
|
|
6564
|
+
case 15:
|
|
6565
|
+
odr = 25600;
|
|
6566
|
+
break;
|
|
6567
|
+
default:
|
|
6568
|
+
odr = 0;
|
|
6569
|
+
}
|
|
6570
|
+
|
|
6571
|
+
globalDevices[deviceAddr] = {
|
|
6572
|
+
// stream_size: expected_packets,
|
|
6573
|
+
data: {},
|
|
6574
|
+
odr: odr,
|
|
6575
|
+
mo: mode,
|
|
6576
|
+
en_axis: en_axis,
|
|
6577
|
+
fsr: fsr,
|
|
6578
|
+
hour: hour,
|
|
6579
|
+
minute: minute,
|
|
6580
|
+
device_temp: device_temp,
|
|
6581
|
+
}
|
|
6582
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
6583
|
+
return;
|
|
6584
|
+
}
|
|
6585
|
+
}
|
|
6586
|
+
else if(payload[8] === 0 || payload[8] === 2){
|
|
6587
|
+
// mode byte most significant bit will indicate fft data.
|
|
6588
|
+
// console.log(d);
|
|
6589
|
+
var odr;
|
|
6590
|
+
switch(payload[9]){
|
|
6591
|
+
case 6:
|
|
6592
|
+
odr = "50Hz"
|
|
6593
|
+
break;
|
|
6594
|
+
case 7:
|
|
6595
|
+
odr = "100Hz";
|
|
6596
|
+
break;
|
|
6597
|
+
case 8:
|
|
6598
|
+
odr = "200Hz";
|
|
6599
|
+
break;
|
|
6600
|
+
case 9:
|
|
6601
|
+
odr = "400Hz";
|
|
6602
|
+
break;
|
|
6603
|
+
case 10:
|
|
6604
|
+
odr = "800Hz";
|
|
6605
|
+
break;
|
|
6606
|
+
case 11:
|
|
6607
|
+
odr = "1600Hz";
|
|
6608
|
+
break;
|
|
6609
|
+
case 12:
|
|
6610
|
+
odr = "3200Hz";
|
|
6611
|
+
break;
|
|
6612
|
+
case 13:
|
|
6613
|
+
odr = "6400Hz";
|
|
6614
|
+
break;
|
|
6615
|
+
case 14:
|
|
6616
|
+
odr = "12800Hz";
|
|
6617
|
+
break;
|
|
6618
|
+
case 15:
|
|
6619
|
+
odr = "25600Hz";
|
|
6620
|
+
break;
|
|
6621
|
+
}
|
|
6622
|
+
return {
|
|
6623
|
+
mode: payload[8],
|
|
6624
|
+
|
|
6625
|
+
odr: odr,
|
|
6626
|
+
temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
6627
|
+
|
|
6628
|
+
x_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
|
|
6629
|
+
x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
|
|
6630
|
+
x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
|
|
6631
|
+
x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
|
|
6632
|
+
x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
|
|
6633
|
+
x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
|
|
6634
|
+
x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
|
|
6635
|
+
|
|
6636
|
+
y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
|
|
6637
|
+
y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
|
|
6638
|
+
y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
|
|
6639
|
+
y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
|
|
6640
|
+
y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
|
|
6641
|
+
y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
|
|
6642
|
+
y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
|
|
6643
|
+
|
|
6644
|
+
z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
|
|
6645
|
+
z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
|
|
6646
|
+
z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
|
|
6647
|
+
z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
|
|
6648
|
+
z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
|
|
6649
|
+
z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
|
|
6650
|
+
z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
|
|
6651
|
+
};
|
|
6652
|
+
}
|
|
6653
|
+
// else{
|
|
6654
|
+
// parsed.data = {'error': 'Vibration mode error'}
|
|
6655
|
+
// return parsed;
|
|
6656
|
+
// }
|
|
6657
|
+
},
|
|
6658
|
+
'parse_fly': (frame) => {
|
|
6659
|
+
let frame_data = {};
|
|
6660
|
+
switch(frame[16]){
|
|
6661
|
+
case 0:
|
|
6662
|
+
frame_data.mode = "Processed";
|
|
6663
|
+
break;
|
|
6664
|
+
case 1:
|
|
6665
|
+
frame_data.mode = "Raw";
|
|
6666
|
+
break;
|
|
6667
|
+
case 2:
|
|
6668
|
+
frame_data.mode = "Processed + Raw on demand";
|
|
6669
|
+
break;
|
|
6670
|
+
}
|
|
6671
|
+
switch(frame[17]){
|
|
6672
|
+
case 6:
|
|
6673
|
+
frame_data.odr_1 = 50;
|
|
6674
|
+
break;
|
|
6675
|
+
case 7:
|
|
6676
|
+
frame_data.odr_1 = 100;
|
|
6677
|
+
break;
|
|
6678
|
+
case 8:
|
|
6679
|
+
frame_data.odr_1 = 200;
|
|
6680
|
+
break;
|
|
6681
|
+
case 9:
|
|
6682
|
+
frame_data.odr_1 = 400;
|
|
6683
|
+
break;
|
|
6684
|
+
case 10:
|
|
6685
|
+
frame_data.odr_1 = 800;
|
|
6686
|
+
break;
|
|
6687
|
+
case 11:
|
|
6688
|
+
frame_data.odr_1 = 1600;
|
|
6689
|
+
break;
|
|
6690
|
+
case 12:
|
|
6691
|
+
frame_data.odr_1 = 3200;
|
|
6692
|
+
break;
|
|
6693
|
+
case 13:
|
|
6694
|
+
frame_data.odr_1 = 6400;
|
|
6695
|
+
break;
|
|
6696
|
+
case 14:
|
|
6697
|
+
frame_data.odr_1 = 12800;
|
|
6698
|
+
break;
|
|
6699
|
+
case 15:
|
|
6700
|
+
frame_data.odr_1 = 25600;
|
|
6701
|
+
break;
|
|
6702
|
+
}
|
|
6703
|
+
frame_data.sampling_duration_1 = frame[19]*50 + "ms";
|
|
6704
|
+
switch(frame[21]){
|
|
6705
|
+
case 0:
|
|
6706
|
+
frame_data.filter_status = "Disabled";
|
|
6707
|
+
break;
|
|
6708
|
+
case 1:
|
|
6709
|
+
frame_data.filter_status = "Enabled";
|
|
6710
|
+
break;
|
|
6711
|
+
}
|
|
6712
|
+
switch(frame[22]){
|
|
6713
|
+
case 0:
|
|
6714
|
+
frame_data.lpf_coeff_1 = 4;
|
|
6715
|
+
break;
|
|
6716
|
+
case 1:
|
|
6717
|
+
frame_data.lpf_coeff_1 = 8;
|
|
6718
|
+
break;
|
|
6719
|
+
case 2:
|
|
6720
|
+
frame_data.lpf_coeff_1 = 16;
|
|
6721
|
+
break;
|
|
6722
|
+
case 2:
|
|
6723
|
+
frame_data.lpf_coeff_1 = 32;
|
|
6724
|
+
break;
|
|
6725
|
+
case 4:
|
|
6726
|
+
frame_data.lpf_coeff_1 = 64;
|
|
6727
|
+
break;
|
|
6728
|
+
case 5:
|
|
6729
|
+
frame_data.lpf_coeff_1 = 128;
|
|
6730
|
+
break;
|
|
6731
|
+
case 6:
|
|
6732
|
+
frame_data.lpf_coeff_1 = 256;
|
|
6733
|
+
break;
|
|
6734
|
+
case 7:
|
|
6735
|
+
frame_data.lpf_coeff_1 = 512;
|
|
6736
|
+
break;
|
|
6737
|
+
case 8:
|
|
6738
|
+
frame_data.lpf_coeff_1 = 1024;
|
|
6739
|
+
break;
|
|
6740
|
+
case 9:
|
|
6741
|
+
frame_data.lpf_coeff_1 = 2048;
|
|
6742
|
+
break;
|
|
6743
|
+
}
|
|
6744
|
+
frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
|
|
6745
|
+
switch(frame[24]){
|
|
6746
|
+
case 0:
|
|
6747
|
+
frame_data.hpf_coeff_1 = 4;
|
|
6748
|
+
break;
|
|
6749
|
+
case 1:
|
|
6750
|
+
frame_data.hpf_coeff_1 = 8;
|
|
6751
|
+
break;
|
|
6752
|
+
case 2:
|
|
6753
|
+
frame_data.hpf_coeff_1 = 16;
|
|
6754
|
+
break;
|
|
6755
|
+
case 2:
|
|
6756
|
+
frame_data.hpf_coeff_1 = 32;
|
|
6757
|
+
break;
|
|
6758
|
+
case 4:
|
|
6759
|
+
frame_data.hpf_coeff_1 = 64;
|
|
6760
|
+
break;
|
|
6761
|
+
case 5:
|
|
6762
|
+
frame_data.hpf_coeff_1 = 128;
|
|
6763
|
+
break;
|
|
6764
|
+
case 6:
|
|
6765
|
+
frame_data.hpf_coeff_1 = 256;
|
|
6766
|
+
break;
|
|
6767
|
+
case 7:
|
|
6768
|
+
frame_data.hpf_coeff_1 = 512;
|
|
6769
|
+
break;
|
|
6770
|
+
case 8:
|
|
6771
|
+
frame_data.hpf_coeff_1 = 1024;
|
|
6772
|
+
break;
|
|
6773
|
+
case 9:
|
|
6774
|
+
frame_data.hpf_coeff_1 = 2048;
|
|
6775
|
+
break;
|
|
6776
|
+
}
|
|
6777
|
+
frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
|
|
6778
|
+
switch(frame[26]){
|
|
6779
|
+
case 0:
|
|
6780
|
+
frame_data.sampling_interval = "5 Minutes";
|
|
6781
|
+
break;
|
|
6782
|
+
case 1:
|
|
6783
|
+
frame_data.sampling_interval = "10 Minutes";
|
|
6784
|
+
break;
|
|
6785
|
+
case 2:
|
|
6786
|
+
frame_data.sampling_interval = "15 Minutes";
|
|
6787
|
+
break;
|
|
6788
|
+
case 2:
|
|
6789
|
+
frame_data.sampling_interval = "20 Minutes";
|
|
6790
|
+
break;
|
|
6791
|
+
case 4:
|
|
6792
|
+
frame_data.sampling_interval = "30 Minutes";
|
|
6793
|
+
break;
|
|
6794
|
+
case 5:
|
|
6795
|
+
frame_data.sampling_interval = "60 Minutes";
|
|
6796
|
+
break;
|
|
6797
|
+
case 6:
|
|
6798
|
+
frame_data.sampling_interval = "120 Minutes";
|
|
6799
|
+
break;
|
|
6800
|
+
case 7:
|
|
6801
|
+
frame_data.sampling_interval = "180 Minutes";
|
|
6802
|
+
break;
|
|
6803
|
+
case 8:
|
|
6804
|
+
frame_data.sampling_interval = "1 Minute";
|
|
6805
|
+
break;
|
|
6806
|
+
}
|
|
6807
|
+
frame_data.on_request_timeout = frame[27] + " Seconds";
|
|
6808
|
+
frame_data.deadband = frame[28] + "mg";
|
|
6809
|
+
|
|
6810
|
+
switch(frame[29]){
|
|
6811
|
+
case 0:
|
|
6812
|
+
frame_data.payload_length = "50 Bytes";
|
|
6813
|
+
break;
|
|
6814
|
+
case 1:
|
|
6815
|
+
frame_data.payload_length = "100 Bytes";
|
|
6816
|
+
break;
|
|
6817
|
+
case 2:
|
|
6818
|
+
frame_data.payload_length = "150 Bytes";
|
|
6819
|
+
break;
|
|
6820
|
+
case 3:
|
|
6821
|
+
frame_data.payload_length = "180 Bytes";
|
|
6822
|
+
break;
|
|
6823
|
+
}
|
|
6824
|
+
|
|
6825
|
+
return {
|
|
6826
|
+
'firmware': frame[2],
|
|
6827
|
+
'destination_address': toMac(frame.slice(12, 16)),
|
|
6828
|
+
'mode': frame_data.mode,
|
|
6829
|
+
'odr_1': frame_data.odr_1+'Hz',
|
|
6830
|
+
'sampling_duration_1': frame_data.sampling_duration_1,
|
|
6831
|
+
'sampling_duration_2': frame_data.sampling_duration_2,
|
|
6832
|
+
'filter_status': frame_data.filter_status,
|
|
6833
|
+
'lpf_coeff_1': frame_data.lpf_coeff_1,
|
|
6834
|
+
'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
|
|
6835
|
+
'hpf_coeff_1': frame_data.hpf_coeff_1,
|
|
6836
|
+
'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
|
|
6837
|
+
'sampling_interval': frame_data.sampling_interval,
|
|
6838
|
+
'on_request_timeout': frame_data.on_request_timeout,
|
|
6839
|
+
'deadband': frame_data.deadband,
|
|
6840
|
+
'payload_length': frame_data.payload_length,
|
|
6841
|
+
'machine_values': {
|
|
6842
|
+
'firmware': frame[2],
|
|
6843
|
+
'destination_address': toMac(frame.slice(12, 16), false),
|
|
6844
|
+
'mode': frame[16],
|
|
6845
|
+
'odr_1': frame[17],
|
|
6846
|
+
'sampling_duration_1': frame[19],
|
|
6847
|
+
'sampling_duration_2': frame[20],
|
|
6848
|
+
'filter_status': frame[21],
|
|
6849
|
+
'lpf_coeff_1': frame[22],
|
|
6850
|
+
'hpf_coeff_1': frame[24],
|
|
6851
|
+
'sampling_interval': frame[26],
|
|
6852
|
+
'on_request_timeout': frame[27],
|
|
6853
|
+
'deadband': frame[28],
|
|
6854
|
+
'payload_length': frame[29]
|
|
6855
|
+
}
|
|
6856
|
+
}
|
|
5990
6857
|
}
|
|
5991
6858
|
},
|
|
5992
6859
|
'10000': {
|