@ncd-io/node-red-enterprise-sensors 1.1.0 → 1.1.1

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.
@@ -141,7 +141,7 @@ module.exports = class WirelessSensor{
141
141
  }
142
142
  }
143
143
  // #OTF
144
- var otf_devices = [23,26,32,33,39,44,45,48,52,53,58,74,76,78,79,80,81,82,84,88,89,90,91,101,102,105,106,107,108,110,111,112,114,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
144
+ var otf_devices = [23,26,32,33,39,44,45,48,52,53,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,105,106,107,108,110,111,112,114,118,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
145
145
  var device_type = msbLsb(frame.data[6], frame.data[7]);
146
146
  // var device_type = frame.data[7];
147
147
 
@@ -150,6 +150,9 @@ module.exports = class WirelessSensor{
150
150
  var broadcast_otf_devices = [101,102,202];
151
151
  mode = "FLY";
152
152
  }
153
+ if(frame.data[9] == 85 && frame.data[10] == 80 && frame.data[11] == 84 && frame.data[12] == 72 && frame.data[13] == 87 && frame.data[14] == 82 && frame.data[15] == 78) {
154
+ mode = "UPTHWRN";
155
+ }
153
156
  }
154
157
  if(mode == 'ACK'){
155
158
  data.firmware_version = frame.data[5];
@@ -187,6 +190,7 @@ module.exports = class WirelessSensor{
187
190
  type: data.sensor_type,
188
191
  nodeId: data.nodeId,
189
192
  mode: mode,
193
+ // data: data,
190
194
  lastHeard: data.received
191
195
  };
192
196
 
@@ -197,6 +201,8 @@ module.exports = class WirelessSensor{
197
201
  // If we ever need to add any of the additional information of this packet we will need to rebuild to match
198
202
  frame.data.splice(2,0,frame.data[5],0);
199
203
  this.sensor_pool[frame.mac].reported_config = this.sensor_types[data.sensor_type].parse_fly(frame.data);
204
+ }else if(mode === 'ACK'){
205
+ this.sensor_pool[frame.mac].result = data.result;
200
206
  }
201
207
  var that = this;
202
208
 
@@ -218,7 +224,7 @@ module.exports = class WirelessSensor{
218
224
  }).catch(console.log);
219
225
  }
220
226
  }
221
- if(mode != 'FLY'){
227
+ if(mode != 'FLY' && mode !='UPTHWRN'){
222
228
  var send_events = function(){
223
229
  that._emitter.emit(type, data);
224
230
  that._emitter.emit(type+'-'+data.sensor_type, data);
@@ -251,9 +257,10 @@ module.exports = class WirelessSensor{
251
257
  nodeId: payload[0],
252
258
  counter: payload[1],
253
259
  sensor_type: msbLsb(payload[2], payload[3]),
260
+ result: payload[5],
254
261
  data: payload.slice(6)
255
262
  };
256
- }
263
+ };
257
264
  config_error(payload){
258
265
  var errors = [
259
266
  'Unknown',
@@ -293,7 +300,7 @@ module.exports = class WirelessSensor{
293
300
  };
294
301
 
295
302
  // #OTF
296
- var otf_devices = [23,26,32,33,39,44,45,48,52,53,58,74,76,78,79,80,81,82,84,88,89,90,91,101,102,105,106,107,108,110,111,112,114,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
303
+ var otf_devices = [23,26,32,33,39,44,45,48,52,53,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,105,106,107,108,110,111,112,114,118,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
297
304
  if(otf_devices.includes(parsed.sensor_type)){
298
305
  // If the message says FLY and there is not FLY timer in progress.
299
306
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -301,6 +308,10 @@ module.exports = class WirelessSensor{
301
308
  return parsed;
302
309
  }
303
310
  }
311
+ if(frame.data[9] == 85 && frame.data[10] == 80 && frame.data[11] == 84 && frame.data[12] == 72 && frame.data[13] == 87 && frame.data[14] == 82 && frame.data[15] == 78) {
312
+ parsed.payload = "Upthwrn command";
313
+ return parsed;
314
+ }
304
315
 
305
316
  // Sensor type 515 has a unique OTF that is indicated by a reserve byte value with MSb of 1
306
317
  if(parsed.sensor_type == 515){
@@ -711,7 +722,7 @@ module.exports = class WirelessSensor{
711
722
  data: payload.slice(8)
712
723
  };
713
724
  // #OTF
714
- }else if(parsed.sensor_type == 33 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538){
725
+ }else if(parsed.sensor_type == 33 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 97 || parsed.sensor_type == 98 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538){
715
726
  parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
716
727
  if(!parsed.sensor_data){
717
728
  return;
@@ -1260,12 +1271,6 @@ module.exports = class WirelessSensor{
1260
1271
  console.log(packet);
1261
1272
  return this.config_send(sensor_mac, packet);
1262
1273
  }
1263
- config_set_qos_108(sensor_mac, value){
1264
- console.log('config_set_qos_108');
1265
- var packet = [247, 52, 0, 0, 0, value];
1266
- console.log(packet);
1267
- return this.config_send(sensor_mac, packet);
1268
- }
1269
1274
  config_set_deactivate_activate_accelero_108(sensor_mac, value){
1270
1275
  console.log('config_set_deactivate_activate_accelero_108');
1271
1276
  var packet = [244, 37, 0, 0, 0, value];
@@ -1399,6 +1404,36 @@ module.exports = class WirelessSensor{
1399
1404
  console.log(packet);
1400
1405
  return this.config_send(sensor_mac, packet);
1401
1406
  }
1407
+ config_set_filter_thermocouple(sensor_mac, value){
1408
+ console.log('config_set_filter_thermocouple');
1409
+ let packet = [244, 85, 0, 0, 23, value];
1410
+ console.log(packet);
1411
+ return this.config_send(sensor_mac, packet);
1412
+ }
1413
+ config_set_cold_junction_thermocouple(sensor_mac, value){
1414
+ console.log('config_set_cold_junction_thermocouple');
1415
+ let packet = [244, 87, 0, 0, 23, value];
1416
+ console.log(packet);
1417
+ return this.config_send(sensor_mac, packet);
1418
+ }
1419
+ config_set_sample_resolution_thermocouple(sensor_mac, value){
1420
+ console.log('config_set_sample_resolution_thermocouple');
1421
+ let packet = [244, 89, 0, 0, 23, value];
1422
+ console.log(packet);
1423
+ return this.config_send(sensor_mac, packet);
1424
+ }
1425
+ config_set_number_of_samples_thermocouple(sensor_mac, value){
1426
+ console.log('config_set_number_of_samples_thermocouple');
1427
+ let packet = [244, 91, 0, 0, 23, value];
1428
+ console.log(packet);
1429
+ return this.config_send(sensor_mac, packet);
1430
+ }
1431
+ config_set_measurement_type_thermocouple(sensor_mac, value){
1432
+ console.log('config_set_number_of_samples_thermocouple');
1433
+ let packet = [244, 95, 0, 0, 23, value];
1434
+ console.log(packet);
1435
+ return this.config_send(sensor_mac, packet);
1436
+ }
1402
1437
  config_set_debounce_time_2(sensor_mac, value){
1403
1438
  console.log('config_set_debounce_time_2');
1404
1439
  var packet = [244, 66, 0, 0, 2, value];
@@ -1503,7 +1538,7 @@ module.exports = class WirelessSensor{
1503
1538
  }
1504
1539
  config_set_auto_raw_interval_110(sensor_mac, value){
1505
1540
  console.log('config_set_raw_interval_110');
1506
- var packet = [244, 79, 0, 0, 80, 76, value];
1541
+ var packet = [244, 79, 0, 0, 80, 70, value];
1507
1542
  console.log(packet);
1508
1543
  return this.config_send(sensor_mac, packet);
1509
1544
  }
@@ -1515,9 +1550,9 @@ module.exports = class WirelessSensor{
1515
1550
  console.log(packet);
1516
1551
  return this.config_send(sensor_mac, packet);
1517
1552
  }
1518
- config_set_clear_probe_uptimers_110(sensor_mac, value){
1553
+ config_set_clear_probe_uptimers_110(sensor_mac){
1519
1554
  console.log('config_set_clear_probe_uptimers_110');
1520
- var packet = [244, 79, 0, 0, 80, value];
1555
+ var packet = [244, 79, 0, 0, 80, 75];
1521
1556
  console.log(packet);
1522
1557
  return this.config_send(sensor_mac, packet);
1523
1558
  }
@@ -1529,9 +1564,13 @@ module.exports = class WirelessSensor{
1529
1564
  }
1530
1565
  config_set_smart_threshold_110(sensor_mac, value){
1531
1566
  console.log('config_set_smart_threshold_110');
1532
- var packet = [244, 79, 0, 0, 101];
1533
- let value_th = int2Bytes((value), 2);
1534
- packet.push(...value_th);
1567
+ var packet = [244, 79, 0, 0, 101, 78, 1, value];
1568
+ console.log(packet);
1569
+ return this.config_send(sensor_mac, packet);
1570
+ }
1571
+ config_set_smart_threshold_p2_110(sensor_mac, value){
1572
+ console.log('config_set_smart_threshold_p2_110');
1573
+ var packet = [244, 79, 0, 0, 101, 78, 2, value];
1535
1574
  console.log(packet);
1536
1575
  return this.config_send(sensor_mac, packet);
1537
1576
  }
@@ -1706,6 +1745,66 @@ module.exports = class WirelessSensor{
1706
1745
  console.log(packet);
1707
1746
  return this.config_send(sensor_mac, packet);
1708
1747
  }
1748
+ config_set_pressure_sensor_fs_ch1_118(sensor_mac, value){
1749
+ console.log('config_set_pressure_sensor_fs_ch1_118');
1750
+ var packet = [244, 64, 0, 0, 26, value];
1751
+ console.log(packet);
1752
+ return this.config_send(sensor_mac, packet);
1753
+ }
1754
+ config_set_pressure_sensor_fs_ch2_118(sensor_mac, value){
1755
+ console.log('config_set_pressure_sensor_fs_ch2_118');
1756
+ var packet = [244, 64, 0, 0, 118, value];
1757
+ console.log(packet);
1758
+ return this.config_send(sensor_mac, packet);
1759
+ }
1760
+ config_set_auto_check_interval_118(sensor_mac, value){
1761
+ console.log('config_set_auto_check_interval_118');
1762
+ var packet = [244, 66, 0, 0, 26];
1763
+ let value_ = int2Bytes((value), 2);
1764
+ packet.push(...value_);
1765
+ console.log(packet);
1766
+ return this.config_send(sensor_mac, packet);
1767
+ }
1768
+ config_set_press_auto_check_percent_118(sensor_mac, value){
1769
+ console.log('config_set_press_auto_check_percent_118');
1770
+ var packet = [244, 68, 0, 0, 26, value];
1771
+ console.log(packet);
1772
+ return this.config_send(sensor_mac, packet);
1773
+ }
1774
+ config_set_temp_auto_check_percent_118(sensor_mac, value){
1775
+ console.log('config_set_temp_auto_check_percent_118');
1776
+ var packet = [244, 70, 0, 0, 26, value];
1777
+ console.log(packet);
1778
+ return this.config_send(sensor_mac, packet);
1779
+ }
1780
+ config_set_raw_length_97(sensor_mac, value){
1781
+ console.log('config_set_raw_length_97');
1782
+ var packet = [244, 67, 0, 0, 0, value];
1783
+ console.log(packet);
1784
+ return this.config_send(sensor_mac, packet);
1785
+ }
1786
+ config_set_raw_timeout_97(sensor_mac, value){
1787
+ console.log('config_set_raw_timeout_97');
1788
+ var packet = [244, 71, 0, 0, 0, value];
1789
+ console.log(packet);
1790
+ return this.config_send(sensor_mac, packet);
1791
+ }
1792
+ config_set_fly_rate_97(sensor_mac, value){
1793
+ console.log('config_set_fly_rate_97');
1794
+ var packet = [244, 73, 0, 0, 0];
1795
+ let value_ = int2Bytes((value), 2);
1796
+ packet.push(...value_);
1797
+ console.log(packet);
1798
+ return this.config_send(sensor_mac, packet);
1799
+ }
1800
+ config_set_boot_up_time_97(sensor_mac, value){
1801
+ console.log('config_set_boot_up_time_97');
1802
+ var packet = [244, 51, 0, 0, 0];
1803
+ let value_ = int2Bytes((value), 2);
1804
+ packet.push(...value_);
1805
+ console.log(packet);
1806
+ return this.config_send(sensor_mac, packet);
1807
+ }
1709
1808
  config_get_delay(sensor_mac){
1710
1809
  return new Promise((fulfill, reject) => {
1711
1810
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -1928,6 +2027,7 @@ module.exports = class WirelessSensor{
1928
2027
  function pass(packet){
1929
2028
  clearTimeout(tout);
1930
2029
  that._emitter.removeListener('config_error-'+sensor_mac, fail);
2030
+ packet.sent = data;
1931
2031
  fulfill(packet);
1932
2032
  f();
1933
2033
  };
@@ -1977,8 +2077,8 @@ module.exports = class WirelessSensor{
1977
2077
  }
1978
2078
  // var odr;
1979
2079
  var odr = payload[8];
1980
- var device_temp = msbLsb(payload[11], payload[12])/100;
1981
- var probe_temp = msbLsb(payload[13], payload[14])/100;
2080
+ var device_temp = signInt((msbLsb(payload[11], payload[12])), 16)/100;
2081
+ var probe_temp = signInt((msbLsb(payload[13], payload[14])), 16)/100;
1982
2082
 
1983
2083
  switch(odr){
1984
2084
  case 6:
@@ -2026,7 +2126,8 @@ module.exports = class WirelessSensor{
2026
2126
  var odr = payload[9];
2027
2127
  var en_axis = payload[10] & 7;
2028
2128
  var fsr = payload[10] >> 5;
2029
- var device_temp = msbLsb(payload[13], payload[14])/100;
2129
+
2130
+ var device_temp = signInt((msbLsb(payload[13], payload[14])), 16)/100;
2030
2131
  switch(odr){
2031
2132
  case 0:
2032
2133
  odr = 4000;
@@ -2076,7 +2177,7 @@ module.exports = class WirelessSensor{
2076
2177
  device_temp: device_temp,
2077
2178
  }
2078
2179
  if(firmware > 0){
2079
- var probe_temp = msbLsb(payload[15], payload[16])/100;
2180
+ var probe_temp = signInt((msbLsb(payload[15], payload[16])), 16)/100;
2080
2181
  globalDevices[deviceAddr].probe_temp = probe_temp;
2081
2182
  }
2082
2183
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -3113,20 +3214,55 @@ function sensor_types(parent){
3113
3214
  }
3114
3215
  },
3115
3216
  '74': {
3116
- name: 'Wireless Temp Humidity Pressure Air quality Sensor',
3117
- parse: (d) => {
3217
+ name: 'Wireless Temp Humidity Pressure Air quality Sensor V2',
3218
+ parse: (d, parsed) => {
3219
+ if(parsed[1] > 1){ // Firmware version
3220
+ return {
3221
+ temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
3222
+ pressure: d.slice(2, 6).reduce(msbLsb) / 100,
3223
+ humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
3224
+ resistance: d.slice(10, 14).reduce(msbLsb),
3225
+ iaq: d.slice(14, 16).reduce(msbLsb),
3226
+ co2_eqv: d.slice(16, 18).reduce(msbLsb),
3227
+ breath_voc: d.slice(18, 22).reduce(msbLsb) / 100,
3228
+ static_iaq: d.slice(22, 26).reduce(msbLsb) / 100,
3229
+ iaq_accuracy: d[26]
3230
+ };
3231
+ }
3232
+ else{
3233
+ return {
3234
+ temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
3235
+ pressure: d.slice(2, 6).reduce(msbLsb) / 100,
3236
+ humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
3237
+ resistance: d.slice(10, 14).reduce(msbLsb),
3238
+ iaq: d.slice(14, 16).reduce(msbLsb),
3239
+ co2_eqv: d.slice(16, 18).reduce(msbLsb),
3240
+ breath_voc: d.slice(18, 22).reduce(msbLsb)/ 100,
3241
+ static_iaq: (d.slice(22, 26).reverse()).reduce(msbLsb)/ 100,
3242
+ // TODO Check if the iaq_accuracy should still be d[27]
3243
+ iaq_accuracy: d[26]
3244
+ };
3245
+ }
3246
+ },
3247
+ 'parse_fly': (frame) => {
3118
3248
  return {
3119
- temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
3120
- pressure: d.slice(2, 6).reduce(msbLsb) / 100,
3121
- humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
3122
- resistance: d.slice(10, 14).reduce(msbLsb),
3123
- iaq: d.slice(14, 16).reduce(msbLsb),
3124
- co2_eqv: d.slice(16, 18).reduce(msbLsb),
3125
- breath_voc: d.slice(18, 22).reduce(msbLsb)/ 100,
3126
- static_iaq: (d.slice(22, 26).reverse()).reduce(msbLsb)/ 100,
3127
- // TODO Check if the iaq_accuracy should still be d[27]
3128
- iaq_accuracy: d[26]
3129
- };
3249
+ 'firmware': frame[2],
3250
+ 'calibration_days': frame[12],
3251
+ 'sensor_update_rate':frame.slice(13, 15).reduce(msbLsb),
3252
+ 'hardware_id_1': frame[15],
3253
+ 'hardware_id_2': frame[16],
3254
+ 'hardware_id_3': frame[17],
3255
+ 'report_rate': frame.slice(18, 22).reduce(msbLsb),
3256
+ 'tx_counter': frame.slice(22, 26).reduce(msbLsb),
3257
+ 'machine_values': {
3258
+ 'firmware': frame[2],
3259
+ 'calibration_days': frame[12],
3260
+ 'sensor_update_rate':frame.slice(13, 15),
3261
+ 'hardware_id': frame.slice(15, 18),
3262
+ 'report_rate': frame.slice(18, 22),
3263
+ 'tx_counter': frame.slice(22, 26),
3264
+ }
3265
+ }
3130
3266
  }
3131
3267
  },
3132
3268
  '75': {
@@ -6036,6 +6172,333 @@ function sensor_types(parent){
6036
6172
  };
6037
6173
  }
6038
6174
  },
6175
+ '97': {
6176
+ name: 'One channel Dynamic Ultrasound vibration Sensor',
6177
+ parse: (payload, parsed, mac) => {
6178
+ if (payload[8] === 1) { // raw
6179
+ var mode = payload[8];
6180
+ var sampling_frequency = payload.slice(9, 13).reduce(msbLsb);
6181
+ var sensor_index = payload[13];
6182
+ var gain_db = payload[14];
6183
+ var deviceAddr = mac;
6184
+ var expected_packets = payload.slice(15, 17).reduce(msbLsb);
6185
+ var current_packet = payload.slice(17, 19).reduce(msbLsb);
6186
+ var sdata_start = 19;
6187
+
6188
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6189
+ // if(expected_packets == 1){
6190
+ // this.build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
6191
+ // }
6192
+
6193
+ // if a packet is already stored with the same packet ID,
6194
+ // or if packet ID is 1,
6195
+ // or if current packet ID is not one more than last packet ID
6196
+ if(current_packet == 1 && expected_packets != 1) {
6197
+ if(current_packet in globalDevices[deviceAddr].data || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
6198
+ console.log('bad packet breakdown, deleting stream. Current packet:');
6199
+ console.log(current_packet);
6200
+ console.log('Total Expected Packets:');
6201
+ console.log(expected_packets);
6202
+ // console.log(current_packet in globalDevices[deviceAddr].data && current_packet == 1 && expected_packets != 1);
6203
+ // console.log(current_packet == 1);
6204
+ // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
6205
+ if(this.hasOwnProperty('failure_no')){
6206
+ this.failure_no = this.failure_no + 1;
6207
+ }
6208
+ else{
6209
+ this.failure_no = 1;
6210
+ }
6211
+ if(this.hasOwnProperty('failure_no')){
6212
+ console.log('####falure no');
6213
+ console.log(this.failure_no);
6214
+ }
6215
+ delete globalDevices[deviceAddr];
6216
+ if(current_packet != 1){
6217
+ return;
6218
+ } else{
6219
+ if(current_packet != 1){
6220
+ console.log('bad packet cleanup');
6221
+ return;
6222
+ }
6223
+ globalDevices[deviceAddr] = {
6224
+ // stream_size: expected_packets,
6225
+ data: {},
6226
+ }
6227
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6228
+ return;
6229
+ }
6230
+ }
6231
+ }
6232
+ if(expected_packets == 1){
6233
+ if(current_packet != 1){
6234
+ console.log('bad packet cleanup');
6235
+ return;
6236
+ }
6237
+ globalDevices[deviceAddr] = {
6238
+ // stream_size: expected_packets,
6239
+ data: {},
6240
+ }
6241
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6242
+ //return;
6243
+ } else{
6244
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6245
+ }
6246
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
6247
+ var raw_data = new Array();
6248
+ for(const packet in globalDevices[deviceAddr].data){
6249
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
6250
+ }
6251
+ var label = 0;
6252
+ // var fft = {
6253
+ // data: new Array()
6254
+ // // test: new Array()
6255
+ // };
6256
+ var fft = new Array();
6257
+ var adc = {};
6258
+
6259
+ for(var i = 0; i < raw_data.length; i+=2){
6260
+ label++;
6261
+ adc[label] = (raw_data[i]<<8)+(raw_data[i+1]);
6262
+ }
6263
+ // var data = globalDevices[deviceAddr];
6264
+ delete globalDevices[deviceAddr];
6265
+ if(this.hasOwnProperty('failure_no')){
6266
+ console.log('####falure no');
6267
+ console.log(this.failure_no);
6268
+ }
6269
+ return{
6270
+ 'mode': mode,
6271
+ 'sampling_frequency': sampling_frequency,
6272
+ 'sensor_index': sensor_index,
6273
+ 'gain_db':gain_db,
6274
+ 'adc':adc,
6275
+ 'raw_data':raw_data
6276
+ }
6277
+ }
6278
+ else{
6279
+ return;
6280
+ }
6281
+
6282
+ }else{
6283
+ if(current_packet != 1){
6284
+ console.log('bad packet cleanup');
6285
+ return;
6286
+ }
6287
+ globalDevices[deviceAddr] = {
6288
+ // stream_size: expected_packets,
6289
+ data: {},
6290
+ }
6291
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6292
+ return;
6293
+ }
6294
+ }
6295
+ else if(payload[8] === 0){ // processed mode
6296
+ return {
6297
+ mode: payload[8],
6298
+ rms_mv: payload.slice(9, 13).reduce(msbLsb) / 1000,
6299
+ freq_1: payload.slice(13, 15).reduce(msbLsb),
6300
+ freq_2: payload.slice(15, 17).reduce(msbLsb),
6301
+ freq_3: payload.slice(17, 19).reduce(msbLsb),
6302
+ };
6303
+ }
6304
+
6305
+ },
6306
+ 'parse_fly': (frame) => {
6307
+ return {
6308
+ 'firmware': frame[2],
6309
+ 'raw_length': frame[12],
6310
+ 'raw_on_request_timeout': frame[13] + " Sec",
6311
+ 'fly_rate': frame.slice(14, 16).reduce(msbLsb) + " min",
6312
+ 'sensor_gain_db': frame[16] + " dB",
6313
+ 'sensor_boot_time': frame[17] + " Sec",
6314
+ 'hardware_id_1': frame[18],
6315
+ 'hardware_id_2': frame[19],
6316
+ 'hardware_id_3': frame[20],
6317
+ 'rate': frame.slice(21, 25).reduce(msbLsb),
6318
+ 'tx_life_count': frame.slice(25, 29).reduce(msbLsb),
6319
+ 'machine_values': {
6320
+ 'firmware': frame[2],
6321
+ 'raw_lenght': frame[12],
6322
+ 'raw_on_request_timeout': frame[13],
6323
+ 'fly_rate': frame.slice(14, 16),
6324
+ 'sensor_gain_db': frame[16],
6325
+ 'sensor_boot_time': frame[17],
6326
+ 'hardware_id_1': frame[18],
6327
+ 'hardware_id_2': frame[19],
6328
+ 'hardware_id_3': frame[20],
6329
+ 'rate': frame.slice(21, 25),
6330
+ 'tx_life_count': frame.slice(25, 29)
6331
+ }
6332
+ }
6333
+ }
6334
+ },
6335
+ '98': {
6336
+ name: 'Two channel Dynamic Ultrasound vibration Sensor',
6337
+ parse: (payload, parsed, mac) => {
6338
+ if (payload[8] === 1) { // raw
6339
+ var mode = payload[8];
6340
+ var sampling_frequency = payload.slice(9, 13).reduce(msbLsb);
6341
+ var sensor_index = payload[13];
6342
+ var gain_db = payload[14];
6343
+ var deviceAddr = mac;
6344
+ var expected_packets = payload.slice(15, 17).reduce(msbLsb);
6345
+ var current_packet = payload.slice(17, 19).reduce(msbLsb);
6346
+ var sdata_start = 19;
6347
+
6348
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6349
+ // if(expected_packets == 1){
6350
+ // this.build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
6351
+ // }
6352
+
6353
+ // if a packet is already stored with the same packet ID,
6354
+ // or if packet ID is 1,
6355
+ // or if current packet ID is not one more than last packet ID
6356
+ if(current_packet == 1 && expected_packets != 1) {
6357
+ if(current_packet in globalDevices[deviceAddr].data || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
6358
+ console.log('bad packet breakdown, deleting stream. Current packet:');
6359
+ console.log(current_packet);
6360
+ console.log('Total Expected Packets:');
6361
+ console.log(expected_packets);
6362
+ // console.log(current_packet in globalDevices[deviceAddr].data && current_packet == 1 && expected_packets != 1);
6363
+ // console.log(current_packet == 1);
6364
+ // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
6365
+ if(this.hasOwnProperty('failure_no')){
6366
+ this.failure_no = this.failure_no + 1;
6367
+ }
6368
+ else{
6369
+ this.failure_no = 1;
6370
+ }
6371
+ if(this.hasOwnProperty('failure_no')){
6372
+ console.log('####falure no');
6373
+ console.log(this.failure_no);
6374
+ }
6375
+ delete globalDevices[deviceAddr];
6376
+ if(current_packet != 1){
6377
+ return;
6378
+ } else{
6379
+ if(current_packet != 1){
6380
+ console.log('bad packet cleanup');
6381
+ return;
6382
+ }
6383
+ globalDevices[deviceAddr] = {
6384
+ // stream_size: expected_packets,
6385
+ data: {},
6386
+ }
6387
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6388
+ return;
6389
+ }
6390
+ }
6391
+ }
6392
+ if(expected_packets == 1){
6393
+ if(current_packet != 1){
6394
+ console.log('bad packet cleanup');
6395
+ return;
6396
+ }
6397
+ globalDevices[deviceAddr] = {
6398
+ // stream_size: expected_packets,
6399
+ data: {},
6400
+ }
6401
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6402
+ //return;
6403
+ } else{
6404
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6405
+ }
6406
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
6407
+ var raw_data = new Array();
6408
+ for(const packet in globalDevices[deviceAddr].data){
6409
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
6410
+ }
6411
+ var label = 0;
6412
+ // var fft = {
6413
+ // data: new Array()
6414
+ // // test: new Array()
6415
+ // };
6416
+ var fft = new Array();
6417
+ var adc = {};
6418
+
6419
+ for(var i = 0; i < raw_data.length; i+=2){
6420
+ label++;
6421
+ adc[label] = (raw_data[i]<<8)+(raw_data[i+1]);
6422
+ }
6423
+ // var data = globalDevices[deviceAddr];
6424
+ delete globalDevices[deviceAddr];
6425
+ if(this.hasOwnProperty('failure_no')){
6426
+ console.log('####falure no');
6427
+ console.log(this.failure_no);
6428
+ }
6429
+ return{
6430
+ 'mode': mode,
6431
+ 'sampling_frequency': sampling_frequency,
6432
+ 'sensor_index': sensor_index,
6433
+ 'gain_db':gain_db,
6434
+ 'adc':adc,
6435
+ 'raw_data':raw_data
6436
+ }
6437
+ }
6438
+ else{
6439
+ return;
6440
+ }
6441
+
6442
+ }else{
6443
+ if(current_packet != 1){
6444
+ console.log('bad packet cleanup');
6445
+ return;
6446
+ }
6447
+ globalDevices[deviceAddr] = {
6448
+ // stream_size: expected_packets,
6449
+ data: {},
6450
+ }
6451
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6452
+ return;
6453
+ }
6454
+ }
6455
+ else if(payload[8] === 0){ // processed mode
6456
+ return {
6457
+ mode: payload[8],
6458
+ c1_rms_mv: payload.slice(9, 13).reduce(msbLsb) / 1000,
6459
+ c1_freq_1: payload.slice(13, 15).reduce(msbLsb),
6460
+ c1_freq_2: payload.slice(15, 17).reduce(msbLsb),
6461
+ c1_freq_3: payload.slice(17, 19).reduce(msbLsb),
6462
+ c2_rms_mv: payload.slice(19, 23).reduce(msbLsb) / 1000,
6463
+ c2_freq_1: payload.slice(23, 25).reduce(msbLsb),
6464
+ c2_freq_2: payload.slice(25, 27).reduce(msbLsb),
6465
+ c2_freq_3: payload.slice(27, 30).reduce(msbLsb)
6466
+ };
6467
+ }
6468
+ },
6469
+ 'parse_fly': (frame) => {
6470
+ return {
6471
+ 'firmware': frame[2],
6472
+ 'raw_length': frame[12],
6473
+ 'raw_on_request_timeout': frame[13] + " Sec",
6474
+ 'fly_rate': frame.slice(14, 16).reduce(msbLsb) + " min",
6475
+ 'c1_sensor_gain_db': frame[16] + " dB",
6476
+ 'c1_sensor_boot_time': frame[17] + " Sec",
6477
+ 'c2_sensor_gain_db': frame[18] + " dB",
6478
+ 'c2_sensor_boot_time': frame[19] + " Sec",
6479
+ 'hardware_id_1': frame[20],
6480
+ 'hardware_id_2': frame[21],
6481
+ 'hardware_id_3': frame[22],
6482
+ 'rate': frame.slice(23, 27).reduce(msbLsb),
6483
+ 'tx_life_count': frame.slice(27, 31).reduce(msbLsb),
6484
+ 'machine_values': {
6485
+ 'firmware': frame[2],
6486
+ 'raw_lenght': frame[12],
6487
+ 'raw_on_request_timeout': frame[13],
6488
+ 'fly_rate': frame.slice(14, 16),
6489
+ 'c1_sensor_gain_db': frame[16],
6490
+ 'c1_sensor_boot_time': frame[17],
6491
+ 'c2_sensor_gain_db': frame[18],
6492
+ 'c2_sensor_boot_time': frame[19],
6493
+ 'hardware_id_1': frame[20],
6494
+ 'hardware_id_2': frame[21],
6495
+ 'hardware_id_3': frame[22],
6496
+ 'rate': frame.slice(23, 27),
6497
+ 'tx_life_count': frame.slice(27, 31)
6498
+ }
6499
+ }
6500
+ }
6501
+ },
6039
6502
  '101':{
6040
6503
  name: 'Pro Vibration',
6041
6504
  parse: (d, full)=>{
@@ -6571,6 +7034,7 @@ function sensor_types(parent){
6571
7034
  z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
6572
7035
  z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
6573
7036
  z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
7037
+ rpm: payload.slice(54, 56).reduce(msbLsb) / 10
6574
7038
  };
6575
7039
  }
6576
7040
  // else{
@@ -7237,6 +7701,7 @@ function sensor_types(parent){
7237
7701
  z1_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
7238
7702
  z1_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
7239
7703
  z1_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
7704
+ rpm_1: payload.slice(54, 56).reduce(msbLsb) / 10,
7240
7705
 
7241
7706
  s2_odr: odr2,
7242
7707
  s2_temperature: signInt(payload.slice(55, 57).reduce(msbLsb), 16) / 100,
@@ -7263,7 +7728,8 @@ function sensor_types(parent){
7263
7728
  z2_displacement_mm: payload.slice(91, 93).reduce(msbLsb) / 100,
7264
7729
  z2_peak_one_Hz: payload.slice(93, 95).reduce(msbLsb),
7265
7730
  z2_peak_two_Hz: payload.slice(95, 97).reduce(msbLsb),
7266
- z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb)
7731
+ z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb),
7732
+ rpm_2: payload.slice(99, 101).reduce(msbLsb) / 10
7267
7733
  };
7268
7734
  }
7269
7735
  // else{
@@ -7987,6 +8453,7 @@ function sensor_types(parent){
7987
8453
  z_peak_one_Hz: payload.slice(56, 58).reduce(msbLsb),
7988
8454
  z_peak_two_Hz: payload.slice(58, 60).reduce(msbLsb),
7989
8455
  z_peak_three_Hz: payload.slice(60, 62).reduce(msbLsb),
8456
+ rpm: payload.slice(62, 64).reduce(msbLsb) / 10
7990
8457
  };
7991
8458
  }
7992
8459
  // else{
@@ -8595,6 +9062,7 @@ function sensor_types(parent){
8595
9062
  z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
8596
9063
  z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
8597
9064
  z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
9065
+ rpm: payload.slice(54, 56).reduce(msbLsb) / 10
8598
9066
  };
8599
9067
  }
8600
9068
  // else{
@@ -8801,7 +9269,93 @@ function sensor_types(parent){
8801
9269
  }
8802
9270
  }
8803
9271
  },
8804
-
9272
+ '118': {
9273
+ name: 'Dual Pressure and Temperature Sensor',
9274
+ parse: (d) => {
9275
+ return{
9276
+ pressure_s1: signInt(d.slice(0, 4).reduce(msbLsb)),
9277
+ temperature_s1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
9278
+ pressure_s2: signInt(d.slice(6, 10).reduce(msbLsb)),
9279
+ temperature_s2: signInt(d.slice(10, 12).reduce(msbLsb))/100
9280
+ };
9281
+ },
9282
+ 'parse_fly': (frame) => {
9283
+ let psi_1;
9284
+ let psi_2;
9285
+ switch(frame[12]){
9286
+ case 0:
9287
+ psi_1 = "10 PSI"
9288
+ break;
9289
+ case 1:
9290
+ psi_1 = "20 PSI"
9291
+ break;
9292
+ case 2:
9293
+ psi_1 = "100 PSI"
9294
+ break;
9295
+ case 3:
9296
+ psi_1 = "500 PSI"
9297
+ break;
9298
+ case 4:
9299
+ psi_1 = "1000 PSI"
9300
+ break;
9301
+ case 5:
9302
+ psi_1 = "5000 PSI"
9303
+ break;
9304
+ case 6:
9305
+ psi_1 = "10000 PSI"
9306
+ break;
9307
+ }
9308
+ switch(frame[13]){
9309
+ case 0:
9310
+ psi_2 = "10 PSI"
9311
+ break;
9312
+ case 1:
9313
+ psi_2 = "20 PSI"
9314
+ break;
9315
+ case 2:
9316
+ psi_2 = "100 PSI"
9317
+ break;
9318
+ case 3:
9319
+ psi_2 = "500 PSI"
9320
+ break;
9321
+ case 4:
9322
+ psi_2 = "1000 PSI"
9323
+ break;
9324
+ case 5:
9325
+ psi_2 = "5000 PSI"
9326
+ break;
9327
+ case 6:
9328
+ psi_2 = "10000 PSI"
9329
+ break;
9330
+ }
9331
+ return {
9332
+ 'firmware': frame[2],
9333
+ 'sensor_1_fs': psi_1,
9334
+ 'sensor_2_fs': psi_2,
9335
+ 'auto_check_interval': frame.slice(14, 16).reduce(msbLsb) + " Sec.",
9336
+ 'press_auto_check_percent': frame[17] + " %",
9337
+ 'temp_auto_check_percent': frame[17] + " %",
9338
+ 'hardware_id_1': frame[18],
9339
+ 'hardware_id_2': frame[19],
9340
+ 'hardware_id_3': frame[20],
9341
+ 'sample_rate': frame.slice(21, 25).reduce(msbLsb) + " Sec.",
9342
+ 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
9343
+ 'machine_values': {
9344
+ 'firmware': frame[2],
9345
+ 'sensor_1_fs': frame[12],
9346
+ 'sensor_2_fs': frame[13],
9347
+ 'auto_check_interval': frame.slice(14, 16),
9348
+ 'press_auto_check_percent': frame[16],
9349
+ 'temp_auto_check_percent': frame[17],
9350
+ 'hardware_id_1': frame[18],
9351
+ 'hardware_id_2': frame[19],
9352
+ 'hardware_id_3': frame[20],
9353
+ 'sample_rate': frame.slice(21, 25),
9354
+ 'tx_life_counter': frame.slice(25, 29),
9355
+ }
9356
+ }
9357
+ }
9358
+ },
8805
9359
  '180': {
8806
9360
  name: 'C1D2 One Channel Vibration Plus',
8807
9361
  parse: (payload, parsed, mac) => {