@ncd-io/node-red-enterprise-sensors 1.0.1 → 1.0.3

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.
@@ -142,7 +142,7 @@ module.exports = class WirelessSensor{
142
142
  }
143
143
  }
144
144
  // #OTF
145
- var otf_devices = [23,26,39,45,48,52,76,78,79,80,81,82,84,88,89,90,91,101,102,105,107,108,110,111,112,114,180,181,519,520,521,531,535,537,540];
145
+ var otf_devices = [23,26,39,45,48,52,76,78,79,80,81,82,84,88,89,90,91,101,102,105,106,107,108,110,111,112,114,180,181,519,520,521,531,535,537,538,539,540];
146
146
  var device_type = msbLsb(frame.data[6], frame.data[7]);
147
147
  // var device_type = frame.data[7];
148
148
 
@@ -294,7 +294,7 @@ module.exports = class WirelessSensor{
294
294
  };
295
295
 
296
296
  // #OTF
297
- var otf_devices = [23,26,39,45,48,52,76,78,79,80,81,82,84,88,89,90,91,101,102,107,108,180,181,519,520,521,531,535,537];
297
+ var otf_devices = [23,26,39,45,48,52,76,78,79,80,81,82,84,88,89,90,91,101,102,105,106,107,108,110,111,112,114,180,181,519,520,521,531,535,537,538,539,540];
298
298
  if(otf_devices.includes(parsed.sensor_type)){
299
299
  // If the message says FLY and there is not FLY timer in progress.
300
300
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -712,7 +712,7 @@ module.exports = class WirelessSensor{
712
712
  data: payload.slice(8)
713
713
  };
714
714
  // #OTF
715
- }else if(parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 537){
715
+ }else if(parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 537 || parsed.sensor_type == 538){
716
716
  parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
717
717
  if(!parsed.sensor_data){
718
718
  return;
@@ -800,11 +800,6 @@ module.exports = class WirelessSensor{
800
800
  var packet = [247, 7, 0, 0, 0, enabled, perc, interval >> 16, (interval >> 8) & 255, interval & 255];
801
801
  return this.config_send(sensor_mac, packet);
802
802
  }
803
- config_set_cm_calibration(sensor_mac, calib){
804
- var cal = parseInt(calib * 100);
805
- var packet = [244, 1, 0, 0, 0, cal >> 8, cal & 255];
806
- return this.config_send(sensor_mac, packet);
807
- }
808
803
  config_set_bp_altitude(sensor_mac, alt){
809
804
  var packet = [244, 1, 0, 0, 0, alt >> 8, alt & 255];
810
805
  return this.config_send(sensor_mac, packet);
@@ -1198,6 +1193,32 @@ module.exports = class WirelessSensor{
1198
1193
  console.log(packet);
1199
1194
  return this.config_send(sensor_mac, packet);
1200
1195
  }
1196
+ config_set_input_one_108(sensor_mac, value){
1197
+ console.log('config_set_input_one_108');
1198
+ var packet = [244, 41, 0, 0, 0, 1, value];
1199
+ console.log(packet);
1200
+ return this.config_send(sensor_mac, packet);
1201
+ }
1202
+ config_set_input_two_108(sensor_mac, value){
1203
+ console.log('config_set_input_two_108');
1204
+ var packet = [244, 41, 0, 0, 0, 2, value];
1205
+ console.log(packet);
1206
+ return this.config_send(sensor_mac, packet);
1207
+ }
1208
+ config_set_input_three_108(sensor_mac, value){
1209
+ console.log('config_set_input_three_108');
1210
+ var packet = [244, 41, 0, 0, 0, 3, value];
1211
+ console.log(packet);
1212
+ return this.config_send(sensor_mac, packet);
1213
+ }
1214
+ config_set_counter_threshold_108(sensor_mac, value){
1215
+ console.log('config_set_counter_threshold_108');
1216
+ var packet = [244, 43, 0, 0, 0, 0, 0];
1217
+ let threshold = int2Bytes((value), 2);
1218
+ packet.push(...threshold);
1219
+ console.log(packet);
1220
+ return this.config_send(sensor_mac, packet);
1221
+ }
1201
1222
  config_set_sensor_boot_time_420ma(sensor_mac, value){
1202
1223
  console.log('sensor_boot_time_420ma');
1203
1224
  var packet = [244, 68, 0, 0, 45, value];
@@ -1280,6 +1301,12 @@ module.exports = class WirelessSensor{
1280
1301
  console.log(packet);
1281
1302
  return this.config_send(sensor_mac, packet);
1282
1303
  }
1304
+ config_set_debounce_time_35(sensor_mac, value){
1305
+ console.log('config_set_debounce_time_35');
1306
+ var packet = [244, 3, 0, 0, 35, value];
1307
+ console.log(packet);
1308
+ return this.config_send(sensor_mac, packet);
1309
+ }
1283
1310
  config_enable_stay_on_mode_539(sensor_mac, value){
1284
1311
  console.log('config_enable_stay_on_mode_539');
1285
1312
  var packet = [247, 50, 0, 0, 0, value];
@@ -1312,8 +1339,8 @@ module.exports = class WirelessSensor{
1312
1339
  console.log(packet);
1313
1340
  return this.config_send(sensor_mac, packet);
1314
1341
  }
1315
- config_set_rs_node_id_539(sensor_mac, value){
1316
- console.log('config_set_rs_node_id_539');
1342
+ config_set_sub_device_type_539(sensor_mac, value){
1343
+ console.log('config_set_sub_device_type_539');
1317
1344
  var packet = [244, 40, 0, 0, 23, value];
1318
1345
  console.log(packet);
1319
1346
  return this.config_send(sensor_mac, packet);
@@ -1326,12 +1353,24 @@ module.exports = class WirelessSensor{
1326
1353
  }
1327
1354
  config_set_reg_539(sensor_mac, value, register){
1328
1355
  console.log('config_set_reg_539');
1356
+ // var packet = [244, 51, 0, 0, 23, ]
1329
1357
  var packet = [244, 30 + register, 0, 0, 23];
1330
1358
  let value_reg = int2Bytes((value), 2);
1331
1359
  packet.push(...value_reg);
1332
1360
  console.log(packet);
1333
1361
  return this.config_send(sensor_mac, packet);
1334
1362
  }
1363
+ config_set_all_register_data_539(sensor_mac, number_of_registers, registers){
1364
+ console.log('config_set_all_registers_539');
1365
+ // registers is an arbitrary number of 16 bit integers
1366
+ // var packet = [244, 53, 0, 0, 23, number_of_registers, registers.slice(0,2)...]
1367
+ var packet = [244, 53, 0, 0, 23, number_of_registers];
1368
+ for(let ind = 0; ind < number_of_registers; ind++){
1369
+ packet.push(...int2Bytes(registers[ind], 2));
1370
+ }
1371
+ console.log(packet);
1372
+ return this.config_send(sensor_mac, packet);
1373
+ }
1335
1374
  config_set_auto_raw_interval_110(sensor_mac, value){
1336
1375
  console.log('config_set_raw_interval_110');
1337
1376
  var packet = [244, 79, 0, 0, 80, 76, value];
@@ -1366,6 +1405,30 @@ module.exports = class WirelessSensor{
1366
1405
  console.log(packet);
1367
1406
  return this.config_send(sensor_mac, packet);
1368
1407
  }
1408
+ config_set_current_calibration_13(sensor_mac, calib){
1409
+ console.log('config_set_current_calibration_13');
1410
+ var packet = [244, 1, 0, 0, 0];
1411
+ var cal_val = int2Bytes(calib, 2);
1412
+ packet.push(...cal_val);
1413
+ console.log(packet);
1414
+ return this.config_send(sensor_mac, packet);
1415
+ }
1416
+ config_set_current_calibration_ch2_19(sensor_mac, calib){
1417
+ console.log('config_set_current_calibration_ch2_19');
1418
+ var packet = [244, 3, 0, 0, 0];
1419
+ var cal_val = int2Bytes(calib, 2);
1420
+ packet.push(...cal_val);
1421
+ console.log(packet);
1422
+ return this.config_send(sensor_mac, packet);
1423
+ }
1424
+ config_set_current_calibration_ch3_28(sensor_mac, calib){
1425
+ console.log('cconfig_set_current_calibration_ch3_28');
1426
+ var packet = [244, 5, 0, 0, 0];
1427
+ var cal_val = int2Bytes(calib, 2);
1428
+ packet.push(...cal_val);
1429
+ console.log(packet);
1430
+ return this.config_send(sensor_mac, packet);
1431
+ }
1369
1432
  config_get_delay(sensor_mac){
1370
1433
  return new Promise((fulfill, reject) => {
1371
1434
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -1547,6 +1610,13 @@ module.exports = class WirelessSensor{
1547
1610
  packet.push(...key);
1548
1611
  return this.config_send(sensor_mac, packet);
1549
1612
  }
1613
+ control_start_luber(sensor_mac, luber = 1, duration){
1614
+ console.log('control_start_luber');
1615
+ let packet = [244, 78, 0, 0, 45, luber, duration];
1616
+ console.log(packet);
1617
+ let cmd_timeout = (duration * 1000) + 1000;
1618
+ return this.config_send(sensor_mac, packet, {}, cmd_timeout);
1619
+ }
1550
1620
  config_powered_device(sensor_mac, param, ...data){
1551
1621
  var params = {
1552
1622
  destination: 0,
@@ -1563,7 +1633,7 @@ module.exports = class WirelessSensor{
1563
1633
  delete this.queue;
1564
1634
  this.queue = new Queue(1);
1565
1635
  }
1566
- config_send(sensor_mac, data, opts){
1636
+ config_send(sensor_mac, data, opts, cmd_timeout = 1500){
1567
1637
  var that = this;
1568
1638
  return new Promise((fulfill, reject) => {
1569
1639
  that.queue.add(() => {
@@ -1604,7 +1674,7 @@ module.exports = class WirelessSensor{
1604
1674
  }
1605
1675
 
1606
1676
  f();
1607
- }, 1500);
1677
+ }, cmd_timeout);
1608
1678
  that.send.transmit_request(mac2bytes(sensor_mac), data, opts).then().catch((err) => {
1609
1679
  that._emitter.removeListener('config_error-'+sensor_mac, fail);
1610
1680
  that._emitter.removeListener('config_ack-'+sensor_mac, pass);
@@ -1736,7 +1806,7 @@ module.exports = class WirelessSensor{
1736
1806
 
1737
1807
  return;
1738
1808
  }
1739
- control_send(sensor_mac, data, opts){
1809
+ control_send(sensor_mac, data, opts, ctrl_timeout = 1000){
1740
1810
  var that = this;
1741
1811
  return new Promise((fulfill, reject) => {
1742
1812
  that.queue.add(() => {
@@ -1774,7 +1844,7 @@ module.exports = class WirelessSensor{
1774
1844
  }else{
1775
1845
  fail('Control response timeout');
1776
1846
  }
1777
- }, 1000);
1847
+ }, ctrl_timeout);
1778
1848
  }
1779
1849
  }).catch(fail);
1780
1850
  }
@@ -3322,7 +3392,7 @@ function sensor_types(parent){
3322
3392
  break;
3323
3393
  }
3324
3394
 
3325
- return {
3395
+ let response = {
3326
3396
  'firmware': frame[2],
3327
3397
  'destination_address': toMac(frame.slice(12, 16)),
3328
3398
  'mode': frame_data.mode,
@@ -3337,23 +3407,30 @@ function sensor_types(parent){
3337
3407
  'sampling_interval': frame_data.sampling_interval,
3338
3408
  'on_request_timeout': frame_data.on_request_timeout,
3339
3409
  'deadband': frame_data.deadband,
3340
- 'payload_length': frame_data.payload_length,
3341
- 'machine_values': {
3342
- 'firmware': frame[2],
3343
- 'destination_address': toMac(frame.slice(12, 16), false),
3344
- 'mode': frame[16],
3345
- 'odr_1': frame[17],
3346
- 'sampling_duration_1': frame[19],
3347
- 'sampling_duration_2': frame[20],
3348
- 'filter_status': frame[21],
3349
- 'lpf_coeff_1': frame[22],
3350
- 'hpf_coeff_1': frame[24],
3351
- 'sampling_interval': frame[26],
3352
- 'on_request_timeout': frame[27],
3353
- 'deadband': frame[28],
3354
- 'payload_length': frame[29]
3355
- }
3410
+ 'payload_length': frame_data.payload_length
3411
+ }
3412
+ if(response.firmware > 19){
3413
+ response.lifetime_transmissions = frame.slice(30, 34).reduce(msbLsb);
3356
3414
  }
3415
+ response.machine_values = {
3416
+ 'firmware': frame[2],
3417
+ 'destination_address': toMac(frame.slice(12, 16), false),
3418
+ 'mode': frame[16],
3419
+ 'odr_1': frame[17],
3420
+ 'sampling_duration_1': frame[19],
3421
+ 'sampling_duration_2': frame[20],
3422
+ 'filter_status': frame[21],
3423
+ 'lpf_coeff_1': frame[22],
3424
+ 'hpf_coeff_1': frame[24],
3425
+ 'sampling_interval': frame[26],
3426
+ 'on_request_timeout': frame[27],
3427
+ 'deadband': frame[28],
3428
+ 'payload_length': frame[29]
3429
+ }
3430
+ if(response.firmware > 19){
3431
+ response.machine_values.lifetime_transmissions = frame.slice(30, 34);
3432
+ }
3433
+ return response;
3357
3434
  }
3358
3435
  },
3359
3436
  '81': {
@@ -4116,46 +4193,45 @@ function sensor_types(parent){
4116
4193
  break;
4117
4194
  }
4118
4195
 
4119
- return {
4196
+ let response = {
4120
4197
  'firmware': frame[2],
4121
4198
  'destination_address': toMac(frame.slice(12, 16)),
4122
4199
  'mode': frame_data.mode,
4123
4200
  'odr_1': frame_data.odr_1+'Hz',
4124
- 'odr_2': frame_data.odr_2+'Hz',
4125
4201
  'sampling_duration_1': frame_data.sampling_duration_1,
4126
4202
  'sampling_duration_2': frame_data.sampling_duration_2,
4127
4203
  'filter_status': frame_data.filter_status,
4128
4204
  'lpf_coeff_1': frame_data.lpf_coeff_1,
4129
4205
  'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
4130
- 'lpf_coeff_2': frame_data.lpf_coeff_2,
4131
- 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
4132
4206
  'hpf_coeff_1': frame_data.hpf_coeff_1,
4133
4207
  'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
4134
- 'hpf_coeff_2': frame_data.hpf_coeff_2,
4135
- 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
4136
4208
  'sampling_interval': frame_data.sampling_interval,
4137
4209
  'on_request_timeout': frame_data.on_request_timeout,
4138
4210
  'deadband': frame_data.deadband,
4139
- 'payload_length': frame_data.payload_length,
4140
- 'machine_values': {
4141
- 'firmware': frame[2],
4142
- 'destination_address': toMac(frame.slice(12, 16), false),
4143
- 'mode': frame[16],
4144
- 'odr_1': frame[17],
4145
- 'odr_2': frame[18],
4146
- 'sampling_duration_1': frame[19],
4147
- 'sampling_duration_2': frame[20],
4148
- 'filter_status': frame[21],
4149
- 'lpf_coeff_1': frame[22],
4150
- 'lpf_coeff_2': frame[23],
4151
- 'hpf_coeff_1': frame[24],
4152
- 'hpf_coeff_2': frame[25],
4153
- 'sampling_interval': frame[26],
4154
- 'on_request_timeout': frame[27],
4155
- 'deadband': frame[28],
4156
- 'payload_length': frame[29]
4157
- }
4211
+ 'payload_length': frame_data.payload_length
4158
4212
  }
4213
+ if(response.firmware > 19){
4214
+ response.lifetime_transmissions = frame.slice(30, 34).reduce(msbLsb);
4215
+ }
4216
+ response.machine_values = {
4217
+ 'firmware': frame[2],
4218
+ 'destination_address': toMac(frame.slice(12, 16), false),
4219
+ 'mode': frame[16],
4220
+ 'odr_1': frame[17],
4221
+ 'sampling_duration_1': frame[19],
4222
+ 'sampling_duration_2': frame[20],
4223
+ 'filter_status': frame[21],
4224
+ 'lpf_coeff_1': frame[22],
4225
+ 'hpf_coeff_1': frame[24],
4226
+ 'sampling_interval': frame[26],
4227
+ 'on_request_timeout': frame[27],
4228
+ 'deadband': frame[28],
4229
+ 'payload_length': frame[29]
4230
+ }
4231
+ if(response.firmware > 19){
4232
+ response.machine_values.lifetime_transmissions = frame.slice(30, 34);
4233
+ }
4234
+ return response;
4159
4235
  }
4160
4236
  },
4161
4237
 
@@ -5352,7 +5428,7 @@ function sensor_types(parent){
5352
5428
  break;
5353
5429
  }
5354
5430
 
5355
- return {
5431
+ let response = {
5356
5432
  'firmware': frame[2],
5357
5433
  'destination_address': toMac(frame.slice(12, 16)),
5358
5434
  'mode': frame_data.mode,
@@ -5367,23 +5443,30 @@ function sensor_types(parent){
5367
5443
  'sampling_interval': frame_data.sampling_interval,
5368
5444
  'on_request_timeout': frame_data.on_request_timeout,
5369
5445
  'deadband': frame_data.deadband,
5370
- 'payload_length': frame_data.payload_length,
5371
- 'machine_values': {
5372
- 'firmware': frame[2],
5373
- 'destination_address': toMac(frame.slice(12, 16), false),
5374
- 'mode': frame[16],
5375
- 'odr_1': frame[17],
5376
- 'sampling_duration_1': frame[19],
5377
- 'sampling_duration_2': frame[20],
5378
- 'filter_status': frame[21],
5379
- 'lpf_coeff_1': frame[22],
5380
- 'hpf_coeff_1': frame[24],
5381
- 'sampling_interval': frame[26],
5382
- 'on_request_timeout': frame[27],
5383
- 'deadband': frame[28],
5384
- 'payload_length': frame[29]
5385
- }
5446
+ 'payload_length': frame_data.payload_length
5447
+ }
5448
+ if(response.firmware > 19){
5449
+ response.lifetime_transmissions = frame.slice(30, 34).reduce(msbLsb);
5386
5450
  }
5451
+ response.machine_values = {
5452
+ 'firmware': frame[2],
5453
+ 'destination_address': toMac(frame.slice(12, 16), false),
5454
+ 'mode': frame[16],
5455
+ 'odr_1': frame[17],
5456
+ 'sampling_duration_1': frame[19],
5457
+ 'sampling_duration_2': frame[20],
5458
+ 'filter_status': frame[21],
5459
+ 'lpf_coeff_1': frame[22],
5460
+ 'hpf_coeff_1': frame[24],
5461
+ 'sampling_interval': frame[26],
5462
+ 'on_request_timeout': frame[27],
5463
+ 'deadband': frame[28],
5464
+ 'payload_length': frame[29]
5465
+ }
5466
+ if(response.firmware > 19){
5467
+ response.machine_values.lifetime_transmissions = frame.slice(30, 34);
5468
+ }
5469
+ return response;
5387
5470
  }
5388
5471
  },
5389
5472
  '88': {
@@ -5461,7 +5544,7 @@ function sensor_types(parent){
5461
5544
  }
5462
5545
  },
5463
5546
  '105': {
5464
- name: '1 Auto Luber With Ultrasound Vibration Sensor',
5547
+ name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
5465
5548
  parse: (d) => {
5466
5549
  return {
5467
5550
  raw_adc: d.slice(0, 2).reduce(msbLsb),
@@ -5470,6 +5553,19 @@ function sensor_types(parent){
5470
5553
  };
5471
5554
  }
5472
5555
  },
5556
+ '106': {
5557
+ name: '2 Channel Automatic Luber With Ultrasound Vibration Sensor',
5558
+ parse: (d) => {
5559
+ return {
5560
+ c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
5561
+ c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
5562
+ c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
5563
+ c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
5564
+ c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
5565
+ c2_db: d.slice(10, 12).reduce(msbLsb) / 100
5566
+ };
5567
+ }
5568
+ },
5473
5569
  '107': {
5474
5570
  name: '16-Bit 4-Channel 4-20mA',
5475
5571
  parse: (d) => {
@@ -9766,11 +9862,629 @@ function sensor_types(parent){
9766
9862
  }
9767
9863
  }
9768
9864
  },
9865
+ '538': {
9866
+ name: 'One Channel Vibration Plus',
9867
+ parse: (payload, parsed, mac) => {
9868
+ if(payload[7] >> 1 != 0){
9869
+ console.log('Error found');
9870
+ parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
9871
+ return parsed;
9872
+ }
9873
+
9874
+ if(payload[8] === 1){
9875
+ var deviceAddr = mac;
9876
+ var firmware = payload[1];
9877
+ var hour = payload[11];
9878
+ var minute = payload[12];
9879
+ var expected_packets = payload[15];
9880
+ var current_packet = payload[16];
9881
+ var sdata_start = 17;
9882
+
9883
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
9884
+ if(expected_packets != 1){
9885
+ // 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
9886
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
9887
+ console.log('-----');
9888
+ console.log('bad packet breakdown deleting stream');
9889
+ console.log(current_packet);
9890
+ console.log(expected_packets);
9891
+ console.log(current_packet in globalDevices[deviceAddr].data);
9892
+ console.log(current_packet == 1);
9893
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
9894
+ if(this.hasOwnProperty('failure_no')){
9895
+ this.failure_no = this.failure_no + 1;
9896
+ }
9897
+ else{
9898
+ this.failure_no = 1;
9899
+ }
9900
+ if(this.hasOwnProperty('failure_no')){
9901
+ console.log('####falure no');
9902
+ console.log(this.failure_no);
9903
+ }
9904
+ // console.log(globalDevices[deviceAddr].data);
9905
+ delete globalDevices[deviceAddr];
9906
+ if(current_packet != 1){
9907
+ return;
9908
+ } else{
9909
+
9910
+ var mode = payload[8];
9911
+ var odr = payload[9];
9912
+ var en_axis = payload[10] & 7;
9913
+ var fsr = payload[10] >> 5;
9914
+ var device_temp = msbLsb(payload[13], payload[14])/100;
9915
+
9916
+
9917
+ switch(odr){
9918
+ case 6:
9919
+ odr = 50;
9920
+ break;
9921
+ case 7:
9922
+ odr = 100;
9923
+ break;
9924
+ case 8:
9925
+ odr = 200;
9926
+ break;
9927
+ case 9:
9928
+ odr = 400;
9929
+ break;
9930
+ case 10:
9931
+ odr = 800;
9932
+ break;
9933
+ case 11:
9934
+ odr = 1600;
9935
+ break;
9936
+ case 12:
9937
+ odr = 3200;
9938
+ break;
9939
+ case 13:
9940
+ odr = 6400;
9941
+ break;
9942
+ case 14:
9943
+ odr = 12800;
9944
+ break;
9945
+ case 15:
9946
+ odr = 25600;
9947
+ break;
9948
+ default:
9949
+ odr = 0;
9950
+ }
9951
+
9952
+ globalDevices[deviceAddr] = {
9953
+ // stream_size: expected_packets,
9954
+ data: {},
9955
+ odr: odr,
9956
+ mo: mode,
9957
+ en_axis: en_axis,
9958
+ fsr: fsr,
9959
+ hour: hour,
9960
+ minute: minute,
9961
+ device_temp: device_temp,
9962
+ }
9963
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9964
+ return;
9965
+ }
9966
+ }
9967
+ else{
9968
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9969
+ }
9970
+ }
9971
+ else{
9972
+ var mode = payload[8];
9973
+ var odr = payload[9];
9974
+ var en_axis = payload[10] & 7;
9975
+ var fsr = payload[10] >> 5;
9976
+ var device_temp = msbLsb(payload[13], payload[14])/100;
9977
+
9978
+
9979
+ switch(odr){
9980
+ case 6:
9981
+ odr = 50;
9982
+ break;
9983
+ case 7:
9984
+ odr = 100;
9985
+ break;
9986
+ case 8:
9987
+ odr = 200;
9988
+ break;
9989
+ case 9:
9990
+ odr = 400;
9991
+ break;
9992
+ case 10:
9993
+ odr = 800;
9994
+ break;
9995
+ case 11:
9996
+ odr = 1600;
9997
+ break;
9998
+ case 12:
9999
+ odr = 3200;
10000
+ break;
10001
+ case 13:
10002
+ odr = 6400;
10003
+ break;
10004
+ case 14:
10005
+ odr = 12800;
10006
+ break;
10007
+ case 15:
10008
+ odr = 25600;
10009
+ break;
10010
+ default:
10011
+ odr = 0;
10012
+ }
10013
+
10014
+ globalDevices[deviceAddr] = {
10015
+ // stream_size: expected_packets,
10016
+ data: {},
10017
+ odr: odr,
10018
+ mo: mode,
10019
+ en_axis: en_axis,
10020
+ fsr: fsr,
10021
+ hour: hour,
10022
+ minute: minute,
10023
+ device_temp: device_temp,
10024
+ }
10025
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10026
+ }
10027
+
10028
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
10029
+ var raw_data = new Array();
10030
+ for(const packet in globalDevices[deviceAddr].data){
10031
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
10032
+ }
10033
+ var label = 0;
10034
+
10035
+ var fft = new Array();
10036
+ var fft_concat = {};
10037
+
10038
+ var en_axis_data = {};
10039
+ switch (globalDevices[deviceAddr].en_axis){
10040
+ case 1:
10041
+ en_axis_data.x_offset = 0;
10042
+ en_axis_data.increment = 2;
10043
+ break;
10044
+ case 2:
10045
+ en_axis_data.y_offset = 0;
10046
+ en_axis_data.increment = 2;
10047
+ break;
10048
+ case 3:
10049
+ en_axis_data.x_offset = 0;
10050
+ en_axis_data.y_offset = 2;
10051
+ en_axis_data.increment = 4;
10052
+ break;
10053
+ case 4:
10054
+ en_axis_data.z_offset = 0;
10055
+ en_axis_data.increment = 2;
10056
+ break;
10057
+ case 5:
10058
+ en_axis_data.x_offset = 0;
10059
+ en_axis_data.z_offset = 2;
10060
+ en_axis_data.increment = 4;
10061
+ break;
10062
+ case 6:
10063
+ en_axis_data.y_offset = 0;
10064
+ en_axis_data.z_offset = 2;
10065
+ en_axis_data.increment = 4;
10066
+ break;
10067
+ case 7:
10068
+ en_axis_data.x_offset = 0;
10069
+ en_axis_data.y_offset = 2;
10070
+ en_axis_data.z_offset = 4;
10071
+ en_axis_data.increment = 6;
10072
+ break;
10073
+ default:
10074
+ en_axis_data.increment = 0;
10075
+ }
10076
+
10077
+ var fsr_mult = .00006;
10078
+ var fsr_text = "";
10079
+ switch(globalDevices[deviceAddr].fsr){
10080
+ case 0:
10081
+ fsr_mult = 0.00006;
10082
+ break;
10083
+ case 1:
10084
+ fsr_mult = 0.00012;
10085
+ break;
10086
+ case 2:
10087
+ fsr_mult = 0.00024;
10088
+ break;
10089
+ case 3:
10090
+ fsr_mult = 0.00049;
10091
+ break;
10092
+ }
10093
+ switch(globalDevices[deviceAddr].fsr){
10094
+ case 0:
10095
+ fsr_text = "2g";
10096
+ break;
10097
+ case 1:
10098
+ fsr_text = "4g";
10099
+ break;
10100
+ case 2:
10101
+ fsr_text = "8g";
10102
+ break;
10103
+ case 3:
10104
+ fsr_text = "16g";
10105
+ break;
10106
+ }
10107
+
10108
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
10109
+ label++;
10110
+
10111
+ fft_concat[label] = {};
10112
+
10113
+ if('x_offset' in en_axis_data){
10114
+ 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));
10115
+ }
10116
+ if('y_offset' in en_axis_data){
10117
+ 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));
10118
+ }
10119
+ if('z_offset' in en_axis_data){
10120
+ 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));
10121
+ }
10122
+ }
10123
+ var fft_concat_obj = {
10124
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
10125
+ mac_address: deviceAddr,
10126
+ en_axis: globalDevices[deviceAddr].en_axis,
10127
+ fsr: fsr_text,
10128
+ odr: globalDevices[deviceAddr].odr,
10129
+ device_temp: globalDevices[deviceAddr].device_temp,
10130
+ data: fft_concat
10131
+ };
10132
+ sensor_data = fft_concat_obj;
10133
+ delete globalDevices[deviceAddr];
10134
+ if(this.hasOwnProperty('failure_no')){
10135
+ console.log('####falure no');
10136
+ console.log(this.failure_no);
10137
+ }
10138
+
10139
+ return sensor_data;
10140
+ }
10141
+ else{
10142
+ return;
10143
+ }
10144
+ }else{
10145
+
10146
+ var mode = payload[8];
10147
+ var odr = payload[9];
10148
+ var en_axis = payload[10] & 7;
10149
+ var fsr = payload[10] >> 5;
10150
+ var device_temp = msbLsb(payload[13], payload[14])/100;
10151
+
10152
+
10153
+ switch(odr){
10154
+ case 6:
10155
+ odr = 50;
10156
+ break;
10157
+ case 7:
10158
+ odr = 100;
10159
+ break;
10160
+ case 8:
10161
+ odr = 200;
10162
+ break;
10163
+ case 9:
10164
+ odr = 400;
10165
+ break;
10166
+ case 10:
10167
+ odr = 800;
10168
+ break;
10169
+ case 11:
10170
+ odr = 1600;
10171
+ break;
10172
+ case 12:
10173
+ odr = 3200;
10174
+ break;
10175
+ case 13:
10176
+ odr = 6400;
10177
+ break;
10178
+ case 14:
10179
+ odr = 12800;
10180
+ break;
10181
+ case 15:
10182
+ odr = 25600;
10183
+ break;
10184
+ default:
10185
+ odr = 0;
10186
+ }
10187
+
10188
+ globalDevices[deviceAddr] = {
10189
+ // stream_size: expected_packets,
10190
+ data: {},
10191
+ odr: odr,
10192
+ mo: mode,
10193
+ en_axis: en_axis,
10194
+ fsr: fsr,
10195
+ hour: hour,
10196
+ minute: minute,
10197
+ device_temp: device_temp,
10198
+ }
10199
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10200
+ return;
10201
+ }
10202
+ }
10203
+ else if(payload[8] === 0 || payload[8] === 2){
10204
+ // mode byte most significant bit will indicate fft data.
10205
+ // console.log(d);
10206
+ var odr;
10207
+ switch(payload[9]){
10208
+ case 6:
10209
+ odr = "50Hz"
10210
+ break;
10211
+ case 7:
10212
+ odr = "100Hz";
10213
+ break;
10214
+ case 8:
10215
+ odr = "200Hz";
10216
+ break;
10217
+ case 9:
10218
+ odr = "400Hz";
10219
+ break;
10220
+ case 10:
10221
+ odr = "800Hz";
10222
+ break;
10223
+ case 11:
10224
+ odr = "1600Hz";
10225
+ break;
10226
+ case 12:
10227
+ odr = "3200Hz";
10228
+ break;
10229
+ case 13:
10230
+ odr = "6400Hz";
10231
+ break;
10232
+ case 14:
10233
+ odr = "12800Hz";
10234
+ break;
10235
+ case 15:
10236
+ odr = "25600Hz";
10237
+ break;
10238
+ }
10239
+ return {
10240
+ mode: payload[8],
10241
+
10242
+ odr: odr,
10243
+ temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
10244
+
10245
+ x_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
10246
+ x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
10247
+ x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
10248
+ x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
10249
+ x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
10250
+ x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
10251
+ x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
10252
+
10253
+ y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
10254
+ y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
10255
+ y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
10256
+ y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
10257
+ y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
10258
+ y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
10259
+ y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
10260
+
10261
+ z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
10262
+ z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
10263
+ z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
10264
+ z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
10265
+ z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
10266
+ z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
10267
+ z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
10268
+ };
10269
+ }
10270
+ // else{
10271
+ // parsed.data = {'error': 'Vibration mode error'}
10272
+ // return parsed;
10273
+ // }
10274
+ },
10275
+ 'parse_fly': (frame) => {
10276
+ let frame_data = {};
10277
+ switch(frame[16]){
10278
+ case 0:
10279
+ frame_data.mode = "Processed";
10280
+ break;
10281
+ case 1:
10282
+ frame_data.mode = "Raw";
10283
+ break;
10284
+ case 2:
10285
+ frame_data.mode = "Processed + Raw on demand";
10286
+ break;
10287
+ }
10288
+ switch(frame[17]){
10289
+ case 6:
10290
+ frame_data.odr_1 = 50;
10291
+ break;
10292
+ case 7:
10293
+ frame_data.odr_1 = 100;
10294
+ break;
10295
+ case 8:
10296
+ frame_data.odr_1 = 200;
10297
+ break;
10298
+ case 9:
10299
+ frame_data.odr_1 = 400;
10300
+ break;
10301
+ case 10:
10302
+ frame_data.odr_1 = 800;
10303
+ break;
10304
+ case 11:
10305
+ frame_data.odr_1 = 1600;
10306
+ break;
10307
+ case 12:
10308
+ frame_data.odr_1 = 3200;
10309
+ break;
10310
+ case 13:
10311
+ frame_data.odr_1 = 6400;
10312
+ break;
10313
+ case 14:
10314
+ frame_data.odr_1 = 12800;
10315
+ break;
10316
+ case 15:
10317
+ frame_data.odr_1 = 25600;
10318
+ break;
10319
+ }
10320
+ frame_data.sampling_duration_1 = frame[19]*50 + "ms";
10321
+ switch(frame[21]){
10322
+ case 0:
10323
+ frame_data.filter_status = "Disabled";
10324
+ break;
10325
+ case 1:
10326
+ frame_data.filter_status = "Enabled";
10327
+ break;
10328
+ }
10329
+ switch(frame[22]){
10330
+ case 0:
10331
+ frame_data.lpf_coeff_1 = 4;
10332
+ break;
10333
+ case 1:
10334
+ frame_data.lpf_coeff_1 = 8;
10335
+ break;
10336
+ case 2:
10337
+ frame_data.lpf_coeff_1 = 16;
10338
+ break;
10339
+ case 2:
10340
+ frame_data.lpf_coeff_1 = 32;
10341
+ break;
10342
+ case 4:
10343
+ frame_data.lpf_coeff_1 = 64;
10344
+ break;
10345
+ case 5:
10346
+ frame_data.lpf_coeff_1 = 128;
10347
+ break;
10348
+ case 6:
10349
+ frame_data.lpf_coeff_1 = 256;
10350
+ break;
10351
+ case 7:
10352
+ frame_data.lpf_coeff_1 = 512;
10353
+ break;
10354
+ case 8:
10355
+ frame_data.lpf_coeff_1 = 1024;
10356
+ break;
10357
+ case 9:
10358
+ frame_data.lpf_coeff_1 = 2048;
10359
+ break;
10360
+ }
10361
+ frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
10362
+ switch(frame[24]){
10363
+ case 0:
10364
+ frame_data.hpf_coeff_1 = 4;
10365
+ break;
10366
+ case 1:
10367
+ frame_data.hpf_coeff_1 = 8;
10368
+ break;
10369
+ case 2:
10370
+ frame_data.hpf_coeff_1 = 16;
10371
+ break;
10372
+ case 2:
10373
+ frame_data.hpf_coeff_1 = 32;
10374
+ break;
10375
+ case 4:
10376
+ frame_data.hpf_coeff_1 = 64;
10377
+ break;
10378
+ case 5:
10379
+ frame_data.hpf_coeff_1 = 128;
10380
+ break;
10381
+ case 6:
10382
+ frame_data.hpf_coeff_1 = 256;
10383
+ break;
10384
+ case 7:
10385
+ frame_data.hpf_coeff_1 = 512;
10386
+ break;
10387
+ case 8:
10388
+ frame_data.hpf_coeff_1 = 1024;
10389
+ break;
10390
+ case 9:
10391
+ frame_data.hpf_coeff_1 = 2048;
10392
+ break;
10393
+ }
10394
+ frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
10395
+ switch(frame[26]){
10396
+ case 0:
10397
+ frame_data.sampling_interval = "5 Minutes";
10398
+ break;
10399
+ case 1:
10400
+ frame_data.sampling_interval = "10 Minutes";
10401
+ break;
10402
+ case 2:
10403
+ frame_data.sampling_interval = "15 Minutes";
10404
+ break;
10405
+ case 2:
10406
+ frame_data.sampling_interval = "20 Minutes";
10407
+ break;
10408
+ case 4:
10409
+ frame_data.sampling_interval = "30 Minutes";
10410
+ break;
10411
+ case 5:
10412
+ frame_data.sampling_interval = "60 Minutes";
10413
+ break;
10414
+ case 6:
10415
+ frame_data.sampling_interval = "120 Minutes";
10416
+ break;
10417
+ case 7:
10418
+ frame_data.sampling_interval = "180 Minutes";
10419
+ break;
10420
+ case 8:
10421
+ frame_data.sampling_interval = "1 Minute";
10422
+ break;
10423
+ }
10424
+ frame_data.on_request_timeout = frame[27] + " Seconds";
10425
+ frame_data.deadband = frame[28] + "mg";
10426
+
10427
+ switch(frame[29]){
10428
+ case 0:
10429
+ frame_data.payload_length = "50 Bytes";
10430
+ break;
10431
+ case 1:
10432
+ frame_data.payload_length = "100 Bytes";
10433
+ break;
10434
+ case 2:
10435
+ frame_data.payload_length = "150 Bytes";
10436
+ break;
10437
+ case 3:
10438
+ frame_data.payload_length = "180 Bytes";
10439
+ break;
10440
+ }
10441
+
10442
+ return {
10443
+ 'firmware': frame[2],
10444
+ 'destination_address': toMac(frame.slice(12, 16)),
10445
+ 'mode': frame_data.mode,
10446
+ 'odr_1': frame_data.odr_1+'Hz',
10447
+ 'sampling_duration_1': frame_data.sampling_duration_1,
10448
+ 'sampling_duration_2': frame_data.sampling_duration_2,
10449
+ 'filter_status': frame_data.filter_status,
10450
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
10451
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
10452
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
10453
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
10454
+ 'sampling_interval': frame_data.sampling_interval,
10455
+ 'on_request_timeout': frame_data.on_request_timeout,
10456
+ 'deadband': frame_data.deadband,
10457
+ 'payload_length': frame_data.payload_length,
10458
+ 'machine_values': {
10459
+ 'firmware': frame[2],
10460
+ 'destination_address': toMac(frame.slice(12, 16), false),
10461
+ 'mode': frame[16],
10462
+ 'odr_1': frame[17],
10463
+ 'sampling_duration_1': frame[19],
10464
+ 'sampling_duration_2': frame[20],
10465
+ 'filter_status': frame[21],
10466
+ 'lpf_coeff_1': frame[22],
10467
+ 'hpf_coeff_1': frame[24],
10468
+ 'sampling_interval': frame[26],
10469
+ 'on_request_timeout': frame[27],
10470
+ 'deadband': frame[28],
10471
+ 'payload_length': frame[29]
10472
+ }
10473
+ }
10474
+ }
10475
+ },
9769
10476
  '539': {
9770
10477
  name: 'RS-485 Modbus Wireless Converter',
9771
10478
  parse: (d) => {
9772
10479
  return {
9773
- data: d
10480
+ subdevice_type: d[0],
10481
+ number_of_registers: d[1],
10482
+ // TODO we can automatically determine how many registers are here based on the number_of_registers and create data objects appropriately
10483
+ // r1: d.slice(2,4),
10484
+ // r2: d.slice(4,6),
10485
+ // r3: d.slice(6,8),
10486
+ // r4: d.slice(8,10),
10487
+ data: d.slice(2)
9774
10488
  };
9775
10489
  },
9776
10490
  },