@ncd-io/node-red-enterprise-sensors 1.2.3 → 1.4.0

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.
@@ -160,7 +160,7 @@ module.exports = class WirelessSensor{
160
160
  }
161
161
  }
162
162
  // #OTF
163
- var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,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,120,180,181,202,217,519,520,521,531,535,537,538,539,540,1010,1011];
163
+ var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,120,121,122,180,181,202,217,519,520,521,531,535,537,538,539,540,1010,1011];
164
164
  var device_type = msbLsb(frame.data[6], frame.data[7]);
165
165
  // var device_type = frame.data[7];
166
166
 
@@ -214,12 +214,24 @@ module.exports = class WirelessSensor{
214
214
  };
215
215
 
216
216
  if(mode === 'FLY' && frame.data.length > 12 && typeof this.sensor_types[data.sensor_type].parse_fly == 'function'){
217
- this.sensor_pool[frame.mac].reported_config = this.sensor_types[data.sensor_type].parse_fly(frame.data);
217
+ try{
218
+ this.sensor_pool[frame.mac].reported_config = this.sensor_types[data.sensor_type].parse_fly(frame.data);
219
+ } catch(error) {
220
+ console.log('Error detect in parse_fly initiated by FLY message');
221
+ console.log(error);
222
+ this.sensor_pool[frame.mac].reported_config = "Error parsing reported config. See log for details."
223
+ }
218
224
  }else if(mode === 'OTF' && frame.data.length > 12 && typeof this.sensor_types[data.sensor_type].parse_fly == 'function'){
219
225
  // restructure and add dead bytes to match FLY message so we only need one parser.
220
226
  // If we ever need to add any of the additional information of this packet we will need to rebuild to match
221
- frame.data.splice(2,0,frame.data[5],0);
222
- this.sensor_pool[frame.mac].reported_config = this.sensor_types[data.sensor_type].parse_fly(frame.data);
227
+ try{
228
+ frame.data.splice(2,0,frame.data[5],0);
229
+ this.sensor_pool[frame.mac].reported_config = this.sensor_types[data.sensor_type].parse_fly(frame.data);
230
+ } catch(error){
231
+ console.log('Error detect in parse_fly initiated by OTF message');
232
+ console.log(error);
233
+ this.sensor_pool[frame.mac].reported_config = "Error parsing reported config. See log for details."
234
+ }
223
235
  }else if(mode === 'ACK'){
224
236
  this.sensor_pool[frame.mac].status = data.result;
225
237
  if(data.data.length){
@@ -322,7 +334,7 @@ module.exports = class WirelessSensor{
322
334
  };
323
335
 
324
336
  // #OTF
325
- var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,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,120,180,181,202,217,519,520,521,531,535,537,538,539,540,1010,1011];
337
+ var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,120,121,122,180,181,202,217,519,520,521,531,535,537,538,539,540,1010,1011];
326
338
  if(otf_devices.includes(parsed.sensor_type)){
327
339
  // If the message says FLY and there is not FLY timer in progress.
328
340
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -744,7 +756,7 @@ module.exports = class WirelessSensor{
744
756
  data: payload.slice(8)
745
757
  };
746
758
  // #OTF
747
- }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){
759
+ }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 == 103 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 117 || 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){
748
760
  parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
749
761
  if(!parsed.sensor_data){
750
762
  return;
@@ -780,6 +792,12 @@ module.exports = class WirelessSensor{
780
792
  let packet = [245, 58, 0, 0, 0].concat(Array.prototype.slice.call(manifest));
781
793
  return this.config_send(sensor_mac, packet);
782
794
  }
795
+ firmware_send_manifest_v13(sensor_mac, manifest){
796
+ console.log('firmware_send_manifest_v13');
797
+ // sensor_mac = "00:00:00:00:00:00:ff:ff";
798
+ let packet = [245, 58, 0, 0, 0].concat(Array.prototype.slice.call(manifest));
799
+ return this.firmware_send_v13(sensor_mac, packet, {}, 7000, 70, true);
800
+ }
783
801
  firmware_send_chunk(sensor_mac, offset, chunk){
784
802
  console.log('firmware_send_chunk');
785
803
  // sensor_mac = "00:00:00:00:00:00:ff:ff";
@@ -1358,6 +1376,12 @@ module.exports = class WirelessSensor{
1358
1376
  console.log(packet);
1359
1377
  return this.config_send(sensor_mac, packet);
1360
1378
  }
1379
+ config_set_sample_rate_108(sensor_mac, value){
1380
+ console.log('config_set_sample_rate_108');
1381
+ var packet = [244, 57, 0, 0, 0, value];
1382
+ console.log(packet);
1383
+ return this.config_send(sensor_mac, packet);
1384
+ }
1361
1385
  config_set_sample_rate_108(sensor_mac, value){
1362
1386
  console.log('config_set_sample_rate_108');
1363
1387
  var packet = [244, 57, 0, 0, 0, value];
@@ -1975,6 +1999,12 @@ module.exports = class WirelessSensor{
1975
1999
  console.log(packet);
1976
2000
  return this.config_send(sensor_mac, packet);
1977
2001
  }
2002
+ config_set_enable_filtering_110(sensor_mac, value){
2003
+ console.log('config_set_enable_filtering_110');
2004
+ let packet = [244, 79, 0, 0, 101, 13, value];
2005
+ console.log(packet);
2006
+ return this.config_send(sensor_mac, packet);
2007
+ }
1978
2008
  config_set_to_always_on_120(sensor_mac){
1979
2009
  console.log('config_set_to_always_on_120');
1980
2010
  let packet = [244, 10, 0, 0, 0, 1];
@@ -1999,20 +2029,58 @@ module.exports = class WirelessSensor{
1999
2029
  console.log(packet);
2000
2030
  return this.config_send(sensor_mac, packet);
2001
2031
  }
2032
+ config_set_wood_type_121(sensor_mac, value){
2033
+ console.log('config_set_wood_type_121');
2034
+ let packet = [244, 10, 0, 0, 121, value];
2035
+ console.log(packet);
2036
+ return this.config_send(sensor_mac, packet);
2037
+ }
2038
+ config_set_quality_of_service_121(sensor_mac, value){
2039
+ console.log('config_set_quality_of_service_121');
2040
+ var packet = [247, 52, 0, 0, 0, value];
2041
+ console.log(packet);
2042
+ return this.config_send(sensor_mac, packet);
2043
+ }
2002
2044
  config_set_tare_the_scale_217(sensor_mac){
2003
- console.log('config_set_tare_the_scale_217');
2004
- var packet = [244, 32, 0, 0, 26];
2005
- console.log(packet);
2006
- return this.config_send(sensor_mac, packet);
2007
- }
2008
- config_set_weight_calib_217(sensor_mac, value){
2009
- console.log('config_set_weight_calib_217');
2010
- var packet = [244, 33, 0, 0, 26];
2011
- let value_ = int2Bytes((value*100), 4);
2012
- packet.push(...value_);
2013
- console.log(packet);
2014
- return this.config_send(sensor_mac, packet);
2015
- }
2045
+ console.log('config_set_tare_the_scale_217');
2046
+ var packet = [244, 32, 0, 0, 26];
2047
+ console.log(packet);
2048
+ return this.config_send(sensor_mac, packet);
2049
+ }
2050
+ config_set_weight_calib_217(sensor_mac, value){
2051
+ console.log('config_set_weight_calib_217');
2052
+ var packet = [244, 33, 0, 0, 26];
2053
+ let value_ = int2Bytes((value*100), 4);
2054
+ packet.push(...value_);
2055
+ console.log(packet);
2056
+ return this.config_send(sensor_mac, packet);
2057
+ }
2058
+ config_set_pressure_limit_26(sensor_mac, value){
2059
+ console.log('config_set_pressure_limit_26');
2060
+ var packet = [244, 82, 0, 0, 26];
2061
+ let value_ = int2Bytes(value, 2);
2062
+ packet.push(...value_);
2063
+ console.log(packet);
2064
+ return this.config_send(sensor_mac, packet);
2065
+ }
2066
+ config_set_auto_pressure_check_26(sensor_mac, value){
2067
+ console.log('config_set_auto_pressure_check_26');
2068
+ var packet = [244, 80, 0, 0, 26, value];
2069
+ console.log(packet);
2070
+ return this.config_send(sensor_mac, packet);
2071
+ }
2072
+ config_set_fsr_420ma(sensor_mac, value){
2073
+ console.log('config_set_fsr_420ma');
2074
+ var packet = [244, 64, 0, 0, 45, value];
2075
+ console.log(packet);
2076
+ return this.config_send(sensor_mac, packet);
2077
+ }
2078
+ config_set_always_on_420ma(sensor_mac, value){
2079
+ console.log('config_set_always_on_420ma');
2080
+ var packet = [244, 81, 0, 0, 88, value];
2081
+ console.log(packet);
2082
+ return this.config_send(sensor_mac, packet);
2083
+ }
2016
2084
  config_get_delay(sensor_mac){
2017
2085
  return new Promise((fulfill, reject) => {
2018
2086
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -2217,9 +2285,148 @@ module.exports = class WirelessSensor{
2217
2285
  delete this.queue;
2218
2286
  this.queue = new Queue(1);
2219
2287
  }
2288
+ firmware_send_chunk_v13(sensor_mac, offset, chunk){
2289
+ console.log('firmware_send_chunk');
2290
+ // sensor_mac = "00:00:00:00:00:00:ff:ff";
2291
+ let packet = [245, 59, 0, 0, 0].concat(offset, Array.prototype.slice.call(chunk));
2292
+ // console.log(packet);
2293
+ return this.firmware_send_v13(sensor_mac, packet);
2294
+ }
2295
+ firmware_read_last_chunk_segment(sensor_mac){
2296
+ console.log('firmware_read_last_chunk_segment');
2297
+ let packet = [245, 61, 0, 0, 0];
2298
+ return this.config_send(sensor_mac, packet);
2299
+ }
2300
+ clear_queue_except_last(){
2301
+ const pending = this.queue.pendingPromises;
2302
+ const temp_queue = this.queue.queue;
2303
+ const last_promise = [temp_queue.pop()];
2304
+
2305
+ console.log('MARK 1');
2306
+ console.log(last_promise);
2307
+
2308
+ // this.queue.queue = last_promise;
2309
+ // this.queue.pendingPromises = [];
2310
+ // this.queue.activeCount = 0;
2311
+
2312
+ console.log('MARK 2');
2313
+ console.log(pending);
2314
+
2315
+ // console.log(temp_queue);
2316
+ // console.log(temp_queue[0]);
2317
+ // while(this.queue.queue.length > 1){
2318
+ // let clear_promise = this.queue.queue.shift();
2319
+ // clear_promise.reject({
2320
+ // res: 'Promise rejected by queue clearing',
2321
+ // error: 'Promise rejected by queue clearing'
2322
+ // });
2323
+ // };
2324
+ // temp_queue.forEach(promise => {
2325
+ // // promise.reject(new Error('Promise rejected by queue clearing'));
2326
+ // promise.reject({
2327
+ // res: 'Promise rejected by queue clearing',
2328
+ // error: 'Promise rejected by queue clearing'
2329
+ // });
2330
+ // });
2331
+ }
2332
+ firmware_send_v13(sensor_mac, data, opts, cmd_timeout = 7000, cmd_delay = 140, manifest = false){
2333
+ var that = this;
2334
+ return new Promise((fulfill, reject) => {
2335
+ if(manifest){
2336
+ that.queue.add(() => {
2337
+ return new Promise((f, r) => {
2338
+ setTimeout(f, 500);
2339
+ });
2340
+ });
2341
+ };
2342
+ that.queue.add(() => {
2343
+ return new Promise((f, r) => {
2344
+ var tout;
2345
+ function fail(error){
2346
+ console.log('In Fail');
2347
+ // that._emitter.removeListener('config_ack-'+sensor_mac, pass);
2348
+ clearTimeout(tout);
2349
+ reject({
2350
+ error: error,
2351
+ sent: [mac2bytes(sensor_mac), data, opts]
2352
+ });
2353
+ f();
2354
+ }
2355
+ function pass(packet){
2356
+ clearTimeout(tout);
2357
+ // that._emitter.removeListener('config_error-'+sensor_mac, fail);
2358
+ packet.sent = data;
2359
+ fulfill(packet);
2360
+ f();
2361
+ };
2362
+ let retry_count = 0;
2363
+ const max_retries = 3;
2364
+ function attempt_transmission(){
2365
+ that.send.transmit_request(mac2bytes(sensor_mac), data, opts).then(function(frame){
2366
+ if(frame.hasError){
2367
+ console.log('FRAME FAILED DUE TO FAIL FLAG');
2368
+ if(retry_count < max_retries) {
2369
+ retry_count++;
2370
+ console.log(`Retrying (attempt ${retry_count}) due to failed status`);
2371
+ clearTimeout(tout);
2372
+ startTimeout();
2373
+ attempt_transmission();
2374
+ }else{
2375
+ fail('Transmit Status indicated error');
2376
+ // reject({
2377
+ // error: 'Transmit Status indicated error',
2378
+ // sent: [mac2bytes(sensor_mac), data, opts]
2379
+ // });
2380
+ };
2381
+ }else{
2382
+ pass(frame);
2383
+ }
2384
+ }).catch((err) => {
2385
+ if(retry_count < max_retries) {
2386
+ retry_count++;
2387
+ console.log(`Retrying (attempt ${retry_count}) due to failed status`);
2388
+ attempt_transmission();
2389
+ }else{
2390
+ console.log('In CATCH');
2391
+ // reject({
2392
+ // error: err,
2393
+ // sent: [mac2bytes(sensor_mac), data, opts]
2394
+ // });
2395
+ fail(err);
2396
+ }
2397
+ }).then();
2398
+ }
2399
+ // that._emitter.once('config_ack-'+sensor_mac, pass);
2400
+ // that._emitter.once('config_error-'+sensor_mac, fail);
2401
+ function startTimeout(){
2402
+ tout = setTimeout(() => {
2403
+ console.log('In Timeout');
2404
+ fail('Transmit Request Timed Out');
2405
+ }, cmd_timeout);
2406
+ }
2407
+ attempt_transmission();
2408
+ startTimeout();
2409
+ });
2410
+ });
2411
+ this.queue.add(() => {
2412
+ return new Promise((f, r) => {
2413
+ // NOTE: This timeout is required to allow the sensor to process and write to memory before a new chunk is transmitted.
2414
+ setTimeout(f, cmd_delay);
2415
+ });
2416
+ });
2417
+ });
2418
+ };
2220
2419
  config_send(sensor_mac, data, opts, cmd_timeout = 1500){
2221
2420
  var that = this;
2222
2421
  return new Promise((fulfill, reject) => {
2422
+ // Note: This code adds a delay before sending any communications. This is not generally required, but has shown increased reliability
2423
+ // in some cases when used directly after changing modem module settings such as entering FON network ID. Leaving it here for future reference or quick add during support.
2424
+ // consider adding a pre-time command parameter to allow this as in the v13 firmware send function.
2425
+ // that.queue.add(() => {
2426
+ // return new Promise((f, r) => {
2427
+ // setTimeout(f, 500);
2428
+ // });
2429
+ // });
2223
2430
  that.queue.add(() => {
2224
2431
  return new Promise((f, r) => {
2225
2432
  var tout;
@@ -2271,12 +2478,107 @@ module.exports = class WirelessSensor{
2271
2478
  }).then();
2272
2479
  });
2273
2480
  });
2481
+ this.queue.add(() => {
2482
+ return new Promise((f, r) => {
2483
+ setTimeout(f, 250);
2484
+ });
2485
+ });
2486
+ });
2487
+ }
2488
+ queue_bridge_query(sensor_mac, data, meta = null, opts){
2489
+ var that = this;
2490
+ if(!globalDevices.hasOwnProperty(sensor_mac)){
2491
+ globalDevices[sensor_mac] = {bridge: true, command_queue: []};
2492
+ }
2493
+ // if(!Object.hasOwn(node._gateway_node.sensor_list[msg.payload.address], 'command_queue')){
2494
+ // if(!globalDevices[sensor_mac].hasOwnProperty('command_queue')){
2495
+ // globalDevices[sensor_mac].command_queue = [{'command': data, 'meta': meta}];
2496
+ // }else{
2497
+ globalDevices[sensor_mac].command_queue.push({'command': data, 'meta': meta});
2498
+ // }
2499
+
2500
+ return new Promise((fulfill, reject) => {
2501
+ that.queue.add(() => {
2502
+ return new Promise((f, r) => {
2503
+ var tout;
2504
+ function fail(response){
2505
+ that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
2506
+ clearTimeout(tout);
2507
+
2508
+ if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
2509
+ globalDevices[sensor_mac].command_queue.shift();
2510
+ }
2511
+ reject({
2512
+ err: response,
2513
+ sent: [mac2bytes(sensor_mac), data, opts]
2514
+ });
2515
+ f();
2516
+ }
2517
+ function pass(response){
2518
+ clearTimeout(tout);
2519
+
2520
+ that._emitter.emit('converter_response', response);
2521
+ that._emitter.emit('converter_response-'+sensor_mac, response);
2522
+
2523
+
2524
+ if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
2525
+ globalDevices[sensor_mac].command_queue.shift();
2526
+ }
2527
+ that._emitter.removeListener('converter_error-'+sensor_mac, fail);
2528
+ fulfill(response);
2529
+ f();
2530
+ // that._emitter.
2531
+ };
2532
+
2533
+ that._emitter.once('converter_ack-'+sensor_mac, pass);
2534
+ that._emitter.once('converter_error-'+sensor_mac, fail);
2535
+ tout = setTimeout(() => {
2536
+ that._emitter.removeListener('converter_error-'+sensor_mac, fail);
2537
+ that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
2538
+
2539
+ if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
2540
+ globalDevices[sensor_mac].command_queue.shift();
2541
+ };
2542
+ if(sensor_mac == '00:00:00:00:00:00:FF:FF'){
2543
+ reject({
2544
+ res: 'Broadcast mode, no target device',
2545
+ sent: [mac2bytes(sensor_mac), data, opts]
2546
+ });
2547
+ }else{
2548
+ reject({
2549
+ err: 'Wireless Converter did not respond',
2550
+ sent: [mac2bytes(sensor_mac), data, opts]
2551
+ });
2552
+ };
2553
+
2554
+ f();
2555
+ }, 1500);
2556
+ that.send.transmit_request(mac2bytes(sensor_mac), data, opts).then().catch((err) => {
2557
+ that._emitter.removeListener('converter_error-'+sensor_mac, fail);
2558
+ that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
2559
+ reject({
2560
+ err: err,
2561
+ sent: [mac2bytes(sensor_mac), data, opts]
2562
+ });
2563
+ f();
2564
+ }).then();
2565
+ });
2566
+ });
2274
2567
  this.queue.add(() => {
2275
2568
  return new Promise((f, r) => {
2276
2569
  setTimeout(f, 500);
2277
2570
  });
2278
2571
  });
2279
2572
  });
2573
+ };
2574
+ prepare_bridge_query(sensor_mac, commands){
2575
+ commands.forEach((command) => {
2576
+ if(command.hasOwnProperty('meta')){
2577
+ this.queue_bridge_query(sensor_mac, command.command, command.meta);
2578
+ }else{
2579
+ this.queue_bridge_query(sensor_mac, command.command);
2580
+ }
2581
+ });
2280
2582
  }
2281
2583
  queue_bridge_query(sensor_mac, data, meta = null, opts){
2282
2584
  var that = this;
@@ -3312,8 +3614,8 @@ function sensor_types(parent){
3312
3614
  return {
3313
3615
  adc1: adc1,
3314
3616
  adc2: adc2,
3315
- mA1: parseFloat((adc1 * 0.0006863).toFixed(2)),
3316
- mA2: parseFloat((adc2 * 0.0006863).toFixed(2))
3617
+ mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
3618
+ mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
3317
3619
  };
3318
3620
  },
3319
3621
  'parse_fly': (frame) => {
@@ -3748,11 +4050,66 @@ function sensor_types(parent){
3748
4050
  if(payload[8] === 1){
3749
4051
  var deviceAddr = mac;
3750
4052
  var firmware = payload[1];
3751
- var hour = payload[11];
3752
- var minute = payload[12];
3753
- var expected_packets = payload[15];
3754
- var current_packet = payload[16];
3755
- var sdata_start = 17;
4053
+
4054
+ if(firmware > 25){
4055
+ var mode = payload[8];
4056
+ var odr = msbLsb(payload[9], payload[10]);
4057
+ var en_axis = payload[11] & 7;
4058
+ var fsr = payload[11] >> 5;
4059
+ var hour = payload[12];
4060
+ var minute = payload[13];
4061
+ var device_temp = msbLsb(payload[14], payload[15])/100;
4062
+ var expected_packets = payload[16];
4063
+ var current_packet = payload[17];
4064
+ var sdata_start = 18;
4065
+
4066
+ } else{
4067
+ var mode = payload[8];
4068
+ var odr = payload[9];
4069
+ var en_axis = payload[10] & 7;
4070
+ var fsr = payload[10] >> 5;
4071
+ var hour = payload[11];
4072
+ var minute = payload[12];
4073
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4074
+ var expected_packets = payload[15];
4075
+ var current_packet = payload[16];
4076
+ var sdata_start = 17;
4077
+
4078
+ switch(odr){
4079
+ case 6:
4080
+ odr = 50;
4081
+ break;
4082
+ case 7:
4083
+ odr = 100;
4084
+ break;
4085
+ case 8:
4086
+ odr = 200;
4087
+ break;
4088
+ case 9:
4089
+ odr = 400;
4090
+ break;
4091
+ case 10:
4092
+ odr = 800;
4093
+ break;
4094
+ case 11:
4095
+ odr = 1600;
4096
+ break;
4097
+ case 12:
4098
+ odr = 3200;
4099
+ break;
4100
+ case 13:
4101
+ odr = 6400;
4102
+ break;
4103
+ case 14:
4104
+ odr = 12800;
4105
+ break;
4106
+ case 15:
4107
+ odr = 25600;
4108
+ break;
4109
+ default:
4110
+ odr = 0;
4111
+ }
4112
+ }
3756
4113
 
3757
4114
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
3758
4115
  if(expected_packets != 1){
@@ -3781,109 +4138,26 @@ function sensor_types(parent){
3781
4138
  return;
3782
4139
  } else{
3783
4140
 
3784
- var mode = payload[8];
3785
- var odr = payload[9];
3786
- var en_axis = payload[10] & 7;
3787
- var fsr = payload[10] >> 5;
3788
- var device_temp = msbLsb(payload[13], payload[14])/100;
3789
-
3790
-
3791
- switch(odr){
3792
- case 6:
3793
- odr = 50;
3794
- break;
3795
- case 7:
3796
- odr = 100;
3797
- break;
3798
- case 8:
3799
- odr = 200;
3800
- break;
3801
- case 9:
3802
- odr = 400;
3803
- break;
3804
- case 10:
3805
- odr = 800;
3806
- break;
3807
- case 11:
3808
- odr = 1600;
3809
- break;
3810
- case 12:
3811
- odr = 3200;
3812
- break;
3813
- case 13:
3814
- odr = 6400;
3815
- break;
3816
- case 14:
3817
- odr = 12800;
3818
- break;
3819
- case 15:
3820
- odr = 25600;
3821
- break;
3822
- default:
3823
- odr = 0;
3824
- }
3825
-
3826
- globalDevices[deviceAddr] = {
3827
- // stream_size: expected_packets,
3828
- data: {},
3829
- odr: odr,
3830
- mo: mode,
3831
- en_axis: en_axis,
3832
- fsr: fsr,
3833
- hour: hour,
3834
- minute: minute,
3835
- device_temp: device_temp,
3836
- }
3837
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3838
- return;
3839
- }
3840
- }
3841
- else{
3842
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3843
- }
3844
- }
3845
- else{
3846
- var mode = payload[8];
3847
- var odr = payload[9];
3848
- var en_axis = payload[10] & 7;
3849
- var fsr = payload[10] >> 5;
3850
- var device_temp = msbLsb(payload[13], payload[14])/100;
3851
-
3852
-
3853
- switch(odr){
3854
- case 6:
3855
- odr = 50;
3856
- break;
3857
- case 7:
3858
- odr = 100;
3859
- break;
3860
- case 8:
3861
- odr = 200;
3862
- break;
3863
- case 9:
3864
- odr = 400;
3865
- break;
3866
- case 10:
3867
- odr = 800;
3868
- break;
3869
- case 11:
3870
- odr = 1600;
3871
- break;
3872
- case 12:
3873
- odr = 3200;
3874
- break;
3875
- case 13:
3876
- odr = 6400;
3877
- break;
3878
- case 14:
3879
- odr = 12800;
3880
- break;
3881
- case 15:
3882
- odr = 25600;
3883
- break;
3884
- default:
3885
- odr = 0;
3886
- }
4141
+ globalDevices[deviceAddr] = {
4142
+ // stream_size: expected_packets,
4143
+ data: {},
4144
+ odr: odr,
4145
+ mo: mode,
4146
+ en_axis: en_axis,
4147
+ fsr: fsr,
4148
+ hour: hour,
4149
+ minute: minute,
4150
+ device_temp: device_temp,
4151
+ }
4152
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4153
+ return;
4154
+ }
4155
+ }
4156
+ else{
4157
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4158
+ }
4159
+ }
4160
+ else{
3887
4161
 
3888
4162
  globalDevices[deviceAddr] = {
3889
4163
  // stream_size: expected_packets,
@@ -4017,48 +4291,6 @@ function sensor_types(parent){
4017
4291
  }
4018
4292
  }else{
4019
4293
 
4020
- var mode = payload[8];
4021
- var odr = payload[9];
4022
- var en_axis = payload[10] & 7;
4023
- var fsr = payload[10] >> 5;
4024
- var device_temp = msbLsb(payload[13], payload[14])/100;
4025
-
4026
-
4027
- switch(odr){
4028
- case 6:
4029
- odr = 50;
4030
- break;
4031
- case 7:
4032
- odr = 100;
4033
- break;
4034
- case 8:
4035
- odr = 200;
4036
- break;
4037
- case 9:
4038
- odr = 400;
4039
- break;
4040
- case 10:
4041
- odr = 800;
4042
- break;
4043
- case 11:
4044
- odr = 1600;
4045
- break;
4046
- case 12:
4047
- odr = 3200;
4048
- break;
4049
- case 13:
4050
- odr = 6400;
4051
- break;
4052
- case 14:
4053
- odr = 12800;
4054
- break;
4055
- case 15:
4056
- odr = 25600;
4057
- break;
4058
- default:
4059
- odr = 0;
4060
- }
4061
-
4062
4294
  globalDevices[deviceAddr] = {
4063
4295
  // stream_size: expected_packets,
4064
4296
  data: {},
@@ -4369,11 +4601,66 @@ function sensor_types(parent){
4369
4601
  if(payload[8] === 1){
4370
4602
  var deviceAddr = mac;
4371
4603
  var firmware = payload[1];
4372
- var hour = payload[11];
4373
- var minute = payload[12];
4374
- var expected_packets = payload[15];
4375
- var current_packet = payload[16];
4376
- var sdata_start = 17;
4604
+
4605
+ if(firmware > 25){
4606
+ var mode = payload[8];
4607
+ var odr = msbLsb(payload[9], payload[10]);
4608
+ var en_axis = payload[11] & 7;
4609
+ var fsr = payload[11] >> 5;
4610
+ var hour = payload[12];
4611
+ var minute = payload[13];
4612
+ var device_temp = msbLsb(payload[14], payload[15])/100;
4613
+ var expected_packets = payload[16];
4614
+ var current_packet = payload[17];
4615
+ var sdata_start = 18;
4616
+
4617
+ }else{
4618
+ var mode = payload[8];
4619
+ var odr = payload[9];
4620
+ var en_axis = payload[10] & 7;
4621
+ var fsr = payload[10] >> 5;
4622
+ var hour = payload[11];
4623
+ var minute = payload[12];
4624
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4625
+ var expected_packets = payload[15];
4626
+ var current_packet = payload[16];
4627
+ var sdata_start = 17;
4628
+
4629
+ switch(odr){
4630
+ case 6:
4631
+ odr = 50;
4632
+ break;
4633
+ case 7:
4634
+ odr = 100;
4635
+ break;
4636
+ case 8:
4637
+ odr = 200;
4638
+ break;
4639
+ case 9:
4640
+ odr = 400;
4641
+ break;
4642
+ case 10:
4643
+ odr = 800;
4644
+ break;
4645
+ case 11:
4646
+ odr = 1600;
4647
+ break;
4648
+ case 12:
4649
+ odr = 3200;
4650
+ break;
4651
+ case 13:
4652
+ odr = 6400;
4653
+ break;
4654
+ case 14:
4655
+ odr = 12800;
4656
+ break;
4657
+ case 15:
4658
+ odr = 25600;
4659
+ break;
4660
+ default:
4661
+ odr = 0;
4662
+ }
4663
+ }
4377
4664
 
4378
4665
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
4379
4666
  if(expected_packets != 1){
@@ -4401,46 +4688,6 @@ function sensor_types(parent){
4401
4688
  if(current_packet != 1){
4402
4689
  return;
4403
4690
  } else{
4404
- var mode = payload[8];
4405
- var odr = payload[9];
4406
- var en_axis = payload[10] & 7;
4407
- var fsr = payload[10] >> 5;
4408
- var device_temp = msbLsb(payload[13], payload[14])/100;
4409
-
4410
- switch(odr){
4411
- case 6:
4412
- odr = 50;
4413
- break;
4414
- case 7:
4415
- odr = 100;
4416
- break;
4417
- case 8:
4418
- odr = 200;
4419
- break;
4420
- case 9:
4421
- odr = 400;
4422
- break;
4423
- case 10:
4424
- odr = 800;
4425
- break;
4426
- case 11:
4427
- odr = 1600;
4428
- break;
4429
- case 12:
4430
- odr = 3200;
4431
- break;
4432
- case 13:
4433
- odr = 6400;
4434
- break;
4435
- case 14:
4436
- odr = 12800;
4437
- break;
4438
- case 15:
4439
- odr = 25600;
4440
- break;
4441
- default:
4442
- odr = 0;
4443
- }
4444
4691
 
4445
4692
  globalDevices[deviceAddr] = {
4446
4693
  // stream_size: expected_packets,
@@ -4462,63 +4709,22 @@ function sensor_types(parent){
4462
4709
  }
4463
4710
  }
4464
4711
  else{
4465
- var mode = payload[8];
4466
- var odr = payload[9];
4467
- var en_axis = payload[10] & 7;
4468
- var fsr = payload[10] >> 5;
4469
- var device_temp = msbLsb(payload[13], payload[14])/100;
4470
4712
 
4471
-
4472
- switch(odr){
4473
- case 6:
4474
- odr = 50;
4475
- break;
4476
- case 7:
4477
- odr = 100;
4478
- break;
4479
- case 8:
4480
- odr = 200;
4481
- break;
4482
- case 9:
4483
- odr = 400;
4484
- break;
4485
- case 10:
4486
- odr = 800;
4487
- break;
4488
- case 11:
4489
- odr = 1600;
4490
- break;
4491
- case 12:
4492
- odr = 3200;
4493
- break;
4494
- case 13:
4495
- odr = 6400;
4496
- break;
4497
- case 14:
4498
- odr = 12800;
4499
- break;
4500
- case 15:
4501
- odr = 25600;
4502
- break;
4503
- default:
4504
- odr = 0;
4505
- }
4506
-
4507
- globalDevices[deviceAddr] = {
4508
- // stream_size: expected_packets,
4509
- data: {},
4510
- odr: odr,
4511
- mo: mode,
4512
- en_axis: en_axis,
4513
- fsr: fsr,
4514
- hour: hour,
4515
- minute: minute,
4516
- device_temp: device_temp,
4517
- }
4518
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4519
- }
4520
- if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
4521
- var raw_data = new Array();
4713
+ globalDevices[deviceAddr] = {
4714
+ // stream_size: expected_packets,
4715
+ data: {},
4716
+ odr: odr,
4717
+ mo: mode,
4718
+ en_axis: en_axis,
4719
+ fsr: fsr,
4720
+ hour: hour,
4721
+ minute: minute,
4722
+ device_temp: device_temp,
4723
+ }
4724
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4725
+ }
4726
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
4727
+ var raw_data = new Array();
4522
4728
 
4523
4729
  for(const packet in globalDevices[deviceAddr].data){
4524
4730
  raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
@@ -4626,7 +4832,6 @@ function sensor_types(parent){
4626
4832
  var fft_concat_obj = {
4627
4833
  probe: probe,
4628
4834
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
4629
- probe: probe,
4630
4835
  mac_address: deviceAddr,
4631
4836
  en_axis: globalDevices[deviceAddr].en_axis,
4632
4837
  fsr: fsr_text,
@@ -4647,47 +4852,6 @@ function sensor_types(parent){
4647
4852
  return;
4648
4853
  }
4649
4854
  }else{
4650
- var mode = payload[8];
4651
- var odr = payload[9];
4652
- var en_axis = payload[10] & 7;
4653
- var fsr = payload[10] >> 5;
4654
- var device_temp = msbLsb(payload[13], payload[14])/100;
4655
-
4656
-
4657
- switch(odr){
4658
- case 6:
4659
- odr = 50;
4660
- break;
4661
- case 7:
4662
- odr = 100;
4663
- break;
4664
- case 8:
4665
- odr = 200;
4666
- break;
4667
- case 9:
4668
- odr = 400;
4669
- break;
4670
- case 10:
4671
- odr = 800;
4672
- break;
4673
- case 11:
4674
- odr = 1600;
4675
- break;
4676
- case 12:
4677
- odr = 3200;
4678
- break;
4679
- case 13:
4680
- odr = 6400;
4681
- break;
4682
- case 14:
4683
- odr = 12800;
4684
- break;
4685
- case 15:
4686
- odr = 25600;
4687
- break;
4688
- default:
4689
- odr = 0;
4690
- }
4691
4855
 
4692
4856
  globalDevices[deviceAddr] = {
4693
4857
  // stream_size: expected_packets,
@@ -5175,11 +5339,66 @@ function sensor_types(parent){
5175
5339
  if(payload[8] === 1){
5176
5340
  var deviceAddr = mac;
5177
5341
  var firmware = payload[1];
5178
- var hour = payload[11];
5179
- var minute = payload[12];
5180
- var expected_packets = payload[15];
5181
- var current_packet = payload[16];
5182
- var sdata_start = 17;
5342
+
5343
+ if(firmware > 25){
5344
+ var mode = payload[8];
5345
+ var odr = msbLsb(payload[9], payload[10]);
5346
+ var en_axis = payload[11] & 7;
5347
+ var fsr = payload[11] >> 5;
5348
+ var hour = payload[12];
5349
+ var minute = payload[13];
5350
+ var device_temp = msbLsb(payload[14], payload[15])/100;
5351
+ var expected_packets = payload[16];
5352
+ var current_packet = payload[17];
5353
+ var sdata_start = 18;
5354
+
5355
+ } else{
5356
+ var mode = payload[8];
5357
+ var odr = payload[9];
5358
+ var en_axis = payload[10] & 7;
5359
+ var fsr = payload[10] >> 5;
5360
+ var hour = payload[11];
5361
+ var minute = payload[12];
5362
+ var device_temp = msbLsb(payload[13], payload[14])/100;
5363
+ var expected_packets = payload[15];
5364
+ var current_packet = payload[16];
5365
+ var sdata_start = 17;
5366
+
5367
+ switch(odr){
5368
+ case 6:
5369
+ odr = 50;
5370
+ break;
5371
+ case 7:
5372
+ odr = 100;
5373
+ break;
5374
+ case 8:
5375
+ odr = 200;
5376
+ break;
5377
+ case 9:
5378
+ odr = 400;
5379
+ break;
5380
+ case 10:
5381
+ odr = 800;
5382
+ break;
5383
+ case 11:
5384
+ odr = 1600;
5385
+ break;
5386
+ case 12:
5387
+ odr = 3200;
5388
+ break;
5389
+ case 13:
5390
+ odr = 6400;
5391
+ break;
5392
+ case 14:
5393
+ odr = 12800;
5394
+ break;
5395
+ case 15:
5396
+ odr = 25600;
5397
+ break;
5398
+ default:
5399
+ odr = 0;
5400
+ }
5401
+ }
5183
5402
 
5184
5403
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
5185
5404
  if(expected_packets != 1){
@@ -5208,48 +5427,6 @@ function sensor_types(parent){
5208
5427
  return;
5209
5428
  } else{
5210
5429
 
5211
- var mode = payload[8];
5212
- var odr = payload[9];
5213
- var en_axis = payload[10] & 7;
5214
- var fsr = payload[10] >> 5;
5215
- var device_temp = msbLsb(payload[13], payload[14])/100;
5216
-
5217
-
5218
- switch(odr){
5219
- case 6:
5220
- odr = 50;
5221
- break;
5222
- case 7:
5223
- odr = 100;
5224
- break;
5225
- case 8:
5226
- odr = 200;
5227
- break;
5228
- case 9:
5229
- odr = 400;
5230
- break;
5231
- case 10:
5232
- odr = 800;
5233
- break;
5234
- case 11:
5235
- odr = 1600;
5236
- break;
5237
- case 12:
5238
- odr = 3200;
5239
- break;
5240
- case 13:
5241
- odr = 6400;
5242
- break;
5243
- case 14:
5244
- odr = 12800;
5245
- break;
5246
- case 15:
5247
- odr = 25600;
5248
- break;
5249
- default:
5250
- odr = 0;
5251
- }
5252
-
5253
5430
  globalDevices[deviceAddr] = {
5254
5431
  // stream_size: expected_packets,
5255
5432
  data: {},
@@ -5270,47 +5447,6 @@ function sensor_types(parent){
5270
5447
  }
5271
5448
  }
5272
5449
  else{
5273
- var mode = payload[8];
5274
- var odr = payload[9];
5275
- var en_axis = payload[10] & 7;
5276
- var fsr = payload[10] >> 5;
5277
- var device_temp = msbLsb(payload[13], payload[14])/100;
5278
-
5279
-
5280
- switch(odr){
5281
- case 6:
5282
- odr = 50;
5283
- break;
5284
- case 7:
5285
- odr = 100;
5286
- break;
5287
- case 8:
5288
- odr = 200;
5289
- break;
5290
- case 9:
5291
- odr = 400;
5292
- break;
5293
- case 10:
5294
- odr = 800;
5295
- break;
5296
- case 11:
5297
- odr = 1600;
5298
- break;
5299
- case 12:
5300
- odr = 3200;
5301
- break;
5302
- case 13:
5303
- odr = 6400;
5304
- break;
5305
- case 14:
5306
- odr = 12800;
5307
- break;
5308
- case 15:
5309
- odr = 25600;
5310
- break;
5311
- default:
5312
- odr = 0;
5313
- }
5314
5450
 
5315
5451
  globalDevices[deviceAddr] = {
5316
5452
  // stream_size: expected_packets,
@@ -5447,48 +5583,6 @@ function sensor_types(parent){
5447
5583
  }
5448
5584
  }else{
5449
5585
 
5450
- var mode = payload[8];
5451
- var odr = payload[9];
5452
- var en_axis = payload[10] & 7;
5453
- var fsr = payload[10] >> 5;
5454
- var device_temp = msbLsb(payload[13], payload[14])/100;
5455
-
5456
-
5457
- switch(odr){
5458
- case 6:
5459
- odr = 50;
5460
- break;
5461
- case 7:
5462
- odr = 100;
5463
- break;
5464
- case 8:
5465
- odr = 200;
5466
- break;
5467
- case 9:
5468
- odr = 400;
5469
- break;
5470
- case 10:
5471
- odr = 800;
5472
- break;
5473
- case 11:
5474
- odr = 1600;
5475
- break;
5476
- case 12:
5477
- odr = 3200;
5478
- break;
5479
- case 13:
5480
- odr = 6400;
5481
- break;
5482
- case 14:
5483
- odr = 12800;
5484
- break;
5485
- case 15:
5486
- odr = 25600;
5487
- break;
5488
- default:
5489
- odr = 0;
5490
- }
5491
-
5492
5586
  globalDevices[deviceAddr] = {
5493
5587
  // stream_size: expected_packets,
5494
5588
  data: {},
@@ -5789,11 +5883,66 @@ function sensor_types(parent){
5789
5883
  if(payload[8] === 1){
5790
5884
  var deviceAddr = mac;
5791
5885
  var firmware = payload[1];
5792
- var hour = payload[11];
5793
- var minute = payload[12];
5794
- var expected_packets = payload[15];
5795
- var current_packet = payload[16];
5796
- var sdata_start = 17;
5886
+
5887
+ if(firmware > 25){
5888
+ var mode = payload[8];
5889
+ var odr = msbLsb(payload[9], payload[10]);
5890
+ var en_axis = payload[11] & 7;
5891
+ var fsr = payload[11] >> 5;
5892
+ var hour = payload[12];
5893
+ var minute = payload[13];
5894
+ var device_temp = msbLsb(payload[14], payload[15])/100;
5895
+ var expected_packets = payload[16];
5896
+ var current_packet = payload[17];
5897
+ var sdata_start = 18;
5898
+
5899
+ } else{
5900
+ var mode = payload[8];
5901
+ var odr = payload[9];
5902
+ var en_axis = payload[10] & 7;
5903
+ var fsr = payload[10] >> 5;
5904
+ var hour = payload[11];
5905
+ var minute = payload[12];
5906
+ var device_temp = msbLsb(payload[13], payload[14])/100;
5907
+ var expected_packets = payload[15];
5908
+ var current_packet = payload[16];
5909
+ var sdata_start = 17;
5910
+
5911
+ switch(odr){
5912
+ case 6:
5913
+ odr = 50;
5914
+ break;
5915
+ case 7:
5916
+ odr = 100;
5917
+ break;
5918
+ case 8:
5919
+ odr = 200;
5920
+ break;
5921
+ case 9:
5922
+ odr = 400;
5923
+ break;
5924
+ case 10:
5925
+ odr = 800;
5926
+ break;
5927
+ case 11:
5928
+ odr = 1600;
5929
+ break;
5930
+ case 12:
5931
+ odr = 3200;
5932
+ break;
5933
+ case 13:
5934
+ odr = 6400;
5935
+ break;
5936
+ case 14:
5937
+ odr = 12800;
5938
+ break;
5939
+ case 15:
5940
+ odr = 25600;
5941
+ break;
5942
+ default:
5943
+ odr = 0;
5944
+ }
5945
+ }
5797
5946
 
5798
5947
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
5799
5948
  if(expected_packets != 1){
@@ -5818,113 +5967,30 @@ function sensor_types(parent){
5818
5967
  }
5819
5968
  // console.log(globalDevices[deviceAddr].data);
5820
5969
  delete globalDevices[deviceAddr];
5821
- if(current_packet != 1){
5822
- return;
5823
- } else{
5824
-
5825
- var mode = payload[8];
5826
- var odr = payload[9];
5827
- var en_axis = payload[10] & 7;
5828
- var fsr = payload[10] >> 5;
5829
- var device_temp = msbLsb(payload[13], payload[14])/100;
5830
-
5831
-
5832
- switch(odr){
5833
- case 6:
5834
- odr = 50;
5835
- break;
5836
- case 7:
5837
- odr = 100;
5838
- break;
5839
- case 8:
5840
- odr = 200;
5841
- break;
5842
- case 9:
5843
- odr = 400;
5844
- break;
5845
- case 10:
5846
- odr = 800;
5847
- break;
5848
- case 11:
5849
- odr = 1600;
5850
- break;
5851
- case 12:
5852
- odr = 3200;
5853
- break;
5854
- case 13:
5855
- odr = 6400;
5856
- break;
5857
- case 14:
5858
- odr = 12800;
5859
- break;
5860
- case 15:
5861
- odr = 25600;
5862
- break;
5863
- default:
5864
- odr = 0;
5865
- }
5866
-
5867
- globalDevices[deviceAddr] = {
5868
- // stream_size: expected_packets,
5869
- data: {},
5870
- odr: odr,
5871
- mo: mode,
5872
- en_axis: en_axis,
5873
- fsr: fsr,
5874
- hour: hour,
5875
- minute: minute,
5876
- device_temp: device_temp,
5877
- }
5878
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5879
- return;
5880
- }
5881
- }
5882
- else{
5883
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5884
- }
5885
- }
5886
- else{
5887
- var mode = payload[8];
5888
- var odr = payload[9];
5889
- var en_axis = payload[10] & 7;
5890
- var fsr = payload[10] >> 5;
5891
- var device_temp = msbLsb(payload[13], payload[14])/100;
5892
-
5893
-
5894
- switch(odr){
5895
- case 6:
5896
- odr = 50;
5897
- break;
5898
- case 7:
5899
- odr = 100;
5900
- break;
5901
- case 8:
5902
- odr = 200;
5903
- break;
5904
- case 9:
5905
- odr = 400;
5906
- break;
5907
- case 10:
5908
- odr = 800;
5909
- break;
5910
- case 11:
5911
- odr = 1600;
5912
- break;
5913
- case 12:
5914
- odr = 3200;
5915
- break;
5916
- case 13:
5917
- odr = 6400;
5918
- break;
5919
- case 14:
5920
- odr = 12800;
5921
- break;
5922
- case 15:
5923
- odr = 25600;
5924
- break;
5925
- default:
5926
- odr = 0;
5970
+ if(current_packet != 1){
5971
+ return;
5972
+ } else{
5973
+
5974
+ globalDevices[deviceAddr] = {
5975
+ // stream_size: expected_packets,
5976
+ data: {},
5977
+ odr: odr,
5978
+ mo: mode,
5979
+ en_axis: en_axis,
5980
+ fsr: fsr,
5981
+ hour: hour,
5982
+ minute: minute,
5983
+ device_temp: device_temp,
5984
+ }
5985
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5986
+ return;
5987
+ }
5988
+ }
5989
+ else{
5990
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5927
5991
  }
5992
+ }
5993
+ else{
5928
5994
 
5929
5995
  globalDevices[deviceAddr] = {
5930
5996
  // stream_size: expected_packets,
@@ -6057,48 +6123,6 @@ function sensor_types(parent){
6057
6123
  }
6058
6124
  }else{
6059
6125
 
6060
- var mode = payload[8];
6061
- var odr = payload[9];
6062
- var en_axis = payload[10] & 7;
6063
- var fsr = payload[10] >> 5;
6064
- var device_temp = msbLsb(payload[13], payload[14])/100;
6065
-
6066
-
6067
- switch(odr){
6068
- case 6:
6069
- odr = 50;
6070
- break;
6071
- case 7:
6072
- odr = 100;
6073
- break;
6074
- case 8:
6075
- odr = 200;
6076
- break;
6077
- case 9:
6078
- odr = 400;
6079
- break;
6080
- case 10:
6081
- odr = 800;
6082
- break;
6083
- case 11:
6084
- odr = 1600;
6085
- break;
6086
- case 12:
6087
- odr = 3200;
6088
- break;
6089
- case 13:
6090
- odr = 6400;
6091
- break;
6092
- case 14:
6093
- odr = 12800;
6094
- break;
6095
- case 15:
6096
- odr = 25600;
6097
- break;
6098
- default:
6099
- odr = 0;
6100
- }
6101
-
6102
6126
  globalDevices[deviceAddr] = {
6103
6127
  // stream_size: expected_packets,
6104
6128
  data: {},
@@ -6906,14 +6930,297 @@ function sensor_types(parent){
6906
6930
  }
6907
6931
  }
6908
6932
  },
6909
- '101':{
6910
- name: 'Pro Vibration',
6911
- parse: (d, full)=>{
6912
- return{
6913
- mode: full[7] == 1? "raw" : "normal"
6914
- };
6915
- }
6916
- },
6933
+ '101':{
6934
+ name: 'Pro Vibration',
6935
+ parse: (d, full)=>{
6936
+ return{
6937
+ mode: full[7] == 1? "raw" : "normal"
6938
+ };
6939
+ }
6940
+ },
6941
+ '103': {
6942
+ name: 'Custom Wireless Accelerometer Sensor',
6943
+ parse: (payload, parsed, mac) => {
6944
+ if(payload[9] === 0){ // mode raw
6945
+ var deviceAddr = mac;
6946
+ var data = {};
6947
+ switch(payload[8]){
6948
+ case 1:
6949
+ data.sensor_type = 'adxl';
6950
+ break;
6951
+ case 2:
6952
+ data.sensor_type = 'gyro';
6953
+ break;
6954
+ }
6955
+ switch(payload[10]){
6956
+ case 1:
6957
+ data.event_type = 'report';
6958
+ break;
6959
+ case 2:
6960
+ data.event_type = 'motion';
6961
+ break;
6962
+ }
6963
+ var hour = payload[13];
6964
+ var minute = payload[14];
6965
+ var expected_packets = payload.slice(19, 21).reduce(msbLsb);
6966
+ var current_packet = payload.slice(21, 23).reduce(msbLsb);
6967
+ var data_start = 23;
6968
+
6969
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6970
+ if(expected_packets != 1){
6971
+ // 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
6972
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
6973
+ console.log('-----');
6974
+ console.log('bad packet breakdown deleting stream');
6975
+ console.log(current_packet);
6976
+ console.log(expected_packets);
6977
+ console.log(current_packet in globalDevices[deviceAddr].data);
6978
+ console.log(current_packet == 1);
6979
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
6980
+ if(this.hasOwnProperty('failure_no')){
6981
+ this.failure_no = this.failure_no + 1;
6982
+ }
6983
+ else{
6984
+ this.failure_no = 1;
6985
+ }
6986
+ if(this.hasOwnProperty('failure_no')){
6987
+ console.log('####falure no');
6988
+ console.log(this.failure_no);
6989
+ }
6990
+ // console.log(globalDevices[deviceAddr].data);
6991
+ delete globalDevices[deviceAddr];
6992
+ if(current_packet != 1){
6993
+ return;
6994
+ } else{
6995
+
6996
+ var mode = payload[9];
6997
+ var odr = payload[11];
6998
+ var en_axis = payload[12] & 7;
6999
+ var fsr = payload[12] >> 5;
7000
+ var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7001
+ var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
7002
+
7003
+ globalDevices[deviceAddr] = {
7004
+ // stream_size: expected_packets,
7005
+ data: {},
7006
+ odr: odr,
7007
+ mo: mode,
7008
+ en_axis: en_axis,
7009
+ fsr: fsr,
7010
+ hour: hour,
7011
+ minute: minute,
7012
+ device_temp: device_temp,
7013
+ external_temp: external_temperature
7014
+ }
7015
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7016
+ return;
7017
+ }
7018
+ }
7019
+ else{
7020
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7021
+ }
7022
+ }
7023
+ else{
7024
+ var mode = payload[9];
7025
+ var odr = payload[11];
7026
+ var en_axis = payload[12] & 7;
7027
+ var fsr = payload[12] >> 5;
7028
+ var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7029
+ var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
7030
+
7031
+ globalDevices[deviceAddr] = {
7032
+ // stream_size: expected_packets,
7033
+ data: {},
7034
+ odr: odr,
7035
+ mo: mode,
7036
+ en_axis: en_axis,
7037
+ fsr: fsr,
7038
+ hour: hour,
7039
+ minute: minute,
7040
+ device_temp: device_temp,
7041
+ external_temp: external_temperature
7042
+ }
7043
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7044
+ }
7045
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
7046
+ var raw_data = new Array();
7047
+ for(const packet in globalDevices[deviceAddr].data){
7048
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
7049
+ }
7050
+ var label = 0;
7051
+
7052
+ var fft = new Array();
7053
+ var fft_concat = {};
7054
+
7055
+ var en_axis_data = {};
7056
+ switch (globalDevices[deviceAddr].en_axis){
7057
+ case 1:
7058
+ en_axis_data.x_offset = 0;
7059
+ en_axis_data.increment = 2;
7060
+ break;
7061
+ case 2:
7062
+ en_axis_data.y_offset = 0;
7063
+ en_axis_data.increment = 2;
7064
+ break;
7065
+ case 3:
7066
+ en_axis_data.x_offset = 0;
7067
+ en_axis_data.y_offset = 2;
7068
+ en_axis_data.increment = 4;
7069
+ break;
7070
+ case 4:
7071
+ en_axis_data.z_offset = 0;
7072
+ en_axis_data.increment = 2;
7073
+ break;
7074
+ case 5:
7075
+ en_axis_data.x_offset = 0;
7076
+ en_axis_data.z_offset = 2;
7077
+ en_axis_data.increment = 4;
7078
+ break;
7079
+ case 6:
7080
+ en_axis_data.y_offset = 0;
7081
+ en_axis_data.z_offset = 2;
7082
+ en_axis_data.increment = 4;
7083
+ break;
7084
+ case 7:
7085
+ en_axis_data.x_offset = 0;
7086
+ en_axis_data.y_offset = 2;
7087
+ en_axis_data.z_offset = 4;
7088
+ en_axis_data.increment = 6;
7089
+ break;
7090
+ default:
7091
+ en_axis_data.increment = 0;
7092
+ }
7093
+ /* Evaluate sensor type */
7094
+ if(payload[0] == 1){ // adxl
7095
+ var fsr_mult = .00030;
7096
+ var fsr_text = "";
7097
+ switch(globalDevices[deviceAddr].fsr){
7098
+ case 0:
7099
+ fsr_mult = 0.00030;
7100
+ break;
7101
+ case 1:
7102
+ fsr_mult = 0.00061;
7103
+ break;
7104
+ case 2:
7105
+ fsr_mult = 0.00122;
7106
+ break;
7107
+ }
7108
+ switch(globalDevices[deviceAddr].fsr){
7109
+ case 0:
7110
+ fsr_text = "10g";
7111
+ break;
7112
+ case 1:
7113
+ fsr_text = "20g";
7114
+ break;
7115
+ case 2:
7116
+ fsr_text = "40g";
7117
+ break;
7118
+ }
7119
+ }else{ // gyro
7120
+ var fsr_mult = 0.00047;
7121
+ var fsr_text = "";
7122
+ switch(globalDevices[deviceAddr].fsr){
7123
+ case 0:
7124
+ fsr_mult = 0.00047;
7125
+ break;
7126
+ case 1:
7127
+ fsr_mult = 0.00095;
7128
+ break;
7129
+ case 2:
7130
+ fsr_mult = 0.00190;
7131
+ break;
7132
+ case 3:
7133
+ fsr_mult = 0.00381;
7134
+ break;
7135
+ }
7136
+ switch(globalDevices[deviceAddr].fsr){
7137
+ case 0:
7138
+ fsr_text = "250dps";
7139
+ break;
7140
+ case 1:
7141
+ fsr_text = "500dps";
7142
+ break;
7143
+ case 2:
7144
+ fsr_text = "1000dps";
7145
+ break;
7146
+ case 3:
7147
+ fsr_text = "2000dps";
7148
+ break;
7149
+ }
7150
+ }
7151
+
7152
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7153
+ label++;
7154
+
7155
+ fft_concat[label] = {};
7156
+
7157
+ if('x_offset' in en_axis_data){
7158
+ 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));
7159
+ }
7160
+ if('y_offset' in en_axis_data){
7161
+ 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));
7162
+ }
7163
+ if('z_offset' in en_axis_data){
7164
+ 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));
7165
+ }
7166
+ }
7167
+ var fft_concat_obj = {
7168
+ mode: payload[9],
7169
+ sensor_type: data.sensor_type,
7170
+ msg_type: data.event_type,
7171
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
7172
+ mac_address: deviceAddr,
7173
+ en_axis: globalDevices[deviceAddr].en_axis,
7174
+ fsr: fsr_text,
7175
+ odr: globalDevices[deviceAddr].odr,
7176
+ device_temp: globalDevices[deviceAddr].device_temp,
7177
+ external_temp: globalDevices[deviceAddr].external_temp,
7178
+ total_samples: label,
7179
+ data: fft_concat
7180
+ };
7181
+ // console.log(globalDevices[deviceAddr].data);
7182
+ // console.log(raw_data);
7183
+ sensor_data = fft_concat_obj;
7184
+ // parsed.raw_packets = globalDevices[deviceAddr].data;
7185
+ // parsed.raw_data = raw_data;
7186
+ delete globalDevices[deviceAddr];
7187
+ if(this.hasOwnProperty('failure_no')){
7188
+ console.log('####falure no');
7189
+ console.log(this.failure_no);
7190
+ }
7191
+
7192
+ return sensor_data;
7193
+ }
7194
+ else{
7195
+ return;
7196
+ }
7197
+ }else{
7198
+
7199
+ var mode = payload[9];
7200
+ var odr = payload[11];
7201
+ var en_axis = payload[12] & 7;
7202
+ var fsr = payload[12] >> 5;
7203
+ var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7204
+ var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
7205
+
7206
+ globalDevices[deviceAddr] = {
7207
+ // stream_size: expected_packets,
7208
+ data: {},
7209
+ odr: odr,
7210
+ mo: mode,
7211
+ en_axis: en_axis,
7212
+ fsr: fsr,
7213
+ hour: hour,
7214
+ minute: minute,
7215
+ device_temp: device_temp,
7216
+ external_temp: external_temperature
7217
+ }
7218
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7219
+ return;
7220
+ }
7221
+ }
7222
+ }
7223
+ },
6917
7224
  '105': {
6918
7225
  name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
6919
7226
  parse: (d) => {
@@ -6971,7 +7278,21 @@ function sensor_types(parent){
6971
7278
  return error;
6972
7279
  }
6973
7280
  if(firmware > 4){
6974
- let report_type = d[41]? "Shift": "Regular";
7281
+ let report_type = "Regular";
7282
+ switch(d[41]){
7283
+ case 0:
7284
+ report_type = "Regular";
7285
+ break;
7286
+ case 1:
7287
+ report_type = "Shift end";
7288
+ break;
7289
+ case 2:
7290
+ report_type = "Interrupt";
7291
+ break;
7292
+ case 3:
7293
+ report_type = "Threshold";
7294
+ break;
7295
+ }
6975
7296
  return {
6976
7297
  digital_input_counter: d.slice(0, 4).reduce(msbLsb),
6977
7298
  digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
@@ -7015,25 +7336,183 @@ function sensor_types(parent){
7015
7336
  };
7016
7337
  }
7017
7338
  },
7339
+ 'parse_fly': (frame) => {
7340
+ if(frame[2] > 8){
7341
+ let reset_mode = "Disabled";
7342
+ switch(frame[37]){
7343
+ case 0:
7344
+ reset_mode = "Disabled";
7345
+ break;
7346
+ case 1:
7347
+ reset_mode = "Shift Ends";
7348
+ break;
7349
+ case 2:
7350
+ reset_mode = "Timeout";
7351
+ break;
7352
+ }
7353
+ let acc_odr = "10Hz";
7354
+ switch(frame[39]){
7355
+ case 0:
7356
+ acc_odr = "10Hz";
7357
+ break;
7358
+ case 1:
7359
+ acc_odr = "20Hz";
7360
+ break;
7361
+ case 2:
7362
+ acc_odr = "50Hz";
7363
+ break;
7364
+ case 3:
7365
+ acc_odr = "100Hz";
7366
+ break;
7367
+ case 4:
7368
+ acc_odr = "200Hz";
7369
+ break;
7370
+ case 5:
7371
+ acc_odr = "400Hz";
7372
+ break;
7373
+ }
7374
+ let rtc_sampling_interval = "5 seconds";
7375
+ switch(frame[38]){
7376
+ case 0:
7377
+ rtc_sampling_interval = "1 minute";
7378
+ break;
7379
+ case 1:
7380
+ rtc_sampling_interval = "5 minutes";
7381
+ break;
7382
+ case 2:
7383
+ rtc_sampling_interval = "15 minutes";
7384
+ break;
7385
+ case 3:
7386
+ rtc_sampling_interval = "30 minutes";
7387
+ break;
7388
+ case 4:
7389
+ rtc_sampling_interval = "1 hour";
7390
+ break;
7391
+ case 5:
7392
+ rtc_sampling_interval = "2 hours";
7393
+ break;
7394
+ case 6:
7395
+ rtc_sampling_interval = "3 hours";
7396
+ break;
7397
+ case 7:
7398
+ rtc_sampling_interval = "6 hours";
7399
+ break;
7400
+ case 8:
7401
+ rtc_sampling_interval = "12 hours";
7402
+ break;
7403
+ case 9:
7404
+ rtc_sampling_interval = "5 seconds";
7405
+ break;
7406
+ case 10:
7407
+ rtc_sampling_interval = "10 seconds";
7408
+ break;
7409
+ case 11:
7410
+ rtc_sampling_interval = "15 seconds";
7411
+ break;
7412
+ case 12:
7413
+ rtc_sampling_interval = "30 seconds";
7414
+ break;
7415
+ }
7416
+ return {
7417
+ 'firmware': frame[2],
7418
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
7419
+ 'debouncing_timeout': frame[17] + "sec",
7420
+ 'accelero_state': frame[18]? "Enabled": "Disabled",
7421
+ 'input_1_active_edge': frame[19]? "Rising": "Falling",
7422
+ 'input_2_active_edge': frame[20]? "Rising": "Falling",
7423
+ 'input_3_active_edge': frame[21]? "Rising": "Falling",
7424
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb) + "sec",
7425
+ 'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
7426
+ 'Shift_end_1': [
7427
+ String(frame[27]).padStart(2, '0'),
7428
+ String(frame[28]).padStart(2, '0')
7429
+ ].join(':'),
7430
+ 'Shift_end_2': [
7431
+ String(frame[29]).padStart(2, '0'),
7432
+ String(frame[30]).padStart(2, '0')
7433
+ ].join(':'),
7434
+ 'Shift_end_3': [
7435
+ String(frame[31]).padStart(2, '0'),
7436
+ String(frame[32]).padStart(2, '0')
7437
+ ].join(':'),
7438
+ 'Shift_end_4': [
7439
+ String(frame[33]).padStart(2, '0'),
7440
+ String(frame[34]).padStart(2, '0')
7441
+ ].join(':'),
7442
+ 'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
7443
+ 'counter_reset_mode': reset_mode,
7444
+ 'sampling_interval': rtc_sampling_interval,
7445
+ 'acc_odr': acc_odr,
7446
+ 'hardware_id': frame.slice(40, 43),
7447
+ 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
7448
+ 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
7449
+ 'machine_values': {
7450
+ 'firmware': frame[2],
7451
+ 'accelerometer_threshold': frame[16],
7452
+ 'debouncing_timeout': frame[17],
7453
+ 'accelero_state': frame[18],
7454
+ 'input_1_active_edge': frame[19],
7455
+ 'input_2_active_edge': frame[20],
7456
+ 'input_3_active_edge': frame[21],
7457
+ 'counter_threshold': frame.slice(22, 26),
7458
+ 'trasnmit_on_change_status': frame[26],
7459
+ 'Shift_end_1': frame.slice(27, 29),
7460
+ 'Shift_end_2': frame.slice(29, 31),
7461
+ 'Shift_end_3': frame.slice(31, 33),
7462
+ 'Shift_end_4': frame.slice(33, 35),
7463
+ 'reset_timeout': frame.slice(35, 37),
7464
+ 'counter_reset_mode': frame[37],
7465
+ 'sampling_interval': frame[38],
7466
+ 'acc_odr': frame[39],
7467
+ 'hardware_id': frame.slice(40, 43),
7468
+ 'report_rate': frame.slice(43, 47),
7469
+ 'tx_life_counter': frame.slice(47, 51)
7470
+ }
7471
+ }
7472
+ } else{
7473
+ return {
7474
+ 'firmware': frame[2],
7475
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
7476
+ 'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
7477
+ 'debouncing_timeout': frame[17].toString() + "sec.",
7478
+ 'accelero_state': frame[18],
7479
+ 'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
7480
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
7481
+ 'trasnmit_on_change_status': frame[26],
7482
+ 'machine_values': {
7483
+ 'firmware': frame[2],
7484
+ 'report_rate': frame.slice(12, 16),
7485
+ 'accelerometer_threshold': frame[16],
7486
+ 'debouncing_timeout': frame[17],
7487
+ 'accelero_active_state': frame[18],
7488
+ 'digital_inputs_active_edge': frame.slice(19, 22),
7489
+ 'counter_threshold': frame.slice(22, 26),
7490
+ 'trasnmit_on_change_status': frame[26]
7491
+ }
7492
+ }
7493
+ }
7494
+ }
7495
+ },
7496
+ '109': {
7497
+ name: 'Wireless Custom Solar Sensor',
7498
+ parse: (d) => {
7499
+ return {
7500
+ illuminance: d.slice(0, 4).reduce(msbLsb),
7501
+ total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
7502
+ ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
7503
+ };
7504
+ },
7018
7505
  'parse_fly': (frame) => {
7019
7506
  return {
7020
7507
  'firmware': frame[2],
7021
- 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
7022
- 'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
7023
- 'debouncing_timeout': frame[17].toString() + "sec.",
7024
- 'accelero_active_state': frame[18],
7025
- 'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
7026
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
7027
- 'trasnmit_on_change_status': frame[26],
7508
+ 'hardware_id': frame.slice(12, 15),
7509
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
7510
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
7028
7511
  'machine_values': {
7029
7512
  'firmware': frame[2],
7030
- 'report_rate': frame.slice(12, 16),
7031
- 'accelerometer_threshold': frame[16],
7032
- 'debouncing_timeout': frame[17],
7033
- 'accelero_active_state': frame[18],
7034
- 'digital_inputs_active_edge': frame.slice(19, 22),
7035
- 'counter_threshold': frame.slice(22, 26),
7036
- 'trasnmit_on_change_status': frame[26]
7513
+ 'hardware_id': frame.slice(12, 15),
7514
+ 'sample_rate': frame.slice(15, 19),
7515
+ 'tx_life_counter': frame.slice(19, 23)
7037
7516
  }
7038
7517
  }
7039
7518
  }
@@ -7083,7 +7562,7 @@ function sensor_types(parent){
7083
7562
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
7084
7563
  if(expected_packets != 1){
7085
7564
  // 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
7086
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
7565
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet)-1) in globalDevices[deviceAddr].data)) {
7087
7566
  console.log('-----');
7088
7567
  console.log('bad packet breakdown deleting stream');
7089
7568
  console.log(current_packet);
@@ -7108,8 +7587,7 @@ function sensor_types(parent){
7108
7587
  } else{
7109
7588
 
7110
7589
  var mode = payload[8];
7111
- var odr = msbLsb(payload[9], payload[10])
7112
- var en_axis = payload[11] & 7;
7590
+ var odr = msbLsb(payload[9], payload[10]);
7113
7591
  var fsr = payload[11] >> 5;
7114
7592
  var device_temp = msbLsb(payload[14], payload[15])/100;
7115
7593
 
@@ -7118,7 +7596,6 @@ function sensor_types(parent){
7118
7596
  data: {},
7119
7597
  odr: odr,
7120
7598
  mo: mode,
7121
- en_axis: en_axis,
7122
7599
  fsr: fsr,
7123
7600
  hour: hour,
7124
7601
  minute: minute,
@@ -7134,8 +7611,7 @@ function sensor_types(parent){
7134
7611
  }
7135
7612
  else{
7136
7613
  var mode = payload[8];
7137
- var odr = msbLsb(payload[9], payload[10])
7138
- var en_axis = payload[11] & 7;
7614
+ var odr = msbLsb(payload[9], payload[10]);
7139
7615
  var fsr = payload[11] >> 5;
7140
7616
  var device_temp = msbLsb(payload[14], payload[15])/100;
7141
7617
 
@@ -7144,7 +7620,6 @@ function sensor_types(parent){
7144
7620
  data: {},
7145
7621
  odr: odr,
7146
7622
  mo: mode,
7147
- en_axis: en_axis,
7148
7623
  fsr: fsr,
7149
7624
  hour: hour,
7150
7625
  minute: minute,
@@ -7164,43 +7639,11 @@ function sensor_types(parent){
7164
7639
  var fft_concat = {};
7165
7640
 
7166
7641
  var en_axis_data = {};
7167
- switch (globalDevices[deviceAddr].en_axis){
7168
- case 1:
7169
- en_axis_data.x_offset = 0;
7170
- en_axis_data.increment = 2;
7171
- break;
7172
- case 2:
7173
- en_axis_data.y_offset = 0;
7174
- en_axis_data.increment = 2;
7175
- break;
7176
- case 3:
7177
- en_axis_data.x_offset = 0;
7178
- en_axis_data.y_offset = 2;
7179
- en_axis_data.increment = 4;
7180
- break;
7181
- case 4:
7182
- en_axis_data.z_offset = 0;
7183
- en_axis_data.increment = 2;
7184
- break;
7185
- case 5:
7186
- en_axis_data.x_offset = 0;
7187
- en_axis_data.z_offset = 2;
7188
- en_axis_data.increment = 4;
7189
- break;
7190
- case 6:
7191
- en_axis_data.y_offset = 0;
7192
- en_axis_data.z_offset = 2;
7193
- en_axis_data.increment = 4;
7194
- break;
7195
- case 7:
7196
- en_axis_data.x_offset = 0;
7197
- en_axis_data.y_offset = 2;
7198
- en_axis_data.z_offset = 4;
7199
- en_axis_data.increment = 6;
7200
- break;
7201
- default:
7202
- en_axis_data.increment = 0;
7203
- }
7642
+ en_axis_data.x_offset = 0;
7643
+ en_axis_data.y_offset = 2;
7644
+ en_axis_data.z_offset = 4;
7645
+ en_axis_data.increment = 6;
7646
+ fft_concat = {x: [], y: [], z: []};
7204
7647
 
7205
7648
  var fsr_mult = .00006;
7206
7649
  var fsr_text = "";
@@ -7233,19 +7676,18 @@ function sensor_types(parent){
7233
7676
  break;
7234
7677
  }
7235
7678
 
7679
+
7236
7680
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7237
7681
  label++;
7238
7682
 
7239
- fft_concat[label] = {};
7240
-
7241
7683
  if('x_offset' in en_axis_data){
7242
- 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));
7684
+ fft_concat.x.push(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)));
7243
7685
  }
7244
7686
  if('y_offset' in en_axis_data){
7245
- 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));
7687
+ fft_concat.y.push(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)));
7246
7688
  }
7247
7689
  if('z_offset' in en_axis_data){
7248
- 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));
7690
+ fft_concat.z.push(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)));
7249
7691
  }
7250
7692
  }
7251
7693
  var fft_concat_obj = {
@@ -7253,7 +7695,6 @@ function sensor_types(parent){
7253
7695
  msg_type: msg_type,
7254
7696
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
7255
7697
  mac_address: deviceAddr,
7256
- en_axis: globalDevices[deviceAddr].en_axis,
7257
7698
  fsr: fsr_text,
7258
7699
  odr: globalDevices[deviceAddr].odr,
7259
7700
  device_temp: globalDevices[deviceAddr].device_temp,
@@ -7275,8 +7716,7 @@ function sensor_types(parent){
7275
7716
  }else{
7276
7717
 
7277
7718
  var mode = payload[8];
7278
- var odr = msbLsb(payload[9], payload[10])
7279
- var en_axis = payload[11] & 7;
7719
+ var odr = msbLsb(payload[9], payload[10]);
7280
7720
  var fsr = payload[11] >> 5;
7281
7721
  var device_temp = msbLsb(payload[14], payload[15])/100;
7282
7722
 
@@ -7285,7 +7725,6 @@ function sensor_types(parent){
7285
7725
  data: {},
7286
7726
  odr: odr,
7287
7727
  mo: mode,
7288
- en_axis: en_axis,
7289
7728
  fsr: fsr,
7290
7729
  hour: hour,
7291
7730
  minute: minute,
@@ -7565,54 +8004,109 @@ function sensor_types(parent){
7565
8004
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
7566
8005
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
7567
8006
  frame_data.smart_mode_threshold = frame[34] * 50;
7568
- return {
7569
- 'firmware': frame[2],
7570
- 'destination_address': toMac(frame.slice(12, 16)),
7571
- 'mode': frame_data.mode,
7572
- 'odr': frame_data.odr_1+'Hz',
7573
- 'sampling_duration': frame_data.sampling_duration_1,
7574
- 'filter_status': frame_data.filter_status,
7575
- 'lpf_coeff': frame_data.lpf_coeff_1,
7576
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
7577
- 'hpf_coeff': frame_data.hpf_coeff_1,
7578
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
7579
- 'sampling_interval': frame_data.sampling_interval,
7580
- 'on_request_timeout': frame_data.on_request_timeout,
7581
- 'deadband': frame_data.deadband,
7582
- 'payload_length': frame_data.payload_length,
7583
- 'fsr': frame_data.fsr_text,
7584
- 'rpm_compute_status': frame_data.rpm_status,
7585
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
7586
- 'auto_raw_interval': frame_data.auto_raw_interval,
7587
- 'smart_mode_skip_count': frame[33],
7588
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
7589
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
7590
- 'hardware_id': frame.slice(39, 42),
7591
- 'reserved': frame.slice(42, 46),
7592
- 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
7593
- 'machine_values': {
8007
+ if(frame[2] > 4){ // for Firmware v5 and above
8008
+ return {
7594
8009
  'firmware': frame[2],
7595
- 'destination_address': toMac(frame.slice(12, 16), false),
7596
- 'mode': frame[16],
7597
- 'odr': frame[17],
7598
- 'sampling_duration': frame[18],
7599
- 'filter_status': frame[19],
7600
- 'lpf_coeff': frame[20],
7601
- 'hpf_coeff': frame[21],
7602
- 'sampling_interval': frame[22],
7603
- 'on_request_timeout': frame[23],
7604
- 'deadband': frame[24],
7605
- 'payload_length': frame[25],
7606
- 'fsr': frame[26],
7607
- 'rpm_compute_status': frame[27],
8010
+ 'destination_address': toMac(frame.slice(12, 16)),
8011
+ 'mode': frame_data.mode,
8012
+ 'odr': frame_data.odr_1+'Hz',
8013
+ 'sampling_duration': frame_data.sampling_duration_1,
8014
+ 'filter_status': frame_data.filter_status,
8015
+ 'lpf_coeff': frame_data.lpf_coeff_1,
8016
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
8017
+ 'hpf_coeff': frame_data.hpf_coeff_1,
8018
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
8019
+ 'sampling_interval': frame_data.sampling_interval,
8020
+ 'on_request_timeout': frame_data.on_request_timeout,
8021
+ 'deadband': frame_data.deadband,
8022
+ 'payload_length': frame_data.payload_length,
8023
+ 'fsr': frame_data.fsr_text,
8024
+ 'rpm_compute_status': frame_data.rpm_status,
8025
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
8026
+ 'auto_raw_interval': frame_data.auto_raw_interval,
8027
+ 'smart_mode_skip_count': frame[33],
8028
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
8029
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
8030
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
8031
+ 'hardware_id': frame.slice(41, 44),
8032
+ 'reserved': frame.slice(44, 48),
8033
+ 'tx_lifetime_counter': frame.slice(48, 52).reduce(msbLsb),
8034
+ 'machine_values': {
8035
+ 'firmware': frame[2],
8036
+ 'destination_address': toMac(frame.slice(12, 16), false),
8037
+ 'mode': frame[16],
8038
+ 'odr': frame[17],
8039
+ 'sampling_duration': frame[18],
8040
+ 'filter_status': frame[19],
8041
+ 'lpf_coeff': frame[20],
8042
+ 'hpf_coeff': frame[21],
8043
+ 'sampling_interval': frame[22],
8044
+ 'on_request_timeout': frame[23],
8045
+ 'deadband': frame[24],
8046
+ 'payload_length': frame[25],
8047
+ 'fsr': frame[26],
8048
+ 'rpm_compute_status': frame[27],
8049
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
8050
+ 'auto_raw_interval': frame[32],
8051
+ 'smart_mode_skip_count': frame[33],
8052
+ 'smart_mode_acc_threshold':frame[34],
8053
+ 'uptime_counter': frame.slice(35, 39),
8054
+ 'max_tx_raw_samples': frame.slice(39, 41),
8055
+ 'hardware_id': frame.slice(41, 44),
8056
+ 'reserved': frame.slice(44, 48),
8057
+ 'tx_lifetime_counter': frame.slice(48, 52)
8058
+ }
8059
+ }
8060
+ }else{
8061
+ return {
8062
+ 'firmware': frame[2],
8063
+ 'destination_address': toMac(frame.slice(12, 16)),
8064
+ 'mode': frame_data.mode,
8065
+ 'odr': frame_data.odr_1+'Hz',
8066
+ 'sampling_duration': frame_data.sampling_duration_1,
8067
+ 'filter_status': frame_data.filter_status,
8068
+ 'lpf_coeff': frame_data.lpf_coeff_1,
8069
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
8070
+ 'hpf_coeff': frame_data.hpf_coeff_1,
8071
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
8072
+ 'sampling_interval': frame_data.sampling_interval,
8073
+ 'on_request_timeout': frame_data.on_request_timeout,
8074
+ 'deadband': frame_data.deadband,
8075
+ 'payload_length': frame_data.payload_length,
8076
+ 'fsr': frame_data.fsr_text,
8077
+ 'rpm_compute_status': frame_data.rpm_status,
7608
8078
  'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
7609
- 'auto_raw_interval': frame[32],
8079
+ 'auto_raw_interval': frame_data.auto_raw_interval,
7610
8080
  'smart_mode_skip_count': frame[33],
7611
- 'smart_mode_acc_threshold':frame[34],
7612
- 'uptime_counter': frame.slice(35, 39),
8081
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
8082
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
7613
8083
  'hardware_id': frame.slice(39, 42),
7614
8084
  'reserved': frame.slice(42, 46),
7615
- 'tx_lifetime_counter': frame.slice(46, 50)
8085
+ 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
8086
+ 'machine_values': {
8087
+ 'firmware': frame[2],
8088
+ 'destination_address': toMac(frame.slice(12, 16), false),
8089
+ 'mode': frame[16],
8090
+ 'odr': frame[17],
8091
+ 'sampling_duration': frame[18],
8092
+ 'filter_status': frame[19],
8093
+ 'lpf_coeff': frame[20],
8094
+ 'hpf_coeff': frame[21],
8095
+ 'sampling_interval': frame[22],
8096
+ 'on_request_timeout': frame[23],
8097
+ 'deadband': frame[24],
8098
+ 'payload_length': frame[25],
8099
+ 'fsr': frame[26],
8100
+ 'rpm_compute_status': frame[27],
8101
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
8102
+ 'auto_raw_interval': frame[32],
8103
+ 'smart_mode_skip_count': frame[33],
8104
+ 'smart_mode_acc_threshold':frame[34],
8105
+ 'uptime_counter': frame.slice(35, 39),
8106
+ 'hardware_id': frame.slice(39, 42),
8107
+ 'reserved': frame.slice(42, 46),
8108
+ 'tx_lifetime_counter': frame.slice(46, 50)
8109
+ }
7616
8110
  }
7617
8111
  }
7618
8112
  }
@@ -7667,8 +8161,7 @@ function sensor_types(parent){
7667
8161
  return;
7668
8162
  } else{
7669
8163
  var mode = payload[8];
7670
- var odr = msbLsb(payload[9], payload[10])
7671
- var en_axis = payload[11] & 7;
8164
+ var odr = msbLsb(payload[9], payload[10]);
7672
8165
  var fsr = payload[11] >> 5;
7673
8166
  var device_temp = msbLsb(payload[14], payload[15])/100;
7674
8167
 
@@ -7677,7 +8170,6 @@ function sensor_types(parent){
7677
8170
  data: {},
7678
8171
  odr: odr,
7679
8172
  mo: mode,
7680
- en_axis: en_axis,
7681
8173
  fsr: fsr,
7682
8174
  hour: hour,
7683
8175
  minute: minute,
@@ -7693,8 +8185,7 @@ function sensor_types(parent){
7693
8185
  }
7694
8186
  else{
7695
8187
  var mode = payload[8];
7696
- var odr = msbLsb(payload[9], payload[10])
7697
- var en_axis = payload[11] & 7;
8188
+ var odr = msbLsb(payload[9], payload[10]);
7698
8189
  var fsr = payload[11] >> 5;
7699
8190
  var device_temp = msbLsb(payload[14], payload[15])/100;
7700
8191
 
@@ -7703,7 +8194,6 @@ function sensor_types(parent){
7703
8194
  data: {},
7704
8195
  odr: odr,
7705
8196
  mo: mode,
7706
- en_axis: en_axis,
7707
8197
  fsr: fsr,
7708
8198
  hour: hour,
7709
8199
  minute: minute,
@@ -7723,43 +8213,11 @@ function sensor_types(parent){
7723
8213
  var fft_concat = {};
7724
8214
 
7725
8215
  var en_axis_data = {};
7726
- switch (globalDevices[deviceAddr].en_axis){
7727
- case 1:
7728
- en_axis_data.x_offset = 0;
7729
- en_axis_data.increment = 2;
7730
- break;
7731
- case 2:
7732
- en_axis_data.y_offset = 0;
7733
- en_axis_data.increment = 2;
7734
- break;
7735
- case 3:
7736
- en_axis_data.x_offset = 0;
7737
- en_axis_data.y_offset = 2;
7738
- en_axis_data.increment = 4;
7739
- break;
7740
- case 4:
7741
- en_axis_data.z_offset = 0;
7742
- en_axis_data.increment = 2;
7743
- break;
7744
- case 5:
7745
- en_axis_data.x_offset = 0;
7746
- en_axis_data.z_offset = 2;
7747
- en_axis_data.increment = 4;
7748
- break;
7749
- case 6:
7750
- en_axis_data.y_offset = 0;
7751
- en_axis_data.z_offset = 2;
7752
- en_axis_data.increment = 4;
7753
- break;
7754
- case 7:
7755
- en_axis_data.x_offset = 0;
7756
- en_axis_data.y_offset = 2;
7757
- en_axis_data.z_offset = 4;
7758
- en_axis_data.increment = 6;
7759
- break;
7760
- default:
7761
- en_axis_data.increment = 0;
7762
- }
8216
+ en_axis_data.x_offset = 0;
8217
+ en_axis_data.y_offset = 2;
8218
+ en_axis_data.z_offset = 4;
8219
+ en_axis_data.increment = 6;
8220
+ fft_concat = {x: [], y: [], z: []};
7763
8221
 
7764
8222
  var fsr_mult = .00006;
7765
8223
  var fsr_text = "";
@@ -7795,16 +8253,14 @@ function sensor_types(parent){
7795
8253
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7796
8254
  label++;
7797
8255
 
7798
- fft_concat[label] = {};
7799
-
7800
8256
  if('x_offset' in en_axis_data){
7801
- 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));
8257
+ fft_concat.x.push(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)));
7802
8258
  }
7803
8259
  if('y_offset' in en_axis_data){
7804
- 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));
8260
+ fft_concat.y.push(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)));
7805
8261
  }
7806
8262
  if('z_offset' in en_axis_data){
7807
- 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));
8263
+ fft_concat.z.push(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)));
7808
8264
  }
7809
8265
  }
7810
8266
 
@@ -7824,7 +8280,6 @@ function sensor_types(parent){
7824
8280
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
7825
8281
  probe: probe,
7826
8282
  mac_address: deviceAddr,
7827
- en_axis: globalDevices[deviceAddr].en_axis,
7828
8283
  fsr: fsr_text,
7829
8284
  odr: globalDevices[deviceAddr].odr,
7830
8285
  device_temp: globalDevices[deviceAddr].device_temp,
@@ -7845,8 +8300,7 @@ function sensor_types(parent){
7845
8300
  }
7846
8301
  }else{
7847
8302
  var mode = payload[8];
7848
- var odr = msbLsb(payload[9], payload[10])
7849
- var en_axis = payload[11] & 7;
8303
+ var odr = msbLsb(payload[9], payload[10]);
7850
8304
  var fsr = payload[11] >> 5;
7851
8305
  var device_temp = msbLsb(payload[14], payload[15])/100;
7852
8306
 
@@ -7855,7 +8309,6 @@ function sensor_types(parent){
7855
8309
  data: {},
7856
8310
  odr: odr,
7857
8311
  mo: mode,
7858
- en_axis: en_axis,
7859
8312
  fsr: fsr,
7860
8313
  hour: hour,
7861
8314
  minute: minute,
@@ -7902,7 +8355,7 @@ function sensor_types(parent){
7902
8355
  break;
7903
8356
  }
7904
8357
  var odr2;
7905
- switch(payload[54]){
8358
+ switch(payload[56]){
7906
8359
  case 6:
7907
8360
  odr2 = "50Hz"
7908
8361
  break;
@@ -7966,42 +8419,42 @@ function sensor_types(parent){
7966
8419
  y1_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
7967
8420
  y1_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
7968
8421
 
7969
- z1_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
7970
- z1_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
7971
- z1_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
7972
- z1_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
7973
- z1_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
7974
- z1_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
7975
- z1_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
7976
- rpm_1: payload.slice(54, 56).reduce(msbLsb),
7977
-
7978
- s2_odr: odr2,
7979
- s2_temperature: signInt(payload.slice(55, 57).reduce(msbLsb), 16) / 100,
7980
-
7981
- x2_rms_ACC_G: payload.slice(57, 59).reduce(msbLsb)/1000,
7982
- x2_max_ACC_G: payload.slice(59, 61).reduce(msbLsb)/1000,
7983
- x2_velocity_mm_sec: payload.slice(61, 63).reduce(msbLsb) / 100,
7984
- x2_displacement_mm: payload.slice(63, 65).reduce(msbLsb) / 100,
7985
- x2_peak_one_Hz: payload.slice(65, 67).reduce(msbLsb),
7986
- x2_peak_two_Hz: payload.slice(67, 69).reduce(msbLsb),
7987
- x2_peak_three_Hz: payload.slice(69, 71).reduce(msbLsb),
7988
-
7989
- y2_rms_ACC_G: payload.slice(71, 73).reduce(msbLsb)/1000,
7990
- y2_max_ACC_G: payload.slice(73, 75).reduce(msbLsb)/1000,
7991
- y2_velocity_mm_sec: payload.slice(75, 77).reduce(msbLsb) / 100,
7992
- y2_displacement_mm: payload.slice(77, 79).reduce(msbLsb) / 100,
7993
- y2_peak_one_Hz: payload.slice(79, 81).reduce(msbLsb),
7994
- y2_peak_two_Hz: payload.slice(81, 83).reduce(msbLsb),
7995
- y2_peak_three_Hz: payload.slice(83, 85).reduce(msbLsb),
8422
+ z1_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
8423
+ z1_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
8424
+ z1_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
8425
+ z1_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
8426
+ z1_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
8427
+ z1_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
8428
+ z1_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
8429
+ rpm_1: payload.slice(54, 56).reduce(msbLsb),
7996
8430
 
7997
- z2_rms_ACC_G: payload.slice(85, 87).reduce(msbLsb)/1000,
7998
- z2_max_ACC_G: payload.slice(87, 89).reduce(msbLsb)/1000,
7999
- z2_velocity_mm_sec: payload.slice(89, 91).reduce(msbLsb) / 100,
8000
- z2_displacement_mm: payload.slice(91, 93).reduce(msbLsb) / 100,
8001
- z2_peak_one_Hz: payload.slice(93, 95).reduce(msbLsb),
8002
- z2_peak_two_Hz: payload.slice(95, 97).reduce(msbLsb),
8003
- z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb),
8004
- rpm_2: payload.slice(99, 101).reduce(msbLsb)
8431
+ s2_odr: odr2,
8432
+ s2_temperature: signInt(payload.slice(57, 59).reduce(msbLsb), 16) / 100,
8433
+
8434
+ x2_rms_ACC_G: payload.slice(59, 61).reduce(msbLsb)/1000,
8435
+ x2_max_ACC_G: payload.slice(61, 63).reduce(msbLsb)/1000,
8436
+ x2_velocity_mm_sec: payload.slice(63, 65).reduce(msbLsb) / 100,
8437
+ x2_displacement_mm: payload.slice(65, 67).reduce(msbLsb) / 100,
8438
+ x2_peak_one_Hz: payload.slice(67, 69).reduce(msbLsb),
8439
+ x2_peak_two_Hz: payload.slice(69, 71).reduce(msbLsb),
8440
+ x2_peak_three_Hz: payload.slice(71, 73).reduce(msbLsb),
8441
+
8442
+ y2_rms_ACC_G: payload.slice(73, 75).reduce(msbLsb)/1000,
8443
+ y2_max_ACC_G: payload.slice(75, 77).reduce(msbLsb)/1000,
8444
+ y2_velocity_mm_sec: payload.slice(77, 79).reduce(msbLsb) / 100,
8445
+ y2_displacement_mm: payload.slice(79, 81).reduce(msbLsb) / 100,
8446
+ y2_peak_one_Hz: payload.slice(81, 83).reduce(msbLsb),
8447
+ y2_peak_two_Hz: payload.slice(83, 85).reduce(msbLsb),
8448
+ y2_peak_three_Hz: payload.slice(85, 87).reduce(msbLsb),
8449
+
8450
+ z2_rms_ACC_G: payload.slice(87, 89).reduce(msbLsb)/1000,
8451
+ z2_max_ACC_G: payload.slice(89, 91).reduce(msbLsb)/1000,
8452
+ z2_velocity_mm_sec: payload.slice(91, 93).reduce(msbLsb) / 100,
8453
+ z2_displacement_mm: payload.slice(93, 95).reduce(msbLsb) / 100,
8454
+ z2_peak_one_Hz: payload.slice(95, 97).reduce(msbLsb),
8455
+ z2_peak_two_Hz: payload.slice(97, 99).reduce(msbLsb),
8456
+ z2_peak_three_Hz: payload.slice(99, 101).reduce(msbLsb),
8457
+ rpm_2: payload.slice(101, 103).reduce(msbLsb)
8005
8458
  };
8006
8459
  }
8007
8460
  // else{
@@ -8305,68 +8758,137 @@ function sensor_types(parent){
8305
8758
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8306
8759
  frame_data.p1_smart_mode_threshold = frame[38] * 50;
8307
8760
  frame_data.p2_smart_mode_threshold = frame[39] * 50;
8308
- return {
8309
- 'firmware': frame[2],
8310
- 'destination_address': toMac(frame.slice(12, 16)),
8311
- 'mode': frame_data.mode,
8312
- 'odr_1': frame_data.odr_1+'Hz',
8313
- 'odr_2': frame_data.odr_2+'Hz',
8314
- 'sampling_duration_1': frame_data.sampling_duration_1,
8315
- 'sampling_duration_2': frame_data.sampling_duration_2,
8316
- 'filter_status': frame_data.filter_status,
8317
- 'lpf_coeff_1': frame_data.lpf_coeff_1,
8318
- 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
8319
- 'lpf_coeff_2': frame_data.lpf_coeff_2,
8320
- 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
8321
- 'hpf_coeff_1': frame_data.hpf_coeff_1,
8322
- 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
8323
- 'hpf_coeff_2': frame_data.hpf_coeff_2,
8324
- 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
8325
- 'sampling_interval': frame_data.sampling_interval,
8326
- 'on_request_timeout': frame_data.on_request_timeout,
8327
- 'deadband': frame_data.deadband,
8328
- 'payload_length': frame_data.payload_length,
8329
- 'fsr': frame_data.fsr_text,
8330
- 'rpm_compute_status': frame_data.rpm_status,
8331
- 'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
8332
- 'auto_raw_interval': frame_data.auto_raw_interval,
8333
- 'smart_mode_skip_count': frame[37],
8334
- 'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
8335
- 'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
8336
- 'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb),
8337
- 'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb),
8338
- 'hardware_id': frame.slice(48, 51),
8339
- 'reserved': frame.slice(51, 55),
8340
- 'tx_lifetime_counter': frame.slice(55, 59).reduce(msbLsb),
8341
- 'machine_values': {
8761
+ if(frame[2] > 4){ // for Firmware v5 and above
8762
+ return {
8342
8763
  'firmware': frame[2],
8343
- 'destination_address': toMac(frame.slice(12, 16), false),
8344
- 'mode': frame[16],
8345
- 'odr_1': frame[17],
8346
- 'odr_2': frame[18],
8347
- 'sampling_duration_1': frame[19],
8348
- 'sampling_duration_2': frame[20],
8349
- 'filter_status': frame[21],
8350
- 'lpf_coeff_1': frame[22],
8351
- 'lpf_coeff_2': frame[23],
8352
- 'hpf_coeff_1': frame[24],
8353
- 'hpf_coeff_2': frame[25],
8354
- 'sampling_interval': frame[26],
8355
- 'on_request_timeout': frame[27],
8356
- 'deadband': frame[28],
8357
- 'payload_length': frame[29],
8358
- 'fsm': frame[30],
8359
- 'rpm_compute_status': frame[31],
8764
+ 'destination_address': toMac(frame.slice(12, 16)),
8765
+ 'mode': frame_data.mode,
8766
+ 'odr_1': frame_data.odr_1+'Hz',
8767
+ 'odr_2': frame_data.odr_2+'Hz',
8768
+ 'sampling_duration_1': frame_data.sampling_duration_1,
8769
+ 'sampling_duration_2': frame_data.sampling_duration_2,
8770
+ 'filter_status': frame_data.filter_status,
8771
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
8772
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
8773
+ 'lpf_coeff_2': frame_data.lpf_coeff_2,
8774
+ 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
8775
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
8776
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
8777
+ 'hpf_coeff_2': frame_data.hpf_coeff_2,
8778
+ 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
8779
+ 'sampling_interval': frame_data.sampling_interval,
8780
+ 'on_request_timeout': frame_data.on_request_timeout,
8781
+ 'deadband': frame_data.deadband,
8782
+ 'payload_length': frame_data.payload_length,
8783
+ 'fsr': frame_data.fsr_text,
8784
+ 'rpm_compute_status': frame_data.rpm_status,
8360
8785
  'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
8361
- 'auto_raw_interval': frame[36],
8786
+ 'auto_raw_interval': frame_data.auto_raw_interval,
8362
8787
  'smart_mode_skip_count': frame[37],
8363
- 'smart_mode_acc_threshold_probe_1':frame[38],
8364
- 'smart_mode_acc_threshold_probe_2':frame[39],
8365
- 'uptime_counter_probe_1': frame.slice(40, 44),
8366
- 'uptime_counter_probe_2': frame.slice(44, 48),
8788
+ 'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
8789
+ 'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
8790
+ 'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb)+'sec',
8791
+ 'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb)+'sec',
8792
+ 'max_tx_raw_samples': frame.slice(48, 50).reduce(msbLsb),
8793
+ 'hardware_id': frame.slice(50, 53),
8794
+ 'reserved': frame.slice(53, 57),
8795
+ 'tx_lifetime_counter': frame.slice(57, 61).reduce(msbLsb),
8796
+ 'machine_values': {
8797
+ 'firmware': frame[2],
8798
+ 'destination_address': toMac(frame.slice(12, 16), false),
8799
+ 'mode': frame[16],
8800
+ 'odr_1': frame[17],
8801
+ 'odr_2': frame[18],
8802
+ 'sampling_duration_1': frame[19],
8803
+ 'sampling_duration_2': frame[20],
8804
+ 'filter_status': frame[21],
8805
+ 'lpf_coeff_1': frame[22],
8806
+ 'lpf_coeff_2': frame[23],
8807
+ 'hpf_coeff_1': frame[24],
8808
+ 'hpf_coeff_2': frame[25],
8809
+ 'sampling_interval': frame[26],
8810
+ 'on_request_timeout': frame[27],
8811
+ 'deadband': frame[28],
8812
+ 'payload_length': frame[29],
8813
+ 'fsm': frame[30],
8814
+ 'rpm_compute_status': frame[31],
8815
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36), false),
8816
+ 'auto_raw_interval': frame[36],
8817
+ 'smart_mode_skip_count': frame[37],
8818
+ 'smart_mode_acc_threshold_probe_1':frame[38],
8819
+ 'smart_mode_acc_threshold_probe_2':frame[39],
8820
+ 'uptime_counter_probe_1': frame.slice(40, 44),
8821
+ 'uptime_counter_probe_2': frame.slice(44, 48),
8822
+ 'max_tx_raw_samples': frame.slice(48, 50),
8823
+ 'hardware_id': frame.slice(50, 53),
8824
+ 'reserved': frame.slice(53, 57),
8825
+ 'tx_lifetime_counter': frame.slice(57, 61)
8826
+ }
8827
+ }
8828
+ }else{
8829
+ return {
8830
+ 'firmware': frame[2],
8831
+ 'destination_address': toMac(frame.slice(12, 16)),
8832
+ 'mode': frame_data.mode,
8833
+ 'odr_1': frame_data.odr_1+'Hz',
8834
+ 'odr_2': frame_data.odr_2+'Hz',
8835
+ 'sampling_duration_1': frame_data.sampling_duration_1,
8836
+ 'sampling_duration_2': frame_data.sampling_duration_2,
8837
+ 'filter_status': frame_data.filter_status,
8838
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
8839
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
8840
+ 'lpf_coeff_2': frame_data.lpf_coeff_2,
8841
+ 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
8842
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
8843
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
8844
+ 'hpf_coeff_2': frame_data.hpf_coeff_2,
8845
+ 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
8846
+ 'sampling_interval': frame_data.sampling_interval,
8847
+ 'on_request_timeout': frame_data.on_request_timeout,
8848
+ 'deadband': frame_data.deadband,
8849
+ 'payload_length': frame_data.payload_length,
8850
+ 'fsr': frame_data.fsr_text,
8851
+ 'rpm_compute_status': frame_data.rpm_status,
8852
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
8853
+ 'auto_raw_interval': frame_data.auto_raw_interval,
8854
+ 'smart_mode_skip_count': frame[37],
8855
+ 'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
8856
+ 'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
8857
+ 'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb)+'sec',
8858
+ 'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb)+'sec',
8367
8859
  'hardware_id': frame.slice(48, 51),
8368
8860
  'reserved': frame.slice(51, 55),
8369
- 'tx_lifetime_counter': frame.slice(55, 59).reduce(msbLsb)
8861
+ 'tx_lifetime_counter': frame.slice(55, 59).reduce(msbLsb),
8862
+ 'machine_values': {
8863
+ 'firmware': frame[2],
8864
+ 'destination_address': toMac(frame.slice(12, 16), false),
8865
+ 'mode': frame[16],
8866
+ 'odr_1': frame[17],
8867
+ 'odr_2': frame[18],
8868
+ 'sampling_duration_1': frame[19],
8869
+ 'sampling_duration_2': frame[20],
8870
+ 'filter_status': frame[21],
8871
+ 'lpf_coeff_1': frame[22],
8872
+ 'lpf_coeff_2': frame[23],
8873
+ 'hpf_coeff_1': frame[24],
8874
+ 'hpf_coeff_2': frame[25],
8875
+ 'sampling_interval': frame[26],
8876
+ 'on_request_timeout': frame[27],
8877
+ 'deadband': frame[28],
8878
+ 'payload_length': frame[29],
8879
+ 'fsm': frame[30],
8880
+ 'rpm_compute_status': frame[31],
8881
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36), false),
8882
+ 'auto_raw_interval': frame[36],
8883
+ 'smart_mode_skip_count': frame[37],
8884
+ 'smart_mode_acc_threshold_probe_1':frame[38],
8885
+ 'smart_mode_acc_threshold_probe_2':frame[39],
8886
+ 'uptime_counter_probe_1': frame.slice(40, 44),
8887
+ 'uptime_counter_probe_2': frame.slice(44, 48),
8888
+ 'hardware_id': frame.slice(48, 51),
8889
+ 'reserved': frame.slice(51, 55),
8890
+ 'tx_lifetime_counter': frame.slice(55, 59)
8891
+ }
8370
8892
  }
8371
8893
  }
8372
8894
  }
@@ -8418,8 +8940,7 @@ function sensor_types(parent){
8418
8940
  } else{
8419
8941
 
8420
8942
  var mode = payload[8];
8421
- var odr = msbLsb(payload[9], payload[10])
8422
- var en_axis = payload[11] & 7;
8943
+ var odr = msbLsb(payload[9], payload[10]);
8423
8944
  var fsr = payload[11] >> 5;
8424
8945
  var device_temp = msbLsb(payload[14], payload[15])/100;
8425
8946
 
@@ -8428,7 +8949,6 @@ function sensor_types(parent){
8428
8949
  data: {},
8429
8950
  odr: odr,
8430
8951
  mo: mode,
8431
- en_axis: en_axis,
8432
8952
  fsr: fsr,
8433
8953
  hour: hour,
8434
8954
  minute: minute,
@@ -8444,8 +8964,7 @@ function sensor_types(parent){
8444
8964
  }
8445
8965
  else{
8446
8966
  var mode = payload[8];
8447
- var odr = msbLsb(payload[9], payload[10])
8448
- var en_axis = payload[11] & 7;
8967
+ var odr = msbLsb(payload[9], payload[10]);
8449
8968
  var fsr = payload[11] >> 5;
8450
8969
  var device_temp = msbLsb(payload[14], payload[15])/100;
8451
8970
 
@@ -8454,7 +8973,6 @@ function sensor_types(parent){
8454
8973
  data: {},
8455
8974
  odr: odr,
8456
8975
  mo: mode,
8457
- en_axis: en_axis,
8458
8976
  fsr: fsr,
8459
8977
  hour: hour,
8460
8978
  minute: minute,
@@ -8473,43 +8991,11 @@ function sensor_types(parent){
8473
8991
  var fft_concat = {};
8474
8992
 
8475
8993
  var en_axis_data = {};
8476
- switch (globalDevices[deviceAddr].en_axis){
8477
- case 1:
8478
- en_axis_data.x_offset = 0;
8479
- en_axis_data.increment = 2;
8480
- break;
8481
- case 2:
8482
- en_axis_data.y_offset = 0;
8483
- en_axis_data.increment = 2;
8484
- break;
8485
- case 3:
8486
- en_axis_data.x_offset = 0;
8487
- en_axis_data.y_offset = 2;
8488
- en_axis_data.increment = 4;
8489
- break;
8490
- case 4:
8491
- en_axis_data.z_offset = 0;
8492
- en_axis_data.increment = 2;
8493
- break;
8494
- case 5:
8495
- en_axis_data.x_offset = 0;
8496
- en_axis_data.z_offset = 2;
8497
- en_axis_data.increment = 4;
8498
- break;
8499
- case 6:
8500
- en_axis_data.y_offset = 0;
8501
- en_axis_data.z_offset = 2;
8502
- en_axis_data.increment = 4;
8503
- break;
8504
- case 7:
8505
- en_axis_data.x_offset = 0;
8506
- en_axis_data.y_offset = 2;
8507
- en_axis_data.z_offset = 4;
8508
- en_axis_data.increment = 6;
8509
- break;
8510
- default:
8511
- en_axis_data.increment = 0;
8512
- }
8994
+ en_axis_data.x_offset = 0;
8995
+ en_axis_data.y_offset = 2;
8996
+ en_axis_data.z_offset = 4;
8997
+ en_axis_data.increment = 6;
8998
+ fft_concat = {x: [], y: [], z: []};
8513
8999
 
8514
9000
  var fsr_mult = .00006;
8515
9001
  var fsr_text = "";
@@ -8545,16 +9031,14 @@ function sensor_types(parent){
8545
9031
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
8546
9032
  label++;
8547
9033
 
8548
- fft_concat[label] = {};
8549
-
8550
9034
  if('x_offset' in en_axis_data){
8551
- 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));
9035
+ fft_concat.x.push(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)));
8552
9036
  }
8553
9037
  if('y_offset' in en_axis_data){
8554
- 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));
9038
+ fft_concat.y.push(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)));
8555
9039
  }
8556
9040
  if('z_offset' in en_axis_data){
8557
- 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));
9041
+ fft_concat.z.push(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)));
8558
9042
  }
8559
9043
  }
8560
9044
  var fft_concat_obj = {
@@ -8562,7 +9046,6 @@ function sensor_types(parent){
8562
9046
  msg_type: msg_type,
8563
9047
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
8564
9048
  mac_address: deviceAddr,
8565
- en_axis: globalDevices[deviceAddr].en_axis,
8566
9049
  fsr: fsr_text,
8567
9050
  odr: globalDevices[deviceAddr].odr,
8568
9051
  device_temp: globalDevices[deviceAddr].device_temp,
@@ -8588,8 +9071,7 @@ function sensor_types(parent){
8588
9071
  }else{
8589
9072
 
8590
9073
  var mode = payload[8];
8591
- var odr = msbLsb(payload[9], payload[10])
8592
- var en_axis = payload[11] & 7;
9074
+ var odr = msbLsb(payload[9], payload[10]);
8593
9075
  var fsr = payload[11] >> 5;
8594
9076
  var device_temp = msbLsb(payload[14], payload[15])/100;
8595
9077
 
@@ -8598,7 +9080,6 @@ function sensor_types(parent){
8598
9080
  data: {},
8599
9081
  odr: odr,
8600
9082
  mo: mode,
8601
- en_axis: en_axis,
8602
9083
  fsr: fsr,
8603
9084
  hour: hour,
8604
9085
  minute: minute,
@@ -8879,54 +9360,109 @@ function sensor_types(parent){
8879
9360
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
8880
9361
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8881
9362
  frame_data.smart_mode_threshold = frame[34] * 50;
8882
- return {
8883
- 'firmware': frame[2],
8884
- 'destination_address': toMac(frame.slice(12, 16)),
8885
- 'mode': frame_data.mode,
8886
- 'odr': frame_data.odr_1+'Hz',
8887
- 'sampling_duration': frame_data.sampling_duration_1,
8888
- 'filter_status': frame_data.filter_status,
8889
- 'lpf_coeff': frame_data.lpf_coeff_1,
8890
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
8891
- 'hpf_coeff': frame_data.hpf_coeff_1,
8892
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
8893
- 'sampling_interval': frame_data.sampling_interval,
8894
- 'on_request_timeout': frame_data.on_request_timeout,
8895
- 'deadband': frame_data.deadband,
8896
- 'payload_length': frame_data.payload_length,
8897
- 'fsr': frame_data.fsr_text,
8898
- 'rpm_compute_status': frame_data.rpm_status,
8899
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
8900
- 'auto_raw_interval': frame_data.auto_raw_interval,
8901
- 'smart_mode_skip_count': frame[33],
8902
- 'smart_mode_acc_threshold': frame_data.smart_mode_threshold+'mg',
8903
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
8904
- 'hardware_id': frame.slice(39, 42),
8905
- 'reserved': frame.slice(42, 46),
8906
- 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
8907
- 'machine_values': {
9363
+ if(frame[2] > 4){ // for Firmware v5 and above
9364
+ return {
8908
9365
  'firmware': frame[2],
8909
- 'destination_address': toMac(frame.slice(12, 16), false),
8910
- 'mode': frame[16],
8911
- 'odr': frame[17],
8912
- 'sampling_duration_1': frame[18],
8913
- 'filter_status': frame[19],
8914
- 'lpf_coeff': frame[20],
8915
- 'hpf_coeff': frame[21],
8916
- 'sampling_interval': frame[22],
8917
- 'on_request_timeout': frame[23],
8918
- 'deadband': frame[24],
8919
- 'payload_length': frame[25],
8920
- 'fsm': frame[26],
8921
- 'rpm_compute_status': frame[27],
9366
+ 'destination_address': toMac(frame.slice(12, 16)),
9367
+ 'mode': frame_data.mode,
9368
+ 'odr': frame_data.odr_1+'Hz',
9369
+ 'sampling_duration': frame_data.sampling_duration_1,
9370
+ 'filter_status': frame_data.filter_status,
9371
+ 'lpf_coeff': frame_data.lpf_coeff_1,
9372
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9373
+ 'hpf_coeff': frame_data.hpf_coeff_1,
9374
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9375
+ 'sampling_interval': frame_data.sampling_interval,
9376
+ 'on_request_timeout': frame_data.on_request_timeout,
9377
+ 'deadband': frame_data.deadband,
9378
+ 'payload_length': frame_data.payload_length,
9379
+ 'fsr': frame_data.fsr_text,
9380
+ 'rpm_compute_status': frame_data.rpm_status,
9381
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9382
+ 'auto_raw_interval': frame_data.auto_raw_interval,
9383
+ 'smart_mode_skip_count': frame[33],
9384
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9385
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
9386
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
9387
+ 'hardware_id': frame.slice(41, 44),
9388
+ 'reserved': frame.slice(44, 48),
9389
+ 'tx_lifetime_counter': frame.slice(48, 52).reduce(msbLsb),
9390
+ 'machine_values': {
9391
+ 'firmware': frame[2],
9392
+ 'destination_address': toMac(frame.slice(12, 16), false),
9393
+ 'mode': frame[16],
9394
+ 'odr': frame[17],
9395
+ 'sampling_duration': frame[18],
9396
+ 'filter_status': frame[19],
9397
+ 'lpf_coeff': frame[20],
9398
+ 'hpf_coeff': frame[21],
9399
+ 'sampling_interval': frame[22],
9400
+ 'on_request_timeout': frame[23],
9401
+ 'deadband': frame[24],
9402
+ 'payload_length': frame[25],
9403
+ 'fsr': frame[26],
9404
+ 'rpm_compute_status': frame[27],
9405
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
9406
+ 'auto_raw_interval': frame[32],
9407
+ 'smart_mode_skip_count': frame[33],
9408
+ 'smart_mode_acc_threshold':frame[34],
9409
+ 'uptime_counter': frame.slice(35, 39),
9410
+ 'max_tx_raw_samples': frame.slice(39, 41),
9411
+ 'hardware_id': frame.slice(41, 44),
9412
+ 'reserved': frame.slice(44, 48),
9413
+ 'tx_lifetime_counter': frame.slice(48, 52)
9414
+ }
9415
+ }
9416
+ }else{
9417
+ return {
9418
+ 'firmware': frame[2],
9419
+ 'destination_address': toMac(frame.slice(12, 16)),
9420
+ 'mode': frame_data.mode,
9421
+ 'odr': frame_data.odr_1+'Hz',
9422
+ 'sampling_duration': frame_data.sampling_duration_1,
9423
+ 'filter_status': frame_data.filter_status,
9424
+ 'lpf_coeff': frame_data.lpf_coeff_1,
9425
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9426
+ 'hpf_coeff': frame_data.hpf_coeff_1,
9427
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9428
+ 'sampling_interval': frame_data.sampling_interval,
9429
+ 'on_request_timeout': frame_data.on_request_timeout,
9430
+ 'deadband': frame_data.deadband,
9431
+ 'payload_length': frame_data.payload_length,
9432
+ 'fsr': frame_data.fsr_text,
9433
+ 'rpm_compute_status': frame_data.rpm_status,
8922
9434
  'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
8923
- 'auto_raw_interval': frame[32],
9435
+ 'auto_raw_interval': frame_data.auto_raw_interval,
8924
9436
  'smart_mode_skip_count': frame[33],
8925
- 'smart_mode_acc_threshold':frame[34],
8926
- 'uptime_counter': frame.slice(35, 39),
9437
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9438
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
8927
9439
  'hardware_id': frame.slice(39, 42),
8928
9440
  'reserved': frame.slice(42, 46),
8929
- 'tx_lifetime_counter': frame.slice(46, 50)
9441
+ 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
9442
+ 'machine_values': {
9443
+ 'firmware': frame[2],
9444
+ 'destination_address': toMac(frame.slice(12, 16), false),
9445
+ 'mode': frame[16],
9446
+ 'odr': frame[17],
9447
+ 'sampling_duration': frame[18],
9448
+ 'filter_status': frame[19],
9449
+ 'lpf_coeff': frame[20],
9450
+ 'hpf_coeff': frame[21],
9451
+ 'sampling_interval': frame[22],
9452
+ 'on_request_timeout': frame[23],
9453
+ 'deadband': frame[24],
9454
+ 'payload_length': frame[25],
9455
+ 'fsr': frame[26],
9456
+ 'rpm_compute_status': frame[27],
9457
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
9458
+ 'auto_raw_interval': frame[32],
9459
+ 'smart_mode_skip_count': frame[33],
9460
+ 'smart_mode_acc_threshold':frame[34],
9461
+ 'uptime_counter': frame.slice(35, 39),
9462
+ 'hardware_id': frame.slice(39, 42),
9463
+ 'reserved': frame.slice(42, 46),
9464
+ 'tx_lifetime_counter': frame.slice(46, 50)
9465
+ }
8930
9466
  }
8931
9467
  }
8932
9468
  }
@@ -8962,8 +9498,7 @@ function sensor_types(parent){
8962
9498
  delete globalDevices[deviceAddr];
8963
9499
  // create new stream
8964
9500
  var mode = payload[8];
8965
- var odr = msbLsb(payload[9], payload[10])
8966
- var en_axis = payload[11] & 7;
9501
+ var odr = msbLsb(payload[9], payload[10]);
8967
9502
  var fsr = payload[11] >> 5;
8968
9503
  var device_temp = msbLsb(payload[14], payload[15])/100;
8969
9504
 
@@ -8971,7 +9506,6 @@ function sensor_types(parent){
8971
9506
  data: {},
8972
9507
  odr: odr,
8973
9508
  mo: mode,
8974
- en_axis: en_axis,
8975
9509
  fsr: fsr,
8976
9510
  hour: hour,
8977
9511
  minute: minute,
@@ -8988,8 +9522,7 @@ function sensor_types(parent){
8988
9522
  }
8989
9523
  else{
8990
9524
  var mode = payload[8];
8991
- var odr = msbLsb(payload[9], payload[10])
8992
- var en_axis = payload[11] & 7;
9525
+ var odr = msbLsb(payload[9], payload[10]);
8993
9526
  var fsr = payload[11] >> 5;
8994
9527
  var device_temp = msbLsb(payload[14], payload[15])/100;
8995
9528
 
@@ -8997,7 +9530,6 @@ function sensor_types(parent){
8997
9530
  data: {},
8998
9531
  odr: odr,
8999
9532
  mo: mode,
9000
- en_axis: en_axis,
9001
9533
  fsr: fsr,
9002
9534
  hour: hour,
9003
9535
  minute: minute,
@@ -9009,8 +9541,7 @@ function sensor_types(parent){
9009
9541
  }
9010
9542
  else{
9011
9543
  var mode = payload[8];
9012
- var odr = msbLsb(payload[9], payload[10])
9013
- var en_axis = payload[11] & 7;
9544
+ var odr = msbLsb(payload[9], payload[10]);
9014
9545
  var fsr = payload[11] >> 5;
9015
9546
  var device_temp = msbLsb(payload[14], payload[15])/100;
9016
9547
 
@@ -9018,7 +9549,6 @@ function sensor_types(parent){
9018
9549
  data: {},
9019
9550
  odr: odr,
9020
9551
  mo: mode,
9021
- en_axis: en_axis,
9022
9552
  fsr: fsr,
9023
9553
  hour: hour,
9024
9554
  minute: minute,
@@ -9038,44 +9568,12 @@ function sensor_types(parent){
9038
9568
  var fft_concat = {};
9039
9569
 
9040
9570
  var en_axis_data = {};
9041
- switch (globalDevices[deviceAddr].en_axis){
9042
- case 1:
9043
- en_axis_data.x_offset = 0;
9044
- en_axis_data.increment = 2;
9045
- break;
9046
- case 2:
9047
- en_axis_data.y_offset = 0;
9048
- en_axis_data.increment = 2;
9049
- break;
9050
- case 3:
9051
- en_axis_data.x_offset = 0;
9052
- en_axis_data.y_offset = 2;
9053
- en_axis_data.increment = 4;
9054
- break;
9055
- case 4:
9056
- en_axis_data.z_offset = 0;
9057
- en_axis_data.increment = 2;
9058
- break;
9059
- case 5:
9060
- en_axis_data.x_offset = 0;
9061
- en_axis_data.z_offset = 2;
9062
- en_axis_data.increment = 4;
9063
- break;
9064
- case 6:
9065
- en_axis_data.y_offset = 0;
9066
- en_axis_data.z_offset = 2;
9067
- en_axis_data.increment = 4;
9068
- break;
9069
- case 7:
9070
- en_axis_data.x_offset = 0;
9071
- en_axis_data.y_offset = 2;
9072
- en_axis_data.z_offset = 4;
9073
- en_axis_data.increment = 6;
9074
- break;
9075
- default:
9076
- en_axis_data.increment = 0;
9077
- }
9078
-
9571
+ en_axis_data.x_offset = 0;
9572
+ en_axis_data.y_offset = 2;
9573
+ en_axis_data.z_offset = 4;
9574
+ en_axis_data.increment = 6;
9575
+ fft_concat = {x: [], y: [], z: []};
9576
+
9079
9577
  var fsr_mult = .00006;
9080
9578
  var fsr_text = "";
9081
9579
 
@@ -9111,16 +9609,14 @@ function sensor_types(parent){
9111
9609
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
9112
9610
  label++;
9113
9611
 
9114
- fft_concat[label] = {};
9115
-
9116
9612
  if('x_offset' in en_axis_data){
9117
- 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));
9613
+ fft_concat.x.push(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)));
9118
9614
  }
9119
9615
  if('y_offset' in en_axis_data){
9120
- 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));
9616
+ fft_concat.y.push(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)));
9121
9617
  }
9122
9618
  if('z_offset' in en_axis_data){
9123
- 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));
9619
+ fft_concat.z.push(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)));
9124
9620
  }
9125
9621
  }
9126
9622
  var fft_concat_obj = {
@@ -9128,12 +9624,11 @@ function sensor_types(parent){
9128
9624
  msg_type: msg_type,
9129
9625
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
9130
9626
  mac_address: deviceAddr,
9131
- en_axis: globalDevices[deviceAddr].en_axis,
9132
9627
  fsr: fsr_text,
9133
9628
  odr: globalDevices[deviceAddr].odr,
9134
9629
  device_temp: globalDevices[deviceAddr].device_temp,
9135
9630
  total_samples: label,
9136
- ft_confidence : ((globalDevices[deviceAddr].counter / expected_packets) * 100).toFixed(2) + '%',
9631
+ fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
9137
9632
  data: fft_concat
9138
9633
  };
9139
9634
  sensor_data = fft_concat_obj;
@@ -9382,86 +9877,375 @@ function sensor_types(parent){
9382
9877
  frame_data.on_request_timeout = frame[23] + " Seconds";
9383
9878
  frame_data.deadband = frame[24] + "mg";
9384
9879
 
9385
- switch(frame[25]){
9386
- case 0:
9387
- frame_data.payload_length = "50 Bytes";
9388
- break;
9389
- case 1:
9390
- frame_data.payload_length = "100 Bytes";
9391
- break;
9392
- case 2:
9393
- frame_data.payload_length = "150 Bytes";
9394
- break;
9395
- case 3:
9396
- frame_data.payload_length = "180 Bytes";
9397
- break;
9880
+ switch(frame[25]){
9881
+ case 0:
9882
+ frame_data.payload_length = "50 Bytes";
9883
+ break;
9884
+ case 1:
9885
+ frame_data.payload_length = "100 Bytes";
9886
+ break;
9887
+ case 2:
9888
+ frame_data.payload_length = "150 Bytes";
9889
+ break;
9890
+ case 3:
9891
+ frame_data.payload_length = "180 Bytes";
9892
+ break;
9893
+ }
9894
+ switch(frame[26]){
9895
+ case 0:
9896
+ frame_data.fsr_text = "2g";
9897
+ break;
9898
+ case 1:
9899
+ frame_data.fsr_text = "4g";
9900
+ break;
9901
+ case 2:
9902
+ frame_data.fsr_text = "8g";
9903
+ break;
9904
+ case 3:
9905
+ frame_data.fsr_text = "16g";
9906
+ break;
9907
+ }
9908
+ frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
9909
+ frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
9910
+ frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9911
+ frame_data.smart_mode_threshold = frame[34] * 50;
9912
+ if(frame[2] > 4){ // for Firmware v5 and above
9913
+ return {
9914
+ 'firmware': frame[2],
9915
+ 'destination_address': toMac(frame.slice(12, 16)),
9916
+ 'mode': frame_data.mode,
9917
+ 'odr': frame_data.odr_1+'Hz',
9918
+ 'sampling_duration': frame_data.sampling_duration_1,
9919
+ 'filter_status': frame_data.filter_status,
9920
+ 'lpf_coeff': frame_data.lpf_coeff_1,
9921
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9922
+ 'hpf_coeff': frame_data.hpf_coeff_1,
9923
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9924
+ 'sampling_interval': frame_data.sampling_interval,
9925
+ 'on_request_timeout': frame_data.on_request_timeout,
9926
+ 'deadband': frame_data.deadband,
9927
+ 'payload_length': frame_data.payload_length,
9928
+ 'fsr': frame_data.fsr_text,
9929
+ 'rpm_compute_status': frame_data.rpm_status,
9930
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9931
+ 'auto_raw_interval': frame_data.auto_raw_interval,
9932
+ 'smart_mode_skip_count': frame[33],
9933
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9934
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
9935
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
9936
+ 'hardware_id': frame.slice(41, 44),
9937
+ 'reserved': frame.slice(44, 48),
9938
+ 'tx_lifetime_counter': frame.slice(48, 52).reduce(msbLsb),
9939
+ 'machine_values': {
9940
+ 'firmware': frame[2],
9941
+ 'destination_address': toMac(frame.slice(12, 16), false),
9942
+ 'mode': frame[16],
9943
+ 'odr': frame[17],
9944
+ 'sampling_duration': frame[18],
9945
+ 'filter_status': frame[19],
9946
+ 'lpf_coeff': frame[20],
9947
+ 'hpf_coeff': frame[21],
9948
+ 'sampling_interval': frame[22],
9949
+ 'on_request_timeout': frame[23],
9950
+ 'deadband': frame[24],
9951
+ 'payload_length': frame[25],
9952
+ 'fsr': frame[26],
9953
+ 'rpm_compute_status': frame[27],
9954
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
9955
+ 'auto_raw_interval': frame[32],
9956
+ 'smart_mode_skip_count': frame[33],
9957
+ 'smart_mode_acc_threshold':frame[34],
9958
+ 'uptime_counter': frame.slice(35, 39),
9959
+ 'max_tx_raw_samples': frame.slice(39, 41),
9960
+ 'hardware_id': frame.slice(41, 44),
9961
+ 'reserved': frame.slice(44, 48),
9962
+ 'tx_lifetime_counter': frame.slice(48, 52)
9963
+ }
9964
+ }
9965
+ }else{
9966
+ return {
9967
+ 'firmware': frame[2],
9968
+ 'destination_address': toMac(frame.slice(12, 16)),
9969
+ 'mode': frame_data.mode,
9970
+ 'odr': frame_data.odr_1+'Hz',
9971
+ 'sampling_duration': frame_data.sampling_duration_1,
9972
+ 'filter_status': frame_data.filter_status,
9973
+ 'lpf_coeff': frame_data.lpf_coeff_1,
9974
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9975
+ 'hpf_coeff': frame_data.hpf_coeff_1,
9976
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9977
+ 'sampling_interval': frame_data.sampling_interval,
9978
+ 'on_request_timeout': frame_data.on_request_timeout,
9979
+ 'deadband': frame_data.deadband,
9980
+ 'payload_length': frame_data.payload_length,
9981
+ 'fsr': frame_data.fsr_text,
9982
+ 'rpm_compute_status': frame_data.rpm_status,
9983
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9984
+ 'auto_raw_interval': frame_data.auto_raw_interval,
9985
+ 'smart_mode_skip_count': frame[33],
9986
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9987
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
9988
+ 'hardware_id': frame.slice(39, 42),
9989
+ 'reserved': frame.slice(42, 46),
9990
+ 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
9991
+ 'machine_values': {
9992
+ 'firmware': frame[2],
9993
+ 'destination_address': toMac(frame.slice(12, 16), false),
9994
+ 'mode': frame[16],
9995
+ 'odr': frame[17],
9996
+ 'sampling_duration': frame[18],
9997
+ 'filter_status': frame[19],
9998
+ 'lpf_coeff': frame[20],
9999
+ 'hpf_coeff': frame[21],
10000
+ 'sampling_interval': frame[22],
10001
+ 'on_request_timeout': frame[23],
10002
+ 'deadband': frame[24],
10003
+ 'payload_length': frame[25],
10004
+ 'fsr': frame[26],
10005
+ 'rpm_compute_status': frame[27],
10006
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
10007
+ 'auto_raw_interval': frame[32],
10008
+ 'smart_mode_skip_count': frame[33],
10009
+ 'smart_mode_acc_threshold':frame[34],
10010
+ 'uptime_counter': frame.slice(35, 39),
10011
+ 'hardware_id': frame.slice(39, 42),
10012
+ 'reserved': frame.slice(42, 46),
10013
+ 'tx_lifetime_counter': frame.slice(46, 50)
10014
+ }
10015
+ }
10016
+ }
10017
+ }
10018
+ },
10019
+ '117': {
10020
+ name: 'Custom Vibration Sensor PPV',
10021
+ parse: (payload, parsed, mac) => {
10022
+ if(payload[7] & 2){
10023
+ console.log('Error found');
10024
+ parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
10025
+ return parsed;
10026
+ }
10027
+ if(payload[8] === 1){
10028
+ let mode = payload[8];
10029
+ let msg_type = '';
10030
+ switch(payload[9]){
10031
+ case 0:
10032
+ msg_type = 'Regular';
10033
+ break;
10034
+ case 1:
10035
+ msg_type = 'Cautionay';
10036
+ break;
10037
+ case 2:
10038
+ msg_type = 'Artwork';
10039
+ break;
10040
+ case 3:
10041
+ msg_type = 'Transient';
10042
+ break;
10043
+ }
10044
+ var deviceAddr = mac;
10045
+ var firmware = payload[1];
10046
+ var odr = msbLsb(payload[10], payload[11]);
10047
+ var fsr = payload[12];
10048
+ var device_temp = msbLsb(payload[13], payload[14])/100;
10049
+ var expected_packets = msbLsb(payload[15], payload[16]);
10050
+ var current_packet = msbLsb(payload[17], payload[18]);
10051
+ var sdata_start = 19;
10052
+
10053
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
10054
+ if(expected_packets != 1){
10055
+ // 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
10056
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet)-1) in globalDevices[deviceAddr].data)) {
10057
+ console.log('-----');
10058
+ console.log('bad packet breakdown deleting stream');
10059
+ console.log(current_packet);
10060
+ console.log(expected_packets);
10061
+ console.log(current_packet in globalDevices[deviceAddr].data);
10062
+ console.log(current_packet == 1);
10063
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
10064
+ if(this.hasOwnProperty('failure_no')){
10065
+ this.failure_no = this.failure_no + 1;
10066
+ }
10067
+ else{
10068
+ this.failure_no = 1;
10069
+ }
10070
+ if(this.hasOwnProperty('failure_no')){
10071
+ console.log('####falure no');
10072
+ console.log(this.failure_no);
10073
+ }
10074
+ // console.log(globalDevices[deviceAddr].data);
10075
+ delete globalDevices[deviceAddr];
10076
+ if(current_packet != 1){
10077
+ return;
10078
+ } else{
10079
+
10080
+ globalDevices[deviceAddr] = {
10081
+ // stream_size: expected_packets,
10082
+ data: {},
10083
+ odr: odr,
10084
+ mo: mode,
10085
+ fsr: fsr,
10086
+ device_temp: device_temp,
10087
+ }
10088
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10089
+ return;
10090
+ }
10091
+ }
10092
+ else{
10093
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10094
+ }
10095
+ }
10096
+ else{
10097
+
10098
+ globalDevices[deviceAddr] = {
10099
+ // stream_size: expected_packets,
10100
+ data: {},
10101
+ odr: odr,
10102
+ mo: mode,
10103
+ fsr: fsr,
10104
+ device_temp: device_temp,
10105
+ }
10106
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10107
+ }
10108
+
10109
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
10110
+ var raw_data = new Array();
10111
+ for(const packet in globalDevices[deviceAddr].data){
10112
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
10113
+ }
10114
+ var label = 0;
10115
+
10116
+ var fft = new Array();
10117
+ var fft_concat = {};
10118
+
10119
+ var en_axis_data = {};
10120
+ en_axis_data.x_offset = 0;
10121
+ en_axis_data.y_offset = 2;
10122
+ en_axis_data.z_offset = 4;
10123
+ en_axis_data.increment = 6;
10124
+ fft_concat = {x: [], y: [], z: []};
10125
+
10126
+ switch(globalDevices[deviceAddr].fsr){
10127
+ case 0:
10128
+ fsr_text = "2g";
10129
+ break;
10130
+ case 1:
10131
+ fsr_text = "4g";
10132
+ break;
10133
+ case 2:
10134
+ fsr_text = "8g";
10135
+ break;
10136
+ case 3:
10137
+ fsr_text = "16g";
10138
+ break;
10139
+ }
10140
+
10141
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
10142
+ label++;
10143
+
10144
+ if('x_offset' in en_axis_data){
10145
+ fft_concat.x.push(parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16) / 100).toFixed(2)));
10146
+ }
10147
+ if('y_offset' in en_axis_data){
10148
+ fft_concat.y.push(parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16) / 100).toFixed(2)));
10149
+ }
10150
+ if('z_offset' in en_axis_data){
10151
+ fft_concat.z.push(parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16) / 100).toFixed(2)));
10152
+ }
10153
+ }
10154
+ var fft_concat_obj = {
10155
+ mode: mode,
10156
+ msg_type: msg_type,
10157
+ mac_address: deviceAddr,
10158
+ fsr: fsr_text,
10159
+ odr: globalDevices[deviceAddr].odr,
10160
+ device_temp: globalDevices[deviceAddr].device_temp,
10161
+ total_samples: label,
10162
+ data: fft_concat
10163
+ };
10164
+ sensor_data = fft_concat_obj;
10165
+ delete globalDevices[deviceAddr];
10166
+ if(this.hasOwnProperty('failure_no')){
10167
+ console.log('####falure no');
10168
+ console.log(this.failure_no);
10169
+ }
10170
+
10171
+ return sensor_data;
10172
+ }
10173
+ else{
10174
+ return;
10175
+ }
10176
+ }else{
10177
+
10178
+ globalDevices[deviceAddr] = {
10179
+ // stream_size: expected_packets,
10180
+ data: {},
10181
+ odr: odr,
10182
+ mo: mode,
10183
+ fsr: fsr,
10184
+ device_temp: device_temp,
10185
+ }
10186
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10187
+ return;
10188
+ }
9398
10189
  }
9399
- switch(frame[26]){
9400
- case 0:
9401
- frame_data.fsr_text = "2g";
9402
- break;
9403
- case 1:
9404
- frame_data.fsr_text = "4g";
9405
- break;
9406
- case 2:
9407
- frame_data.fsr_text = "8g";
9408
- break;
9409
- case 3:
9410
- frame_data.fsr_text = "16g";
9411
- break;
10190
+ else if(payload[8] === 0){
10191
+ // mode byte most significant bit will indicate fft data.
10192
+ // console.log(d);
10193
+ let msg_type = '';
10194
+ switch(payload[9]){
10195
+ case 0:
10196
+ msg_type = 'Regular'
10197
+ break;
10198
+ case 1:
10199
+ msg_type = 'Cautionay';
10200
+ break;
10201
+ case 2:
10202
+ msg_type = 'Artwork';
10203
+ break;
10204
+ case 3:
10205
+ msg_type = 'Transient';
10206
+ break;
10207
+ }
10208
+ return {
10209
+ mode: payload[8],
10210
+ msg_type: msg_type,
10211
+
10212
+ odr: payload.slice(10, 12).reduce(msbLsb),
10213
+ temperature: signInt(payload.slice(12, 14).reduce(msbLsb), 16) / 100,
10214
+
10215
+ x_ppv_velocity: payload.slice(14, 16).reduce(msbLsb) / 100,
10216
+ x_peak_one_Hz: payload.slice(16, 18).reduce(msbLsb),
10217
+ x_peak_two_Hz: payload.slice(18, 20).reduce(msbLsb),
10218
+ x_peak_three_Hz: payload.slice(20, 22).reduce(msbLsb),
10219
+
10220
+ y_ppv_velocity: payload.slice(22, 24).reduce(msbLsb) / 100,
10221
+ y_peak_one_Hz: payload.slice(24, 26).reduce(msbLsb),
10222
+ y_peak_two_Hz: payload.slice(26, 28).reduce(msbLsb),
10223
+ y_peak_three_Hz: payload.slice(28, 30).reduce(msbLsb),
10224
+
10225
+ z_ppv_velocity: payload.slice(30, 32).reduce(msbLsb) / 100,
10226
+ z_peak_one_Hz: payload.slice(32, 34).reduce(msbLsb),
10227
+ z_peak_two_Hz: payload.slice(34, 36).reduce(msbLsb),
10228
+ z_peak_three_Hz: payload.slice(36, 38).reduce(msbLsb)
10229
+ };
9412
10230
  }
9413
- frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
9414
- frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
9415
- frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9416
- frame_data.smart_mode_threshold = frame[34] * 50;
10231
+ // else{
10232
+ // parsed.data = {'error': 'Vibration mode error'}
10233
+ // return parsed;
10234
+ // }
10235
+ },
10236
+ 'parse_fly': (frame) => {
9417
10237
  return {
9418
- 'firmware': frame[2],
9419
- 'destination_address': toMac(frame.slice(12, 16)),
9420
- 'mode': frame_data.mode,
9421
- 'odr': frame_data.odr_1+'Hz',
9422
- 'sampling_duration': frame_data.sampling_duration_1,
9423
- 'filter_status': frame_data.filter_status,
9424
- 'lpf_coeff': frame_data.lpf_coeff_1,
9425
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9426
- 'hpf_coeff': frame_data.hpf_coeff_1,
9427
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9428
- 'sampling_interval': frame_data.sampling_interval,
9429
- 'on_request_timeout': frame_data.on_request_timeout,
9430
- 'deadband': frame_data.deadband,
9431
- 'payload_length': frame_data.payload_length,
9432
- 'fsr': frame_data.fsr_text,
9433
- 'rpm_compute_status': frame_data.rpm_status,
9434
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9435
- 'auto_raw_interval': frame_data.auto_raw_interval,
9436
- 'smart_mode_skip_count': frame[33],
9437
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9438
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
9439
- 'hardware_id': frame.slice(39, 42),
9440
- 'reserved': frame.slice(42, 46),
9441
- 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
10238
+ 'fly_rate': frame.slice(12, 13).reduce(msbLsb) + " Min.",
10239
+ 'fsr': frame[14],
10240
+ 'hardware_id': frame.slice(15, 18),
10241
+ 'report_rate': frame.slice(18, 22).reduce(msbLsb) + " Sec.",
10242
+ 'tx_lifetime_counter': frame.slice(22, 26).reduce(msbLsb),
9442
10243
  'machine_values': {
9443
- 'firmware': frame[2],
9444
- 'destination_address': toMac(frame.slice(12, 16), false),
9445
- 'mode': frame[16],
9446
- 'odr': frame[17],
9447
- 'sampling_duration': frame[18],
9448
- 'filter_status': frame[19],
9449
- 'lpf_coeff': frame[20],
9450
- 'hpf_coeff': frame[21],
9451
- 'sampling_interval': frame[22],
9452
- 'on_request_timeout': frame[23],
9453
- 'deadband': frame[24],
9454
- 'payload_length': frame[25],
9455
- 'fsr': frame[26],
9456
- 'rpm_compute_status': frame[27],
9457
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9458
- 'auto_raw_interval': frame[32],
9459
- 'smart_mode_skip_count': frame[33],
9460
- 'smart_mode_acc_threshold':frame[34],
9461
- 'uptime_counter': frame.slice(35, 39),
9462
- 'hardware_id': frame.slice(39, 42),
9463
- 'reserved': frame.slice(42, 46),
9464
- 'tx_lifetime_counter': frame.slice(46, 50)
10244
+ 'fly_rate': frame.slice(12, 13).reduce(msbLsb),
10245
+ 'fsr':frame[14],
10246
+ 'hardware_id': frame.slice(15, 18),
10247
+ 'report_rate': frame.slice(18, 22),
10248
+ 'tx_lifetime_counter': frame.slice(22, 26)
9465
10249
  }
9466
10250
  }
9467
10251
  }
@@ -9577,6 +10361,98 @@ function sensor_types(parent){
9577
10361
  }
9578
10362
  }
9579
10363
  },
10364
+ '121':{
10365
+ name: 'Wireless Wood Moisture Sensor',
10366
+ parse: (d) => {
10367
+ return {
10368
+ wood_type: d[0],
10369
+ temperature: signInt(d.slice(1, 3).reduce(msbLsb), 16) / 100,
10370
+ humidity: d.slice(3, 5).reduce(msbLsb) / 100,
10371
+ wood_moisture: d.slice(5, 7).reduce(msbLsb) / 100,
10372
+ wood_resistance: (d.slice(7, 15)).reduce(msbLsb) / 100
10373
+ };
10374
+ },
10375
+ 'parse_fly': (frame) => {
10376
+ return {
10377
+ 'hardware_id': frame.slice(12, 15),
10378
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
10379
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
10380
+ 'machine_values': {
10381
+ 'hardware_id': frame.slice(12, 15),
10382
+ 'sample_rate': frame.slice(15, 19),
10383
+ 'tx_life_counter': frame.slice(19, 23)
10384
+ }
10385
+ }
10386
+ }
10387
+ },
10388
+ '122': {
10389
+ name: 'Wireless 4-20mA Current Splitter',
10390
+ parse: (d) => {
10391
+ // This parser may be outdated if a customer has an issue check with Engineering
10392
+ var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
10393
+ var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
10394
+ return {
10395
+ adc1: adc1,
10396
+ adc2: adc2,
10397
+ mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
10398
+ mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
10399
+ };
10400
+ },
10401
+ 'parse_fly': (frame) => {
10402
+ let frame_data = {};
10403
+ switch(frame[16]){
10404
+ case 0:
10405
+ frame_data.fsr = "+-0.256 V";
10406
+ break;
10407
+ case 1:
10408
+ frame_data.fsr = "+-0.512 V";
10409
+ break;
10410
+ case 2:
10411
+ frame_data.fsr = "+-1.024 V";
10412
+ break;
10413
+ case 3:
10414
+ frame_data.fsr = "+-2.048 V";
10415
+ break;
10416
+ case 4:
10417
+ frame_data.fsr = "+-4.096 V";
10418
+ break;
10419
+ case 5:
10420
+ frame_data.fsr = "+-6.144 V";
10421
+ break;
10422
+ }
10423
+ if(frame[2]>12){
10424
+ return {
10425
+ 'firmware': frame[2],
10426
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
10427
+ 'fsr':frame_data.fsr,
10428
+ 'boot_up_time': frame[17],
10429
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
10430
+ 'machine_values': {
10431
+ 'firmware': frame[2],
10432
+ 'report_rate': frame.slice(12, 16),
10433
+ 'fsr':frame[16],
10434
+ 'boot_up_time': frame[17],
10435
+ 'adc_pin_reading': frame.slice(18, 20),
10436
+ 'frame': frame
10437
+ }
10438
+ }
10439
+ }else{
10440
+ return {
10441
+ 'firmware': frame[2],
10442
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
10443
+ 'fsr':frame_data.fsr,
10444
+ 'boot_up_time': frame[17],
10445
+ 'machine_values': {
10446
+ 'firmware': frame[2],
10447
+ 'report_rate': frame.slice(12, 16),
10448
+ 'fsr':frame[16],
10449
+ 'boot_up_time': frame[17],
10450
+ 'frame': frame
10451
+ }
10452
+ }
10453
+ }
10454
+ }
10455
+ },
9580
10456
  '180': {
9581
10457
  name: 'C1D2 One Channel Vibration Plus',
9582
10458
  parse: (payload, parsed, mac) => {
@@ -10015,7 +10891,6 @@ function sensor_types(parent){
10015
10891
  data: {},
10016
10892
  odr: odr,
10017
10893
  mo: mode,
10018
- en_axis: en_axis,
10019
10894
  fsr: fsr,
10020
10895
  hour: hour,
10021
10896
  minute: minute,