@ncd-io/node-red-enterprise-sensors 0.1.13 → 0.1.14

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.
@@ -62,7 +62,7 @@ module.exports = class WirelessSensor{
62
62
  var new_mode = is_new;
63
63
  var mode = (type == 'power_up') ? data.mode : ((type == 'sensor_data') ? 'RUN' : ((type == 'config_ack') ? 'ACK' : 'PGM'));
64
64
  // #OTF
65
- var otf_devices = [26,45,48,78,79,80,81,82,84,88,89,91,101,102,519,520,521];
65
+ var otf_devices = [23,26,45,48,78,79,80,81,82,84,88,89,91,101,102,519,520,521,531,537];
66
66
  var device_type = msbLsb(frame.data[6], frame.data[7]);
67
67
  // var device_type = frame.data[7];
68
68
 
@@ -214,7 +214,7 @@ module.exports = class WirelessSensor{
214
214
  };
215
215
 
216
216
  // #OTF
217
- var otf_devices = [26,45,48,78,79,80,81,82,84,88,89,91,101,102,519,520,521];
217
+ var otf_devices = [23,26,45,48,78,79,80,81,82,84,88,89,91,101,102,519,520,521,531,537];
218
218
  if(otf_devices.includes(parsed.sensor_type)){
219
219
  // If the message says FLY and there is not FLY timer in progress.
220
220
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -272,8 +272,8 @@ module.exports = class WirelessSensor{
272
272
  console.log('Total Expected Packets:');
273
273
  console.log(expected_packets);
274
274
  // console.log(current_packet in globalDevices[deviceAddr].data);
275
- // console.log(current_packet == 1);
276
- // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
275
+ // console.log(!(((current_packet&127)-1) in globalDevices[deviceAddr].data));
276
+ // console.log(typeof current_packet in globalDevices[deviceAddr].data);
277
277
  if(this.hasOwnProperty('failure_no')){
278
278
  this.failure_no = this.failure_no + 1;
279
279
  }
@@ -297,6 +297,10 @@ module.exports = class WirelessSensor{
297
297
  if(expected_packets == 1){
298
298
  this.build_101_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
299
299
  } else{
300
+ // console.log('------');
301
+ // console.log(current_packet);
302
+ // console.log(expected_packets);
303
+ // console.log(Object.keys(globalDevices[deviceAddr].data).length);
300
304
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
301
305
  }
302
306
 
@@ -640,7 +644,7 @@ module.exports = class WirelessSensor{
640
644
  data: payload.slice(8)
641
645
  };
642
646
  // #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){
647
+ }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
648
  parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
645
649
  if(!parsed.sensor_data){
646
650
  return;
@@ -1092,6 +1096,12 @@ module.exports = class WirelessSensor{
1092
1096
  console.log(packet);
1093
1097
  return this.config_send(sensor_mac, packet);
1094
1098
  }
1099
+ config_set_thermocouple_type_23(sensor_mac, value){
1100
+ console.log('config_set_thermocouple_type_23');
1101
+ let packet = [244, 83, 0, 0, 23, value];
1102
+ console.log(packet);
1103
+ return this.config_send(sensor_mac, packet);
1104
+ }
1095
1105
 
1096
1106
  config_get_delay(sensor_mac){
1097
1107
  return new Promise((fulfill, reject) => {
@@ -5982,13 +5992,626 @@ function sensor_types(parent){
5982
5992
  name: 'Custom Noise Sensor',
5983
5993
  parse: (d) => {
5984
5994
  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)
5995
+ rms_dba: d[0],
5996
+ c1_dba: d[1],
5997
+ c1_freq: d.slice(2, 4).reduce(msbLsb),
5998
+ c2_dba: d[4],
5999
+ c2_freq: d.slice(5, 7).reduce(msbLsb),
6000
+ c3_dba: d[7],
6001
+ c3_freq: d.slice(8, 10).reduce(msbLsb),
5989
6002
  };
5990
6003
  }
5991
6004
  },
6005
+ '537': {
6006
+ name: 'Type 537 - Custom Standalone Smart Vibration Sensor',
6007
+ parse: (payload, parsed, mac) => {
6008
+ if(payload[7] >> 1 != 0){
6009
+ console.log('Error found');
6010
+ parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
6011
+ return parsed;
6012
+ }
6013
+
6014
+ if(payload[8] === 1){
6015
+ var deviceAddr = mac;
6016
+ var firmware = payload[1];
6017
+ var hour = payload[11];
6018
+ var minute = payload[12];
6019
+ var expected_packets = payload[15];
6020
+ var current_packet = payload[16];
6021
+ var sdata_start = 17;
6022
+
6023
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6024
+ if(expected_packets != 1){
6025
+ // 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
6026
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
6027
+ console.log('-----');
6028
+ console.log('bad packet breakdown deleting stream');
6029
+ console.log(current_packet);
6030
+ console.log(expected_packets);
6031
+ console.log(current_packet in globalDevices[deviceAddr].data);
6032
+ console.log(current_packet == 1);
6033
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
6034
+ if(this.hasOwnProperty('failure_no')){
6035
+ this.failure_no = this.failure_no + 1;
6036
+ }
6037
+ else{
6038
+ this.failure_no = 1;
6039
+ }
6040
+ if(this.hasOwnProperty('failure_no')){
6041
+ console.log('####falure no');
6042
+ console.log(this.failure_no);
6043
+ }
6044
+ // console.log(globalDevices[deviceAddr].data);
6045
+ delete globalDevices[deviceAddr];
6046
+ if(current_packet != 1){
6047
+ return;
6048
+ } else{
6049
+
6050
+ var mode = payload[8];
6051
+ var odr = payload[9];
6052
+ var en_axis = payload[10] & 7;
6053
+ var fsr = payload[10] >> 5;
6054
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6055
+
6056
+
6057
+ switch(odr){
6058
+ case 6:
6059
+ odr = 50;
6060
+ break;
6061
+ case 7:
6062
+ odr = 100;
6063
+ break;
6064
+ case 8:
6065
+ odr = 200;
6066
+ break;
6067
+ case 9:
6068
+ odr = 400;
6069
+ break;
6070
+ case 10:
6071
+ odr = 800;
6072
+ break;
6073
+ case 11:
6074
+ odr = 1600;
6075
+ break;
6076
+ case 12:
6077
+ odr = 3200;
6078
+ break;
6079
+ case 13:
6080
+ odr = 6400;
6081
+ break;
6082
+ case 14:
6083
+ odr = 12800;
6084
+ break;
6085
+ case 15:
6086
+ odr = 25600;
6087
+ break;
6088
+ default:
6089
+ odr = 0;
6090
+ }
6091
+
6092
+ globalDevices[deviceAddr] = {
6093
+ // stream_size: expected_packets,
6094
+ data: {},
6095
+ odr: odr,
6096
+ mo: mode,
6097
+ en_axis: en_axis,
6098
+ fsr: fsr,
6099
+ hour: hour,
6100
+ minute: minute,
6101
+ device_temp: device_temp,
6102
+ }
6103
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6104
+ return;
6105
+ }
6106
+ }
6107
+ else{
6108
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6109
+ }
6110
+ }
6111
+ else{
6112
+ var mode = payload[8];
6113
+ var odr = payload[9];
6114
+ var en_axis = payload[10] & 7;
6115
+ var fsr = payload[10] >> 5;
6116
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6117
+
6118
+
6119
+ switch(odr){
6120
+ case 6:
6121
+ odr = 50;
6122
+ break;
6123
+ case 7:
6124
+ odr = 100;
6125
+ break;
6126
+ case 8:
6127
+ odr = 200;
6128
+ break;
6129
+ case 9:
6130
+ odr = 400;
6131
+ break;
6132
+ case 10:
6133
+ odr = 800;
6134
+ break;
6135
+ case 11:
6136
+ odr = 1600;
6137
+ break;
6138
+ case 12:
6139
+ odr = 3200;
6140
+ break;
6141
+ case 13:
6142
+ odr = 6400;
6143
+ break;
6144
+ case 14:
6145
+ odr = 12800;
6146
+ break;
6147
+ case 15:
6148
+ odr = 25600;
6149
+ break;
6150
+ default:
6151
+ odr = 0;
6152
+ }
6153
+
6154
+ globalDevices[deviceAddr] = {
6155
+ // stream_size: expected_packets,
6156
+ data: {},
6157
+ odr: odr,
6158
+ mo: mode,
6159
+ en_axis: en_axis,
6160
+ fsr: fsr,
6161
+ hour: hour,
6162
+ minute: minute,
6163
+ device_temp: device_temp,
6164
+ }
6165
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6166
+ }
6167
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
6168
+ var raw_data = new Array();
6169
+ for(const packet in globalDevices[deviceAddr].data){
6170
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
6171
+ }
6172
+ var label = 0;
6173
+
6174
+ var fft = new Array();
6175
+ var fft_concat = {};
6176
+
6177
+ var en_axis_data = {};
6178
+ switch (globalDevices[deviceAddr].en_axis){
6179
+ case 1:
6180
+ en_axis_data.x_offset = 0;
6181
+ en_axis_data.increment = 2;
6182
+ break;
6183
+ case 2:
6184
+ en_axis_data.y_offset = 0;
6185
+ en_axis_data.increment = 2;
6186
+ break;
6187
+ case 3:
6188
+ en_axis_data.x_offset = 0;
6189
+ en_axis_data.y_offset = 2;
6190
+ en_axis_data.increment = 4;
6191
+ break;
6192
+ case 4:
6193
+ en_axis_data.z_offset = 0;
6194
+ en_axis_data.increment = 2;
6195
+ break;
6196
+ case 5:
6197
+ en_axis_data.x_offset = 0;
6198
+ en_axis_data.z_offset = 2;
6199
+ en_axis_data.increment = 4;
6200
+ break;
6201
+ case 6:
6202
+ en_axis_data.y_offset = 0;
6203
+ en_axis_data.z_offset = 2;
6204
+ en_axis_data.increment = 4;
6205
+ break;
6206
+ case 7:
6207
+ en_axis_data.x_offset = 0;
6208
+ en_axis_data.y_offset = 2;
6209
+ en_axis_data.z_offset = 4;
6210
+ en_axis_data.increment = 6;
6211
+ break;
6212
+ default:
6213
+ en_axis_data.increment = 0;
6214
+ }
6215
+
6216
+ var fsr_mult = .00006;
6217
+ var fsr_text = "";
6218
+ switch(globalDevices[deviceAddr].fsr){
6219
+ case 0:
6220
+ fsr_mult = 0.00006;
6221
+ break;
6222
+ case 1:
6223
+ fsr_mult = 0.00012;
6224
+ break;
6225
+ case 2:
6226
+ fsr_mult = 0.00024;
6227
+ break;
6228
+ case 3:
6229
+ fsr_mult = 0.00049;
6230
+ break;
6231
+ }
6232
+ switch(globalDevices[deviceAddr].fsr){
6233
+ case 0:
6234
+ fsr_text = "2g";
6235
+ break;
6236
+ case 1:
6237
+ fsr_text = "4g";
6238
+ break;
6239
+ case 2:
6240
+ fsr_text = "8g";
6241
+ break;
6242
+ case 3:
6243
+ fsr_text = "16g";
6244
+ break;
6245
+ }
6246
+
6247
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
6248
+ label++;
6249
+
6250
+ fft_concat[label] = {};
6251
+
6252
+ if('x_offset' in en_axis_data){
6253
+ 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));
6254
+ }
6255
+ if('y_offset' in en_axis_data){
6256
+ 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));
6257
+ }
6258
+ if('z_offset' in en_axis_data){
6259
+ 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));
6260
+ }
6261
+ }
6262
+ var fft_concat_obj = {
6263
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
6264
+ mac_address: deviceAddr,
6265
+ en_axis: globalDevices[deviceAddr].en_axis,
6266
+ fsr: fsr_text,
6267
+ odr: globalDevices[deviceAddr].odr,
6268
+ device_temp: globalDevices[deviceAddr].device_temp,
6269
+ data: fft_concat
6270
+ };
6271
+ sensor_data = fft_concat_obj;
6272
+ delete globalDevices[deviceAddr];
6273
+ if(this.hasOwnProperty('failure_no')){
6274
+ console.log('####falure no');
6275
+ console.log(this.failure_no);
6276
+ }
6277
+
6278
+ return sensor_data;
6279
+ }
6280
+ else{
6281
+ return;
6282
+ }
6283
+ }else{
6284
+
6285
+ var mode = payload[8];
6286
+ var odr = payload[9];
6287
+ var en_axis = payload[10] & 7;
6288
+ var fsr = payload[10] >> 5;
6289
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6290
+
6291
+
6292
+ switch(odr){
6293
+ case 6:
6294
+ odr = 50;
6295
+ break;
6296
+ case 7:
6297
+ odr = 100;
6298
+ break;
6299
+ case 8:
6300
+ odr = 200;
6301
+ break;
6302
+ case 9:
6303
+ odr = 400;
6304
+ break;
6305
+ case 10:
6306
+ odr = 800;
6307
+ break;
6308
+ case 11:
6309
+ odr = 1600;
6310
+ break;
6311
+ case 12:
6312
+ odr = 3200;
6313
+ break;
6314
+ case 13:
6315
+ odr = 6400;
6316
+ break;
6317
+ case 14:
6318
+ odr = 12800;
6319
+ break;
6320
+ case 15:
6321
+ odr = 25600;
6322
+ break;
6323
+ default:
6324
+ odr = 0;
6325
+ }
6326
+
6327
+ globalDevices[deviceAddr] = {
6328
+ // stream_size: expected_packets,
6329
+ data: {},
6330
+ odr: odr,
6331
+ mo: mode,
6332
+ en_axis: en_axis,
6333
+ fsr: fsr,
6334
+ hour: hour,
6335
+ minute: minute,
6336
+ device_temp: device_temp,
6337
+ }
6338
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6339
+ return;
6340
+ }
6341
+ }
6342
+ else if(payload[8] === 0 || payload[8] === 2){
6343
+ // mode byte most significant bit will indicate fft data.
6344
+ // console.log(d);
6345
+ var odr;
6346
+ switch(payload[9]){
6347
+ case 6:
6348
+ odr = "50Hz"
6349
+ break;
6350
+ case 7:
6351
+ odr = "100Hz";
6352
+ break;
6353
+ case 8:
6354
+ odr = "200Hz";
6355
+ break;
6356
+ case 9:
6357
+ odr = "400Hz";
6358
+ break;
6359
+ case 10:
6360
+ odr = "800Hz";
6361
+ break;
6362
+ case 11:
6363
+ odr = "1600Hz";
6364
+ break;
6365
+ case 12:
6366
+ odr = "3200Hz";
6367
+ break;
6368
+ case 13:
6369
+ odr = "6400Hz";
6370
+ break;
6371
+ case 14:
6372
+ odr = "12800Hz";
6373
+ break;
6374
+ case 15:
6375
+ odr = "25600Hz";
6376
+ break;
6377
+ }
6378
+ return {
6379
+ mode: payload[8],
6380
+
6381
+ odr: odr,
6382
+ temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
6383
+
6384
+ x_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
6385
+ x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
6386
+ x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
6387
+ x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
6388
+ x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
6389
+ x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
6390
+ x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
6391
+
6392
+ y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
6393
+ y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
6394
+ y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
6395
+ y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
6396
+ y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
6397
+ y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
6398
+ y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
6399
+
6400
+ z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
6401
+ z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
6402
+ z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
6403
+ z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
6404
+ z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
6405
+ z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
6406
+ z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
6407
+ };
6408
+ }
6409
+ // else{
6410
+ // parsed.data = {'error': 'Vibration mode error'}
6411
+ // return parsed;
6412
+ // }
6413
+ },
6414
+ 'parse_fly': (frame) => {
6415
+ let frame_data = {};
6416
+ switch(frame[16]){
6417
+ case 0:
6418
+ frame_data.mode = "Processed";
6419
+ break;
6420
+ case 1:
6421
+ frame_data.mode = "Raw";
6422
+ break;
6423
+ case 2:
6424
+ frame_data.mode = "Processed + Raw on demand";
6425
+ break;
6426
+ }
6427
+ switch(frame[17]){
6428
+ case 6:
6429
+ frame_data.odr_1 = 50;
6430
+ break;
6431
+ case 7:
6432
+ frame_data.odr_1 = 100;
6433
+ break;
6434
+ case 8:
6435
+ frame_data.odr_1 = 200;
6436
+ break;
6437
+ case 9:
6438
+ frame_data.odr_1 = 400;
6439
+ break;
6440
+ case 10:
6441
+ frame_data.odr_1 = 800;
6442
+ break;
6443
+ case 11:
6444
+ frame_data.odr_1 = 1600;
6445
+ break;
6446
+ case 12:
6447
+ frame_data.odr_1 = 3200;
6448
+ break;
6449
+ case 13:
6450
+ frame_data.odr_1 = 6400;
6451
+ break;
6452
+ case 14:
6453
+ frame_data.odr_1 = 12800;
6454
+ break;
6455
+ case 15:
6456
+ frame_data.odr_1 = 25600;
6457
+ break;
6458
+ }
6459
+ frame_data.sampling_duration_1 = frame[19]*50 + "ms";
6460
+ switch(frame[21]){
6461
+ case 0:
6462
+ frame_data.filter_status = "Disabled";
6463
+ break;
6464
+ case 1:
6465
+ frame_data.filter_status = "Enabled";
6466
+ break;
6467
+ }
6468
+ switch(frame[22]){
6469
+ case 0:
6470
+ frame_data.lpf_coeff_1 = 4;
6471
+ break;
6472
+ case 1:
6473
+ frame_data.lpf_coeff_1 = 8;
6474
+ break;
6475
+ case 2:
6476
+ frame_data.lpf_coeff_1 = 16;
6477
+ break;
6478
+ case 2:
6479
+ frame_data.lpf_coeff_1 = 32;
6480
+ break;
6481
+ case 4:
6482
+ frame_data.lpf_coeff_1 = 64;
6483
+ break;
6484
+ case 5:
6485
+ frame_data.lpf_coeff_1 = 128;
6486
+ break;
6487
+ case 6:
6488
+ frame_data.lpf_coeff_1 = 256;
6489
+ break;
6490
+ case 7:
6491
+ frame_data.lpf_coeff_1 = 512;
6492
+ break;
6493
+ case 8:
6494
+ frame_data.lpf_coeff_1 = 1024;
6495
+ break;
6496
+ case 9:
6497
+ frame_data.lpf_coeff_1 = 2048;
6498
+ break;
6499
+ }
6500
+ frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
6501
+ switch(frame[24]){
6502
+ case 0:
6503
+ frame_data.hpf_coeff_1 = 4;
6504
+ break;
6505
+ case 1:
6506
+ frame_data.hpf_coeff_1 = 8;
6507
+ break;
6508
+ case 2:
6509
+ frame_data.hpf_coeff_1 = 16;
6510
+ break;
6511
+ case 2:
6512
+ frame_data.hpf_coeff_1 = 32;
6513
+ break;
6514
+ case 4:
6515
+ frame_data.hpf_coeff_1 = 64;
6516
+ break;
6517
+ case 5:
6518
+ frame_data.hpf_coeff_1 = 128;
6519
+ break;
6520
+ case 6:
6521
+ frame_data.hpf_coeff_1 = 256;
6522
+ break;
6523
+ case 7:
6524
+ frame_data.hpf_coeff_1 = 512;
6525
+ break;
6526
+ case 8:
6527
+ frame_data.hpf_coeff_1 = 1024;
6528
+ break;
6529
+ case 9:
6530
+ frame_data.hpf_coeff_1 = 2048;
6531
+ break;
6532
+ }
6533
+ frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
6534
+ switch(frame[26]){
6535
+ case 0:
6536
+ frame_data.sampling_interval = "5 Minutes";
6537
+ break;
6538
+ case 1:
6539
+ frame_data.sampling_interval = "10 Minutes";
6540
+ break;
6541
+ case 2:
6542
+ frame_data.sampling_interval = "15 Minutes";
6543
+ break;
6544
+ case 2:
6545
+ frame_data.sampling_interval = "20 Minutes";
6546
+ break;
6547
+ case 4:
6548
+ frame_data.sampling_interval = "30 Minutes";
6549
+ break;
6550
+ case 5:
6551
+ frame_data.sampling_interval = "60 Minutes";
6552
+ break;
6553
+ case 6:
6554
+ frame_data.sampling_interval = "120 Minutes";
6555
+ break;
6556
+ case 7:
6557
+ frame_data.sampling_interval = "180 Minutes";
6558
+ break;
6559
+ case 8:
6560
+ frame_data.sampling_interval = "1 Minute";
6561
+ break;
6562
+ }
6563
+ frame_data.on_request_timeout = frame[27] + " Seconds";
6564
+ frame_data.deadband = frame[28] + "mg";
6565
+
6566
+ switch(frame[29]){
6567
+ case 0:
6568
+ frame_data.payload_length = "50 Bytes";
6569
+ break;
6570
+ case 1:
6571
+ frame_data.payload_length = "100 Bytes";
6572
+ break;
6573
+ case 2:
6574
+ frame_data.payload_length = "150 Bytes";
6575
+ break;
6576
+ case 3:
6577
+ frame_data.payload_length = "180 Bytes";
6578
+ break;
6579
+ }
6580
+
6581
+ return {
6582
+ 'firmware': frame[2],
6583
+ 'destination_address': toMac(frame.slice(12, 16)),
6584
+ 'mode': frame_data.mode,
6585
+ 'odr_1': frame_data.odr_1+'Hz',
6586
+ 'sampling_duration_1': frame_data.sampling_duration_1,
6587
+ 'sampling_duration_2': frame_data.sampling_duration_2,
6588
+ 'filter_status': frame_data.filter_status,
6589
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
6590
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
6591
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
6592
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
6593
+ 'sampling_interval': frame_data.sampling_interval,
6594
+ 'on_request_timeout': frame_data.on_request_timeout,
6595
+ 'deadband': frame_data.deadband,
6596
+ 'payload_length': frame_data.payload_length,
6597
+ 'machine_values': {
6598
+ 'firmware': frame[2],
6599
+ 'destination_address': toMac(frame.slice(12, 16), false),
6600
+ 'mode': frame[16],
6601
+ 'odr_1': frame[17],
6602
+ 'sampling_duration_1': frame[19],
6603
+ 'sampling_duration_2': frame[20],
6604
+ 'filter_status': frame[21],
6605
+ 'lpf_coeff_1': frame[22],
6606
+ 'hpf_coeff_1': frame[24],
6607
+ 'sampling_interval': frame[26],
6608
+ 'on_request_timeout': frame[27],
6609
+ 'deadband': frame[28],
6610
+ 'payload_length': frame[29]
6611
+ }
6612
+ }
6613
+ }
6614
+ },
5992
6615
  '10000': {
5993
6616
  name: '4-Relay',
5994
6617
  parse: (d) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncd-io/node-red-enterprise-sensors",
3
- "version": "0.1.13",
3
+ "version": "0.1.14",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/wireless.html CHANGED
@@ -337,6 +337,9 @@
337
337
  mid_calibration_420ma:{value: 68724, validate: NCD_validators.number_range(0, 4294967295)},
338
338
  high_calibration_420ma_active:{value:""},
339
339
  high_calibration_420ma:{value: 68714, validate: NCD_validators.number_range(0, 4294967295)},
340
+
341
+ thermocouple_type_23_active:{value:""},
342
+ thermocouple_type_23:{value: 0},
340
343
  },
341
344
  inputs: 0,
342
345
  outputs: 1,
@@ -440,6 +443,7 @@
440
443
  "521": "521 - Custom 3 Channel Light Sensor",
441
444
  "524": "524 - SDI Multi Soil Probe",
442
445
  "531": "531 - Custom Noise Sensor",
446
+ "537": "537 - Custom Standalone Smart Vibration Sensor",
443
447
  "10000": "10000 - 4-Channel Relay",
444
448
  "10006": "10006 - 4-Channel 4-20 mA Input",
445
449
  "10007": "10007 - 4-Channel Current Monitor",
@@ -689,6 +693,7 @@
689
693
  <option value="521">521 - Custom 3 Channel Light Sensor</option>
690
694
  <option value="524">524 - SDI Multi Soil Probe</option>
691
695
  <option value="531">531 - Custom Noise Sensor</option>
696
+ <option value="537">537 - Custom Standalone Smart Vibration Sensor</option>
692
697
  <option value="10000">10000 - 4-Channel Relay</option>
693
698
  <option value="10006">10006 - 4-Channel 4-20 mA Input</option>
694
699
  <option value="10007">10007 - 4-Channel Current Monitor</option>
@@ -702,7 +707,7 @@
702
707
  <label for="node-input-auto_config"><i class="icon-tag"></i> Auto Config</label>
703
708
  <input class="section-control" type="checkbox" id="node-input-auto_config" value="1">
704
709
  </div>
705
- <div class="form-row ncd-dependent" data-sensor-26 data-sensor-45 data-sensor-48 data-sensor-78 data-sensor-79 data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-88 data-sensor-89 data-sensor-91 data-sensor-101 data-sensor-102 data-sensor-519 data-sensor-520 data-sensor-521>
710
+ <div class="form-row ncd-dependent" data-sensor-23 data-sensor-26 data-sensor-45 data-sensor-48 data-sensor-78 data-sensor-79 data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-88 data-sensor-89 data-sensor-91 data-sensor-101 data-sensor-102 data-sensor-519 data-sensor-520 data-sensor-521 data-sensor-531 data-sensor-537>
706
711
  <hr>
707
712
  <label for="node-input-on_the_fly_enable"><i class="icon-tag"></i> OTF Config*</label>
708
713
  <input type="checkbox" id="node-input-on_the_fly_enable" value="1">
@@ -1032,7 +1037,7 @@
1032
1037
  </div>
1033
1038
  </div>
1034
1039
 
1035
- <div class="ncd-dependent" data-sensor-84 data-sensor-519>
1040
+ <div class="ncd-dependent" data-sensor-84 data-sensor-519 data-sensor-537>
1036
1041
  <hr>
1037
1042
  <div class="form-row ncd-active-check">
1038
1043
  <strong>LED Alert Mode</strong>
@@ -1094,7 +1099,7 @@
1094
1099
  </div>
1095
1100
  </div>
1096
1101
 
1097
- <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519>
1102
+ <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519 data-sensor-537>
1098
1103
  <hr>
1099
1104
  <div class="form-row ncd-active-check">
1100
1105
  <strong>Mode</strong>
@@ -1138,7 +1143,7 @@
1138
1143
  </div>
1139
1144
  </div>
1140
1145
 
1141
- <div class="ncd-dependent" data-sensor-80 data-sensor-82 data-sensor-84 data-sensor-101 data-sensor-102 data-sensor-519>
1146
+ <div class="ncd-dependent" data-sensor-80 data-sensor-82 data-sensor-84 data-sensor-101 data-sensor-102 data-sensor-519 data-sensor-537>
1142
1147
  <hr>
1143
1148
  <div class="form-row ncd-active-check">
1144
1149
  <strong>Set Sampling Duration 1= 50msec, 2= 100msec</strong>
@@ -1153,7 +1158,7 @@
1153
1158
  </div>
1154
1159
  </div>
1155
1160
 
1156
- <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-101 data-sensor-102 data-sensor-519>
1161
+ <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-101 data-sensor-102 data-sensor-519 data-sensor-537>
1157
1162
  <hr>
1158
1163
  <div class="form-row ncd-active-check">
1159
1164
  <strong>Sampling Interval</strong>
@@ -1254,7 +1259,7 @@
1254
1259
  </div>
1255
1260
  </div>
1256
1261
  </div>
1257
- <div class="ncd-dependent" data-sensor-80 data-sensor-82 data-sensor-84 data-sensor-102 data-sensor-519>
1262
+ <div class="ncd-dependent" data-sensor-80 data-sensor-82 data-sensor-84 data-sensor-102 data-sensor-519 data-sensor-537>
1258
1263
  <hr>
1259
1264
  <div class="form-row ncd-active-check">
1260
1265
  <strong>Output Data Rate</strong>
@@ -1305,7 +1310,7 @@
1305
1310
  </div>
1306
1311
  </div>
1307
1312
  </div>
1308
- <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519>
1313
+ <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519 data-sensor-537>
1309
1314
  <div class="form-row ncd-active-check">
1310
1315
  <strong>Set Filtering</strong>
1311
1316
  <div>
@@ -1432,7 +1437,7 @@
1432
1437
  </div>
1433
1438
  </div>
1434
1439
 
1435
- <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519>
1440
+ <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519 data-sensor-537>
1436
1441
  <div class="form-row ncd-active-check">
1437
1442
  <strong>Full Scale Range</strong>
1438
1443
  <div>
@@ -1469,7 +1474,7 @@
1469
1474
  </div>
1470
1475
  </div>
1471
1476
  </div>
1472
- <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-101 data-sensor-519>
1477
+ <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-101 data-sensor-519 data-sensor-537>
1473
1478
  <div class="form-row ncd-active-check">
1474
1479
  <strong>Set Dead Band in mg</strong>
1475
1480
  <div>
@@ -1683,7 +1688,7 @@
1683
1688
  </div>
1684
1689
  </div>
1685
1690
  </div>
1686
- <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519>
1691
+ <div class="ncd-dependent" data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-519 data-sensor-537>
1687
1692
  <hr>
1688
1693
  <div class="form-row ncd-active-check">
1689
1694
  <strong>Payload Length</strong>
@@ -1702,6 +1707,29 @@
1702
1707
  </div>
1703
1708
  </div>
1704
1709
  </div>
1710
+ <div class="ncd-dependent" data-sensor-23>
1711
+ <hr>
1712
+ <div class="form-row ncd-active-check">
1713
+ <strong>Thermocouple Type</strong>
1714
+ <div>
1715
+ <label for="node-input-thermocouple_type_23_active">Active:</label>
1716
+ <input type="checkbox" id="node-input-thermocouple_type_23_active" class="ncd-config-toggle" data-target-id="node-input-thermocouple_type_23" value="1">
1717
+ </div>
1718
+ <div>
1719
+ <label for="node-input-thermocouple_type_23"><i class="icon-tag"></i>Value:</label>
1720
+ <select id="node-input-thermocouple_type_23">
1721
+ <option selected="selected" value="0">K </option>
1722
+ <option value="16">J Type</option>
1723
+ <option value="32">T Type</option>
1724
+ <option value="48">N Type</option>
1725
+ <option value="64">S Type</option>
1726
+ <option value="80">E Type</option>
1727
+ <option value="96">B Type</option>
1728
+ <option value="112">R Type</option>
1729
+ </select>
1730
+ </div>
1731
+ </div>
1732
+ </div>
1705
1733
  <div class="ncd-dependent" data-sensor-46>
1706
1734
  <hr>
1707
1735
  <div class="form-row ncd-active-check">
package/wireless.js CHANGED
@@ -315,7 +315,7 @@ module.exports = function(RED) {
315
315
  setTimeout(() => {
316
316
  var tout = setTimeout(() => {
317
317
  node.status(modes.PGM_ERR);
318
- node.send({topic: 'Config Results', payload: success, time: Date.now()});
318
+ node.send({topic: 'Config Results', payload: success, time: Date.now(), addr: sensor.mac});
319
319
  }, 60000);
320
320
  node.status(modes.PGM_NOW);
321
321
  if(parseInt(config.sensor_type) >= 10000){
@@ -432,6 +432,10 @@ module.exports = function(RED) {
432
432
  promises.high_calibration_420ma = node.config_gateway.config_set_high_calibration_420ma(mac, parseInt(config.high_calibration_420ma));
433
433
  }
434
434
  break;
435
+ case 23:
436
+ if(config.thermocouple_type_23_active){
437
+ promises.thermocouple_type_23 = node.config_gateway.config_set_thermocouple_type_23(mac, parseInt(config.thermocouple_type_23));
438
+ }
435
439
  case 24:
436
440
  if(config.impact_accel_active){
437
441
  promises.impact_accel = node.config_gateway.config_set_acceleration_range_24(mac, parseInt(config.impact_accel));
@@ -894,6 +898,62 @@ module.exports = function(RED) {
894
898
  promises.set_rtc_101 = node.config_gateway.config_set_rtc_101(mac);
895
899
  }
896
900
  break;
901
+ case 537:
902
+ if(config.output_data_rate_101_active){
903
+ promises.output_data_rate_101 = node.config_gateway.config_set_output_data_rate_101(mac, parseInt(config.output_data_rate_101));
904
+ }
905
+ if(config.sampling_duration_101_active){
906
+ promises.sampling_duration_101 = node.config_gateway.config_set_sampling_duration_101(mac, parseInt(config.sampling_duration_101));
907
+ }
908
+ if(config.x_axis_101 || config.y_axis_101 || config.z_axis_101){
909
+ promises.axis_enabled_101 = node.config_gateway.config_set_axis_enabled_101(mac, config.x_axis_101, config.y_axis_101, config.z_axis_101);
910
+ }
911
+ if(config.sampling_interval_101_active){
912
+ promises.sampling_interval_101 = node.config_gateway.config_set_sampling_interval_101(mac, parseInt(config.sampling_interval_101));
913
+ }
914
+ if(config.full_scale_range_101_active){
915
+ promises.full_scale_range_101 = node.config_gateway.config_set_full_scale_range_101(mac, parseInt(config.full_scale_range_101));
916
+ }
917
+ if(config.mode_80_active){
918
+ promises.mode = node.config_gateway.config_set_operation_mode_80(mac, parseInt(config.mode_80));
919
+ }
920
+ if(config.filter_80_active){
921
+ promises.filter = node.config_gateway.config_set_filters_80(mac, parseInt(config.filter_80));
922
+ }
923
+ if(config.low_pass_filter_80_active){
924
+ promises.low_pass_filter = node.config_gateway.config_set_low_pass_filter_80(mac, parseInt(config.low_pass_filter_80));
925
+ }
926
+ if(config.high_pass_filter_80_active){
927
+ promises.high_pass_filter = node.config_gateway.config_set_high_pass_filter_80(mac, parseInt(config.high_pass_filter_80));
928
+ }
929
+ if(config.measurement_mode_80_active){
930
+ promises.measurement_mode = node.config_gateway.config_set_measurement_mode_80(mac, parseInt(config.measurement_mode_80));
931
+ }
932
+ if(config.on_request_timeout_80_active){
933
+ promises.on_request_timeout = node.config_gateway.config_set_filters_80(mac, parseInt(config.on_request_timeout_80));
934
+ }
935
+ if(config.deadband_80_active){
936
+ promises.deadband = node.config_gateway.config_set_deadband_80(mac, parseInt(config.deadband_80));
937
+ }
938
+ if(config.led_alert_mode_84_active){
939
+ promises.led_alert_mode_84 = node.config_gateway.config_set_led_alert_mode_84(mac, parseInt(config.led_alert_mode_84));
940
+ }
941
+ if(config.led_accelerometer_threshold_84_active){
942
+ promises.led_accelerometer_threshold_84 = node.config_gateway.config_set_led_accelerometer_threshold_84(mac, parseInt(config.led_accelerometer_threshold_84));
943
+ }
944
+ if(config.led_velocity_threshold_84_active){
945
+ promises.led_velocity_threshold_84 = node.config_gateway.config_set_led_velocity_threshold_84(mac, parseInt(config.led_velocity_threshold_84));
946
+ }
947
+ if(config.acceleration_interrupt_threshold_84_active){
948
+ promises.acceleration_interrupt_threshold_84 = node.config_gateway.config_set_acceleration_interrupt_threshold_84(mac, parseInt(config.acceleration_interrupt_threshold_84));
949
+ }
950
+ if(config.payload_length_80_active){
951
+ promises.payload_length_80 = node.config_gateway.config_set_payload_length_80(mac, parseInt(config.payload_length_80));
952
+ }
953
+ if(config.set_rtc_101){
954
+ promises.set_rtc_101 = node.config_gateway.config_set_rtc_101(mac);
955
+ }
956
+ break;
897
957
  }
898
958
  }
899
959
  // These sensors listed in original_otf_devices use a different OTF code.
@@ -925,7 +985,7 @@ module.exports = function(RED) {
925
985
  if(name != 'finish') success[name] = true;
926
986
  else{
927
987
  // #OTF
928
- node.send({topic: 'Config Results', payload: success, time: Date.now()});
988
+ node.send({topic: 'Config Results', payload: success, time: Date.now(), addr: mac});
929
989
  top_fulfill(success);
930
990
  }
931
991
  }).catch((err) => {