@ncd-io/node-red-enterprise-sensors 1.2.2 → 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";
@@ -1351,11 +1369,19 @@ module.exports = class WirelessSensor{
1351
1369
  return this.config_send(sensor_mac, packet);
1352
1370
  }
1353
1371
  config_set_fly_interval_108(sensor_mac, value){
1354
- console.log('config_set_fly_interval_108');
1355
- var packet = [247, 56, 0, 0, 0, 0, value];
1356
- console.log(packet);
1357
- return this.config_send(sensor_mac, packet);
1358
- }
1372
+ console.log('config_set_fly_interval_108');
1373
+ var packet = [247, 56, 0, 0, 0];
1374
+ let val = int2Bytes((value), 2);
1375
+ packet.push(...val);
1376
+ console.log(packet);
1377
+ return this.config_send(sensor_mac, packet);
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
+ }
1359
1385
  config_set_sample_rate_108(sensor_mac, value){
1360
1386
  console.log('config_set_sample_rate_108');
1361
1387
  var packet = [244, 57, 0, 0, 0, value];
@@ -1973,6 +1999,12 @@ module.exports = class WirelessSensor{
1973
1999
  console.log(packet);
1974
2000
  return this.config_send(sensor_mac, packet);
1975
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
+ }
1976
2008
  config_set_to_always_on_120(sensor_mac){
1977
2009
  console.log('config_set_to_always_on_120');
1978
2010
  let packet = [244, 10, 0, 0, 0, 1];
@@ -1997,20 +2029,58 @@ module.exports = class WirelessSensor{
1997
2029
  console.log(packet);
1998
2030
  return this.config_send(sensor_mac, packet);
1999
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
+ }
2000
2044
  config_set_tare_the_scale_217(sensor_mac){
2001
- console.log('config_set_tare_the_scale_217');
2002
- var packet = [244, 32, 0, 0, 26];
2003
- console.log(packet);
2004
- return this.config_send(sensor_mac, packet);
2005
- }
2006
- config_set_weight_calib_217(sensor_mac, value){
2007
- console.log('config_set_weight_calib_217');
2008
- var packet = [244, 33, 0, 0, 26];
2009
- let value_ = int2Bytes((value*100), 4);
2010
- packet.push(...value_);
2011
- console.log(packet);
2012
- return this.config_send(sensor_mac, packet);
2013
- }
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
+ }
2014
2084
  config_get_delay(sensor_mac){
2015
2085
  return new Promise((fulfill, reject) => {
2016
2086
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -2215,9 +2285,148 @@ module.exports = class WirelessSensor{
2215
2285
  delete this.queue;
2216
2286
  this.queue = new Queue(1);
2217
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
+ };
2218
2419
  config_send(sensor_mac, data, opts, cmd_timeout = 1500){
2219
2420
  var that = this;
2220
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
+ // });
2221
2430
  that.queue.add(() => {
2222
2431
  return new Promise((f, r) => {
2223
2432
  var tout;
@@ -2269,12 +2478,107 @@ module.exports = class WirelessSensor{
2269
2478
  }).then();
2270
2479
  });
2271
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
+ });
2272
2567
  this.queue.add(() => {
2273
2568
  return new Promise((f, r) => {
2274
2569
  setTimeout(f, 500);
2275
2570
  });
2276
2571
  });
2277
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
+ });
2278
2582
  }
2279
2583
  queue_bridge_query(sensor_mac, data, meta = null, opts){
2280
2584
  var that = this;
@@ -3310,8 +3614,8 @@ function sensor_types(parent){
3310
3614
  return {
3311
3615
  adc1: adc1,
3312
3616
  adc2: adc2,
3313
- mA1: parseFloat((adc1 * 0.0006863).toFixed(2)),
3314
- 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
3315
3619
  };
3316
3620
  },
3317
3621
  'parse_fly': (frame) => {
@@ -3746,11 +4050,66 @@ function sensor_types(parent){
3746
4050
  if(payload[8] === 1){
3747
4051
  var deviceAddr = mac;
3748
4052
  var firmware = payload[1];
3749
- var hour = payload[11];
3750
- var minute = payload[12];
3751
- var expected_packets = payload[15];
3752
- var current_packet = payload[16];
3753
- 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
+ }
3754
4113
 
3755
4114
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
3756
4115
  if(expected_packets != 1){
@@ -3779,48 +4138,6 @@ function sensor_types(parent){
3779
4138
  return;
3780
4139
  } else{
3781
4140
 
3782
- var mode = payload[8];
3783
- var odr = payload[9];
3784
- var en_axis = payload[10] & 7;
3785
- var fsr = payload[10] >> 5;
3786
- var device_temp = msbLsb(payload[13], payload[14])/100;
3787
-
3788
-
3789
- switch(odr){
3790
- case 6:
3791
- odr = 50;
3792
- break;
3793
- case 7:
3794
- odr = 100;
3795
- break;
3796
- case 8:
3797
- odr = 200;
3798
- break;
3799
- case 9:
3800
- odr = 400;
3801
- break;
3802
- case 10:
3803
- odr = 800;
3804
- break;
3805
- case 11:
3806
- odr = 1600;
3807
- break;
3808
- case 12:
3809
- odr = 3200;
3810
- break;
3811
- case 13:
3812
- odr = 6400;
3813
- break;
3814
- case 14:
3815
- odr = 12800;
3816
- break;
3817
- case 15:
3818
- odr = 25600;
3819
- break;
3820
- default:
3821
- odr = 0;
3822
- }
3823
-
3824
4141
  globalDevices[deviceAddr] = {
3825
4142
  // stream_size: expected_packets,
3826
4143
  data: {},
@@ -3841,47 +4158,6 @@ function sensor_types(parent){
3841
4158
  }
3842
4159
  }
3843
4160
  else{
3844
- var mode = payload[8];
3845
- var odr = payload[9];
3846
- var en_axis = payload[10] & 7;
3847
- var fsr = payload[10] >> 5;
3848
- var device_temp = msbLsb(payload[13], payload[14])/100;
3849
-
3850
-
3851
- switch(odr){
3852
- case 6:
3853
- odr = 50;
3854
- break;
3855
- case 7:
3856
- odr = 100;
3857
- break;
3858
- case 8:
3859
- odr = 200;
3860
- break;
3861
- case 9:
3862
- odr = 400;
3863
- break;
3864
- case 10:
3865
- odr = 800;
3866
- break;
3867
- case 11:
3868
- odr = 1600;
3869
- break;
3870
- case 12:
3871
- odr = 3200;
3872
- break;
3873
- case 13:
3874
- odr = 6400;
3875
- break;
3876
- case 14:
3877
- odr = 12800;
3878
- break;
3879
- case 15:
3880
- odr = 25600;
3881
- break;
3882
- default:
3883
- odr = 0;
3884
- }
3885
4161
 
3886
4162
  globalDevices[deviceAddr] = {
3887
4163
  // stream_size: expected_packets,
@@ -4015,48 +4291,6 @@ function sensor_types(parent){
4015
4291
  }
4016
4292
  }else{
4017
4293
 
4018
- var mode = payload[8];
4019
- var odr = payload[9];
4020
- var en_axis = payload[10] & 7;
4021
- var fsr = payload[10] >> 5;
4022
- var device_temp = msbLsb(payload[13], payload[14])/100;
4023
-
4024
-
4025
- switch(odr){
4026
- case 6:
4027
- odr = 50;
4028
- break;
4029
- case 7:
4030
- odr = 100;
4031
- break;
4032
- case 8:
4033
- odr = 200;
4034
- break;
4035
- case 9:
4036
- odr = 400;
4037
- break;
4038
- case 10:
4039
- odr = 800;
4040
- break;
4041
- case 11:
4042
- odr = 1600;
4043
- break;
4044
- case 12:
4045
- odr = 3200;
4046
- break;
4047
- case 13:
4048
- odr = 6400;
4049
- break;
4050
- case 14:
4051
- odr = 12800;
4052
- break;
4053
- case 15:
4054
- odr = 25600;
4055
- break;
4056
- default:
4057
- odr = 0;
4058
- }
4059
-
4060
4294
  globalDevices[deviceAddr] = {
4061
4295
  // stream_size: expected_packets,
4062
4296
  data: {},
@@ -4367,11 +4601,66 @@ function sensor_types(parent){
4367
4601
  if(payload[8] === 1){
4368
4602
  var deviceAddr = mac;
4369
4603
  var firmware = payload[1];
4370
- var hour = payload[11];
4371
- var minute = payload[12];
4372
- var expected_packets = payload[15];
4373
- var current_packet = payload[16];
4374
- 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
+ }
4375
4664
 
4376
4665
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
4377
4666
  if(expected_packets != 1){
@@ -4399,46 +4688,6 @@ function sensor_types(parent){
4399
4688
  if(current_packet != 1){
4400
4689
  return;
4401
4690
  } else{
4402
- var mode = payload[8];
4403
- var odr = payload[9];
4404
- var en_axis = payload[10] & 7;
4405
- var fsr = payload[10] >> 5;
4406
- var device_temp = msbLsb(payload[13], payload[14])/100;
4407
-
4408
- switch(odr){
4409
- case 6:
4410
- odr = 50;
4411
- break;
4412
- case 7:
4413
- odr = 100;
4414
- break;
4415
- case 8:
4416
- odr = 200;
4417
- break;
4418
- case 9:
4419
- odr = 400;
4420
- break;
4421
- case 10:
4422
- odr = 800;
4423
- break;
4424
- case 11:
4425
- odr = 1600;
4426
- break;
4427
- case 12:
4428
- odr = 3200;
4429
- break;
4430
- case 13:
4431
- odr = 6400;
4432
- break;
4433
- case 14:
4434
- odr = 12800;
4435
- break;
4436
- case 15:
4437
- odr = 25600;
4438
- break;
4439
- default:
4440
- odr = 0;
4441
- }
4442
4691
 
4443
4692
  globalDevices[deviceAddr] = {
4444
4693
  // stream_size: expected_packets,
@@ -4460,47 +4709,6 @@ function sensor_types(parent){
4460
4709
  }
4461
4710
  }
4462
4711
  else{
4463
- var mode = payload[8];
4464
- var odr = payload[9];
4465
- var en_axis = payload[10] & 7;
4466
- var fsr = payload[10] >> 5;
4467
- var device_temp = msbLsb(payload[13], payload[14])/100;
4468
-
4469
-
4470
- switch(odr){
4471
- case 6:
4472
- odr = 50;
4473
- break;
4474
- case 7:
4475
- odr = 100;
4476
- break;
4477
- case 8:
4478
- odr = 200;
4479
- break;
4480
- case 9:
4481
- odr = 400;
4482
- break;
4483
- case 10:
4484
- odr = 800;
4485
- break;
4486
- case 11:
4487
- odr = 1600;
4488
- break;
4489
- case 12:
4490
- odr = 3200;
4491
- break;
4492
- case 13:
4493
- odr = 6400;
4494
- break;
4495
- case 14:
4496
- odr = 12800;
4497
- break;
4498
- case 15:
4499
- odr = 25600;
4500
- break;
4501
- default:
4502
- odr = 0;
4503
- }
4504
4712
 
4505
4713
  globalDevices[deviceAddr] = {
4506
4714
  // stream_size: expected_packets,
@@ -4624,7 +4832,6 @@ function sensor_types(parent){
4624
4832
  var fft_concat_obj = {
4625
4833
  probe: probe,
4626
4834
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
4627
- probe: probe,
4628
4835
  mac_address: deviceAddr,
4629
4836
  en_axis: globalDevices[deviceAddr].en_axis,
4630
4837
  fsr: fsr_text,
@@ -4645,47 +4852,6 @@ function sensor_types(parent){
4645
4852
  return;
4646
4853
  }
4647
4854
  }else{
4648
- var mode = payload[8];
4649
- var odr = payload[9];
4650
- var en_axis = payload[10] & 7;
4651
- var fsr = payload[10] >> 5;
4652
- var device_temp = msbLsb(payload[13], payload[14])/100;
4653
-
4654
-
4655
- switch(odr){
4656
- case 6:
4657
- odr = 50;
4658
- break;
4659
- case 7:
4660
- odr = 100;
4661
- break;
4662
- case 8:
4663
- odr = 200;
4664
- break;
4665
- case 9:
4666
- odr = 400;
4667
- break;
4668
- case 10:
4669
- odr = 800;
4670
- break;
4671
- case 11:
4672
- odr = 1600;
4673
- break;
4674
- case 12:
4675
- odr = 3200;
4676
- break;
4677
- case 13:
4678
- odr = 6400;
4679
- break;
4680
- case 14:
4681
- odr = 12800;
4682
- break;
4683
- case 15:
4684
- odr = 25600;
4685
- break;
4686
- default:
4687
- odr = 0;
4688
- }
4689
4855
 
4690
4856
  globalDevices[deviceAddr] = {
4691
4857
  // stream_size: expected_packets,
@@ -5173,11 +5339,66 @@ function sensor_types(parent){
5173
5339
  if(payload[8] === 1){
5174
5340
  var deviceAddr = mac;
5175
5341
  var firmware = payload[1];
5176
- var hour = payload[11];
5177
- var minute = payload[12];
5178
- var expected_packets = payload[15];
5179
- var current_packet = payload[16];
5180
- 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
+ }
5181
5402
 
5182
5403
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
5183
5404
  if(expected_packets != 1){
@@ -5206,48 +5427,6 @@ function sensor_types(parent){
5206
5427
  return;
5207
5428
  } else{
5208
5429
 
5209
- var mode = payload[8];
5210
- var odr = payload[9];
5211
- var en_axis = payload[10] & 7;
5212
- var fsr = payload[10] >> 5;
5213
- var device_temp = msbLsb(payload[13], payload[14])/100;
5214
-
5215
-
5216
- switch(odr){
5217
- case 6:
5218
- odr = 50;
5219
- break;
5220
- case 7:
5221
- odr = 100;
5222
- break;
5223
- case 8:
5224
- odr = 200;
5225
- break;
5226
- case 9:
5227
- odr = 400;
5228
- break;
5229
- case 10:
5230
- odr = 800;
5231
- break;
5232
- case 11:
5233
- odr = 1600;
5234
- break;
5235
- case 12:
5236
- odr = 3200;
5237
- break;
5238
- case 13:
5239
- odr = 6400;
5240
- break;
5241
- case 14:
5242
- odr = 12800;
5243
- break;
5244
- case 15:
5245
- odr = 25600;
5246
- break;
5247
- default:
5248
- odr = 0;
5249
- }
5250
-
5251
5430
  globalDevices[deviceAddr] = {
5252
5431
  // stream_size: expected_packets,
5253
5432
  data: {},
@@ -5268,47 +5447,6 @@ function sensor_types(parent){
5268
5447
  }
5269
5448
  }
5270
5449
  else{
5271
- var mode = payload[8];
5272
- var odr = payload[9];
5273
- var en_axis = payload[10] & 7;
5274
- var fsr = payload[10] >> 5;
5275
- var device_temp = msbLsb(payload[13], payload[14])/100;
5276
-
5277
-
5278
- switch(odr){
5279
- case 6:
5280
- odr = 50;
5281
- break;
5282
- case 7:
5283
- odr = 100;
5284
- break;
5285
- case 8:
5286
- odr = 200;
5287
- break;
5288
- case 9:
5289
- odr = 400;
5290
- break;
5291
- case 10:
5292
- odr = 800;
5293
- break;
5294
- case 11:
5295
- odr = 1600;
5296
- break;
5297
- case 12:
5298
- odr = 3200;
5299
- break;
5300
- case 13:
5301
- odr = 6400;
5302
- break;
5303
- case 14:
5304
- odr = 12800;
5305
- break;
5306
- case 15:
5307
- odr = 25600;
5308
- break;
5309
- default:
5310
- odr = 0;
5311
- }
5312
5450
 
5313
5451
  globalDevices[deviceAddr] = {
5314
5452
  // stream_size: expected_packets,
@@ -5445,48 +5583,6 @@ function sensor_types(parent){
5445
5583
  }
5446
5584
  }else{
5447
5585
 
5448
- var mode = payload[8];
5449
- var odr = payload[9];
5450
- var en_axis = payload[10] & 7;
5451
- var fsr = payload[10] >> 5;
5452
- var device_temp = msbLsb(payload[13], payload[14])/100;
5453
-
5454
-
5455
- switch(odr){
5456
- case 6:
5457
- odr = 50;
5458
- break;
5459
- case 7:
5460
- odr = 100;
5461
- break;
5462
- case 8:
5463
- odr = 200;
5464
- break;
5465
- case 9:
5466
- odr = 400;
5467
- break;
5468
- case 10:
5469
- odr = 800;
5470
- break;
5471
- case 11:
5472
- odr = 1600;
5473
- break;
5474
- case 12:
5475
- odr = 3200;
5476
- break;
5477
- case 13:
5478
- odr = 6400;
5479
- break;
5480
- case 14:
5481
- odr = 12800;
5482
- break;
5483
- case 15:
5484
- odr = 25600;
5485
- break;
5486
- default:
5487
- odr = 0;
5488
- }
5489
-
5490
5586
  globalDevices[deviceAddr] = {
5491
5587
  // stream_size: expected_packets,
5492
5588
  data: {},
@@ -5787,11 +5883,66 @@ function sensor_types(parent){
5787
5883
  if(payload[8] === 1){
5788
5884
  var deviceAddr = mac;
5789
5885
  var firmware = payload[1];
5790
- var hour = payload[11];
5791
- var minute = payload[12];
5792
- var expected_packets = payload[15];
5793
- var current_packet = payload[16];
5794
- 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
+ }
5795
5946
 
5796
5947
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
5797
5948
  if(expected_packets != 1){
@@ -5820,48 +5971,6 @@ function sensor_types(parent){
5820
5971
  return;
5821
5972
  } else{
5822
5973
 
5823
- var mode = payload[8];
5824
- var odr = payload[9];
5825
- var en_axis = payload[10] & 7;
5826
- var fsr = payload[10] >> 5;
5827
- var device_temp = msbLsb(payload[13], payload[14])/100;
5828
-
5829
-
5830
- switch(odr){
5831
- case 6:
5832
- odr = 50;
5833
- break;
5834
- case 7:
5835
- odr = 100;
5836
- break;
5837
- case 8:
5838
- odr = 200;
5839
- break;
5840
- case 9:
5841
- odr = 400;
5842
- break;
5843
- case 10:
5844
- odr = 800;
5845
- break;
5846
- case 11:
5847
- odr = 1600;
5848
- break;
5849
- case 12:
5850
- odr = 3200;
5851
- break;
5852
- case 13:
5853
- odr = 6400;
5854
- break;
5855
- case 14:
5856
- odr = 12800;
5857
- break;
5858
- case 15:
5859
- odr = 25600;
5860
- break;
5861
- default:
5862
- odr = 0;
5863
- }
5864
-
5865
5974
  globalDevices[deviceAddr] = {
5866
5975
  // stream_size: expected_packets,
5867
5976
  data: {},
@@ -5882,47 +5991,6 @@ function sensor_types(parent){
5882
5991
  }
5883
5992
  }
5884
5993
  else{
5885
- var mode = payload[8];
5886
- var odr = payload[9];
5887
- var en_axis = payload[10] & 7;
5888
- var fsr = payload[10] >> 5;
5889
- var device_temp = msbLsb(payload[13], payload[14])/100;
5890
-
5891
-
5892
- switch(odr){
5893
- case 6:
5894
- odr = 50;
5895
- break;
5896
- case 7:
5897
- odr = 100;
5898
- break;
5899
- case 8:
5900
- odr = 200;
5901
- break;
5902
- case 9:
5903
- odr = 400;
5904
- break;
5905
- case 10:
5906
- odr = 800;
5907
- break;
5908
- case 11:
5909
- odr = 1600;
5910
- break;
5911
- case 12:
5912
- odr = 3200;
5913
- break;
5914
- case 13:
5915
- odr = 6400;
5916
- break;
5917
- case 14:
5918
- odr = 12800;
5919
- break;
5920
- case 15:
5921
- odr = 25600;
5922
- break;
5923
- default:
5924
- odr = 0;
5925
- }
5926
5994
 
5927
5995
  globalDevices[deviceAddr] = {
5928
5996
  // stream_size: expected_packets,
@@ -6055,48 +6123,6 @@ function sensor_types(parent){
6055
6123
  }
6056
6124
  }else{
6057
6125
 
6058
- var mode = payload[8];
6059
- var odr = payload[9];
6060
- var en_axis = payload[10] & 7;
6061
- var fsr = payload[10] >> 5;
6062
- var device_temp = msbLsb(payload[13], payload[14])/100;
6063
-
6064
-
6065
- switch(odr){
6066
- case 6:
6067
- odr = 50;
6068
- break;
6069
- case 7:
6070
- odr = 100;
6071
- break;
6072
- case 8:
6073
- odr = 200;
6074
- break;
6075
- case 9:
6076
- odr = 400;
6077
- break;
6078
- case 10:
6079
- odr = 800;
6080
- break;
6081
- case 11:
6082
- odr = 1600;
6083
- break;
6084
- case 12:
6085
- odr = 3200;
6086
- break;
6087
- case 13:
6088
- odr = 6400;
6089
- break;
6090
- case 14:
6091
- odr = 12800;
6092
- break;
6093
- case 15:
6094
- odr = 25600;
6095
- break;
6096
- default:
6097
- odr = 0;
6098
- }
6099
-
6100
6126
  globalDevices[deviceAddr] = {
6101
6127
  // stream_size: expected_packets,
6102
6128
  data: {},
@@ -6912,147 +6938,602 @@ function sensor_types(parent){
6912
6938
  };
6913
6939
  }
6914
6940
  },
6915
- '105': {
6916
- name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
6917
- parse: (d) => {
6918
- return {
6919
- raw_adc: d.slice(0, 2).reduce(msbLsb),
6920
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
6921
- db: d.slice(4, 6).reduce(msbLsb) / 100
6922
- };
6923
- }
6924
- },
6925
- '106': {
6926
- name: '2 Channel Automatic Luber With Ultrasound Vibration Sensor',
6927
- parse: (d) => {
6928
- return {
6929
- c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
6930
- c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
6931
- c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
6932
- c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
6933
- c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
6934
- c2_db: d.slice(10, 12).reduce(msbLsb) / 100
6935
- };
6936
- }
6937
- },
6938
- '107': {
6939
- name: '16-Bit 4-Channel 4-20mA',
6940
- parse: (d) => {
6941
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
6942
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
6943
- var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
6944
- var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
6945
- var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
6946
- var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
6947
- var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
6948
- var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
6949
- return {
6950
- adc1: adc1,
6951
- adc2: adc2,
6952
- adc3: adc3,
6953
- adc4: adc4,
6954
- ma1: ma1,
6955
- ma2: ma2,
6956
- ma3: ma3,
6957
- ma4: ma4
6958
- };
6959
- }
6960
- },
6961
- '108': {
6962
- name: 'Machine Uptime Monitoring Sensor',
6963
- parse: (d, payload) => {
6964
- let firmware = payload[1];
6965
- if(payload[7] & 2 != 0){
6966
- console.log('Error found');
6967
- // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
6968
- let error = {error: 'Error found, Acclerometer Probe may be unattached'};
6969
- return error;
6970
- }
6971
- if(firmware > 4){
6972
- let report_type = d[41]? "Shift": "Regular";
6973
- return {
6974
- digital_input_counter: d.slice(0, 4).reduce(msbLsb),
6975
- digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
6976
- ct_input_counter: d.slice(8, 12).reduce(msbLsb),
6977
- ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
6978
- opto_input_counter: d.slice(16, 20).reduce(msbLsb),
6979
- opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
6980
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
6981
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
6982
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
6983
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
6984
- input_di: d[40] & 1 ? 1 : 0,
6985
- input_ct: d[40] & 2 ? 1 : 0,
6986
- input_opto: d[40] & 4 ? 1 : 0,
6987
- input_acc: d[40] & 8 ? 1 : 0,
6988
- input_mag: d[40] & 16 ? 1 : 0,
6989
- report_type: report_type,
6990
- rtc: [
6991
- String(d[42]).padStart(2, '0'),
6992
- String(d[43]).padStart(2, '0'),
6993
- String(d[44]).padStart(2, '0')
6994
- ].join(':')
6995
- };
6996
- }else{
6997
- return {
6998
- digital_input_counter: d.slice(0, 4).reduce(msbLsb),
6999
- digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
7000
- ct_input_counter: d.slice(8, 12).reduce(msbLsb),
7001
- ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
7002
- opto_input_counter: d.slice(16, 20).reduce(msbLsb),
7003
- opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
7004
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
7005
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
7006
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
7007
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
7008
- input_di: d[40] & 1 ? 1 : 0,
7009
- input_ct: d[40] & 2 ? 1 : 0,
7010
- input_opto: d[40] & 4 ? 1 : 0,
7011
- input_acc: d[40] & 8 ? 1 : 0,
7012
- input_mag: d[40] & 16 ? 1 : 0
7013
- };
7014
- }
7015
- },
7016
- 'parse_fly': (frame) => {
7017
- return {
7018
- 'firmware': frame[2],
7019
- 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
7020
- 'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
7021
- 'debouncing_timeout': frame[17].toString() + "sec.",
7022
- 'accelero_active_state': frame[18],
7023
- 'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
7024
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
7025
- 'trasnmit_on_change_status': frame[26],
7026
- 'machine_values': {
7027
- 'firmware': frame[2],
7028
- 'report_rate': frame.slice(12, 16),
7029
- 'accelerometer_threshold': frame[16],
7030
- 'debouncing_timeout': frame[17],
7031
- 'accelero_active_state': frame[18],
7032
- 'digital_inputs_active_edge': frame.slice(19, 22),
7033
- 'counter_threshold': frame.slice(22, 26),
7034
- 'trasnmit_on_change_status': frame[26]
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;
7035
6954
  }
7036
- }
7037
- }
7038
- },
7039
- '109': {
7040
- name: 'Wireless Custom Solar Sensor',
7041
- parse: (d) => {
7042
- return {
7043
- illuminance: d.slice(0, 4).reduce(msbLsb),
7044
- total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
7045
- ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
7046
- };
7047
- },
7048
- 'parse_fly': (frame) => {
7049
- return {
7050
- 'firmware': frame[2],
7051
- 'hardware_id': frame.slice(12, 15),
7052
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
7053
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
7054
- 'machine_values': {
7055
- 'firmware': frame[2],
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
+ },
7224
+ '105': {
7225
+ name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
7226
+ parse: (d) => {
7227
+ return {
7228
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
7229
+ ma: d.slice(2, 4).reduce(msbLsb) / 100,
7230
+ db: d.slice(4, 6).reduce(msbLsb) / 100
7231
+ };
7232
+ }
7233
+ },
7234
+ '106': {
7235
+ name: '2 Channel Automatic Luber With Ultrasound Vibration Sensor',
7236
+ parse: (d) => {
7237
+ return {
7238
+ c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
7239
+ c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
7240
+ c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
7241
+ c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
7242
+ c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
7243
+ c2_db: d.slice(10, 12).reduce(msbLsb) / 100
7244
+ };
7245
+ }
7246
+ },
7247
+ '107': {
7248
+ name: '16-Bit 4-Channel 4-20mA',
7249
+ parse: (d) => {
7250
+ var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
7251
+ var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
7252
+ var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
7253
+ var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
7254
+ var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
7255
+ var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
7256
+ var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
7257
+ var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
7258
+ return {
7259
+ adc1: adc1,
7260
+ adc2: adc2,
7261
+ adc3: adc3,
7262
+ adc4: adc4,
7263
+ ma1: ma1,
7264
+ ma2: ma2,
7265
+ ma3: ma3,
7266
+ ma4: ma4
7267
+ };
7268
+ }
7269
+ },
7270
+ '108': {
7271
+ name: 'Machine Uptime Monitoring Sensor',
7272
+ parse: (d, payload) => {
7273
+ let firmware = payload[1];
7274
+ if(payload[7] & 2 != 0){
7275
+ console.log('Error found');
7276
+ // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
7277
+ let error = {error: 'Error found, Acclerometer Probe may be unattached'};
7278
+ return error;
7279
+ }
7280
+ if(firmware > 4){
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
+ }
7296
+ return {
7297
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
7298
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
7299
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
7300
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
7301
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
7302
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
7303
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
7304
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
7305
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
7306
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
7307
+ input_di: d[40] & 1 ? 1 : 0,
7308
+ input_ct: d[40] & 2 ? 1 : 0,
7309
+ input_opto: d[40] & 4 ? 1 : 0,
7310
+ input_acc: d[40] & 8 ? 1 : 0,
7311
+ input_mag: d[40] & 16 ? 1 : 0,
7312
+ report_type: report_type,
7313
+ rtc: [
7314
+ String(d[42]).padStart(2, '0'),
7315
+ String(d[43]).padStart(2, '0'),
7316
+ String(d[44]).padStart(2, '0')
7317
+ ].join(':')
7318
+ };
7319
+ }else{
7320
+ return {
7321
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
7322
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
7323
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
7324
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
7325
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
7326
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
7327
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
7328
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
7329
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
7330
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
7331
+ input_di: d[40] & 1 ? 1 : 0,
7332
+ input_ct: d[40] & 2 ? 1 : 0,
7333
+ input_opto: d[40] & 4 ? 1 : 0,
7334
+ input_acc: d[40] & 8 ? 1 : 0,
7335
+ input_mag: d[40] & 16 ? 1 : 0
7336
+ };
7337
+ }
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
+ },
7505
+ 'parse_fly': (frame) => {
7506
+ return {
7507
+ 'firmware': frame[2],
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),
7511
+ 'machine_values': {
7512
+ 'firmware': frame[2],
7513
+ 'hardware_id': frame.slice(12, 15),
7514
+ 'sample_rate': frame.slice(15, 19),
7515
+ 'tx_life_counter': frame.slice(19, 23)
7516
+ }
7517
+ }
7518
+ }
7519
+ },
7520
+ '109': {
7521
+ name: 'Wireless Custom Solar Sensor',
7522
+ parse: (d) => {
7523
+ return {
7524
+ illuminance: d.slice(0, 4).reduce(msbLsb),
7525
+ total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
7526
+ ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
7527
+ };
7528
+ },
7529
+ 'parse_fly': (frame) => {
7530
+ return {
7531
+ 'firmware': frame[2],
7532
+ 'hardware_id': frame.slice(12, 15),
7533
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
7534
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
7535
+ 'machine_values': {
7536
+ 'firmware': frame[2],
7056
7537
  'hardware_id': frame.slice(12, 15),
7057
7538
  'sample_rate': frame.slice(15, 19).reduce(msbLsb),
7058
7539
  'tx_life_counter': frame.slice(19, 23).reduce(msbLsb)
@@ -7081,7 +7562,7 @@ function sensor_types(parent){
7081
7562
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
7082
7563
  if(expected_packets != 1){
7083
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
7084
- 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)) {
7085
7566
  console.log('-----');
7086
7567
  console.log('bad packet breakdown deleting stream');
7087
7568
  console.log(current_packet);
@@ -7106,8 +7587,7 @@ function sensor_types(parent){
7106
7587
  } else{
7107
7588
 
7108
7589
  var mode = payload[8];
7109
- var odr = msbLsb(payload[9], payload[10])
7110
- var en_axis = payload[11] & 7;
7590
+ var odr = msbLsb(payload[9], payload[10]);
7111
7591
  var fsr = payload[11] >> 5;
7112
7592
  var device_temp = msbLsb(payload[14], payload[15])/100;
7113
7593
 
@@ -7116,7 +7596,6 @@ function sensor_types(parent){
7116
7596
  data: {},
7117
7597
  odr: odr,
7118
7598
  mo: mode,
7119
- en_axis: en_axis,
7120
7599
  fsr: fsr,
7121
7600
  hour: hour,
7122
7601
  minute: minute,
@@ -7132,8 +7611,7 @@ function sensor_types(parent){
7132
7611
  }
7133
7612
  else{
7134
7613
  var mode = payload[8];
7135
- var odr = msbLsb(payload[9], payload[10])
7136
- var en_axis = payload[11] & 7;
7614
+ var odr = msbLsb(payload[9], payload[10]);
7137
7615
  var fsr = payload[11] >> 5;
7138
7616
  var device_temp = msbLsb(payload[14], payload[15])/100;
7139
7617
 
@@ -7142,7 +7620,6 @@ function sensor_types(parent){
7142
7620
  data: {},
7143
7621
  odr: odr,
7144
7622
  mo: mode,
7145
- en_axis: en_axis,
7146
7623
  fsr: fsr,
7147
7624
  hour: hour,
7148
7625
  minute: minute,
@@ -7162,43 +7639,11 @@ function sensor_types(parent){
7162
7639
  var fft_concat = {};
7163
7640
 
7164
7641
  var en_axis_data = {};
7165
- switch (globalDevices[deviceAddr].en_axis){
7166
- case 1:
7167
- en_axis_data.x_offset = 0;
7168
- en_axis_data.increment = 2;
7169
- break;
7170
- case 2:
7171
- en_axis_data.y_offset = 0;
7172
- en_axis_data.increment = 2;
7173
- break;
7174
- case 3:
7175
- en_axis_data.x_offset = 0;
7176
- en_axis_data.y_offset = 2;
7177
- en_axis_data.increment = 4;
7178
- break;
7179
- case 4:
7180
- en_axis_data.z_offset = 0;
7181
- en_axis_data.increment = 2;
7182
- break;
7183
- case 5:
7184
- en_axis_data.x_offset = 0;
7185
- en_axis_data.z_offset = 2;
7186
- en_axis_data.increment = 4;
7187
- break;
7188
- case 6:
7189
- en_axis_data.y_offset = 0;
7190
- en_axis_data.z_offset = 2;
7191
- en_axis_data.increment = 4;
7192
- break;
7193
- case 7:
7194
- en_axis_data.x_offset = 0;
7195
- en_axis_data.y_offset = 2;
7196
- en_axis_data.z_offset = 4;
7197
- en_axis_data.increment = 6;
7198
- break;
7199
- default:
7200
- en_axis_data.increment = 0;
7201
- }
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: []};
7202
7647
 
7203
7648
  var fsr_mult = .00006;
7204
7649
  var fsr_text = "";
@@ -7231,19 +7676,18 @@ function sensor_types(parent){
7231
7676
  break;
7232
7677
  }
7233
7678
 
7679
+
7234
7680
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7235
7681
  label++;
7236
7682
 
7237
- fft_concat[label] = {};
7238
-
7239
7683
  if('x_offset' in en_axis_data){
7240
- 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)));
7241
7685
  }
7242
7686
  if('y_offset' in en_axis_data){
7243
- 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)));
7244
7688
  }
7245
7689
  if('z_offset' in en_axis_data){
7246
- 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)));
7247
7691
  }
7248
7692
  }
7249
7693
  var fft_concat_obj = {
@@ -7251,7 +7695,6 @@ function sensor_types(parent){
7251
7695
  msg_type: msg_type,
7252
7696
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
7253
7697
  mac_address: deviceAddr,
7254
- en_axis: globalDevices[deviceAddr].en_axis,
7255
7698
  fsr: fsr_text,
7256
7699
  odr: globalDevices[deviceAddr].odr,
7257
7700
  device_temp: globalDevices[deviceAddr].device_temp,
@@ -7273,8 +7716,7 @@ function sensor_types(parent){
7273
7716
  }else{
7274
7717
 
7275
7718
  var mode = payload[8];
7276
- var odr = msbLsb(payload[9], payload[10])
7277
- var en_axis = payload[11] & 7;
7719
+ var odr = msbLsb(payload[9], payload[10]);
7278
7720
  var fsr = payload[11] >> 5;
7279
7721
  var device_temp = msbLsb(payload[14], payload[15])/100;
7280
7722
 
@@ -7283,7 +7725,6 @@ function sensor_types(parent){
7283
7725
  data: {},
7284
7726
  odr: odr,
7285
7727
  mo: mode,
7286
- en_axis: en_axis,
7287
7728
  fsr: fsr,
7288
7729
  hour: hour,
7289
7730
  minute: minute,
@@ -7563,54 +8004,109 @@ function sensor_types(parent){
7563
8004
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
7564
8005
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
7565
8006
  frame_data.smart_mode_threshold = frame[34] * 50;
7566
- return {
7567
- 'firmware': frame[2],
7568
- 'destination_address': toMac(frame.slice(12, 16)),
7569
- 'mode': frame_data.mode,
7570
- 'odr': frame_data.odr_1+'Hz',
7571
- 'sampling_duration': frame_data.sampling_duration_1,
7572
- 'filter_status': frame_data.filter_status,
7573
- 'lpf_coeff': frame_data.lpf_coeff_1,
7574
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
7575
- 'hpf_coeff': frame_data.hpf_coeff_1,
7576
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
7577
- 'sampling_interval': frame_data.sampling_interval,
7578
- 'on_request_timeout': frame_data.on_request_timeout,
7579
- 'deadband': frame_data.deadband,
7580
- 'payload_length': frame_data.payload_length,
7581
- 'fsr': frame_data.fsr_text,
7582
- 'rpm_compute_status': frame_data.rpm_status,
7583
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
7584
- 'auto_raw_interval': frame_data.auto_raw_interval,
7585
- 'smart_mode_skip_count': frame[33],
7586
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
7587
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
7588
- 'hardware_id': frame.slice(39, 42),
7589
- 'reserved': frame.slice(42, 46),
7590
- 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
7591
- 'machine_values': {
8007
+ if(frame[2] > 4){ // for Firmware v5 and above
8008
+ return {
7592
8009
  'firmware': frame[2],
7593
- 'destination_address': toMac(frame.slice(12, 16), false),
7594
- 'mode': frame[16],
7595
- 'odr': frame[17],
7596
- 'sampling_duration': frame[18],
7597
- 'filter_status': frame[19],
7598
- 'lpf_coeff': frame[20],
7599
- 'hpf_coeff': frame[21],
7600
- 'sampling_interval': frame[22],
7601
- 'on_request_timeout': frame[23],
7602
- 'deadband': frame[24],
7603
- 'payload_length': frame[25],
7604
- 'fsr': frame[26],
7605
- '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,
7606
8078
  'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
7607
- 'auto_raw_interval': frame[32],
8079
+ 'auto_raw_interval': frame_data.auto_raw_interval,
7608
8080
  'smart_mode_skip_count': frame[33],
7609
- 'smart_mode_acc_threshold':frame[34],
7610
- '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',
7611
8083
  'hardware_id': frame.slice(39, 42),
7612
8084
  'reserved': frame.slice(42, 46),
7613
- '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
+ }
7614
8110
  }
7615
8111
  }
7616
8112
  }
@@ -7665,8 +8161,7 @@ function sensor_types(parent){
7665
8161
  return;
7666
8162
  } else{
7667
8163
  var mode = payload[8];
7668
- var odr = msbLsb(payload[9], payload[10])
7669
- var en_axis = payload[11] & 7;
8164
+ var odr = msbLsb(payload[9], payload[10]);
7670
8165
  var fsr = payload[11] >> 5;
7671
8166
  var device_temp = msbLsb(payload[14], payload[15])/100;
7672
8167
 
@@ -7675,7 +8170,6 @@ function sensor_types(parent){
7675
8170
  data: {},
7676
8171
  odr: odr,
7677
8172
  mo: mode,
7678
- en_axis: en_axis,
7679
8173
  fsr: fsr,
7680
8174
  hour: hour,
7681
8175
  minute: minute,
@@ -7691,8 +8185,7 @@ function sensor_types(parent){
7691
8185
  }
7692
8186
  else{
7693
8187
  var mode = payload[8];
7694
- var odr = msbLsb(payload[9], payload[10])
7695
- var en_axis = payload[11] & 7;
8188
+ var odr = msbLsb(payload[9], payload[10]);
7696
8189
  var fsr = payload[11] >> 5;
7697
8190
  var device_temp = msbLsb(payload[14], payload[15])/100;
7698
8191
 
@@ -7701,7 +8194,6 @@ function sensor_types(parent){
7701
8194
  data: {},
7702
8195
  odr: odr,
7703
8196
  mo: mode,
7704
- en_axis: en_axis,
7705
8197
  fsr: fsr,
7706
8198
  hour: hour,
7707
8199
  minute: minute,
@@ -7721,43 +8213,11 @@ function sensor_types(parent){
7721
8213
  var fft_concat = {};
7722
8214
 
7723
8215
  var en_axis_data = {};
7724
- switch (globalDevices[deviceAddr].en_axis){
7725
- case 1:
7726
- en_axis_data.x_offset = 0;
7727
- en_axis_data.increment = 2;
7728
- break;
7729
- case 2:
7730
- en_axis_data.y_offset = 0;
7731
- en_axis_data.increment = 2;
7732
- break;
7733
- case 3:
7734
- en_axis_data.x_offset = 0;
7735
- en_axis_data.y_offset = 2;
7736
- en_axis_data.increment = 4;
7737
- break;
7738
- case 4:
7739
- en_axis_data.z_offset = 0;
7740
- en_axis_data.increment = 2;
7741
- break;
7742
- case 5:
7743
- en_axis_data.x_offset = 0;
7744
- en_axis_data.z_offset = 2;
7745
- en_axis_data.increment = 4;
7746
- break;
7747
- case 6:
7748
- en_axis_data.y_offset = 0;
7749
- en_axis_data.z_offset = 2;
7750
- en_axis_data.increment = 4;
7751
- break;
7752
- case 7:
7753
- en_axis_data.x_offset = 0;
7754
- en_axis_data.y_offset = 2;
7755
- en_axis_data.z_offset = 4;
7756
- en_axis_data.increment = 6;
7757
- break;
7758
- default:
7759
- en_axis_data.increment = 0;
7760
- }
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: []};
7761
8221
 
7762
8222
  var fsr_mult = .00006;
7763
8223
  var fsr_text = "";
@@ -7793,16 +8253,14 @@ function sensor_types(parent){
7793
8253
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7794
8254
  label++;
7795
8255
 
7796
- fft_concat[label] = {};
7797
-
7798
8256
  if('x_offset' in en_axis_data){
7799
- 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)));
7800
8258
  }
7801
8259
  if('y_offset' in en_axis_data){
7802
- 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)));
7803
8261
  }
7804
8262
  if('z_offset' in en_axis_data){
7805
- 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)));
7806
8264
  }
7807
8265
  }
7808
8266
 
@@ -7822,7 +8280,6 @@ function sensor_types(parent){
7822
8280
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
7823
8281
  probe: probe,
7824
8282
  mac_address: deviceAddr,
7825
- en_axis: globalDevices[deviceAddr].en_axis,
7826
8283
  fsr: fsr_text,
7827
8284
  odr: globalDevices[deviceAddr].odr,
7828
8285
  device_temp: globalDevices[deviceAddr].device_temp,
@@ -7843,8 +8300,7 @@ function sensor_types(parent){
7843
8300
  }
7844
8301
  }else{
7845
8302
  var mode = payload[8];
7846
- var odr = msbLsb(payload[9], payload[10])
7847
- var en_axis = payload[11] & 7;
8303
+ var odr = msbLsb(payload[9], payload[10]);
7848
8304
  var fsr = payload[11] >> 5;
7849
8305
  var device_temp = msbLsb(payload[14], payload[15])/100;
7850
8306
 
@@ -7853,7 +8309,6 @@ function sensor_types(parent){
7853
8309
  data: {},
7854
8310
  odr: odr,
7855
8311
  mo: mode,
7856
- en_axis: en_axis,
7857
8312
  fsr: fsr,
7858
8313
  hour: hour,
7859
8314
  minute: minute,
@@ -7900,7 +8355,7 @@ function sensor_types(parent){
7900
8355
  break;
7901
8356
  }
7902
8357
  var odr2;
7903
- switch(payload[54]){
8358
+ switch(payload[56]){
7904
8359
  case 6:
7905
8360
  odr2 = "50Hz"
7906
8361
  break;
@@ -7964,42 +8419,42 @@ function sensor_types(parent){
7964
8419
  y1_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
7965
8420
  y1_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
7966
8421
 
7967
- z1_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
7968
- z1_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
7969
- z1_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
7970
- z1_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
7971
- z1_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
7972
- z1_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
7973
- z1_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
7974
- rpm_1: payload.slice(54, 56).reduce(msbLsb),
7975
-
7976
- s2_odr: odr2,
7977
- s2_temperature: signInt(payload.slice(55, 57).reduce(msbLsb), 16) / 100,
7978
-
7979
- x2_rms_ACC_G: payload.slice(57, 59).reduce(msbLsb)/1000,
7980
- x2_max_ACC_G: payload.slice(59, 61).reduce(msbLsb)/1000,
7981
- x2_velocity_mm_sec: payload.slice(61, 63).reduce(msbLsb) / 100,
7982
- x2_displacement_mm: payload.slice(63, 65).reduce(msbLsb) / 100,
7983
- x2_peak_one_Hz: payload.slice(65, 67).reduce(msbLsb),
7984
- x2_peak_two_Hz: payload.slice(67, 69).reduce(msbLsb),
7985
- x2_peak_three_Hz: payload.slice(69, 71).reduce(msbLsb),
7986
-
7987
- y2_rms_ACC_G: payload.slice(71, 73).reduce(msbLsb)/1000,
7988
- y2_max_ACC_G: payload.slice(73, 75).reduce(msbLsb)/1000,
7989
- y2_velocity_mm_sec: payload.slice(75, 77).reduce(msbLsb) / 100,
7990
- y2_displacement_mm: payload.slice(77, 79).reduce(msbLsb) / 100,
7991
- y2_peak_one_Hz: payload.slice(79, 81).reduce(msbLsb),
7992
- y2_peak_two_Hz: payload.slice(81, 83).reduce(msbLsb),
7993
- 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),
7994
8430
 
7995
- z2_rms_ACC_G: payload.slice(85, 87).reduce(msbLsb)/1000,
7996
- z2_max_ACC_G: payload.slice(87, 89).reduce(msbLsb)/1000,
7997
- z2_velocity_mm_sec: payload.slice(89, 91).reduce(msbLsb) / 100,
7998
- z2_displacement_mm: payload.slice(91, 93).reduce(msbLsb) / 100,
7999
- z2_peak_one_Hz: payload.slice(93, 95).reduce(msbLsb),
8000
- z2_peak_two_Hz: payload.slice(95, 97).reduce(msbLsb),
8001
- z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb),
8002
- 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)
8003
8458
  };
8004
8459
  }
8005
8460
  // else{
@@ -8303,68 +8758,137 @@ function sensor_types(parent){
8303
8758
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8304
8759
  frame_data.p1_smart_mode_threshold = frame[38] * 50;
8305
8760
  frame_data.p2_smart_mode_threshold = frame[39] * 50;
8306
- return {
8307
- 'firmware': frame[2],
8308
- 'destination_address': toMac(frame.slice(12, 16)),
8309
- 'mode': frame_data.mode,
8310
- 'odr_1': frame_data.odr_1+'Hz',
8311
- 'odr_2': frame_data.odr_2+'Hz',
8312
- 'sampling_duration_1': frame_data.sampling_duration_1,
8313
- 'sampling_duration_2': frame_data.sampling_duration_2,
8314
- 'filter_status': frame_data.filter_status,
8315
- 'lpf_coeff_1': frame_data.lpf_coeff_1,
8316
- 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
8317
- 'lpf_coeff_2': frame_data.lpf_coeff_2,
8318
- 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
8319
- 'hpf_coeff_1': frame_data.hpf_coeff_1,
8320
- 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
8321
- 'hpf_coeff_2': frame_data.hpf_coeff_2,
8322
- 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
8323
- 'sampling_interval': frame_data.sampling_interval,
8324
- 'on_request_timeout': frame_data.on_request_timeout,
8325
- 'deadband': frame_data.deadband,
8326
- 'payload_length': frame_data.payload_length,
8327
- 'fsr': frame_data.fsr_text,
8328
- 'rpm_compute_status': frame_data.rpm_status,
8329
- 'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
8330
- 'auto_raw_interval': frame_data.auto_raw_interval,
8331
- 'smart_mode_skip_count': frame[37],
8332
- 'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
8333
- 'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
8334
- 'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb),
8335
- 'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb),
8336
- 'hardware_id': frame.slice(48, 51),
8337
- 'reserved': frame.slice(51, 55),
8338
- 'tx_lifetime_counter': frame.slice(55, 59).reduce(msbLsb),
8339
- 'machine_values': {
8761
+ if(frame[2] > 4){ // for Firmware v5 and above
8762
+ return {
8340
8763
  'firmware': frame[2],
8341
- 'destination_address': toMac(frame.slice(12, 16), false),
8342
- 'mode': frame[16],
8343
- 'odr_1': frame[17],
8344
- 'odr_2': frame[18],
8345
- 'sampling_duration_1': frame[19],
8346
- 'sampling_duration_2': frame[20],
8347
- 'filter_status': frame[21],
8348
- 'lpf_coeff_1': frame[22],
8349
- 'lpf_coeff_2': frame[23],
8350
- 'hpf_coeff_1': frame[24],
8351
- 'hpf_coeff_2': frame[25],
8352
- 'sampling_interval': frame[26],
8353
- 'on_request_timeout': frame[27],
8354
- 'deadband': frame[28],
8355
- 'payload_length': frame[29],
8356
- 'fsm': frame[30],
8357
- '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,
8358
8785
  'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
8359
- 'auto_raw_interval': frame[36],
8786
+ 'auto_raw_interval': frame_data.auto_raw_interval,
8360
8787
  'smart_mode_skip_count': frame[37],
8361
- 'smart_mode_acc_threshold_probe_1':frame[38],
8362
- 'smart_mode_acc_threshold_probe_2':frame[39],
8363
- 'uptime_counter_probe_1': frame.slice(40, 44),
8364
- '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',
8365
8859
  'hardware_id': frame.slice(48, 51),
8366
8860
  'reserved': frame.slice(51, 55),
8367
- '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
+ }
8368
8892
  }
8369
8893
  }
8370
8894
  }
@@ -8416,8 +8940,7 @@ function sensor_types(parent){
8416
8940
  } else{
8417
8941
 
8418
8942
  var mode = payload[8];
8419
- var odr = msbLsb(payload[9], payload[10])
8420
- var en_axis = payload[11] & 7;
8943
+ var odr = msbLsb(payload[9], payload[10]);
8421
8944
  var fsr = payload[11] >> 5;
8422
8945
  var device_temp = msbLsb(payload[14], payload[15])/100;
8423
8946
 
@@ -8426,7 +8949,6 @@ function sensor_types(parent){
8426
8949
  data: {},
8427
8950
  odr: odr,
8428
8951
  mo: mode,
8429
- en_axis: en_axis,
8430
8952
  fsr: fsr,
8431
8953
  hour: hour,
8432
8954
  minute: minute,
@@ -8442,8 +8964,7 @@ function sensor_types(parent){
8442
8964
  }
8443
8965
  else{
8444
8966
  var mode = payload[8];
8445
- var odr = msbLsb(payload[9], payload[10])
8446
- var en_axis = payload[11] & 7;
8967
+ var odr = msbLsb(payload[9], payload[10]);
8447
8968
  var fsr = payload[11] >> 5;
8448
8969
  var device_temp = msbLsb(payload[14], payload[15])/100;
8449
8970
 
@@ -8452,7 +8973,6 @@ function sensor_types(parent){
8452
8973
  data: {},
8453
8974
  odr: odr,
8454
8975
  mo: mode,
8455
- en_axis: en_axis,
8456
8976
  fsr: fsr,
8457
8977
  hour: hour,
8458
8978
  minute: minute,
@@ -8471,43 +8991,11 @@ function sensor_types(parent){
8471
8991
  var fft_concat = {};
8472
8992
 
8473
8993
  var en_axis_data = {};
8474
- switch (globalDevices[deviceAddr].en_axis){
8475
- case 1:
8476
- en_axis_data.x_offset = 0;
8477
- en_axis_data.increment = 2;
8478
- break;
8479
- case 2:
8480
- en_axis_data.y_offset = 0;
8481
- en_axis_data.increment = 2;
8482
- break;
8483
- case 3:
8484
- en_axis_data.x_offset = 0;
8485
- en_axis_data.y_offset = 2;
8486
- en_axis_data.increment = 4;
8487
- break;
8488
- case 4:
8489
- en_axis_data.z_offset = 0;
8490
- en_axis_data.increment = 2;
8491
- break;
8492
- case 5:
8493
- en_axis_data.x_offset = 0;
8494
- en_axis_data.z_offset = 2;
8495
- en_axis_data.increment = 4;
8496
- break;
8497
- case 6:
8498
- en_axis_data.y_offset = 0;
8499
- en_axis_data.z_offset = 2;
8500
- en_axis_data.increment = 4;
8501
- break;
8502
- case 7:
8503
- en_axis_data.x_offset = 0;
8504
- en_axis_data.y_offset = 2;
8505
- en_axis_data.z_offset = 4;
8506
- en_axis_data.increment = 6;
8507
- break;
8508
- default:
8509
- en_axis_data.increment = 0;
8510
- }
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: []};
8511
8999
 
8512
9000
  var fsr_mult = .00006;
8513
9001
  var fsr_text = "";
@@ -8543,16 +9031,14 @@ function sensor_types(parent){
8543
9031
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
8544
9032
  label++;
8545
9033
 
8546
- fft_concat[label] = {};
8547
-
8548
9034
  if('x_offset' in en_axis_data){
8549
- 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)));
8550
9036
  }
8551
9037
  if('y_offset' in en_axis_data){
8552
- 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)));
8553
9039
  }
8554
9040
  if('z_offset' in en_axis_data){
8555
- 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)));
8556
9042
  }
8557
9043
  }
8558
9044
  var fft_concat_obj = {
@@ -8560,7 +9046,6 @@ function sensor_types(parent){
8560
9046
  msg_type: msg_type,
8561
9047
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
8562
9048
  mac_address: deviceAddr,
8563
- en_axis: globalDevices[deviceAddr].en_axis,
8564
9049
  fsr: fsr_text,
8565
9050
  odr: globalDevices[deviceAddr].odr,
8566
9051
  device_temp: globalDevices[deviceAddr].device_temp,
@@ -8586,8 +9071,7 @@ function sensor_types(parent){
8586
9071
  }else{
8587
9072
 
8588
9073
  var mode = payload[8];
8589
- var odr = msbLsb(payload[9], payload[10])
8590
- var en_axis = payload[11] & 7;
9074
+ var odr = msbLsb(payload[9], payload[10]);
8591
9075
  var fsr = payload[11] >> 5;
8592
9076
  var device_temp = msbLsb(payload[14], payload[15])/100;
8593
9077
 
@@ -8596,7 +9080,6 @@ function sensor_types(parent){
8596
9080
  data: {},
8597
9081
  odr: odr,
8598
9082
  mo: mode,
8599
- en_axis: en_axis,
8600
9083
  fsr: fsr,
8601
9084
  hour: hour,
8602
9085
  minute: minute,
@@ -8877,54 +9360,109 @@ function sensor_types(parent){
8877
9360
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
8878
9361
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8879
9362
  frame_data.smart_mode_threshold = frame[34] * 50;
8880
- return {
8881
- 'firmware': frame[2],
8882
- 'destination_address': toMac(frame.slice(12, 16)),
8883
- 'mode': frame_data.mode,
8884
- 'odr': frame_data.odr_1+'Hz',
8885
- 'sampling_duration': frame_data.sampling_duration_1,
8886
- 'filter_status': frame_data.filter_status,
8887
- 'lpf_coeff': frame_data.lpf_coeff_1,
8888
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
8889
- 'hpf_coeff': frame_data.hpf_coeff_1,
8890
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
8891
- 'sampling_interval': frame_data.sampling_interval,
8892
- 'on_request_timeout': frame_data.on_request_timeout,
8893
- 'deadband': frame_data.deadband,
8894
- 'payload_length': frame_data.payload_length,
8895
- 'fsr': frame_data.fsr_text,
8896
- 'rpm_compute_status': frame_data.rpm_status,
8897
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
8898
- 'auto_raw_interval': frame_data.auto_raw_interval,
8899
- 'smart_mode_skip_count': frame[33],
8900
- 'smart_mode_acc_threshold': frame_data.smart_mode_threshold+'mg',
8901
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
8902
- 'hardware_id': frame.slice(39, 42),
8903
- 'reserved': frame.slice(42, 46),
8904
- 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
8905
- 'machine_values': {
9363
+ if(frame[2] > 4){ // for Firmware v5 and above
9364
+ return {
8906
9365
  'firmware': frame[2],
8907
- 'destination_address': toMac(frame.slice(12, 16), false),
8908
- 'mode': frame[16],
8909
- 'odr': frame[17],
8910
- 'sampling_duration_1': frame[18],
8911
- 'filter_status': frame[19],
8912
- 'lpf_coeff': frame[20],
8913
- 'hpf_coeff': frame[21],
8914
- 'sampling_interval': frame[22],
8915
- 'on_request_timeout': frame[23],
8916
- 'deadband': frame[24],
8917
- 'payload_length': frame[25],
8918
- 'fsm': frame[26],
8919
- '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,
8920
9434
  'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
8921
- 'auto_raw_interval': frame[32],
9435
+ 'auto_raw_interval': frame_data.auto_raw_interval,
8922
9436
  'smart_mode_skip_count': frame[33],
8923
- 'smart_mode_acc_threshold':frame[34],
8924
- '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',
8925
9439
  'hardware_id': frame.slice(39, 42),
8926
9440
  'reserved': frame.slice(42, 46),
8927
- '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
+ }
8928
9466
  }
8929
9467
  }
8930
9468
  }
@@ -8960,8 +9498,7 @@ function sensor_types(parent){
8960
9498
  delete globalDevices[deviceAddr];
8961
9499
  // create new stream
8962
9500
  var mode = payload[8];
8963
- var odr = msbLsb(payload[9], payload[10])
8964
- var en_axis = payload[11] & 7;
9501
+ var odr = msbLsb(payload[9], payload[10]);
8965
9502
  var fsr = payload[11] >> 5;
8966
9503
  var device_temp = msbLsb(payload[14], payload[15])/100;
8967
9504
 
@@ -8969,7 +9506,6 @@ function sensor_types(parent){
8969
9506
  data: {},
8970
9507
  odr: odr,
8971
9508
  mo: mode,
8972
- en_axis: en_axis,
8973
9509
  fsr: fsr,
8974
9510
  hour: hour,
8975
9511
  minute: minute,
@@ -8986,8 +9522,7 @@ function sensor_types(parent){
8986
9522
  }
8987
9523
  else{
8988
9524
  var mode = payload[8];
8989
- var odr = msbLsb(payload[9], payload[10])
8990
- var en_axis = payload[11] & 7;
9525
+ var odr = msbLsb(payload[9], payload[10]);
8991
9526
  var fsr = payload[11] >> 5;
8992
9527
  var device_temp = msbLsb(payload[14], payload[15])/100;
8993
9528
 
@@ -8995,7 +9530,6 @@ function sensor_types(parent){
8995
9530
  data: {},
8996
9531
  odr: odr,
8997
9532
  mo: mode,
8998
- en_axis: en_axis,
8999
9533
  fsr: fsr,
9000
9534
  hour: hour,
9001
9535
  minute: minute,
@@ -9007,8 +9541,7 @@ function sensor_types(parent){
9007
9541
  }
9008
9542
  else{
9009
9543
  var mode = payload[8];
9010
- var odr = msbLsb(payload[9], payload[10])
9011
- var en_axis = payload[11] & 7;
9544
+ var odr = msbLsb(payload[9], payload[10]);
9012
9545
  var fsr = payload[11] >> 5;
9013
9546
  var device_temp = msbLsb(payload[14], payload[15])/100;
9014
9547
 
@@ -9016,7 +9549,6 @@ function sensor_types(parent){
9016
9549
  data: {},
9017
9550
  odr: odr,
9018
9551
  mo: mode,
9019
- en_axis: en_axis,
9020
9552
  fsr: fsr,
9021
9553
  hour: hour,
9022
9554
  minute: minute,
@@ -9036,44 +9568,12 @@ function sensor_types(parent){
9036
9568
  var fft_concat = {};
9037
9569
 
9038
9570
  var en_axis_data = {};
9039
- switch (globalDevices[deviceAddr].en_axis){
9040
- case 1:
9041
- en_axis_data.x_offset = 0;
9042
- en_axis_data.increment = 2;
9043
- break;
9044
- case 2:
9045
- en_axis_data.y_offset = 0;
9046
- en_axis_data.increment = 2;
9047
- break;
9048
- case 3:
9049
- en_axis_data.x_offset = 0;
9050
- en_axis_data.y_offset = 2;
9051
- en_axis_data.increment = 4;
9052
- break;
9053
- case 4:
9054
- en_axis_data.z_offset = 0;
9055
- en_axis_data.increment = 2;
9056
- break;
9057
- case 5:
9058
- en_axis_data.x_offset = 0;
9059
- en_axis_data.z_offset = 2;
9060
- en_axis_data.increment = 4;
9061
- break;
9062
- case 6:
9063
- en_axis_data.y_offset = 0;
9064
- en_axis_data.z_offset = 2;
9065
- en_axis_data.increment = 4;
9066
- break;
9067
- case 7:
9068
- en_axis_data.x_offset = 0;
9069
- en_axis_data.y_offset = 2;
9070
- en_axis_data.z_offset = 4;
9071
- en_axis_data.increment = 6;
9072
- break;
9073
- default:
9074
- en_axis_data.increment = 0;
9075
- }
9076
-
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
+
9077
9577
  var fsr_mult = .00006;
9078
9578
  var fsr_text = "";
9079
9579
 
@@ -9109,16 +9609,14 @@ function sensor_types(parent){
9109
9609
  for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
9110
9610
  label++;
9111
9611
 
9112
- fft_concat[label] = {};
9113
-
9114
9612
  if('x_offset' in en_axis_data){
9115
- 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)));
9116
9614
  }
9117
9615
  if('y_offset' in en_axis_data){
9118
- 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)));
9119
9617
  }
9120
9618
  if('z_offset' in en_axis_data){
9121
- 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)));
9122
9620
  }
9123
9621
  }
9124
9622
  var fft_concat_obj = {
@@ -9126,12 +9624,11 @@ function sensor_types(parent){
9126
9624
  msg_type: msg_type,
9127
9625
  time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
9128
9626
  mac_address: deviceAddr,
9129
- en_axis: globalDevices[deviceAddr].en_axis,
9130
9627
  fsr: fsr_text,
9131
9628
  odr: globalDevices[deviceAddr].odr,
9132
9629
  device_temp: globalDevices[deviceAddr].device_temp,
9133
9630
  total_samples: label,
9134
- ft_confidence : ((globalDevices[deviceAddr].counter / expected_packets) * 100).toFixed(2) + '%',
9631
+ fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
9135
9632
  data: fft_concat
9136
9633
  };
9137
9634
  sensor_data = fft_concat_obj;
@@ -9380,86 +9877,375 @@ function sensor_types(parent){
9380
9877
  frame_data.on_request_timeout = frame[23] + " Seconds";
9381
9878
  frame_data.deadband = frame[24] + "mg";
9382
9879
 
9383
- switch(frame[25]){
9384
- case 0:
9385
- frame_data.payload_length = "50 Bytes";
9386
- break;
9387
- case 1:
9388
- frame_data.payload_length = "100 Bytes";
9389
- break;
9390
- case 2:
9391
- frame_data.payload_length = "150 Bytes";
9392
- break;
9393
- case 3:
9394
- frame_data.payload_length = "180 Bytes";
9395
- 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
+ }
9396
10189
  }
9397
- switch(frame[26]){
9398
- case 0:
9399
- frame_data.fsr_text = "2g";
9400
- break;
9401
- case 1:
9402
- frame_data.fsr_text = "4g";
9403
- break;
9404
- case 2:
9405
- frame_data.fsr_text = "8g";
9406
- break;
9407
- case 3:
9408
- frame_data.fsr_text = "16g";
9409
- 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
+ };
9410
10230
  }
9411
- frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
9412
- frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
9413
- frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9414
- 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) => {
9415
10237
  return {
9416
- 'firmware': frame[2],
9417
- 'destination_address': toMac(frame.slice(12, 16)),
9418
- 'mode': frame_data.mode,
9419
- 'odr': frame_data.odr_1+'Hz',
9420
- 'sampling_duration': frame_data.sampling_duration_1,
9421
- 'filter_status': frame_data.filter_status,
9422
- 'lpf_coeff': frame_data.lpf_coeff_1,
9423
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9424
- 'hpf_coeff': frame_data.hpf_coeff_1,
9425
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9426
- 'sampling_interval': frame_data.sampling_interval,
9427
- 'on_request_timeout': frame_data.on_request_timeout,
9428
- 'deadband': frame_data.deadband,
9429
- 'payload_length': frame_data.payload_length,
9430
- 'fsr': frame_data.fsr_text,
9431
- 'rpm_compute_status': frame_data.rpm_status,
9432
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9433
- 'auto_raw_interval': frame_data.auto_raw_interval,
9434
- 'smart_mode_skip_count': frame[33],
9435
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9436
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
9437
- 'hardware_id': frame.slice(39, 42),
9438
- 'reserved': frame.slice(42, 46),
9439
- '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),
9440
10243
  'machine_values': {
9441
- 'firmware': frame[2],
9442
- 'destination_address': toMac(frame.slice(12, 16), false),
9443
- 'mode': frame[16],
9444
- 'odr': frame[17],
9445
- 'sampling_duration': frame[18],
9446
- 'filter_status': frame[19],
9447
- 'lpf_coeff': frame[20],
9448
- 'hpf_coeff': frame[21],
9449
- 'sampling_interval': frame[22],
9450
- 'on_request_timeout': frame[23],
9451
- 'deadband': frame[24],
9452
- 'payload_length': frame[25],
9453
- 'fsr': frame[26],
9454
- 'rpm_compute_status': frame[27],
9455
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9456
- 'auto_raw_interval': frame[32],
9457
- 'smart_mode_skip_count': frame[33],
9458
- 'smart_mode_acc_threshold':frame[34],
9459
- 'uptime_counter': frame.slice(35, 39),
9460
- 'hardware_id': frame.slice(39, 42),
9461
- 'reserved': frame.slice(42, 46),
9462
- '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)
9463
10249
  }
9464
10250
  }
9465
10251
  }
@@ -9575,6 +10361,98 @@ function sensor_types(parent){
9575
10361
  }
9576
10362
  }
9577
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
+ },
9578
10456
  '180': {
9579
10457
  name: 'C1D2 One Channel Vibration Plus',
9580
10458
  parse: (payload, parsed, mac) => {
@@ -10013,7 +10891,6 @@ function sensor_types(parent){
10013
10891
  data: {},
10014
10892
  odr: odr,
10015
10893
  mo: mode,
10016
- en_axis: en_axis,
10017
10894
  fsr: fsr,
10018
10895
  hour: hour,
10019
10896
  minute: minute,