@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.
@@ -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 == 1);
276
- // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
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
- channel_1: d.slice(0, 3).reduce(msbLsb),
2032
- channel_2: d.slice(4, 7).reduce(msbLsb),
2033
- channel_3: d.slice(8, 11).reduce(msbLsb),
2034
- channel_1: d.slice(12, 15).reduce(msbLsb),
2035
- channel_2: d.slice(16, 19).reduce(msbLsb),
2036
- channel_3: d.slice(20, 23).reduce(msbLsb)
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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(5));
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
- return {
5985
- noise_db: d[0],
5986
- peak_freq_1: d.slice(1, 3).reduce(msbLsb),
5987
- peak_freq_2: d.slice(3, 5).reduce(msbLsb),
5988
- peak_freq_3: d.slice(5, 7).reduce(msbLsb)
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': {