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

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.
@@ -136,9 +136,9 @@ module.exports = class WirelessSensor{
136
136
  if(globalDevices[frame.mac].command_queue[0].hasOwnProperty('meta')){
137
137
  query_data.meta = globalDevices[frame.mac].command_queue[0].meta;
138
138
  }
139
- };
140
- this._emitter.emit('converter_ack-'+frame.mac, query_data);
141
- return;
139
+ this._emitter.emit('converter_ack-'+frame.mac, query_data);
140
+ return;
141
+ }
142
142
  // }
143
143
  }
144
144
  var type = this.payloadType[frame.data[0]];
@@ -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,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];
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,123,180,181,202,217,211,270,519,520,521,531,535,537,538,539,540,541,1010,1011];
164
164
  var device_type = msbLsb(frame.data[6], frame.data[7]);
165
165
  // var device_type = frame.data[7];
166
166
 
@@ -334,7 +334,7 @@ module.exports = class WirelessSensor{
334
334
  };
335
335
 
336
336
  // #OTF
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];
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,123,180,181,202,211,217,270,519,520,521,531,535,537,538,539,540,541,1010,1011];
338
338
  if(otf_devices.includes(parsed.sensor_type)){
339
339
  // If the message says FLY and there is not FLY timer in progress.
340
340
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -756,7 +756,7 @@ module.exports = class WirelessSensor{
756
756
  data: payload.slice(8)
757
757
  };
758
758
  // #OTF
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){
759
+ }else if(parsed.sensor_type == 21 || 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){
760
760
  parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
761
761
  if(!parsed.sensor_data){
762
762
  return;
@@ -773,7 +773,8 @@ module.exports = class WirelessSensor{
773
773
  firmware_set_to_ota_mode(sensor_mac){
774
774
  console.log('firmware_set_to_ota_mode');
775
775
  var packet = [245, 56, 0, 0, 0];
776
- return this.config_send(sensor_mac, packet);
776
+ return this.config_send(sensor_mac, packet, {}, 5000);
777
+ // return this.config_send(sensor_mac, packet);
777
778
  }
778
779
  // TODO no code basis
779
780
  firmware_exit_ota_mode(sensor_mac){
@@ -784,19 +785,19 @@ module.exports = class WirelessSensor{
784
785
  firmware_request_manifest(sensor_mac){
785
786
  console.log('firmware_request_manifest');
786
787
  var packet = [245, 60, 0, 0, 0];
787
- return this.config_send(sensor_mac, packet);
788
+ return this.config_send(sensor_mac, packet, {}, 1500, 500);
788
789
  }
789
790
  firmware_send_manifest(sensor_mac, manifest){
790
791
  console.log('firmware_send_manifest');
791
792
  // sensor_mac = "00:00:00:00:00:00:ff:ff";
792
793
  let packet = [245, 58, 0, 0, 0].concat(Array.prototype.slice.call(manifest));
793
- return this.config_send(sensor_mac, packet);
794
+ return this.config_send(sensor_mac, packet, {}, 1500, 500);
794
795
  }
795
796
  firmware_send_manifest_v13(sensor_mac, manifest){
796
797
  console.log('firmware_send_manifest_v13');
797
798
  // sensor_mac = "00:00:00:00:00:00:ff:ff";
798
799
  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
+ return this.firmware_send_v13(sensor_mac, packet, {}, 7000, 140, true);
800
801
  }
801
802
  firmware_send_chunk(sensor_mac, offset, chunk){
802
803
  console.log('firmware_send_chunk');
@@ -1261,6 +1262,14 @@ module.exports = class WirelessSensor{
1261
1262
  console.log(packet);
1262
1263
  return this.config_send(sensor_mac, packet);
1263
1264
  }
1265
+ config_set_debounce_time_v10_108(sensor_mac, value){
1266
+ console.log('config_set_debounce_time_v10_108');
1267
+ var packet = [244, 39, 0, 0, 0];
1268
+ let threshold = int2Bytes((value), 2);
1269
+ packet.push(...threshold);
1270
+ console.log(packet);
1271
+ return this.config_send(sensor_mac, packet);
1272
+ }
1264
1273
  config_set_clear_timers_108(sensor_mac, value){
1265
1274
  console.log('config_clear_timers_108');
1266
1275
  var packet = [244, 36, 0, 0, 0, value];
@@ -1887,7 +1896,7 @@ module.exports = class WirelessSensor{
1887
1896
  }
1888
1897
  config_set_pressure_sensor_fs_ch2_118(sensor_mac, value){
1889
1898
  console.log('config_set_pressure_sensor_fs_ch2_118');
1890
- var packet = [244, 64, 0, 0, 118, value];
1899
+ var packet = [244, 72, 0, 0, 118, value];
1891
1900
  console.log(packet);
1892
1901
  return this.config_send(sensor_mac, packet);
1893
1902
  }
@@ -1947,6 +1956,12 @@ module.exports = class WirelessSensor{
1947
1956
  }
1948
1957
  config_set_pressure_sensor_type_21(sensor_mac, value){
1949
1958
  console.log('config_set_pressure_sensor_type_21');
1959
+ var packet = [244, 66, 0, 0, 21, value]
1960
+ console.log(packet);
1961
+ return this.config_send(sensor_mac, packet);
1962
+ }
1963
+ config_set_pressure_sensor_range_21(sensor_mac, value){
1964
+ console.log('config_set_pressure_sensor_range_21');
1950
1965
  var packet = [244, 64, 0, 0, 21, value]
1951
1966
  console.log(packet);
1952
1967
  return this.config_send(sensor_mac, packet);
@@ -2081,6 +2096,155 @@ module.exports = class WirelessSensor{
2081
2096
  console.log(packet);
2082
2097
  return this.config_send(sensor_mac, packet);
2083
2098
  }
2099
+ config_set_motion_to_sampling_delay_110(sensor_mac, value){
2100
+ console.log('config_set_motion_to_sampling_delay_110');
2101
+ var packet = [244, 79, 0, 0, 101, 89, value];
2102
+ console.log(packet);
2103
+ return this.config_send(sensor_mac, packet);
2104
+ }
2105
+ config_set_max_num_motion_tx_delay_110(sensor_mac, value){
2106
+ console.log('config_set_max_num_motion_tx_delay_110');
2107
+ var packet = [244, 79, 0, 0, 101, 91, value];
2108
+ console.log(packet);
2109
+ return this.config_send(sensor_mac, packet);
2110
+ }
2111
+ config_set_enable_sensor_103(sensor_mac, value){
2112
+ console.log('config_set_enable_sensor_103');
2113
+ var packet = [244, 79, 0, 0, 101, 19, value];
2114
+ console.log(packet);
2115
+ return this.config_send(sensor_mac, packet);
2116
+ }
2117
+ config_set_enable_hp_filter_cutoff_103(sensor_mac, value){
2118
+ console.log('config_set_enable_hp_filter_cutoff_103');
2119
+ var packet = [244, 79, 0, 0, 101, 17, value];
2120
+ console.log(packet);
2121
+ return this.config_send(sensor_mac, packet);
2122
+ }
2123
+ config_set_gyro_fsr_103(sensor_mac, value){
2124
+ console.log('config_set_gyro_fsr_103');
2125
+ var packet = [244, 79, 0, 0, 101, 21, value];
2126
+ console.log(packet);
2127
+ return this.config_send(sensor_mac, packet);
2128
+ }
2129
+ config_set_adxl_fsr_103(sensor_mac, value){
2130
+ console.log('config_set_adxl_fsr_103');
2131
+ var packet = [244, 79, 0, 0, 101, 11, value];
2132
+ console.log(packet);
2133
+ return this.config_send(sensor_mac, packet);
2134
+ }
2135
+ config_set_acc_threshold_103(sensor_mac, value){
2136
+ console.log('config_set_acc_threshold_103');
2137
+ var packet = [244, 79, 0, 0, 101, 23, value];
2138
+ console.log(packet);
2139
+ return this.config_send(sensor_mac, packet);
2140
+ }
2141
+ // config_set_do_read_rate_270(sensor_mac, value){
2142
+ // console.log('config_set_do_report_rate_270');
2143
+ // var packet = [244, 32, 0, 0, 0, value];
2144
+ // console.log(packet);
2145
+ // return this.config_send(sensor_mac, packet);
2146
+ // }
2147
+ config_set_do_boot_time_270(sensor_mac, value){
2148
+ console.log('config_set_do_boot_time_270');
2149
+ var packet = [244, 34, 0, 0, 0, value];
2150
+ console.log(packet);
2151
+ return this.config_send(sensor_mac, packet);
2152
+ }
2153
+ config_set_do_dev_id_270(sensor_mac, id_1, id_2, id_3, id_4){
2154
+ console.log('config_set_do_dev_id_270');
2155
+ var packet = [244, 38, 0, 0, 0, id_1, id_2, id_3, id_4];
2156
+ console.log(packet);
2157
+ return this.config_send(sensor_mac, packet);
2158
+ }
2159
+ config_set_ec_boot_time_270(sensor_mac, value){
2160
+ console.log('config_set_ec_boot_time_270');
2161
+ var packet = [244, 36, 0, 0, 0, value];
2162
+ console.log(packet);
2163
+ return this.config_send(sensor_mac, packet);
2164
+ }
2165
+ config_set_ec_dev_id_270(sensor_mac, id_1, id_2, id_3, id_4){
2166
+ console.log('config_set_ec_dev_id_270');
2167
+ var packet = [244, 40, 0, 0, 0, id_1, id_2, id_3, id_4];
2168
+ console.log(packet);
2169
+ return this.config_send(sensor_mac, packet);
2170
+ }
2171
+ config_set_oxygen_rate_211(sensor_mac, value){
2172
+ console.log('config_set_oxygen_rate_211');
2173
+ var packet = [244, 32, 0, 0, 0, value];
2174
+ console.log(packet);
2175
+ return this.config_send(sensor_mac, packet);
2176
+ }
2177
+ config_set_oxygen_timeout_211(sensor_mac, value){
2178
+ console.log('config_set_oxygen_timeout_211');
2179
+ var packet = [244, 37, 0, 0, 0];
2180
+ let value_ = int2Bytes(value, 2);
2181
+ packet.push(...value_);
2182
+ console.log(packet);
2183
+ return this.config_send(sensor_mac, packet);
2184
+ }
2185
+ config_set_oxygen_threshold_211(sensor_mac, value){
2186
+ console.log('config_set_oxygen_threshold_211');
2187
+ var packet = [244, 34, 0, 0, 0];
2188
+ let value_ = int2Bytes(value, 2);
2189
+ packet.push(...value_);
2190
+ console.log(packet);
2191
+ return this.config_send(sensor_mac, packet);
2192
+ }
2193
+ config_set_interrupt_timeout_108(sensor_mac, value){
2194
+ console.log('config_set_interrupt_timeout_108');
2195
+ var packet = [244, 65, 0, 0, 0];
2196
+ let value_ = int2Bytes(value, 2);
2197
+ packet.push(...value_);
2198
+ console.log(packet);
2199
+ return this.config_send(sensor_mac, packet);
2200
+ }
2201
+ config_set_start_sps30_fan_cleaning_53(sensor_mac){
2202
+ console.log('config_set_start_sps30_fan_cleaning_53');
2203
+ var packet = [244, 26, 0, 0, 53];
2204
+ console.log(packet);
2205
+ return this.config_send(sensor_mac, packet);
2206
+ }
2207
+ config_set_max_flow_541(sensor_mac, value){
2208
+ console.log('config_set_max_flow_541');
2209
+ var packet = [244, 85, 0, 0, 88, 0, value];
2210
+ console.log(packet);
2211
+ return this.config_send(sensor_mac, packet);
2212
+ }
2213
+ config_set_min_flow_541(sensor_mac, value){
2214
+ console.log('config_set_min_flow_541');
2215
+ var packet = [244, 83, 0, 0, 88, 0, value];
2216
+ console.log(packet);
2217
+ return this.config_send(sensor_mac, packet);
2218
+ }
2219
+ config_set_ct_constant_87(sensor_mac, value){
2220
+ console.log('config_set_ct_constant_87');
2221
+ var packet = [244, 80, 0, 0, 0, 1];
2222
+ let value_ = int2Bytes(value, 4);
2223
+ packet.push(...value_);
2224
+ console.log(packet);
2225
+ return this.config_send(sensor_mac, packet);
2226
+ }
2227
+ config_set_deadband_87(sensor_mac, value){
2228
+ console.log('config_set_deadband_87');
2229
+ var packet = [244, 82, 0, 0, 0, 1];
2230
+ let value_ = int2Bytes(value, 2);
2231
+ packet.push(...value_);
2232
+ console.log(packet);
2233
+ return this.config_send(sensor_mac, packet);
2234
+ }
2235
+ config_set_sampling_frequency_87(sensor_mac, value){
2236
+ console.log('config_set_sampling_frequency_87');
2237
+ var packet = [244, 78, 0, 0, 0, value];
2238
+ console.log(packet);
2239
+ return this.config_send(sensor_mac, packet);
2240
+ }
2241
+ config_set_raw_length_87(sensor_mac, value){
2242
+ console.log('config_set_raw_length_87');
2243
+ var packet = [244, 84, 0, 0, 0, value];
2244
+ console.log(packet);
2245
+ return this.config_send(sensor_mac, packet);
2246
+ }
2247
+
2084
2248
  config_get_delay(sensor_mac){
2085
2249
  return new Promise((fulfill, reject) => {
2086
2250
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -2286,14 +2450,14 @@ module.exports = class WirelessSensor{
2286
2450
  this.queue = new Queue(1);
2287
2451
  }
2288
2452
  firmware_send_chunk_v13(sensor_mac, offset, chunk){
2289
- console.log('firmware_send_chunk');
2453
+ // console.log('firmware_send_chunk');
2290
2454
  // sensor_mac = "00:00:00:00:00:00:ff:ff";
2291
2455
  let packet = [245, 59, 0, 0, 0].concat(offset, Array.prototype.slice.call(chunk));
2292
2456
  // console.log(packet);
2293
2457
  return this.firmware_send_v13(sensor_mac, packet);
2294
2458
  }
2295
2459
  firmware_read_last_chunk_segment(sensor_mac){
2296
- console.log('firmware_read_last_chunk_segment');
2460
+ // console.log('firmware_read_last_chunk_segment');
2297
2461
  let packet = [245, 61, 0, 0, 0];
2298
2462
  return this.config_send(sensor_mac, packet);
2299
2463
  }
@@ -2416,17 +2580,19 @@ module.exports = class WirelessSensor{
2416
2580
  });
2417
2581
  });
2418
2582
  };
2419
- config_send(sensor_mac, data, opts, cmd_timeout = 1500){
2583
+ config_send(sensor_mac, data, opts, cmd_timeout = 1500, cmd_pretimeout = 0){
2420
2584
  var that = this;
2421
2585
  return new Promise((fulfill, reject) => {
2422
2586
  // Note: This code adds a delay before sending any communications. This is not generally required, but has shown increased reliability
2423
2587
  // 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
2588
  // 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
- // });
2589
+ if(cmd_pretimeout != 0){
2590
+ that.queue.add(() => {
2591
+ return new Promise((f, r) => {
2592
+ setTimeout(f, cmd_pretimeout);
2593
+ });
2594
+ });
2595
+ };
2430
2596
  that.queue.add(() => {
2431
2597
  return new Promise((f, r) => {
2432
2598
  var tout;
@@ -2484,92 +2650,6 @@ module.exports = class WirelessSensor{
2484
2650
  });
2485
2651
  });
2486
2652
  });
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
- });
2567
- this.queue.add(() => {
2568
- return new Promise((f, r) => {
2569
- setTimeout(f, 500);
2570
- });
2571
- });
2572
- });
2573
2653
  };
2574
2654
  prepare_bridge_query(sensor_mac, commands){
2575
2655
  commands.forEach((command) => {
@@ -2580,7 +2660,9 @@ module.exports = class WirelessSensor{
2580
2660
  }
2581
2661
  });
2582
2662
  }
2583
- queue_bridge_query(sensor_mac, data, meta = null, opts){
2663
+ queue_bridge_query(sensor_mac, data, meta = null, command_timeout = 1500, opts){
2664
+ console.log('Command Timeout:');
2665
+ console.log(command_timeout);
2584
2666
  var that = this;
2585
2667
  if(!globalDevices.hasOwnProperty(sensor_mac)){
2586
2668
  globalDevices[sensor_mac] = {bridge: true, command_queue: []};
@@ -2602,7 +2684,10 @@ module.exports = class WirelessSensor{
2602
2684
 
2603
2685
  if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
2604
2686
  globalDevices[sensor_mac].command_queue.shift();
2605
- }
2687
+ };
2688
+ // if(globalDevices[sensor_mac].command_queue.length == 0 && globalDevices[sensor_mac].hasOwnProperty('bridge')){
2689
+ // delete globalDevices[sensor_mac].bridge;
2690
+ // }
2606
2691
  reject({
2607
2692
  err: response,
2608
2693
  sent: [mac2bytes(sensor_mac), data, opts]
@@ -2619,6 +2704,9 @@ module.exports = class WirelessSensor{
2619
2704
  if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
2620
2705
  globalDevices[sensor_mac].command_queue.shift();
2621
2706
  }
2707
+ // if(globalDevices[sensor_mac].command_queue.length == 0 && globalDevices[sensor_mac].hasOwnProperty('bridge')){
2708
+ // delete globalDevices[sensor_mac].bridge;
2709
+ // }
2622
2710
  that._emitter.removeListener('converter_error-'+sensor_mac, fail);
2623
2711
  fulfill(response);
2624
2712
  f();
@@ -2647,7 +2735,7 @@ module.exports = class WirelessSensor{
2647
2735
  };
2648
2736
 
2649
2737
  f();
2650
- }, 1500);
2738
+ }, command_timeout);
2651
2739
  that.send.transmit_request(mac2bytes(sensor_mac), data, opts).then().catch((err) => {
2652
2740
  that._emitter.removeListener('converter_error-'+sensor_mac, fail);
2653
2741
  that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
@@ -2666,15 +2754,15 @@ module.exports = class WirelessSensor{
2666
2754
  });
2667
2755
  });
2668
2756
  };
2669
- prepare_bridge_query(sensor_mac, commands){
2757
+ prepare_bridge_query(sensor_mac, commands, timeout){
2670
2758
  commands.forEach((command) => {
2671
2759
  if(command.hasOwnProperty('meta')){
2672
- this.queue_bridge_query(sensor_mac, command.command, command.meta);
2760
+ this.queue_bridge_query(sensor_mac, command.command, command.meta, timeout);
2673
2761
  }else{
2674
- this.queue_bridge_query(sensor_mac, command.command);
2675
- }
2762
+ this.queue_bridge_query(sensor_mac, command.command, null, timeout);
2763
+ };
2676
2764
  });
2677
- }
2765
+ };
2678
2766
  build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware){
2679
2767
  if(current_packet != 1){
2680
2768
  console.log('bad packet cleanup');
@@ -3202,20 +3290,101 @@ function sensor_types(parent){
3202
3290
  adc: adc,
3203
3291
  voltage: adc * 0.00322265625
3204
3292
  };
3293
+ },
3294
+ 'parse_fly': (frame) => {
3295
+ let firmware = frame[2];
3296
+ if(firmware > 13){ // firmware 14 and above
3297
+ let frame_data = {};
3298
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
3299
+ if(!auto_check_interval){
3300
+ frame_data.auto_check_interval = 'Disabled';
3301
+ }else{
3302
+ frame_data.auto_check_interval = auto_check_interval + " sec";
3303
+ }
3304
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
3305
+ switch(frame[16]){
3306
+ case 0:
3307
+ frame_data.fsr = "+-6.114 V";
3308
+ break;
3309
+ case 1:
3310
+ frame_data.fsr = "+-4.096 V";
3311
+ break;
3312
+ case 2:
3313
+ frame_data.fsr = "+-2.048 V";
3314
+ break;
3315
+ case 3:
3316
+ frame_data.fsr = "+-1.024 V";
3317
+ break;
3318
+ case 4:
3319
+ frame_data.fsr = "+-0.512 V";
3320
+ break;
3321
+ case 5:
3322
+ frame_data.fsr = "+-0.256 V";
3323
+ break;
3324
+ }
3325
+ return {
3326
+ 'firmware': frame[2],
3327
+ 'fsr': frame_data.fsr,
3328
+ 'boot_time': frame[17] + " sec",
3329
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
3330
+ 'auto_check_interval': frame_data.auto_check_interval,
3331
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
3332
+ 'always_on': frame_data.always_on,
3333
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
3334
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
3335
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
3336
+ 'hardware_id': frame.slice(37, 40),
3337
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
3338
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
3339
+ 'machine_values': {
3340
+ 'firmware': frame[2],
3341
+ 'fsr': frame[16],
3342
+ 'boot_time': frame[17],
3343
+ 'power_adc': frame.slice(18, 20),
3344
+ 'auto_check_interval': frame.slice(20, 22),
3345
+ 'auto_check_percentage': frame.slice(22, 24),
3346
+ 'always_on': frame[24],
3347
+ 'calibration_one': frame.slice(25, 29),
3348
+ 'calibration_two':frame.slice(29, 33),
3349
+ 'calibration_three':frame.slice(33, 37),
3350
+ 'hardware_id': frame.slice(37, 40),
3351
+ 'report_rate': frame.slice(40, 44),
3352
+ 'tx_life_counter': frame.slice(44, 48)
3353
+ }
3354
+ }
3355
+ }
3205
3356
  }
3206
3357
  },
3207
3358
  '16': {
3208
3359
  name: 'Soil Moisture Sensor',
3209
- parse: (d) => {
3210
- var adc1 = d.slice(0, 2).reduce(msbLsb);
3211
- var adc2 = d.slice(2, 4).reduce(msbLsb);
3212
- return {
3213
- adc1: adc1,
3214
- adc2: adc2,
3215
- voltage1: adc1 * 0.00322265625,
3216
- voltage2: adc2 * 0.00322265625,
3217
- percentage: adc1 > 870 ? 100 : Math.round(adc1 / 870 * 100)
3218
- };
3360
+ parse: (d, payload) => {
3361
+ if(payload[1] > 5) // firmware v6+
3362
+ {
3363
+ var adc1 = d.slice(0, 2).reduce(msbLsb);
3364
+ var adc2 = d.slice(2, 4).reduce(msbLsb);
3365
+ var vwc1 = d.slice(4, 6).reduce(msbLsb);
3366
+ var vwc2 = d.slice(6, 8).reduce(msbLsb);
3367
+ return {
3368
+ adc1: adc1,
3369
+ adc2: adc2,
3370
+ vwc1: vwc1,
3371
+ vwc2: vwc2,
3372
+ voltage1: adc1 * 0.00322265625,
3373
+ voltage2: adc2 * 0.00322265625,
3374
+ percentage1: adc1 > 870 ? 100 : Math.round(adc1 / 870 * 100),
3375
+ percentage2: adc2 > 870 ? 100 : Math.round(adc2 / 870 * 100)
3376
+ };
3377
+ } else{
3378
+ var adc1 = d.slice(0, 2).reduce(msbLsb);
3379
+ var adc2 = d.slice(2, 4).reduce(msbLsb);
3380
+ return {
3381
+ adc1: adc1,
3382
+ adc2: adc2,
3383
+ voltage1: adc1 * 0.00322265625,
3384
+ voltage2: adc2 * 0.00322265625,
3385
+ percentage: adc1 > 870 ? 100 : Math.round(adc1 / 870 * 100)
3386
+ };
3387
+ }
3219
3388
  }
3220
3389
  },
3221
3390
  '17': {
@@ -3255,32 +3424,225 @@ function sensor_types(parent){
3255
3424
  },
3256
3425
  '21': {
3257
3426
  name: 'Differential Bidirectional Pressure Sensor',
3258
- parse: (d) => {
3259
- return {
3260
- pressure: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
3261
- temperature: signInt(d.slice(2, 4).reduce(msbLsb), 16) / 100,
3262
- };
3263
- }
3264
- },
3265
- '22': {
3266
- name: 'Voltage Detection Input',
3267
- parse: (d) => {
3268
- return {
3269
- input: d[0]
3270
- };
3271
- }
3272
- },
3273
- '23': {
3274
- name: '2-Channel Thermocouple',
3275
- parse: (d) => {
3276
- return {
3277
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
3278
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
3279
- };
3280
- }
3281
- },
3282
- '24': {
3283
- name: 'Activity Detection',
3427
+ parse: (payload, parsed, mac) => {
3428
+ let pressure, temperature, raw_adc;
3429
+
3430
+ if (parsed.firmware <= 12) {
3431
+ pressure = signInt(payload.slice(8, 10).reduce(msbLsb), 16) / 100;
3432
+ temperature = signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100;
3433
+ // raw_adc not present in firmware ≤ 12
3434
+ return {
3435
+ pressure,
3436
+ temperature
3437
+ };
3438
+ } else {
3439
+ pressure = signInt(payload.slice(8, 10).reduce(msbLsb), 16) / 1000;
3440
+ temperature = signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100;
3441
+ raw_adc = signInt(payload.slice(12, 14).reduce(msbLsb), 16);
3442
+ return {
3443
+ pressure,
3444
+ temperature,
3445
+ raw_adc
3446
+ };
3447
+ }
3448
+ },
3449
+ 'parse_fly': (frame) => {
3450
+ let sensor_type = '';
3451
+ switch(frame[13]){
3452
+ case 0:
3453
+ sensor_type = 'AMS5812';
3454
+ break;
3455
+ case 1:
3456
+ sensor_type = 'AMS5915';
3457
+ break;
3458
+ }
3459
+ let sensor_range = '';
3460
+ if(frame[13]){ // if sensor type is 5915
3461
+ switch(frame[12]){
3462
+ case 0:
3463
+ sensor_range = '0005_D';
3464
+ break;
3465
+ case 1:
3466
+ sensor_range = '0010_D';
3467
+ break;
3468
+ case 2:
3469
+ sensor_range = '0002_D_B';
3470
+ break;
3471
+ case 3:
3472
+ sensor_range = '0005_D_B';
3473
+ break;
3474
+ case 4:
3475
+ sensor_range = '0010_D_B';
3476
+ break;
3477
+ case 5:
3478
+ sensor_range = '0020_D';
3479
+ break;
3480
+ case 6:
3481
+ sensor_range = '0035_D';
3482
+ break;
3483
+ case 7:
3484
+ sensor_range = '0050_D';
3485
+ break;
3486
+ case 8:
3487
+ sensor_range = '0100_D';
3488
+ break;
3489
+ case 9:
3490
+ sensor_range = '0020_D_B';
3491
+ break;
3492
+ case 10:
3493
+ sensor_range = '0035_D_B';
3494
+ break;
3495
+ case 11:
3496
+ sensor_range = '0050_D_B';
3497
+ break;
3498
+ case 12:
3499
+ sensor_range = '0100_D_B';
3500
+ break;
3501
+ case 13:
3502
+ sensor_range = '0200_D';
3503
+ break;
3504
+ case 14:
3505
+ sensor_range = '0350_D';
3506
+ break;
3507
+ case 15:
3508
+ sensor_range = '0500_D';
3509
+ break;
3510
+ case 16:
3511
+ sensor_range = '1000_D';
3512
+ break;
3513
+ case 17:
3514
+ sensor_range = '2000_D';
3515
+ break;
3516
+ case 18:
3517
+ sensor_range = '4000_D';
3518
+ break;
3519
+ case 19:
3520
+ sensor_range = '7000_D';
3521
+ break;
3522
+ case 20:
3523
+ sensor_range = '10000_D';
3524
+ break;
3525
+ case 21:
3526
+ sensor_range = '0200_D_B';
3527
+ break;
3528
+ case 22:
3529
+ sensor_range = '0350_D_B';
3530
+ break;
3531
+ case 23:
3532
+ sensor_range = '0500_D_B';
3533
+ break;
3534
+ case 24:
3535
+ sensor_range = '1000_D_B';
3536
+ break;
3537
+ }
3538
+ }
3539
+ else{ // sensor type is 5812
3540
+ switch(frame[12]){
3541
+ case 0:
3542
+ sensor_range = '0000_D';
3543
+ break;
3544
+ case 1:
3545
+ sensor_range = '0001_D';
3546
+ break;
3547
+ case 2:
3548
+ sensor_range = '0000_D_B';
3549
+ break;
3550
+ case 3:
3551
+ sensor_range = '0001_D_B';
3552
+ break;
3553
+ case 4:
3554
+ sensor_range = '0003_D';
3555
+ break;
3556
+ case 5:
3557
+ sensor_range = '0008_D';
3558
+ break;
3559
+ case 6:
3560
+ sensor_range = '0015_D';
3561
+ break;
3562
+ case 7:
3563
+ sensor_range = '0003_D_B';
3564
+ break;
3565
+ case 8:
3566
+ sensor_range = '0008_D_B';
3567
+ break;
3568
+ case 9:
3569
+ sensor_range = '0015_D_B';
3570
+ break;
3571
+ case 10:
3572
+ sensor_range = '0030_D';
3573
+ break;
3574
+ case 11:
3575
+ sensor_range = '0050_D';
3576
+ break;
3577
+ case 12:
3578
+ sensor_range = '0150_D';
3579
+ break;
3580
+ case 13:
3581
+ sensor_range = '0300_D';
3582
+ break;
3583
+ case 14:
3584
+ sensor_range = '0600_D';
3585
+ break;
3586
+ case 15:
3587
+ sensor_range = '1000_D';
3588
+ break;
3589
+ case 16:
3590
+ sensor_range = '0030_D_B';
3591
+ break;
3592
+ case 17:
3593
+ sensor_range = '0050_D_B';
3594
+ break;
3595
+ case 18:
3596
+ sensor_range = '0150_D_B';
3597
+ break;
3598
+ case 19:
3599
+ sensor_range = '0150_B';
3600
+ break;
3601
+ case 20:
3602
+ sensor_range = '0150_A';
3603
+ break;
3604
+ case 21:
3605
+ sensor_range = '0300_A';
3606
+ break;
3607
+ }
3608
+ }
3609
+ return {
3610
+ 'firmware': frame[2],
3611
+ 'sensor_range': sensor_range,
3612
+ 'sensor_type': sensor_type,
3613
+ 'hardware_id': frame.slice(14, 17),
3614
+ 'report_rate': frame.slice(17, 21).reduce(msbLsb) + ' sec',
3615
+ 'tx_counter': frame.slice(21, 25).reduce(msbLsb),
3616
+ 'machine_values': {
3617
+ 'firmware': frame[2],
3618
+ 'sensor_range': frame[12],
3619
+ 'sensor_type': frame[13],
3620
+ 'hardware_id': frame.slice(14, 17),
3621
+ 'report_rate': frame.slice(17, 21),
3622
+ 'tx_counter': frame.slice(21, 25)
3623
+ }
3624
+ }
3625
+ }
3626
+ },
3627
+ '22': {
3628
+ name: 'Voltage Detection Input',
3629
+ parse: (d) => {
3630
+ return {
3631
+ input: d[0]
3632
+ };
3633
+ }
3634
+ },
3635
+ '23': {
3636
+ name: '2-Channel Thermocouple',
3637
+ parse: (d) => {
3638
+ return {
3639
+ channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
3640
+ channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
3641
+ };
3642
+ }
3643
+ },
3644
+ '24': {
3645
+ name: 'Activity Detection',
3284
3646
  parse: (d) => {
3285
3647
  return {
3286
3648
  acc_x: signInt(d.slice(0, 2).reduce(msbLsb), 16),
@@ -3514,6 +3876,69 @@ function sensor_types(parent){
3514
3876
  adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
3515
3877
  mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
3516
3878
  };
3879
+ },
3880
+ 'parse_fly': (frame) => {
3881
+ let firmware = frame[2];
3882
+ if(firmware > 13){ // firmware 14 and above
3883
+ let frame_data = {};
3884
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
3885
+ if(!auto_check_interval){
3886
+ frame_data.auto_check_interval = 'Disabled';
3887
+ }else{
3888
+ frame_data.auto_check_interval = auto_check_interval + " sec";
3889
+ }
3890
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
3891
+ switch(frame[16]){
3892
+ case 0:
3893
+ frame_data.fsr = "+-6.114 V";
3894
+ break;
3895
+ case 1:
3896
+ frame_data.fsr = "+-4.096 V";
3897
+ break;
3898
+ case 2:
3899
+ frame_data.fsr = "+-2.048 V";
3900
+ break;
3901
+ case 3:
3902
+ frame_data.fsr = "+-1.024 V";
3903
+ break;
3904
+ case 4:
3905
+ frame_data.fsr = "+-0.512 V";
3906
+ break;
3907
+ case 5:
3908
+ frame_data.fsr = "+-0.256 V";
3909
+ break;
3910
+ }
3911
+ return {
3912
+ 'firmware': frame[2],
3913
+ 'fsr': frame_data.fsr,
3914
+ 'boot_time': frame[17] + " sec",
3915
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
3916
+ 'auto_check_interval': frame_data.auto_check_interval,
3917
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
3918
+ 'always_on': frame_data.always_on,
3919
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
3920
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
3921
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
3922
+ 'hardware_id': frame.slice(37, 40),
3923
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
3924
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
3925
+ 'machine_values': {
3926
+ 'firmware': frame[2],
3927
+ 'fsr': frame[16],
3928
+ 'boot_time': frame[17],
3929
+ 'power_adc': frame.slice(18, 20),
3930
+ 'auto_check_interval': frame.slice(20, 22),
3931
+ 'auto_check_percentage': frame.slice(22, 24),
3932
+ 'always_on': frame[24],
3933
+ 'calibration_one': frame.slice(25, 29),
3934
+ 'calibration_two':frame.slice(29, 33),
3935
+ 'calibration_three':frame.slice(33, 37),
3936
+ 'hardware_id': frame.slice(37, 40),
3937
+ 'report_rate': frame.slice(40, 44),
3938
+ 'tx_life_counter': frame.slice(44, 48)
3939
+ }
3940
+ }
3941
+ }
3517
3942
  }
3518
3943
  },
3519
3944
  '46': {
@@ -3540,6 +3965,69 @@ function sensor_types(parent){
3540
3965
  adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
3541
3966
  mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
3542
3967
  };
3968
+ },
3969
+ 'parse_fly': (frame) => {
3970
+ let firmware = frame[2];
3971
+ if(firmware > 13){ // firmware 14 and above
3972
+ let frame_data = {};
3973
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
3974
+ if(!auto_check_interval){
3975
+ frame_data.auto_check_interval = 'Disabled';
3976
+ }else{
3977
+ frame_data.auto_check_interval = auto_check_interval + " sec";
3978
+ }
3979
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
3980
+ switch(frame[16]){
3981
+ case 0:
3982
+ frame_data.fsr = "+-6.114 V";
3983
+ break;
3984
+ case 1:
3985
+ frame_data.fsr = "+-4.096 V";
3986
+ break;
3987
+ case 2:
3988
+ frame_data.fsr = "+-2.048 V";
3989
+ break;
3990
+ case 3:
3991
+ frame_data.fsr = "+-1.024 V";
3992
+ break;
3993
+ case 4:
3994
+ frame_data.fsr = "+-0.512 V";
3995
+ break;
3996
+ case 5:
3997
+ frame_data.fsr = "+-0.256 V";
3998
+ break;
3999
+ }
4000
+ return {
4001
+ 'firmware': frame[2],
4002
+ 'fsr': frame_data.fsr,
4003
+ 'boot_time': frame[17] + " sec",
4004
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
4005
+ 'auto_check_interval': frame_data.auto_check_interval,
4006
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4007
+ 'always_on': frame_data.always_on,
4008
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4009
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4010
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4011
+ 'hardware_id': frame.slice(37, 40),
4012
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4013
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4014
+ 'machine_values': {
4015
+ 'firmware': frame[2],
4016
+ 'fsr': frame[16],
4017
+ 'boot_time': frame[17],
4018
+ 'power_adc': frame.slice(18, 20),
4019
+ 'auto_check_interval': frame.slice(20, 22),
4020
+ 'auto_check_percentage': frame.slice(22, 24),
4021
+ 'always_on': frame[24],
4022
+ 'calibration_one': frame.slice(25, 29),
4023
+ 'calibration_two':frame.slice(29, 33),
4024
+ 'calibration_three':frame.slice(33, 37),
4025
+ 'hardware_id': frame.slice(37, 40),
4026
+ 'report_rate': frame.slice(40, 44),
4027
+ 'tx_life_counter': frame.slice(44, 48)
4028
+ }
4029
+ }
4030
+ }
3543
4031
  }
3544
4032
  },
3545
4033
  '49': {
@@ -3619,28 +4107,69 @@ function sensor_types(parent){
3619
4107
  };
3620
4108
  },
3621
4109
  'parse_fly': (frame) => {
4110
+ let firmware = frame[2];
3622
4111
  let frame_data = {};
3623
4112
  switch(frame[16]){
3624
4113
  case 0:
3625
- frame_data.fsr = "+-0.256 V";
4114
+ frame_data.fsr = "+-6.114 V";
3626
4115
  break;
3627
4116
  case 1:
3628
- frame_data.fsr = "+-0.512 V";
4117
+ frame_data.fsr = "+-4.096 V";
3629
4118
  break;
3630
4119
  case 2:
3631
- frame_data.fsr = "+-1.024 V";
4120
+ frame_data.fsr = "+-2.048 V";
3632
4121
  break;
3633
4122
  case 3:
3634
- frame_data.fsr = "+-2.048 V";
4123
+ frame_data.fsr = "+-1.024 V";
3635
4124
  break;
3636
4125
  case 4:
3637
- frame_data.fsr = "+-4.096 V";
4126
+ frame_data.fsr = "+-0.512 V";
3638
4127
  break;
3639
4128
  case 5:
3640
- frame_data.fsr = "+-6.144 V";
4129
+ frame_data.fsr = "+-0.256 V";
3641
4130
  break;
3642
4131
  }
3643
- if(frame[2]>12){
4132
+ if(firmware > 13){ // firmware 14 and above
4133
+ let frame_data = {};
4134
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4135
+ if(!auto_check_interval){
4136
+ frame_data.auto_check_interval = 'Disabled';
4137
+ }else{
4138
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4139
+ }
4140
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
4141
+ return {
4142
+ 'firmware': frame[2],
4143
+ 'fsr': frame_data.fsr,
4144
+ 'boot_up_time': frame[17] + " sec",
4145
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4146
+ 'auto_check_interval': frame_data.auto_check_interval,
4147
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4148
+ 'always_on': frame_data.always_on,
4149
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4150
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4151
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4152
+ 'hardware_id': frame.slice(37, 40),
4153
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4154
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4155
+ 'machine_values': {
4156
+ 'firmware': frame[2],
4157
+ 'fsr': frame[16],
4158
+ 'boot_up_time': frame[17],
4159
+ 'adc_pin_reading': frame.slice(18, 20),
4160
+ 'auto_check_interval': frame.slice(20, 22),
4161
+ 'auto_check_percentage': frame.slice(22, 24),
4162
+ 'always_on': frame[24],
4163
+ 'calibration_one': frame.slice(25, 29),
4164
+ 'calibration_two':frame.slice(29, 33),
4165
+ 'calibration_three':frame.slice(33, 37),
4166
+ 'hardware_id': frame.slice(37, 40),
4167
+ 'report_rate': frame.slice(40, 44),
4168
+ 'tx_life_counter': frame.slice(44, 48)
4169
+ }
4170
+ }
4171
+ }
4172
+ else if(firmware > 12){
3644
4173
  return {
3645
4174
  'firmware': frame[2],
3646
4175
  'report_rate': frame.slice(12, 16).reduce(msbLsb),
@@ -3715,6 +4244,69 @@ function sensor_types(parent){
3715
4244
  VDC1: parseFloat((adc1 * 0.00034122).toFixed(2)),
3716
4245
  VDC2: parseFloat((adc2 * 0.00034122).toFixed(2))
3717
4246
  };
4247
+ },
4248
+ 'parse_fly': (frame) => {
4249
+ let firmware = frame[2];
4250
+ if(firmware > 13){ // firmware 14 and above
4251
+ let frame_data = {};
4252
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4253
+ if(!auto_check_interval){
4254
+ frame_data.auto_check_interval = 'Disabled';
4255
+ }else{
4256
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4257
+ }
4258
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
4259
+ switch(frame[16]){
4260
+ case 0:
4261
+ frame_data.fsr = "+-6.114 V";
4262
+ break;
4263
+ case 1:
4264
+ frame_data.fsr = "+-4.096 V";
4265
+ break;
4266
+ case 2:
4267
+ frame_data.fsr = "+-2.048 V";
4268
+ break;
4269
+ case 3:
4270
+ frame_data.fsr = "+-1.024 V";
4271
+ break;
4272
+ case 4:
4273
+ frame_data.fsr = "+-0.512 V";
4274
+ break;
4275
+ case 5:
4276
+ frame_data.fsr = "+-0.256 V";
4277
+ break;
4278
+ }
4279
+ return {
4280
+ 'firmware': frame[2],
4281
+ 'fsr': frame_data.fsr,
4282
+ 'boot_time': frame[17] + " sec",
4283
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
4284
+ 'auto_check_interval': frame_data.auto_check_interval,
4285
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4286
+ 'always_on': frame_data.always_on,
4287
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4288
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4289
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4290
+ 'hardware_id': frame.slice(37, 40),
4291
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4292
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4293
+ 'machine_values': {
4294
+ 'firmware': frame[2],
4295
+ 'fsr': frame[16],
4296
+ 'boot_time': frame[17],
4297
+ 'power_adc': frame.slice(18, 20),
4298
+ 'auto_check_interval': frame.slice(20, 22),
4299
+ 'auto_check_percentage': frame.slice(22, 24),
4300
+ 'always_on': frame[24],
4301
+ 'calibration_one': frame.slice(25, 29),
4302
+ 'calibration_two':frame.slice(29, 33),
4303
+ 'calibration_three':frame.slice(33, 37),
4304
+ 'hardware_id': frame.slice(37, 40),
4305
+ 'report_rate': frame.slice(40, 44),
4306
+ 'tx_life_counter': frame.slice(44, 48)
4307
+ }
4308
+ }
4309
+ }
3718
4310
  }
3719
4311
  },
3720
4312
  '58': {
@@ -3948,6 +4540,69 @@ function sensor_types(parent){
3948
4540
  mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
3949
4541
  Velocity: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100
3950
4542
  };
4543
+ },
4544
+ 'parse_fly': (frame) => {
4545
+ let firmware = frame[2];
4546
+ if(firmware > 13){ // firmware 14 and above
4547
+ let frame_data = {};
4548
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4549
+ if(!auto_check_interval){
4550
+ frame_data.auto_check_interval = 'Disabled';
4551
+ }else{
4552
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4553
+ }
4554
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
4555
+ switch(frame[16]){
4556
+ case 0:
4557
+ frame_data.fsr = "+-6.114 V";
4558
+ break;
4559
+ case 1:
4560
+ frame_data.fsr = "+-4.096 V";
4561
+ break;
4562
+ case 2:
4563
+ frame_data.fsr = "+-2.048 V";
4564
+ break;
4565
+ case 3:
4566
+ frame_data.fsr = "+-1.024 V";
4567
+ break;
4568
+ case 4:
4569
+ frame_data.fsr = "+-0.512 V";
4570
+ break;
4571
+ case 5:
4572
+ frame_data.fsr = "+-0.256 V";
4573
+ break;
4574
+ }
4575
+ return {
4576
+ 'firmware': frame[2],
4577
+ 'fsr': frame_data.fsr,
4578
+ 'boot_time': frame[17] + " sec",
4579
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
4580
+ 'auto_check_interval': frame_data.auto_check_interval,
4581
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4582
+ 'always_on': frame_data.always_on,
4583
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4584
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4585
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4586
+ 'hardware_id': frame.slice(37, 40),
4587
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4588
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4589
+ 'machine_values': {
4590
+ 'firmware': frame[2],
4591
+ 'fsr': frame[16],
4592
+ 'boot_time': frame[17],
4593
+ 'power_adc': frame.slice(18, 20),
4594
+ 'auto_check_interval': frame.slice(20, 22),
4595
+ 'auto_check_percentage': frame.slice(22, 24),
4596
+ 'always_on': frame[24],
4597
+ 'calibration_one': frame.slice(25, 29),
4598
+ 'calibration_two':frame.slice(29, 33),
4599
+ 'calibration_three':frame.slice(33, 37),
4600
+ 'hardware_id': frame.slice(37, 40),
4601
+ 'report_rate': frame.slice(40, 44),
4602
+ 'tx_life_counter': frame.slice(44, 48)
4603
+ }
4604
+ }
4605
+ }
3951
4606
  }
3952
4607
  },
3953
4608
  '76': {
@@ -3958,17 +4613,80 @@ function sensor_types(parent){
3958
4613
  temperature: signInt((msbLsb(d[2], d[3])), 16)/100,
3959
4614
  co_ppm: msbLsb(d[4], d[5])
3960
4615
  };
3961
- }
3962
- },
3963
- '77': {
3964
- name: '3 Channel SDI-12 Wireelss',
3965
- parse: (d) => {
3966
- return {
3967
- Temperature_1: signInt(d.slice(0, 2).reduce(msbLsb), 16)/100,
3968
- Soil_Moisture_1: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
3969
- Bulk_EC_1: signInt(d.slice(4, 6).reduce(msbLsb), 16),
3970
- Pore_EC_1: signInt(d.slice(6, 8).reduce(msbLsb), 16),
3971
- Permittivity_1: signInt(d.slice(8, 10).reduce(msbLsb), 16)/100,
4616
+ },
4617
+ 'parse_fly': (frame) => {
4618
+ let firmware = frame[2];
4619
+ if(firmware > 13){ // firmware 14 and above
4620
+ let frame_data = {};
4621
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4622
+ if(!auto_check_interval){
4623
+ frame_data.auto_check_interval = 'Disabled';
4624
+ }else{
4625
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4626
+ }
4627
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
4628
+ switch(frame[16]){
4629
+ case 0:
4630
+ frame_data.fsr = "+-6.114 V";
4631
+ break;
4632
+ case 1:
4633
+ frame_data.fsr = "+-4.096 V";
4634
+ break;
4635
+ case 2:
4636
+ frame_data.fsr = "+-2.048 V";
4637
+ break;
4638
+ case 3:
4639
+ frame_data.fsr = "+-1.024 V";
4640
+ break;
4641
+ case 4:
4642
+ frame_data.fsr = "+-0.512 V";
4643
+ break;
4644
+ case 5:
4645
+ frame_data.fsr = "+-0.256 V";
4646
+ break;
4647
+ }
4648
+ return {
4649
+ 'firmware': frame[2],
4650
+ 'fsr': frame_data.fsr,
4651
+ 'boot_time': frame[17] + " sec",
4652
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
4653
+ 'auto_check_interval': frame_data.auto_check_interval,
4654
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4655
+ 'always_on': frame_data.always_on,
4656
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4657
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4658
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4659
+ 'hardware_id': frame.slice(37, 40),
4660
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4661
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4662
+ 'machine_values': {
4663
+ 'firmware': frame[2],
4664
+ 'fsr': frame[16],
4665
+ 'boot_time': frame[17],
4666
+ 'power_adc': frame.slice(18, 20),
4667
+ 'auto_check_interval': frame.slice(20, 22),
4668
+ 'auto_check_percentage': frame.slice(22, 24),
4669
+ 'always_on': frame[24],
4670
+ 'calibration_one': frame.slice(25, 29),
4671
+ 'calibration_two':frame.slice(29, 33),
4672
+ 'calibration_three':frame.slice(33, 37),
4673
+ 'hardware_id': frame.slice(37, 40),
4674
+ 'report_rate': frame.slice(40, 44),
4675
+ 'tx_life_counter': frame.slice(44, 48)
4676
+ }
4677
+ }
4678
+ }
4679
+ }
4680
+ },
4681
+ '77': {
4682
+ name: '3 Channel SDI-12 Wireelss',
4683
+ parse: (d) => {
4684
+ return {
4685
+ Temperature_1: signInt(d.slice(0, 2).reduce(msbLsb), 16)/100,
4686
+ Soil_Moisture_1: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
4687
+ Bulk_EC_1: signInt(d.slice(4, 6).reduce(msbLsb), 16),
4688
+ Pore_EC_1: signInt(d.slice(6, 8).reduce(msbLsb), 16),
4689
+ Permittivity_1: signInt(d.slice(8, 10).reduce(msbLsb), 16)/100,
3972
4690
  Temperature_2: signInt(d.slice(10, 12).reduce(msbLsb), 16)/100,
3973
4691
  Soil_Moisture_2: signInt(d.slice(12, 14).reduce(msbLsb), 16)/100,
3974
4692
  Bulk_EC_2: signInt(d.slice(14, 16).reduce(msbLsb), 16),
@@ -4050,65 +4768,50 @@ function sensor_types(parent){
4050
4768
  if(payload[8] === 1){
4051
4769
  var deviceAddr = mac;
4052
4770
  var firmware = payload[1];
4771
+ var mode = payload[8];
4772
+ var odr = payload[9];
4773
+ var en_axis = payload[10] & 7;
4774
+ var fsr = payload[10] >> 5;
4775
+ var hour = payload[11];
4776
+ var minute = payload[12];
4777
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4778
+ var expected_packets = payload[15];
4779
+ var current_packet = payload[16];
4780
+ var sdata_start = 17;
4053
4781
 
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
- }
4782
+ switch(odr){
4783
+ case 6:
4784
+ odr = 50;
4785
+ break;
4786
+ case 7:
4787
+ odr = 100;
4788
+ break;
4789
+ case 8:
4790
+ odr = 200;
4791
+ break;
4792
+ case 9:
4793
+ odr = 400;
4794
+ break;
4795
+ case 10:
4796
+ odr = 800;
4797
+ break;
4798
+ case 11:
4799
+ odr = 1600;
4800
+ break;
4801
+ case 12:
4802
+ odr = 3200;
4803
+ break;
4804
+ case 13:
4805
+ odr = 6400;
4806
+ break;
4807
+ case 14:
4808
+ odr = 12800;
4809
+ break;
4810
+ case 15:
4811
+ odr = 25600;
4812
+ break;
4813
+ default:
4814
+ odr = 0;
4112
4815
  }
4113
4816
 
4114
4817
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -4601,65 +5304,50 @@ function sensor_types(parent){
4601
5304
  if(payload[8] === 1){
4602
5305
  var deviceAddr = mac;
4603
5306
  var firmware = payload[1];
5307
+ var mode = payload[8];
5308
+ var odr = payload[9];
5309
+ var en_axis = payload[10] & 7;
5310
+ var fsr = payload[10] >> 5;
5311
+ var hour = payload[11];
5312
+ var minute = payload[12];
5313
+ var device_temp = msbLsb(payload[13], payload[14])/100;
5314
+ var expected_packets = payload[15];
5315
+ var current_packet = payload[16];
5316
+ var sdata_start = 17;
4604
5317
 
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
- }
5318
+ switch(odr){
5319
+ case 6:
5320
+ odr = 50;
5321
+ break;
5322
+ case 7:
5323
+ odr = 100;
5324
+ break;
5325
+ case 8:
5326
+ odr = 200;
5327
+ break;
5328
+ case 9:
5329
+ odr = 400;
5330
+ break;
5331
+ case 10:
5332
+ odr = 800;
5333
+ break;
5334
+ case 11:
5335
+ odr = 1600;
5336
+ break;
5337
+ case 12:
5338
+ odr = 3200;
5339
+ break;
5340
+ case 13:
5341
+ odr = 6400;
5342
+ break;
5343
+ case 14:
5344
+ odr = 12800;
5345
+ break;
5346
+ case 15:
5347
+ odr = 25600;
5348
+ break;
5349
+ default:
5350
+ odr = 0;
4663
5351
  }
4664
5352
 
4665
5353
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -5339,65 +6027,50 @@ function sensor_types(parent){
5339
6027
  if(payload[8] === 1){
5340
6028
  var deviceAddr = mac;
5341
6029
  var firmware = payload[1];
6030
+ var mode = payload[8];
6031
+ var odr = payload[9];
6032
+ var en_axis = payload[10] & 7;
6033
+ var fsr = payload[10] >> 5;
6034
+ var hour = payload[11];
6035
+ var minute = payload[12];
6036
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6037
+ var expected_packets = payload[15];
6038
+ var current_packet = payload[16];
6039
+ var sdata_start = 17;
5342
6040
 
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
- }
6041
+ switch(odr){
6042
+ case 6:
6043
+ odr = 50;
6044
+ break;
6045
+ case 7:
6046
+ odr = 100;
6047
+ break;
6048
+ case 8:
6049
+ odr = 200;
6050
+ break;
6051
+ case 9:
6052
+ odr = 400;
6053
+ break;
6054
+ case 10:
6055
+ odr = 800;
6056
+ break;
6057
+ case 11:
6058
+ odr = 1600;
6059
+ break;
6060
+ case 12:
6061
+ odr = 3200;
6062
+ break;
6063
+ case 13:
6064
+ odr = 6400;
6065
+ break;
6066
+ case 14:
6067
+ odr = 12800;
6068
+ break;
6069
+ case 15:
6070
+ odr = 25600;
6071
+ break;
6072
+ default:
6073
+ odr = 0;
5401
6074
  }
5402
6075
 
5403
6076
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -5883,65 +6556,50 @@ function sensor_types(parent){
5883
6556
  if(payload[8] === 1){
5884
6557
  var deviceAddr = mac;
5885
6558
  var firmware = payload[1];
6559
+ var mode = payload[8];
6560
+ var odr = payload[9];
6561
+ var en_axis = payload[10] & 7;
6562
+ var fsr = payload[10] >> 5;
6563
+ var hour = payload[11];
6564
+ var minute = payload[12];
6565
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6566
+ var expected_packets = payload[15];
6567
+ var current_packet = payload[16];
6568
+ var sdata_start = 17;
5886
6569
 
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
- }
6570
+ switch(odr){
6571
+ case 6:
6572
+ odr = 50;
6573
+ break;
6574
+ case 7:
6575
+ odr = 100;
6576
+ break;
6577
+ case 8:
6578
+ odr = 200;
6579
+ break;
6580
+ case 9:
6581
+ odr = 400;
6582
+ break;
6583
+ case 10:
6584
+ odr = 800;
6585
+ break;
6586
+ case 11:
6587
+ odr = 1600;
6588
+ break;
6589
+ case 12:
6590
+ odr = 3200;
6591
+ break;
6592
+ case 13:
6593
+ odr = 6400;
6594
+ break;
6595
+ case 14:
6596
+ odr = 12800;
6597
+ break;
6598
+ case 15:
6599
+ odr = 25600;
6600
+ break;
6601
+ default:
6602
+ odr = 0;
5945
6603
  }
5946
6604
 
5947
6605
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -6417,7 +7075,7 @@ function sensor_types(parent){
6417
7075
  }
6418
7076
  },
6419
7077
  '87': {
6420
- 'name': '24-Bit 1-Channel Current Monitor',
7078
+ 'name': 'Gen 4 One Channel Wireless Current Sensor',
6421
7079
  parse: (d) => {
6422
7080
  return {
6423
7081
  ct1_rms: d.slice(0, 4).reduce(msbLsb),
@@ -6425,6 +7083,28 @@ function sensor_types(parent){
6425
7083
  ct1_peak_2_freq: d.slice(6, 8).reduce(msbLsb),
6426
7084
  ct1_peak_3_freq: d.slice(8, 10).reduce(msbLsb),
6427
7085
  }
7086
+ },
7087
+ 'parse_fly': (frame) => {
7088
+ return {
7089
+ 'firmware': frame[2],
7090
+ 'sampling_rate': frame[16] + 'Hz',
7091
+ 'current_calibration': (frame.slice(17, 21).reduce(msbLsb)) * 10,
7092
+ 'deadband': frame.slice(21, 23).reduce(msbLsb) + 'mA',
7093
+ 'max_supported_ct': frame.slice(23, 27).reduce(msbLsb),
7094
+ 'hardware_id': frame.slice(27, 30),
7095
+ 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "sec",
7096
+ 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
7097
+ 'machine_values': {
7098
+ 'firmware': frame[2],
7099
+ 'sampling_rate': frame[16],
7100
+ 'current_calibration': frame.slice(17, 21),
7101
+ 'deadband': frame.slice(21, 23),
7102
+ 'max_supported_ct': frame.slice(23, 27),
7103
+ 'hardware_id': frame.slice(27, 30),
7104
+ 'report_rate': frame.slice(30, 34),
7105
+ 'tx_life_counter': frame.slice(34, 38)
7106
+ }
7107
+ }
6428
7108
  }
6429
7109
  },
6430
7110
  '88': {
@@ -6437,40 +7117,82 @@ function sensor_types(parent){
6437
7117
  };
6438
7118
  },
6439
7119
  'parse_fly': (frame) => {
7120
+ let firmware = frame[2];
6440
7121
  let frame_data = {};
6441
7122
  switch(frame[16]){
6442
7123
  case 0:
6443
- frame_data.fsr = "+-0.256 V";
7124
+ frame_data.fsr = "+-6.114 V";
6444
7125
  break;
6445
7126
  case 1:
6446
- frame_data.fsr = "+-0.512 V";
7127
+ frame_data.fsr = "+-4.096 V";
6447
7128
  break;
6448
7129
  case 2:
6449
- frame_data.fsr = "+-1.024 V";
7130
+ frame_data.fsr = "+-2.048 V";
6450
7131
  break;
6451
7132
  case 3:
6452
- frame_data.fsr = "+-2.048 V";
7133
+ frame_data.fsr = "+-1.024 V";
6453
7134
  break;
6454
7135
  case 4:
6455
- frame_data.fsr = "+-4.096 V";
7136
+ frame_data.fsr = "+-0.512 V";
6456
7137
  break;
6457
7138
  case 5:
6458
- frame_data.fsr = "+-6.144 V";
7139
+ frame_data.fsr = "+-0.256 V";
6459
7140
  break;
6460
7141
  }
6461
- return {
6462
- 'firmware': frame[2],
6463
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
6464
- 'fsr':frame_data.fsr,
6465
- 'boot_up_time': frame[17],
6466
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
6467
- 'machine_values': {
7142
+ if(firmware > 13){ // firmware 14 and above
7143
+ let frame_data = {};
7144
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7145
+ if(!auto_check_interval){
7146
+ frame_data.auto_check_interval = 'Disabled';
7147
+ }else{
7148
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7149
+ }
7150
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
7151
+ return {
7152
+ 'firmware': frame[2],
7153
+ 'fsr': frame_data.fsr,
7154
+ 'boot_up_time': frame[17] + " sec",
7155
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
7156
+ 'auto_check_interval': frame_data.auto_check_interval,
7157
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7158
+ 'always_on': frame_data.always_on,
7159
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7160
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7161
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7162
+ 'hardware_id': frame.slice(37, 40),
7163
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7164
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7165
+ 'machine_values': {
7166
+ 'firmware': frame[2],
7167
+ 'fsr': frame[16],
7168
+ 'boot_up_time': frame[17],
7169
+ 'adc_pin_reading': frame.slice(18, 20),
7170
+ 'auto_check_interval': frame.slice(20, 22),
7171
+ 'auto_check_percentage': frame.slice(22, 24),
7172
+ 'always_on': frame[24],
7173
+ 'calibration_one': frame.slice(25, 29),
7174
+ 'calibration_two':frame.slice(29, 33),
7175
+ 'calibration_three':frame.slice(33, 37),
7176
+ 'hardware_id': frame.slice(37, 40),
7177
+ 'report_rate': frame.slice(40, 44),
7178
+ 'tx_life_counter': frame.slice(44, 48)
7179
+ }
7180
+ }
7181
+ }else{
7182
+ return {
6468
7183
  'firmware': frame[2],
6469
- 'report_rate': frame.slice(12, 16),
6470
- 'fsr':frame[16],
7184
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
7185
+ 'fsr':frame_data.fsr,
6471
7186
  'boot_up_time': frame[17],
6472
- // 'adc_pin_reading': frame.slice(18, 20),
6473
- 'frame': frame
7187
+ // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
7188
+ 'machine_values': {
7189
+ 'firmware': frame[2],
7190
+ 'report_rate': frame.slice(12, 16),
7191
+ 'fsr':frame[16],
7192
+ 'boot_up_time': frame[17],
7193
+ // 'adc_pin_reading': frame.slice(18, 20),
7194
+ 'frame': frame
7195
+ }
6474
7196
  }
6475
7197
  }
6476
7198
  }
@@ -6488,40 +7210,82 @@ function sensor_types(parent){
6488
7210
  };
6489
7211
  },
6490
7212
  'parse_fly': (frame) => {
7213
+ let firmware = frame[2];
6491
7214
  let frame_data = {};
6492
7215
  switch(frame[16]){
6493
7216
  case 0:
6494
- frame_data.fsr = "+-0.256 V";
7217
+ frame_data.fsr = "+-6.114 V";
6495
7218
  break;
6496
7219
  case 1:
6497
- frame_data.fsr = "+-0.512 V";
7220
+ frame_data.fsr = "+-4.096 V";
6498
7221
  break;
6499
7222
  case 2:
6500
- frame_data.fsr = "+-1.024 V";
7223
+ frame_data.fsr = "+-2.048 V";
6501
7224
  break;
6502
7225
  case 3:
6503
- frame_data.fsr = "+-2.048 V";
7226
+ frame_data.fsr = "+-1.024 V";
6504
7227
  break;
6505
7228
  case 4:
6506
- frame_data.fsr = "+-4.096 V";
7229
+ frame_data.fsr = "+-0.512 V";
6507
7230
  break;
6508
7231
  case 5:
6509
- frame_data.fsr = "+-6.144 V";
7232
+ frame_data.fsr = "+-0.256 V";
6510
7233
  break;
6511
7234
  }
6512
- return {
6513
- 'firmware': frame[2],
6514
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
6515
- 'fsr':frame_data.fsr,
6516
- 'boot_up_time': frame[17],
6517
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
6518
- 'machine_values': {
7235
+ if(firmware > 13){ // firmware 14 and above
7236
+ let frame_data = {};
7237
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7238
+ if(!auto_check_interval){
7239
+ frame_data.auto_check_interval = 'Disabled';
7240
+ }else{
7241
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7242
+ }
7243
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
7244
+ return {
7245
+ 'firmware': frame[2],
7246
+ 'fsr': frame_data.fsr,
7247
+ 'boot_up_time': frame[17] + " sec",
7248
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
7249
+ 'auto_check_interval': frame_data.auto_check_interval,
7250
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7251
+ 'always_on': frame_data.always_on,
7252
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7253
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7254
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7255
+ 'hardware_id': frame.slice(37, 40),
7256
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7257
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7258
+ 'machine_values': {
7259
+ 'firmware': frame[2],
7260
+ 'fsr': frame[16],
7261
+ 'boot_up_time': frame[17],
7262
+ 'adc_pin_reading': frame.slice(18, 20),
7263
+ 'auto_check_interval': frame.slice(20, 22),
7264
+ 'auto_check_percentage': frame.slice(22, 24),
7265
+ 'always_on': frame[24],
7266
+ 'calibration_one': frame.slice(25, 29),
7267
+ 'calibration_two':frame.slice(29, 33),
7268
+ 'calibration_three':frame.slice(33, 37),
7269
+ 'hardware_id': frame.slice(37, 40),
7270
+ 'report_rate': frame.slice(40, 44),
7271
+ 'tx_life_counter': frame.slice(44, 48)
7272
+ }
7273
+ }
7274
+ }else{
7275
+ return {
6519
7276
  'firmware': frame[2],
6520
- 'report_rate': frame.slice(12, 16),
6521
- 'fsr':frame[16],
7277
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
7278
+ 'fsr':frame_data.fsr,
6522
7279
  'boot_up_time': frame[17],
6523
- // 'adc_pin_reading': frame.slice(18, 20),
6524
- 'frame': frame
7280
+ // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
7281
+ 'machine_values': {
7282
+ 'firmware': frame[2],
7283
+ 'report_rate': frame.slice(12, 16),
7284
+ 'fsr':frame[16],
7285
+ 'boot_up_time': frame[17],
7286
+ // 'adc_pin_reading': frame.slice(18, 20),
7287
+ 'frame': frame
7288
+ }
6525
7289
  }
6526
7290
  }
6527
7291
  }
@@ -6533,6 +7297,65 @@ function sensor_types(parent){
6533
7297
  raw_adc: d.slice(0, 2).reduce(msbLsb),
6534
7298
  amps: d.slice(2, 6).reduce(msbLsb) / 10,
6535
7299
  };
7300
+ },
7301
+ 'parse_fly': (frame) => {
7302
+ let firmware = frame[2];
7303
+ if(firmware > 13){ // firmware 14 and above
7304
+ let frame_data = {};
7305
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7306
+ if(!auto_check_interval){
7307
+ frame_data.auto_check_interval = 'Disabled';
7308
+ }else{
7309
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7310
+ }
7311
+ frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
7312
+ switch(frame[16]){
7313
+ case 0:
7314
+ frame_data.fsr = "+-6.114 V";
7315
+ break;
7316
+ case 1:
7317
+ frame_data.fsr = "+-4.096 V";
7318
+ break;
7319
+ case 2:
7320
+ frame_data.fsr = "+-2.048 V";
7321
+ break;
7322
+ case 3:
7323
+ frame_data.fsr = "+-1.024 V";
7324
+ break;
7325
+ case 4:
7326
+ frame_data.fsr = "+-0.512 V";
7327
+ break;
7328
+ case 5:
7329
+ frame_data.fsr = "+-0.256 V";
7330
+ break;
7331
+ }
7332
+ return {
7333
+ 'firmware': frame[2],
7334
+ 'fsr': frame_data.fsr,
7335
+ 'boot_time': frame[17] + " sec",
7336
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
7337
+ 'auto_check_interval': frame_data.auto_check_interval,
7338
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7339
+ 'always_on': frame_data.always_on,
7340
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7341
+ 'hardware_id': frame.slice(29, 32),
7342
+ 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
7343
+ 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
7344
+ 'machine_values': {
7345
+ 'firmware': frame[2],
7346
+ 'fsr': frame[16],
7347
+ 'boot_time': frame[17],
7348
+ 'power_adc': frame.slice(18, 20),
7349
+ 'auto_check_interval': frame.slice(20, 22),
7350
+ 'auto_check_threshold': frame.slice(22, 24),
7351
+ 'always_on': frame[24],
7352
+ 'calibration_one': frame.slice(25, 29),
7353
+ 'hardware_id': frame.slice(29, 32),
7354
+ 'report_rate': frame.slice(32, 36),
7355
+ 'tx_life_counter': frame.slice(36, 40)
7356
+ }
7357
+ }
7358
+ }
6536
7359
  }
6537
7360
  },
6538
7361
  '91': {
@@ -6558,6 +7381,69 @@ function sensor_types(parent){
6558
7381
  adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
6559
7382
  vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
6560
7383
  };
7384
+ },
7385
+ 'parse_fly': (frame) => {
7386
+ let firmware = frame[2];
7387
+ if(firmware > 13){ // firmware 14 and above
7388
+ let frame_data = {};
7389
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7390
+ if(!auto_check_interval){
7391
+ frame_data.auto_check_interval = 'Disabled';
7392
+ }else{
7393
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7394
+ }
7395
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
7396
+ switch(frame[16]){
7397
+ case 0:
7398
+ frame_data.fsr = "+-6.114 V";
7399
+ break;
7400
+ case 1:
7401
+ frame_data.fsr = "+-4.096 V";
7402
+ break;
7403
+ case 2:
7404
+ frame_data.fsr = "+-2.048 V";
7405
+ break;
7406
+ case 3:
7407
+ frame_data.fsr = "+-1.024 V";
7408
+ break;
7409
+ case 4:
7410
+ frame_data.fsr = "+-0.512 V";
7411
+ break;
7412
+ case 5:
7413
+ frame_data.fsr = "+-0.256 V";
7414
+ break;
7415
+ }
7416
+ return {
7417
+ 'firmware': frame[2],
7418
+ 'fsr': frame_data.fsr,
7419
+ 'boot_time': frame[17] + " sec",
7420
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
7421
+ 'auto_check_interval': frame_data.auto_check_interval,
7422
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7423
+ 'always_on': frame_data.always_on,
7424
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7425
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7426
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7427
+ 'hardware_id': frame.slice(37, 40),
7428
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7429
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7430
+ 'machine_values': {
7431
+ 'firmware': frame[2],
7432
+ 'fsr': frame[16],
7433
+ 'boot_time': frame[17],
7434
+ 'power_adc': frame.slice(18, 20),
7435
+ 'auto_check_interval': frame.slice(20, 22),
7436
+ 'auto_check_percentage': frame.slice(22, 24),
7437
+ 'always_on': frame[24],
7438
+ 'calibration_one': frame.slice(25, 29),
7439
+ 'calibration_two':frame.slice(29, 33),
7440
+ 'calibration_three':frame.slice(33, 37),
7441
+ 'hardware_id': frame.slice(37, 40),
7442
+ 'report_rate': frame.slice(40, 44),
7443
+ 'tx_life_counter': frame.slice(44, 48)
7444
+ }
7445
+ }
7446
+ }
6561
7447
  }
6562
7448
  },
6563
7449
  '96': {
@@ -6567,6 +7453,69 @@ function sensor_types(parent){
6567
7453
  adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
6568
7454
  vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
6569
7455
  };
7456
+ },
7457
+ 'parse_fly': (frame) => {
7458
+ let firmware = frame[2];
7459
+ if(firmware > 13){ // firmware 14 and above
7460
+ let frame_data = {};
7461
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7462
+ if(!auto_check_interval){
7463
+ frame_data.auto_check_interval = 'Disabled';
7464
+ }else{
7465
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7466
+ }
7467
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
7468
+ switch(frame[16]){
7469
+ case 0:
7470
+ frame_data.fsr = "+-6.114 V";
7471
+ break;
7472
+ case 1:
7473
+ frame_data.fsr = "+-4.096 V";
7474
+ break;
7475
+ case 2:
7476
+ frame_data.fsr = "+-2.048 V";
7477
+ break;
7478
+ case 3:
7479
+ frame_data.fsr = "+-1.024 V";
7480
+ break;
7481
+ case 4:
7482
+ frame_data.fsr = "+-0.512 V";
7483
+ break;
7484
+ case 5:
7485
+ frame_data.fsr = "+-0.256 V";
7486
+ break;
7487
+ }
7488
+ return {
7489
+ 'firmware': frame[2],
7490
+ 'fsr': frame_data.fsr,
7491
+ 'boot_time': frame[17] + " sec",
7492
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
7493
+ 'auto_check_interval': frame_data.auto_check_interval,
7494
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7495
+ 'always_on': frame_data.always_on,
7496
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7497
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7498
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7499
+ 'hardware_id': frame.slice(37, 40),
7500
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7501
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7502
+ 'machine_values': {
7503
+ 'firmware': frame[2],
7504
+ 'fsr': frame[16],
7505
+ 'boot_time': frame[17],
7506
+ 'power_adc': frame.slice(18, 20),
7507
+ 'auto_check_interval': frame.slice(20, 22),
7508
+ 'auto_check_percentage': frame.slice(22, 24),
7509
+ 'always_on': frame[24],
7510
+ 'calibration_one': frame.slice(25, 29),
7511
+ 'calibration_two':frame.slice(29, 33),
7512
+ 'calibration_three':frame.slice(33, 37),
7513
+ 'hardware_id': frame.slice(37, 40),
7514
+ 'report_rate': frame.slice(40, 44),
7515
+ 'tx_life_counter': frame.slice(44, 48)
7516
+ }
7517
+ }
7518
+ }
6570
7519
  }
6571
7520
  },
6572
7521
  '97': {
@@ -6882,61 +7831,124 @@ function sensor_types(parent){
6882
7831
  }
6883
7832
  },
6884
7833
  'parse_fly': (frame) => {
6885
- let frame_data = {};
6886
- frame_data.mode = frame[12] ? 'Raw':'Processed';
6887
- switch(frame[13]){
6888
- case 0:
6889
- frame_data.raw_lenght = 55;
6890
- break;
6891
- case 1:
6892
- frame_data.raw_lenght = 100;
6893
- break;
6894
- case 2:
6895
- frame_data.raw_lenght = 150;
6896
- break;
6897
- case 3:
6898
- frame_data.raw_lenght = 180;
6899
- break;
6900
- }
6901
- return {
6902
- 'firmware': frame[2],
6903
- 'mode': frame_data.mode,
6904
- 'raw_length': frame_data.raw_lenght + " Bytes",
6905
- 'raw_on_request_timeout': frame[14] + " sec",
6906
- 'fly_rate': frame.slice(15, 17).reduce(msbLsb) + " min",
6907
- 'c1_sensor_gain_db': frame[17] + " dB",
6908
- 'c1_sensor_boot_time': frame[18] + " sec",
6909
- 'c2_sensor_gain_db': frame[19] + " dB",
6910
- 'c2_sensor_boot_time': frame[20] + " sec",
6911
- 'sampling_frequency': frame.slice(21, 25).reduce(msbLsb) + " Hz",
6912
- // 'hardware_id': frame.slice(25, 28),
6913
- // 'report_rate': frame.slice(28, 32).reduce(msbLsb),
6914
- // 'tx_life_count': frame.slice(32, 36).reduce(msbLsb),
6915
- 'machine_values': {
6916
- 'firmware': frame[2],
6917
- 'mode': frame[12],
6918
- 'raw_lenght': frame[13],
6919
- 'raw_on_request_timeout': frame[14],
6920
- 'fly_rate': frame.slice(15, 17),
6921
- 'c1_sensor_gain_db': frame[17],
6922
- 'c1_sensor_boot_time': frame[18],
6923
- 'c2_sensor_gain_db': frame[19],
6924
- 'c2_sensor_boot_time': frame[20],
6925
- 'sampling_frequency': frame.slice(21, 25)
6926
- // 'hardware_id': frame.slice(25, 28),
6927
- // 'report_rate': frame.slice(28, 32),
6928
- // 'tx_life_count': frame.slice(32, 36)
7834
+ let firmware = frame[2];
7835
+ if(firmware > 13){ // firmware 14 and above
7836
+ let frame_data = {};
7837
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7838
+ if(!auto_check_interval){
7839
+ frame_data.auto_check_interval = 'Disabled';
7840
+ }else{
7841
+ frame_data.auto_check_interval = auto_check_interval + " sec";
6929
7842
  }
6930
- }
6931
- }
6932
- },
6933
- '101':{
6934
- name: 'Pro Vibration',
6935
- parse: (d, full)=>{
6936
- return{
6937
- mode: full[7] == 1? "raw" : "normal"
6938
- };
6939
- }
7843
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
7844
+ switch(frame[16]){
7845
+ case 0:
7846
+ frame_data.fsr = "+-6.114 V";
7847
+ break;
7848
+ case 1:
7849
+ frame_data.fsr = "+-4.096 V";
7850
+ break;
7851
+ case 2:
7852
+ frame_data.fsr = "+-2.048 V";
7853
+ break;
7854
+ case 3:
7855
+ frame_data.fsr = "+-1.024 V";
7856
+ break;
7857
+ case 4:
7858
+ frame_data.fsr = "+-0.512 V";
7859
+ break;
7860
+ case 5:
7861
+ frame_data.fsr = "+-0.256 V";
7862
+ break;
7863
+ }
7864
+ return {
7865
+ 'firmware': frame[2],
7866
+ 'fsr': frame_data.fsr,
7867
+ 'boot_time': frame[17] + " sec",
7868
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
7869
+ 'auto_check_interval': frame_data.auto_check_interval,
7870
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7871
+ 'always_on': frame_data.always_on,
7872
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7873
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7874
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7875
+ 'hardware_id': frame.slice(37, 40),
7876
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7877
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7878
+ 'machine_values': {
7879
+ 'firmware': frame[2],
7880
+ 'fsr': frame[16],
7881
+ 'boot_time': frame[17],
7882
+ 'power_adc': frame.slice(18, 20),
7883
+ 'auto_check_interval': frame.slice(20, 22),
7884
+ 'auto_check_percentage': frame.slice(22, 24),
7885
+ 'always_on': frame[24],
7886
+ 'calibration_one': frame.slice(25, 29),
7887
+ 'calibration_two':frame.slice(29, 33),
7888
+ 'calibration_three':frame.slice(33, 37),
7889
+ 'hardware_id': frame.slice(37, 40),
7890
+ 'report_rate': frame.slice(40, 44),
7891
+ 'tx_life_counter': frame.slice(44, 48)
7892
+ }
7893
+ }
7894
+ }
7895
+ else{
7896
+ let frame_data = {};
7897
+ frame_data.mode = frame[12] ? 'Raw':'Processed';
7898
+ switch(frame[13]){
7899
+ case 0:
7900
+ frame_data.raw_lenght = 55;
7901
+ break;
7902
+ case 1:
7903
+ frame_data.raw_lenght = 100;
7904
+ break;
7905
+ case 2:
7906
+ frame_data.raw_lenght = 150;
7907
+ break;
7908
+ case 3:
7909
+ frame_data.raw_lenght = 180;
7910
+ break;
7911
+ }
7912
+ return {
7913
+ 'firmware': frame[2],
7914
+ 'mode': frame_data.mode,
7915
+ 'raw_length': frame_data.raw_lenght + " Bytes",
7916
+ 'raw_on_request_timeout': frame[14] + " sec",
7917
+ 'fly_rate': frame.slice(15, 17).reduce(msbLsb) + " min",
7918
+ 'c1_sensor_gain_db': frame[17] + " dB",
7919
+ 'c1_sensor_boot_time': frame[18] + " sec",
7920
+ 'c2_sensor_gain_db': frame[19] + " dB",
7921
+ 'c2_sensor_boot_time': frame[20] + " sec",
7922
+ 'sampling_frequency': frame.slice(21, 25).reduce(msbLsb) + " Hz",
7923
+ // 'hardware_id': frame.slice(25, 28),
7924
+ // 'report_rate': frame.slice(28, 32).reduce(msbLsb),
7925
+ // 'tx_life_count': frame.slice(32, 36).reduce(msbLsb),
7926
+ 'machine_values': {
7927
+ 'firmware': frame[2],
7928
+ 'mode': frame[12],
7929
+ 'raw_lenght': frame[13],
7930
+ 'raw_on_request_timeout': frame[14],
7931
+ 'fly_rate': frame.slice(15, 17),
7932
+ 'c1_sensor_gain_db': frame[17],
7933
+ 'c1_sensor_boot_time': frame[18],
7934
+ 'c2_sensor_gain_db': frame[19],
7935
+ 'c2_sensor_boot_time': frame[20],
7936
+ 'sampling_frequency': frame.slice(21, 25)
7937
+ // 'hardware_id': frame.slice(25, 28),
7938
+ // 'report_rate': frame.slice(28, 32),
7939
+ // 'tx_life_count': frame.slice(32, 36)
7940
+ }
7941
+ }
7942
+ }
7943
+ }
7944
+ },
7945
+ '101':{
7946
+ name: 'Pro Vibration',
7947
+ parse: (d, full)=>{
7948
+ return{
7949
+ mode: full[7] == 1? "raw" : "normal"
7950
+ };
7951
+ }
6940
7952
  },
6941
7953
  '103': {
6942
7954
  name: 'Custom Wireless Accelerometer Sensor',
@@ -6946,7 +7958,7 @@ function sensor_types(parent){
6946
7958
  var data = {};
6947
7959
  switch(payload[8]){
6948
7960
  case 1:
6949
- data.sensor_type = 'adxl';
7961
+ data.sensor_type = 'Accel';
6950
7962
  break;
6951
7963
  case 2:
6952
7964
  data.sensor_type = 'gyro';
@@ -6960,74 +7972,70 @@ function sensor_types(parent){
6960
7972
  data.event_type = 'motion';
6961
7973
  break;
6962
7974
  }
7975
+
7976
+ var mode = payload[9];
7977
+ var odr = payload[11];
7978
+ var en_axis = payload[12] & 7;
7979
+ var fsr = payload[12] >> 5;
6963
7980
  var hour = payload[13];
6964
7981
  var minute = payload[14];
7982
+ var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7983
+ var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
6965
7984
  var expected_packets = payload.slice(19, 21).reduce(msbLsb);
6966
7985
  var current_packet = payload.slice(21, 23).reduce(msbLsb);
6967
7986
  var data_start = 23;
6968
7987
 
7988
+ switch(odr){
7989
+ case 0:
7990
+ odr = '125Hz';
7991
+ break;
7992
+ case 1:
7993
+ odr = '250Hz';
7994
+ break;
7995
+ case 2:
7996
+ odr = '500Hz';
7997
+ break;
7998
+ case 3:
7999
+ odr = '1000Hz';
8000
+ break;
8001
+ default:
8002
+ odr = 0;
8003
+ }
8004
+
6969
8005
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6970
8006
  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);
8007
+ // if current packet is equal to last one (duplicated data). This does not apply to the last package
8008
+ if (globalDevices[deviceAddr].last_packet_counter == current_packet){
8009
+ console.log('Duplicated message')
8010
+ return;
8011
+ }
8012
+ // if current packet is equal to 1 or last packet counter is higher thant current packet
8013
+ if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
8014
+ // clear stream
6991
8015
  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;
8016
+ // create new stream
8017
+ globalDevices[deviceAddr] = {
8018
+ // stream_size: expected_packets,
8019
+ data: {},
8020
+ odr: odr,
8021
+ mo: mode,
8022
+ en_axis: en_axis,
8023
+ fsr: fsr,
8024
+ hour: hour,
8025
+ minute: minute,
8026
+ device_temp: device_temp,
8027
+ external_temp: external_temperature
7017
8028
  }
8029
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
8030
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8031
+ return;
7018
8032
  }
7019
8033
  else{
8034
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
7020
8035
  globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7021
8036
  }
7022
8037
  }
7023
8038
  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
8039
  globalDevices[deviceAddr] = {
7032
8040
  // stream_size: expected_packets,
7033
8041
  data: {},
@@ -7040,185 +8048,282 @@ function sensor_types(parent){
7040
8048
  device_temp: device_temp,
7041
8049
  external_temp: external_temperature
7042
8050
  }
8051
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
7043
8052
  globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7044
8053
  }
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;
8054
+ }
8055
+ else{
7051
8056
 
7052
- var fft = new Array();
7053
- var fft_concat = {};
8057
+ globalDevices[deviceAddr] = {
8058
+ data: {},
8059
+ odr: odr,
8060
+ mo: mode,
8061
+ en_axis: en_axis,
8062
+ fsr: fsr,
8063
+ hour: hour,
8064
+ minute: minute,
8065
+ device_temp: device_temp,
8066
+ external_temp: external_temperature
8067
+ }
8068
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
8069
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8070
+ }
8071
+ if(current_packet == expected_packets){
8072
+ var raw_data = new Array();
8073
+ for(const packet in globalDevices[deviceAddr].data){
8074
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
8075
+ }
8076
+ var label = 0;
7054
8077
 
7055
- var en_axis_data = {};
7056
- switch (globalDevices[deviceAddr].en_axis){
8078
+ var fft = new Array();
8079
+ var fft_concat = {};
8080
+
8081
+ var en_axis_data = {};
8082
+ en_axis_data.x_offset = 0;
8083
+ en_axis_data.y_offset = 2;
8084
+ en_axis_data.z_offset = 4;
8085
+ en_axis_data.increment = 6;
8086
+ fft_concat = {x: [], y: [], z: []};
8087
+
8088
+ /* Evaluate sensor type */
8089
+ if(payload[8] == 1){ // accelerometer
8090
+ var fsr_mult = 0.000019;
8091
+ var fsr_text = "";
8092
+ switch(globalDevices[deviceAddr].fsr){
8093
+ case 0:
8094
+ fsr_mult = 0.000019;
8095
+ break;
7057
8096
  case 1:
7058
- en_axis_data.x_offset = 0;
7059
- en_axis_data.increment = 2;
8097
+ fsr_mult = 0.000038;
7060
8098
  break;
7061
8099
  case 2:
7062
- en_axis_data.y_offset = 0;
7063
- en_axis_data.increment = 2;
8100
+ fsr_mult = 0.000076;
7064
8101
  break;
7065
- case 3:
7066
- en_axis_data.x_offset = 0;
7067
- en_axis_data.y_offset = 2;
7068
- en_axis_data.increment = 4;
8102
+ }
8103
+ switch(globalDevices[deviceAddr].fsr){
8104
+ case 0:
8105
+ fsr_text = "10g";
7069
8106
  break;
7070
- case 4:
7071
- en_axis_data.z_offset = 0;
7072
- en_axis_data.increment = 2;
8107
+ case 1:
8108
+ fsr_text = "20g";
7073
8109
  break;
7074
- case 5:
7075
- en_axis_data.x_offset = 0;
7076
- en_axis_data.z_offset = 2;
7077
- en_axis_data.increment = 4;
8110
+ case 2:
8111
+ fsr_text = "40g";
7078
8112
  break;
7079
- case 6:
7080
- en_axis_data.y_offset = 0;
7081
- en_axis_data.z_offset = 2;
7082
- en_axis_data.increment = 4;
8113
+ }
8114
+ }else{ // gyro
8115
+ var fsr_mult = 0.0305;
8116
+ var fsr_text = "";
8117
+ switch(globalDevices[deviceAddr].fsr){
8118
+ case 0:
8119
+ fsr_mult = 0.0305;
7083
8120
  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;
8121
+ case 1:
8122
+ fsr_mult = 0.061;
8123
+ break;
8124
+ case 2:
8125
+ fsr_mult = 0.122;
8126
+ break;
8127
+ case 3:
8128
+ fsr_mult = 0.244;
7089
8129
  break;
7090
- default:
7091
- en_axis_data.increment = 0;
7092
8130
  }
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
- }
8131
+ switch(globalDevices[deviceAddr].fsr){
8132
+ case 0:
8133
+ fsr_text = "250dps";
8134
+ break;
8135
+ case 1:
8136
+ fsr_text = "500dps";
8137
+ break;
8138
+ case 2:
8139
+ fsr_text = "1000dps";
8140
+ break;
8141
+ case 3:
8142
+ fsr_text = "2000dps";
8143
+ break;
7150
8144
  }
8145
+ }
7151
8146
 
7152
- for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7153
- label++;
7154
-
7155
- fft_concat[label] = {};
8147
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
8148
+ label++;
7156
8149
 
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
- }
8150
+ if('x_offset' in en_axis_data){
8151
+ 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)));
7166
8152
  }
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);
8153
+ if('y_offset' in en_axis_data){
8154
+ 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)));
8155
+ }
8156
+ if('z_offset' in en_axis_data){
8157
+ 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)));
7190
8158
  }
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
8159
  }
7218
- globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8160
+ var fft_concat_obj = {
8161
+ mode: mode,
8162
+ sensor_type: data.sensor_type,
8163
+ msg_type: data.event_type,
8164
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
8165
+ mac_address: deviceAddr,
8166
+ en_axis: globalDevices[deviceAddr].en_axis,
8167
+ fsr: fsr_text,
8168
+ odr: globalDevices[deviceAddr].odr,
8169
+ device_temp: globalDevices[deviceAddr].device_temp,
8170
+ external_temp: globalDevices[deviceAddr].external_temp,
8171
+ total_samples: label,
8172
+ fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
8173
+ data: fft_concat
8174
+ };
8175
+ sensor_data = fft_concat_obj;
8176
+ delete globalDevices[deviceAddr];
8177
+ return sensor_data;
8178
+ }
8179
+ else{
7219
8180
  return;
7220
8181
  }
7221
8182
  }
8183
+ },
8184
+ 'parse_fly': (frame) => {
8185
+ let frame_data = {};
8186
+ switch(frame[12]){
8187
+ case 0:
8188
+ frame_data.odr = 125;
8189
+ break;
8190
+ case 1:
8191
+ frame_data.odr = 250;
8192
+ break;
8193
+ case 2:
8194
+ frame_data.odr = 500;
8195
+ break;
8196
+ case 3:
8197
+ frame_data.odr = 1000;
8198
+ break;
8199
+ default:
8200
+ frame_data.odr = 0;
8201
+ }
8202
+ switch(frame[15]){
8203
+ case 0:
8204
+ frame_data.fsr_acc = "10g";
8205
+ break;
8206
+ case 1:
8207
+ frame_data.fsr_acc = "20g";
8208
+ break;
8209
+ case 2:
8210
+ frame_data.fsr_acc = "40g";
8211
+ break;
8212
+ }
8213
+ switch(frame[16]){
8214
+ case 0:
8215
+ frame_data.fsr_gyro = "250dps";
8216
+ break;
8217
+ case 1:
8218
+ frame_data.fsr_gyro = "500dps";
8219
+ break;
8220
+ case 2:
8221
+ frame_data.fsr_gyro = "1000dps";
8222
+ break;
8223
+ case 3:
8224
+ frame_data.fsr_gyro = "2000dps";
8225
+ break;
8226
+ }
8227
+ switch(frame[17]){
8228
+ case 7:
8229
+ frame_data.en_axis = "all";
8230
+ break;
8231
+ }
8232
+ switch(frame[20]){
8233
+ case 1:
8234
+ frame_data.en_sensors = "gyro_only";
8235
+ break;
8236
+ case 2:
8237
+ frame_data.en_sensors = "accel_only";
8238
+ break;
8239
+ case 3:
8240
+ frame_data.en_sensors = "all_enabled";
8241
+ break;
8242
+ }
8243
+ switch(frame[18]){
8244
+ case 0:
8245
+ frame_data.sampling_interval = 5;
8246
+ break;
8247
+ case 1:
8248
+ frame_data.sampling_interval = 10;
8249
+ break;
8250
+ case 2:
8251
+ frame_data.sampling_interval = 15;
8252
+ break;
8253
+ case 3:
8254
+ frame_data.sampling_interval = 20;
8255
+ break;
8256
+ case 4:
8257
+ frame_data.sampling_interval = 30;
8258
+ break;
8259
+ case 5:
8260
+ frame_data.sampling_interval = 60;
8261
+ break;
8262
+ case 6:
8263
+ frame_data.sampling_interval = 120;
8264
+ break;
8265
+ case 7:
8266
+ frame_data.sampling_interval = 180;
8267
+ break;
8268
+ }
8269
+ switch(frame[14]){
8270
+ case 0:
8271
+ frame_data.hpf_cutoff = 0.00247;
8272
+ break;
8273
+ case 1:
8274
+ frame_data.hpf_cutoff = 0.00062084;
8275
+ break;
8276
+ case 2:
8277
+ frame_data.hpf_cutoff = 0.00015545;
8278
+ break;
8279
+ case 3:
8280
+ frame_data.hpf_cutoff = 0.00003862;
8281
+ break;
8282
+ case 4:
8283
+ frame_data.hpf_cutoff = 0.00000954;
8284
+ break;
8285
+ case 5:
8286
+ frame_data.hpf_cutoff = 0.00000238;
8287
+ break;
8288
+ }
8289
+ return {
8290
+ 'firmware': frame[2],
8291
+ 'sample_rate': frame_data.odr + 'Hz',
8292
+ 'sampling_duration': (frame[13]* 50) + 'msec',
8293
+ 'hpf_cutoff': (frame_data.hpf_cutoff * frame_data.odr).toFixed(2) + 'Hz',
8294
+ 'acc_fsr': frame_data.fsr_acc,
8295
+ 'gyro_fsr': frame_data.fsr_gyro,
8296
+ 'axis_enabled': frame_data.en_axis,
8297
+ 'sampling_interval': frame_data.sampling_interval + 'min',
8298
+ 'accelerometer_threshold': (frame[19]* 32) + "mg",
8299
+ 'enabled_sensors': frame_data.en_sensors,
8300
+ 'rtc': [
8301
+ String(frame[21]).padStart(2, '0'),
8302
+ String(frame[22]).padStart(2, '0'),
8303
+ String(frame[23]).padStart(2, '0')
8304
+ ].join(':'),
8305
+ 'hardware_id': frame.slice(24, 27),
8306
+ 'report_rate': frame.slice(27, 31).reduce(msbLsb),
8307
+ 'tx_life_counter': frame.slice(31, 35).reduce(msbLsb),
8308
+ 'machine_values': {
8309
+ 'firmware': frame[2],
8310
+ 'odr': frame[12],
8311
+ 'sampling_duration': frame[13],
8312
+ 'hpf_cutoff': frame[14],
8313
+ 'acc_fsr': frame[15],
8314
+ 'gyro_fsr': frame[16],
8315
+ 'axis_enabled': frame[17],
8316
+ 'sampling_interval': frame[18],
8317
+ 'accelerometer_threshold': frame[19],
8318
+ 'enabled_sensors': frame[20],
8319
+ 'hour': frame[21],
8320
+ 'minute': frame[22],
8321
+ 'second': frame[23],
8322
+ 'hardware_id': frame.slice(24, 27),
8323
+ 'report_rate': frame.slice(27, 31),
8324
+ 'tx_life_counter': frame.slice(31, 35)
8325
+ }
8326
+ }
7222
8327
  }
7223
8328
  },
7224
8329
  '105': {
@@ -7229,6 +8334,69 @@ function sensor_types(parent){
7229
8334
  ma: d.slice(2, 4).reduce(msbLsb) / 100,
7230
8335
  db: d.slice(4, 6).reduce(msbLsb) / 100
7231
8336
  };
8337
+ },
8338
+ 'parse_fly': (frame) => {
8339
+ let firmware = frame[2];
8340
+ if(firmware > 13){ // firmware 14 and above
8341
+ let frame_data = {};
8342
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8343
+ if(!auto_check_interval){
8344
+ frame_data.auto_check_interval = 'Disabled';
8345
+ }else{
8346
+ frame_data.auto_check_interval = auto_check_interval + " sec";
8347
+ }
8348
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
8349
+ switch(frame[16]){
8350
+ case 0:
8351
+ frame_data.fsr = "+-6.114 V";
8352
+ break;
8353
+ case 1:
8354
+ frame_data.fsr = "+-4.096 V";
8355
+ break;
8356
+ case 2:
8357
+ frame_data.fsr = "+-2.048 V";
8358
+ break;
8359
+ case 3:
8360
+ frame_data.fsr = "+-1.024 V";
8361
+ break;
8362
+ case 4:
8363
+ frame_data.fsr = "+-0.512 V";
8364
+ break;
8365
+ case 5:
8366
+ frame_data.fsr = "+-0.256 V";
8367
+ break;
8368
+ }
8369
+ return {
8370
+ 'firmware': frame[2],
8371
+ 'fsr': frame_data.fsr,
8372
+ 'boot_time': frame[17] + " sec",
8373
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
8374
+ 'auto_check_interval': frame_data.auto_check_interval,
8375
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8376
+ 'always_on': frame_data.always_on,
8377
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8378
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8379
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8380
+ 'hardware_id': frame.slice(37, 40),
8381
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8382
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8383
+ 'machine_values': {
8384
+ 'firmware': frame[2],
8385
+ 'fsr': frame[16],
8386
+ 'boot_time': frame[17],
8387
+ 'power_adc': frame.slice(18, 20),
8388
+ 'auto_check_interval': frame.slice(20, 22),
8389
+ 'auto_check_percentage': frame.slice(22, 24),
8390
+ 'always_on': frame[24],
8391
+ 'calibration_one': frame.slice(25, 29),
8392
+ 'calibration_two':frame.slice(29, 33),
8393
+ 'calibration_three':frame.slice(33, 37),
8394
+ 'hardware_id': frame.slice(37, 40),
8395
+ 'report_rate': frame.slice(40, 44),
8396
+ 'tx_life_counter': frame.slice(44, 48)
8397
+ }
8398
+ }
8399
+ }
7232
8400
  }
7233
8401
  },
7234
8402
  '106': {
@@ -7242,6 +8410,69 @@ function sensor_types(parent){
7242
8410
  c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
7243
8411
  c2_db: d.slice(10, 12).reduce(msbLsb) / 100
7244
8412
  };
8413
+ },
8414
+ 'parse_fly': (frame) => {
8415
+ let firmware = frame[2];
8416
+ if(firmware > 13){ // firmware 14 and above
8417
+ let frame_data = {};
8418
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8419
+ if(!auto_check_interval){
8420
+ frame_data.auto_check_interval = 'Disabled';
8421
+ }else{
8422
+ frame_data.auto_check_interval = auto_check_interval + " sec";
8423
+ }
8424
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
8425
+ switch(frame[16]){
8426
+ case 0:
8427
+ frame_data.fsr = "+-6.114 V";
8428
+ break;
8429
+ case 1:
8430
+ frame_data.fsr = "+-4.096 V";
8431
+ break;
8432
+ case 2:
8433
+ frame_data.fsr = "+-2.048 V";
8434
+ break;
8435
+ case 3:
8436
+ frame_data.fsr = "+-1.024 V";
8437
+ break;
8438
+ case 4:
8439
+ frame_data.fsr = "+-0.512 V";
8440
+ break;
8441
+ case 5:
8442
+ frame_data.fsr = "+-0.256 V";
8443
+ break;
8444
+ }
8445
+ return {
8446
+ 'firmware': frame[2],
8447
+ 'fsr': frame_data.fsr,
8448
+ 'boot_time': frame[17] + " sec",
8449
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
8450
+ 'auto_check_interval': frame_data.auto_check_interval,
8451
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8452
+ 'always_on': frame_data.always_on,
8453
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8454
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8455
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8456
+ 'hardware_id': frame.slice(37, 40),
8457
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8458
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8459
+ 'machine_values': {
8460
+ 'firmware': frame[2],
8461
+ 'fsr': frame[16],
8462
+ 'boot_time': frame[17],
8463
+ 'power_adc': frame.slice(18, 20),
8464
+ 'auto_check_interval': frame.slice(20, 22),
8465
+ 'auto_check_percentage': frame.slice(22, 24),
8466
+ 'always_on': frame[24],
8467
+ 'calibration_one': frame.slice(25, 29),
8468
+ 'calibration_two':frame.slice(29, 33),
8469
+ 'calibration_three':frame.slice(33, 37),
8470
+ 'hardware_id': frame.slice(37, 40),
8471
+ 'report_rate': frame.slice(40, 44),
8472
+ 'tx_life_counter': frame.slice(44, 48)
8473
+ }
8474
+ }
8475
+ }
7245
8476
  }
7246
8477
  },
7247
8478
  '107': {
@@ -7265,6 +8496,69 @@ function sensor_types(parent){
7265
8496
  ma3: ma3,
7266
8497
  ma4: ma4
7267
8498
  };
8499
+ },
8500
+ 'parse_fly': (frame) => {
8501
+ let firmware = frame[2];
8502
+ if(firmware > 13){ // firmware 14 and above
8503
+ let frame_data = {};
8504
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8505
+ if(!auto_check_interval){
8506
+ frame_data.auto_check_interval = 'Disabled';
8507
+ }else{
8508
+ frame_data.auto_check_interval = auto_check_interval + " sec";
8509
+ }
8510
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
8511
+ switch(frame[16]){
8512
+ case 0:
8513
+ frame_data.fsr = "+-6.114 V";
8514
+ break;
8515
+ case 1:
8516
+ frame_data.fsr = "+-4.096 V";
8517
+ break;
8518
+ case 2:
8519
+ frame_data.fsr = "+-2.048 V";
8520
+ break;
8521
+ case 3:
8522
+ frame_data.fsr = "+-1.024 V";
8523
+ break;
8524
+ case 4:
8525
+ frame_data.fsr = "+-0.512 V";
8526
+ break;
8527
+ case 5:
8528
+ frame_data.fsr = "+-0.256 V";
8529
+ break;
8530
+ }
8531
+ return {
8532
+ 'firmware': frame[2],
8533
+ 'fsr': frame_data.fsr,
8534
+ 'boot_time': frame[17] + " sec",
8535
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
8536
+ 'auto_check_interval': frame_data.auto_check_interval,
8537
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8538
+ 'always_on': frame_data.always_on,
8539
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8540
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8541
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8542
+ 'hardware_id': frame.slice(37, 40),
8543
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8544
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8545
+ 'machine_values': {
8546
+ 'firmware': frame[2],
8547
+ 'fsr': frame[16],
8548
+ 'boot_time': frame[17],
8549
+ 'power_adc': frame.slice(18, 20),
8550
+ 'auto_check_interval': frame.slice(20, 22),
8551
+ 'auto_check_percentage': frame.slice(22, 24),
8552
+ 'always_on': frame[24],
8553
+ 'calibration_one': frame.slice(25, 29),
8554
+ 'calibration_two':frame.slice(29, 33),
8555
+ 'calibration_three':frame.slice(33, 37),
8556
+ 'hardware_id': frame.slice(37, 40),
8557
+ 'report_rate': frame.slice(40, 44),
8558
+ 'tx_life_counter': frame.slice(44, 48)
8559
+ }
8560
+ }
8561
+ }
7268
8562
  }
7269
8563
  },
7270
8564
  '108': {
@@ -7294,47 +8588,345 @@ function sensor_types(parent){
7294
8588
  break;
7295
8589
  }
7296
8590
  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
- };
8591
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8592
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8593
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
8594
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
8595
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
8596
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
8597
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
8598
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
8599
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
8600
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
8601
+ input_di: d[40] & 1 ? 1 : 0,
8602
+ input_ct: d[40] & 2 ? 1 : 0,
8603
+ input_opto: d[40] & 4 ? 1 : 0,
8604
+ input_acc: d[40] & 8 ? 1 : 0,
8605
+ input_mag: d[40] & 16 ? 1 : 0,
8606
+ report_type: report_type,
8607
+ rtc: [
8608
+ String(d[42]).padStart(2, '0'),
8609
+ String(d[43]).padStart(2, '0'),
8610
+ String(d[44]).padStart(2, '0')
8611
+ ].join(':')
8612
+ };
8613
+ }else{
8614
+ return {
8615
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8616
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8617
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
8618
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
8619
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
8620
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
8621
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
8622
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
8623
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
8624
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
8625
+ input_di: d[40] & 1 ? 1 : 0,
8626
+ input_ct: d[40] & 2 ? 1 : 0,
8627
+ input_opto: d[40] & 4 ? 1 : 0,
8628
+ input_acc: d[40] & 8 ? 1 : 0,
8629
+ input_mag: d[40] & 16 ? 1 : 0
8630
+ };
8631
+ }
8632
+ },
8633
+ 'parse_fly': (frame) => {
8634
+ if(frame[2] > 9){ // firmware 10 and above
8635
+ let reset_mode = "Disabled";
8636
+ switch(frame[38]){
8637
+ case 0:
8638
+ reset_mode = "Disabled";
8639
+ break;
8640
+ case 1:
8641
+ reset_mode = "Shift Ends";
8642
+ break;
8643
+ case 2:
8644
+ reset_mode = "Timeout";
8645
+ break;
8646
+ }
8647
+ let acc_odr = "10Hz";
8648
+ switch(frame[40]){
8649
+ case 0:
8650
+ acc_odr = "10Hz";
8651
+ break;
8652
+ case 1:
8653
+ acc_odr = "20Hz";
8654
+ break;
8655
+ case 2:
8656
+ acc_odr = "50Hz";
8657
+ break;
8658
+ case 3:
8659
+ acc_odr = "100Hz";
8660
+ break;
8661
+ case 4:
8662
+ acc_odr = "200Hz";
8663
+ break;
8664
+ case 5:
8665
+ acc_odr = "400Hz";
8666
+ break;
8667
+ }
8668
+ let rtc_sampling_interval = "5 seconds";
8669
+ switch(frame[39]){
8670
+ case 0:
8671
+ rtc_sampling_interval = "1 minute";
8672
+ break;
8673
+ case 1:
8674
+ rtc_sampling_interval = "5 minutes";
8675
+ break;
8676
+ case 2:
8677
+ rtc_sampling_interval = "15 minutes";
8678
+ break;
8679
+ case 3:
8680
+ rtc_sampling_interval = "30 minutes";
8681
+ break;
8682
+ case 4:
8683
+ rtc_sampling_interval = "1 hour";
8684
+ break;
8685
+ case 5:
8686
+ rtc_sampling_interval = "2 hours";
8687
+ break;
8688
+ case 6:
8689
+ rtc_sampling_interval = "3 hours";
8690
+ break;
8691
+ case 7:
8692
+ rtc_sampling_interval = "6 hours";
8693
+ break;
8694
+ case 8:
8695
+ rtc_sampling_interval = "12 hours";
8696
+ break;
8697
+ case 9:
8698
+ rtc_sampling_interval = "5 seconds";
8699
+ break;
8700
+ case 10:
8701
+ rtc_sampling_interval = "10 seconds";
8702
+ break;
8703
+ case 11:
8704
+ rtc_sampling_interval = "15 seconds";
8705
+ break;
8706
+ case 12:
8707
+ rtc_sampling_interval = "30 seconds";
8708
+ break;
8709
+ }
8710
+ return {
8711
+ 'firmware': frame[2],
8712
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
8713
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
8714
+ 'accelero_state': frame[19]? "Enabled": "Disabled",
8715
+ 'input_1_active_edge': frame[20]? "Rising": "Falling",
8716
+ 'input_2_active_edge': frame[21]? "Rising": "Falling",
8717
+ 'input_3_active_edge': frame[22]? "Rising": "Falling",
8718
+ 'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
8719
+ 'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
8720
+ 'Shift_end_1': [
8721
+ String(frame[28]).padStart(2, '0'),
8722
+ String(frame[29]).padStart(2, '0')
8723
+ ].join(':'),
8724
+ 'Shift_end_2': [
8725
+ String(frame[30]).padStart(2, '0'),
8726
+ String(frame[31]).padStart(2, '0')
8727
+ ].join(':'),
8728
+ 'Shift_end_3': [
8729
+ String(frame[32]).padStart(2, '0'),
8730
+ String(frame[33]).padStart(2, '0')
8731
+ ].join(':'),
8732
+ 'Shift_end_4': [
8733
+ String(frame[34]).padStart(2, '0'),
8734
+ String(frame[35]).padStart(2, '0')
8735
+ ].join(':'),
8736
+ 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
8737
+ 'counter_reset_mode': reset_mode,
8738
+ 'sampling_interval': rtc_sampling_interval,
8739
+ 'acc_odr': acc_odr,
8740
+ 'hardware_id': frame.slice(41, 44),
8741
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
8742
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
8743
+ 'machine_values': {
8744
+ 'firmware': frame[2],
8745
+ 'accelerometer_threshold': frame[16],
8746
+ 'debouncing_timeout': frame.slice(17, 19),
8747
+ 'accelero_state': frame[19],
8748
+ 'input_1_active_edge': frame[20],
8749
+ 'input_2_active_edge': frame[21],
8750
+ 'input_3_active_edge': frame[22],
8751
+ 'counter_threshold': frame.slice(23, 27),
8752
+ 'trasnmit_on_change_status': frame[27],
8753
+ 'Shift_end_1': frame.slice(28, 30),
8754
+ 'Shift_end_2': frame.slice(30, 32),
8755
+ 'Shift_end_3': frame.slice(32, 34),
8756
+ 'Shift_end_4': frame.slice(34, 36),
8757
+ 'reset_timeout': frame.slice(36, 38),
8758
+ 'counter_reset_mode': frame[38],
8759
+ 'sampling_interval': frame[39],
8760
+ 'acc_odr': frame[40],
8761
+ 'hardware_id': frame.slice(41, 44),
8762
+ 'report_rate': frame.slice(44, 48),
8763
+ 'tx_life_counter': frame.slice(48, 52)
8764
+ }
8765
+ }
8766
+ } else if(frame[2] > 8){
8767
+ let reset_mode = "Disabled";
8768
+ switch(frame[37]){
8769
+ case 0:
8770
+ reset_mode = "Disabled";
8771
+ break;
8772
+ case 1:
8773
+ reset_mode = "Shift Ends";
8774
+ break;
8775
+ case 2:
8776
+ reset_mode = "Timeout";
8777
+ break;
8778
+ }
8779
+ let acc_odr = "10Hz";
8780
+ switch(frame[39]){
8781
+ case 0:
8782
+ acc_odr = "10Hz";
8783
+ break;
8784
+ case 1:
8785
+ acc_odr = "20Hz";
8786
+ break;
8787
+ case 2:
8788
+ acc_odr = "50Hz";
8789
+ break;
8790
+ case 3:
8791
+ acc_odr = "100Hz";
8792
+ break;
8793
+ case 4:
8794
+ acc_odr = "200Hz";
8795
+ break;
8796
+ case 5:
8797
+ acc_odr = "400Hz";
8798
+ break;
8799
+ }
8800
+ let rtc_sampling_interval = "5 seconds";
8801
+ switch(frame[38]){
8802
+ case 0:
8803
+ rtc_sampling_interval = "1 minute";
8804
+ break;
8805
+ case 1:
8806
+ rtc_sampling_interval = "5 minutes";
8807
+ break;
8808
+ case 2:
8809
+ rtc_sampling_interval = "15 minutes";
8810
+ break;
8811
+ case 3:
8812
+ rtc_sampling_interval = "30 minutes";
8813
+ break;
8814
+ case 4:
8815
+ rtc_sampling_interval = "1 hour";
8816
+ break;
8817
+ case 5:
8818
+ rtc_sampling_interval = "2 hours";
8819
+ break;
8820
+ case 6:
8821
+ rtc_sampling_interval = "3 hours";
8822
+ break;
8823
+ case 7:
8824
+ rtc_sampling_interval = "6 hours";
8825
+ break;
8826
+ case 8:
8827
+ rtc_sampling_interval = "12 hours";
8828
+ break;
8829
+ case 9:
8830
+ rtc_sampling_interval = "5 seconds";
8831
+ break;
8832
+ case 10:
8833
+ rtc_sampling_interval = "10 seconds";
8834
+ break;
8835
+ case 11:
8836
+ rtc_sampling_interval = "15 seconds";
8837
+ break;
8838
+ case 12:
8839
+ rtc_sampling_interval = "30 seconds";
8840
+ break;
8841
+ }
8842
+ return {
8843
+ 'firmware': frame[2],
8844
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
8845
+ 'debouncing_timeout': frame[17] + "msec",
8846
+ 'accelero_state': frame[18]? "Enabled": "Disabled",
8847
+ 'input_1_active_edge': frame[19]? "Rising": "Falling",
8848
+ 'input_2_active_edge': frame[20]? "Rising": "Falling",
8849
+ 'input_3_active_edge': frame[21]? "Rising": "Falling",
8850
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
8851
+ 'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
8852
+ 'Shift_end_1': [
8853
+ String(frame[27]).padStart(2, '0'),
8854
+ String(frame[28]).padStart(2, '0')
8855
+ ].join(':'),
8856
+ 'Shift_end_2': [
8857
+ String(frame[29]).padStart(2, '0'),
8858
+ String(frame[30]).padStart(2, '0')
8859
+ ].join(':'),
8860
+ 'Shift_end_3': [
8861
+ String(frame[31]).padStart(2, '0'),
8862
+ String(frame[32]).padStart(2, '0')
8863
+ ].join(':'),
8864
+ 'Shift_end_4': [
8865
+ String(frame[33]).padStart(2, '0'),
8866
+ String(frame[34]).padStart(2, '0')
8867
+ ].join(':'),
8868
+ 'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
8869
+ 'counter_reset_mode': reset_mode,
8870
+ 'sampling_interval': rtc_sampling_interval,
8871
+ 'acc_odr': acc_odr,
8872
+ 'hardware_id': frame.slice(40, 43),
8873
+ 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
8874
+ 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
8875
+ 'machine_values': {
8876
+ 'firmware': frame[2],
8877
+ 'accelerometer_threshold': frame[16],
8878
+ 'debouncing_timeout': frame[17],
8879
+ 'accelero_state': frame[18],
8880
+ 'input_1_active_edge': frame[19],
8881
+ 'input_2_active_edge': frame[20],
8882
+ 'input_3_active_edge': frame[21],
8883
+ 'counter_threshold': frame.slice(22, 26),
8884
+ 'trasnmit_on_change_status': frame[26],
8885
+ 'Shift_end_1': frame.slice(27, 29),
8886
+ 'Shift_end_2': frame.slice(29, 31),
8887
+ 'Shift_end_3': frame.slice(31, 33),
8888
+ 'Shift_end_4': frame.slice(33, 35),
8889
+ 'reset_timeout': frame.slice(35, 37),
8890
+ 'counter_reset_mode': frame[37],
8891
+ 'sampling_interval': frame[38],
8892
+ 'acc_odr': frame[39],
8893
+ 'hardware_id': frame.slice(40, 43),
8894
+ 'report_rate': frame.slice(43, 47),
8895
+ 'tx_life_counter': frame.slice(47, 51)
8896
+ }
8897
+ }
8898
+ } else{
8899
+ return {
8900
+ 'firmware': frame[2],
8901
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
8902
+ 'accelerometer_threshold': (frame[16]* 32) + "mg.",
8903
+ 'debouncing_timeout': frame[17].toString() + "msec.",
8904
+ 'accelero_state': frame[18],
8905
+ 'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
8906
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
8907
+ 'trasnmit_on_change_status': frame[26],
8908
+ 'machine_values': {
8909
+ 'firmware': frame[2],
8910
+ 'report_rate': frame.slice(12, 16),
8911
+ 'accelerometer_threshold': frame[16],
8912
+ 'debouncing_timeout': frame[17],
8913
+ 'accelero_active_state': frame[18],
8914
+ 'digital_inputs_active_edge': frame.slice(19, 22),
8915
+ 'counter_threshold': frame.slice(22, 26),
8916
+ 'trasnmit_on_change_status': frame[26]
8917
+ }
8918
+ }
7337
8919
  }
8920
+ }
8921
+ },
8922
+ '109': {
8923
+ name: 'Wireless Custom Solar Sensor',
8924
+ parse: (d) => {
8925
+ return {
8926
+ illuminance: d.slice(0, 4).reduce(msbLsb),
8927
+ total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
8928
+ ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
8929
+ };
7338
8930
  },
7339
8931
  'parse_fly': (frame) => {
7340
8932
  if(frame[2] > 8){
@@ -7493,30 +9085,6 @@ function sensor_types(parent){
7493
9085
  }
7494
9086
  }
7495
9087
  },
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
9088
  '109': {
7521
9089
  name: 'Wireless Custom Solar Sensor',
7522
9090
  parse: (d) => {
@@ -7589,7 +9157,7 @@ function sensor_types(parent){
7589
9157
  var mode = payload[8];
7590
9158
  var odr = msbLsb(payload[9], payload[10]);
7591
9159
  var fsr = payload[11] >> 5;
7592
- var device_temp = msbLsb(payload[14], payload[15])/100;
9160
+ var temperature = msbLsb(payload[14], payload[15])/100;
7593
9161
 
7594
9162
  globalDevices[deviceAddr] = {
7595
9163
  // stream_size: expected_packets,
@@ -7599,7 +9167,7 @@ function sensor_types(parent){
7599
9167
  fsr: fsr,
7600
9168
  hour: hour,
7601
9169
  minute: minute,
7602
- device_temp: device_temp,
9170
+ temperature: temperature,
7603
9171
  }
7604
9172
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
7605
9173
  return;
@@ -7613,7 +9181,7 @@ function sensor_types(parent){
7613
9181
  var mode = payload[8];
7614
9182
  var odr = msbLsb(payload[9], payload[10]);
7615
9183
  var fsr = payload[11] >> 5;
7616
- var device_temp = msbLsb(payload[14], payload[15])/100;
9184
+ var temperature = msbLsb(payload[14], payload[15])/100;
7617
9185
 
7618
9186
  globalDevices[deviceAddr] = {
7619
9187
  // stream_size: expected_packets,
@@ -7623,7 +9191,7 @@ function sensor_types(parent){
7623
9191
  fsr: fsr,
7624
9192
  hour: hour,
7625
9193
  minute: minute,
7626
- device_temp: device_temp,
9194
+ temperature: temperature,
7627
9195
  }
7628
9196
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
7629
9197
  }
@@ -7697,7 +9265,7 @@ function sensor_types(parent){
7697
9265
  mac_address: deviceAddr,
7698
9266
  fsr: fsr_text,
7699
9267
  odr: globalDevices[deviceAddr].odr,
7700
- device_temp: globalDevices[deviceAddr].device_temp,
9268
+ temperature: globalDevices[deviceAddr].temperature,
7701
9269
  total_samples: label,
7702
9270
  data: fft_concat
7703
9271
  };
@@ -7718,7 +9286,7 @@ function sensor_types(parent){
7718
9286
  var mode = payload[8];
7719
9287
  var odr = msbLsb(payload[9], payload[10]);
7720
9288
  var fsr = payload[11] >> 5;
7721
- var device_temp = msbLsb(payload[14], payload[15])/100;
9289
+ var temperature = msbLsb(payload[14], payload[15])/100;
7722
9290
 
7723
9291
  globalDevices[deviceAddr] = {
7724
9292
  // stream_size: expected_packets,
@@ -7728,7 +9296,7 @@ function sensor_types(parent){
7728
9296
  fsr: fsr,
7729
9297
  hour: hour,
7730
9298
  minute: minute,
7731
- device_temp: device_temp,
9299
+ temperature: temperature,
7732
9300
  }
7733
9301
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
7734
9302
  return;
@@ -8004,7 +9572,65 @@ function sensor_types(parent){
8004
9572
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
8005
9573
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8006
9574
  frame_data.smart_mode_threshold = frame[34] * 50;
8007
- if(frame[2] > 4){ // for Firmware v5 and above
9575
+ if(frame[2] > 5){ // for Firmware v6 and above
9576
+ frame_data.motion_to_delay = frame[41] * 50;
9577
+ return {
9578
+ 'firmware': frame[2],
9579
+ 'destination_address': toMac(frame.slice(12, 16)),
9580
+ 'mode': frame_data.mode,
9581
+ 'odr': frame_data.odr_1+'Hz',
9582
+ 'sampling_duration': frame_data.sampling_duration_1,
9583
+ 'filter_status': frame_data.filter_status,
9584
+ 'lpf_coeff': frame_data.lpf_coeff_1,
9585
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9586
+ 'hpf_coeff': frame_data.hpf_coeff_1,
9587
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9588
+ 'sampling_interval': frame_data.sampling_interval,
9589
+ 'on_request_timeout': frame_data.on_request_timeout,
9590
+ 'deadband': frame_data.deadband,
9591
+ 'payload_length': frame_data.payload_length,
9592
+ 'fsr': frame_data.fsr_text,
9593
+ 'rpm_compute_status': frame_data.rpm_status,
9594
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9595
+ 'auto_raw_interval': frame_data.auto_raw_interval,
9596
+ 'smart_mode_skip_count': frame[33],
9597
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9598
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
9599
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
9600
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
9601
+ 'max_num_of_motion_tx_per_interval': frame[42],
9602
+ 'hardware_id': frame.slice(43, 46),
9603
+ 'reserved': frame.slice(46, 50),
9604
+ 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
9605
+ 'machine_values': {
9606
+ 'firmware': frame[2],
9607
+ 'destination_address': toMac(frame.slice(12, 16), false),
9608
+ 'mode': frame[16],
9609
+ 'odr': frame[17],
9610
+ 'sampling_duration': frame[18],
9611
+ 'filter_status': frame[19],
9612
+ 'lpf_coeff': frame[20],
9613
+ 'hpf_coeff': frame[21],
9614
+ 'sampling_interval': frame[22],
9615
+ 'on_request_timeout': frame[23],
9616
+ 'deadband': frame[24],
9617
+ 'payload_length': frame[25],
9618
+ 'fsr': frame[26],
9619
+ 'rpm_compute_status': frame[27],
9620
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
9621
+ 'auto_raw_interval': frame[32],
9622
+ 'smart_mode_skip_count': frame[33],
9623
+ 'smart_mode_acc_threshold':frame[34],
9624
+ 'uptime_counter': frame.slice(35, 39),
9625
+ 'max_tx_raw_samples': frame.slice(39, 41),
9626
+ 'motion_to_sampling_delay': frame[41],
9627
+ 'max_num_of_motion_tx_per_interval': frame[42],
9628
+ 'hardware_id': frame.slice(43, 46),
9629
+ 'reserved': frame.slice(46, 50),
9630
+ 'tx_lifetime_counter': frame.slice(50, 54)
9631
+ }
9632
+ }
9633
+ } else if(frame[2] > 4){ // for Firmware v5 and above
8008
9634
  return {
8009
9635
  'firmware': frame[2],
8010
9636
  'destination_address': toMac(frame.slice(12, 16)),
@@ -8163,7 +9789,7 @@ function sensor_types(parent){
8163
9789
  var mode = payload[8];
8164
9790
  var odr = msbLsb(payload[9], payload[10]);
8165
9791
  var fsr = payload[11] >> 5;
8166
- var device_temp = msbLsb(payload[14], payload[15])/100;
9792
+ var temperature = msbLsb(payload[14], payload[15])/100;
8167
9793
 
8168
9794
  globalDevices[deviceAddr] = {
8169
9795
  // stream_size: expected_packets,
@@ -8173,7 +9799,7 @@ function sensor_types(parent){
8173
9799
  fsr: fsr,
8174
9800
  hour: hour,
8175
9801
  minute: minute,
8176
- device_temp: device_temp,
9802
+ temperature: temperature,
8177
9803
  }
8178
9804
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8179
9805
  return;
@@ -8187,7 +9813,7 @@ function sensor_types(parent){
8187
9813
  var mode = payload[8];
8188
9814
  var odr = msbLsb(payload[9], payload[10]);
8189
9815
  var fsr = payload[11] >> 5;
8190
- var device_temp = msbLsb(payload[14], payload[15])/100;
9816
+ var temperature = msbLsb(payload[14], payload[15])/100;
8191
9817
 
8192
9818
  globalDevices[deviceAddr] = {
8193
9819
  // stream_size: expected_packets,
@@ -8197,7 +9823,7 @@ function sensor_types(parent){
8197
9823
  fsr: fsr,
8198
9824
  hour: hour,
8199
9825
  minute: minute,
8200
- device_temp: device_temp,
9826
+ temperature: temperature,
8201
9827
  }
8202
9828
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8203
9829
  }
@@ -8282,7 +9908,7 @@ function sensor_types(parent){
8282
9908
  mac_address: deviceAddr,
8283
9909
  fsr: fsr_text,
8284
9910
  odr: globalDevices[deviceAddr].odr,
8285
- device_temp: globalDevices[deviceAddr].device_temp,
9911
+ temperature: globalDevices[deviceAddr].temperature,
8286
9912
  total_samples: label,
8287
9913
  data: fft_concat
8288
9914
  };
@@ -8302,7 +9928,7 @@ function sensor_types(parent){
8302
9928
  var mode = payload[8];
8303
9929
  var odr = msbLsb(payload[9], payload[10]);
8304
9930
  var fsr = payload[11] >> 5;
8305
- var device_temp = msbLsb(payload[14], payload[15])/100;
9931
+ var temperature = msbLsb(payload[14], payload[15])/100;
8306
9932
 
8307
9933
  globalDevices[deviceAddr] = {
8308
9934
  // stream_size: expected_packets,
@@ -8312,7 +9938,7 @@ function sensor_types(parent){
8312
9938
  fsr: fsr,
8313
9939
  hour: hour,
8314
9940
  minute: minute,
8315
- device_temp: device_temp,
9941
+ temperature: temperature,
8316
9942
  }
8317
9943
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8318
9944
  return;
@@ -8758,7 +10384,79 @@ function sensor_types(parent){
8758
10384
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8759
10385
  frame_data.p1_smart_mode_threshold = frame[38] * 50;
8760
10386
  frame_data.p2_smart_mode_threshold = frame[39] * 50;
8761
- if(frame[2] > 4){ // for Firmware v5 and above
10387
+ if(frame[2] > 5){ // for Firmware v6 and above
10388
+ frame_data.motion_to_delay = frame[50] * 50;
10389
+ return {
10390
+ 'firmware': frame[2],
10391
+ 'destination_address': toMac(frame.slice(12, 16)),
10392
+ 'mode': frame_data.mode,
10393
+ 'odr_1': frame_data.odr_1+'Hz',
10394
+ 'odr_2': frame_data.odr_2+'Hz',
10395
+ 'sampling_duration_1': frame_data.sampling_duration_1,
10396
+ 'sampling_duration_2': frame_data.sampling_duration_2,
10397
+ 'filter_status': frame_data.filter_status,
10398
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
10399
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
10400
+ 'lpf_coeff_2': frame_data.lpf_coeff_2,
10401
+ 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
10402
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
10403
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
10404
+ 'hpf_coeff_2': frame_data.hpf_coeff_2,
10405
+ 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
10406
+ 'sampling_interval': frame_data.sampling_interval,
10407
+ 'on_request_timeout': frame_data.on_request_timeout,
10408
+ 'deadband': frame_data.deadband,
10409
+ 'payload_length': frame_data.payload_length,
10410
+ 'fsr': frame_data.fsr_text,
10411
+ 'rpm_compute_status': frame_data.rpm_status,
10412
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
10413
+ 'auto_raw_interval': frame_data.auto_raw_interval,
10414
+ 'smart_mode_skip_count': frame[37],
10415
+ 'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
10416
+ 'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
10417
+ 'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb)+'sec',
10418
+ 'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb)+'sec',
10419
+ 'max_tx_raw_samples': frame.slice(48, 50).reduce(msbLsb),
10420
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
10421
+ 'max_num_of_motion_tx_per_interval': frame[51],
10422
+ 'hardware_id': frame.slice(52, 55),
10423
+ 'reserved': frame.slice(55, 59),
10424
+ 'tx_lifetime_counter': frame.slice(59, 63).reduce(msbLsb),
10425
+ 'machine_values': {
10426
+ 'firmware': frame[2],
10427
+ 'destination_address': toMac(frame.slice(12, 16), false),
10428
+ 'mode': frame[16],
10429
+ 'odr_1': frame[17],
10430
+ 'odr_2': frame[18],
10431
+ 'sampling_duration_1': frame[19],
10432
+ 'sampling_duration_2': frame[20],
10433
+ 'filter_status': frame[21],
10434
+ 'lpf_coeff_1': frame[22],
10435
+ 'lpf_coeff_2': frame[23],
10436
+ 'hpf_coeff_1': frame[24],
10437
+ 'hpf_coeff_2': frame[25],
10438
+ 'sampling_interval': frame[26],
10439
+ 'on_request_timeout': frame[27],
10440
+ 'deadband': frame[28],
10441
+ 'payload_length': frame[29],
10442
+ 'fsm': frame[30],
10443
+ 'rpm_compute_status': frame[31],
10444
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36), false),
10445
+ 'auto_raw_interval': frame[36],
10446
+ 'smart_mode_skip_count': frame[37],
10447
+ 'smart_mode_acc_threshold_probe_1':frame[38],
10448
+ 'smart_mode_acc_threshold_probe_2':frame[39],
10449
+ 'uptime_counter_probe_1': frame.slice(40, 44),
10450
+ 'uptime_counter_probe_2': frame.slice(44, 48),
10451
+ 'max_tx_raw_samples': frame.slice(48, 50),
10452
+ 'motion_to_sampling_delay': frame[50],
10453
+ 'max_num_of_motion_tx_per_interval': frame[51],
10454
+ 'hardware_id': frame.slice(52, 55),
10455
+ 'reserved': frame.slice(55, 59),
10456
+ 'tx_lifetime_counter': frame.slice(59, 63)
10457
+ }
10458
+ }
10459
+ } else if (frame[2] > 4){ // for Firmware v5 and above
8762
10460
  return {
8763
10461
  'firmware': frame[2],
8764
10462
  'destination_address': toMac(frame.slice(12, 16)),
@@ -8942,7 +10640,7 @@ function sensor_types(parent){
8942
10640
  var mode = payload[8];
8943
10641
  var odr = msbLsb(payload[9], payload[10]);
8944
10642
  var fsr = payload[11] >> 5;
8945
- var device_temp = msbLsb(payload[14], payload[15])/100;
10643
+ var temperature = msbLsb(payload[14], payload[15])/100;
8946
10644
 
8947
10645
  globalDevices[deviceAddr] = {
8948
10646
  // stream_size: expected_packets,
@@ -8952,7 +10650,7 @@ function sensor_types(parent){
8952
10650
  fsr: fsr,
8953
10651
  hour: hour,
8954
10652
  minute: minute,
8955
- device_temp: device_temp,
10653
+ temperature: temperature,
8956
10654
  }
8957
10655
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8958
10656
  return;
@@ -8966,7 +10664,7 @@ function sensor_types(parent){
8966
10664
  var mode = payload[8];
8967
10665
  var odr = msbLsb(payload[9], payload[10]);
8968
10666
  var fsr = payload[11] >> 5;
8969
- var device_temp = msbLsb(payload[14], payload[15])/100;
10667
+ var temperature = msbLsb(payload[14], payload[15])/100;
8970
10668
 
8971
10669
  globalDevices[deviceAddr] = {
8972
10670
  // stream_size: expected_packets,
@@ -8976,7 +10674,7 @@ function sensor_types(parent){
8976
10674
  fsr: fsr,
8977
10675
  hour: hour,
8978
10676
  minute: minute,
8979
- device_temp: device_temp,
10677
+ temperature: temperature,
8980
10678
  }
8981
10679
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8982
10680
  }
@@ -9048,7 +10746,7 @@ function sensor_types(parent){
9048
10746
  mac_address: deviceAddr,
9049
10747
  fsr: fsr_text,
9050
10748
  odr: globalDevices[deviceAddr].odr,
9051
- device_temp: globalDevices[deviceAddr].device_temp,
10749
+ temperature: globalDevices[deviceAddr].temperature,
9052
10750
  total_samples: label,
9053
10751
  data: fft_concat
9054
10752
  };
@@ -9073,7 +10771,7 @@ function sensor_types(parent){
9073
10771
  var mode = payload[8];
9074
10772
  var odr = msbLsb(payload[9], payload[10]);
9075
10773
  var fsr = payload[11] >> 5;
9076
- var device_temp = msbLsb(payload[14], payload[15])/100;
10774
+ var temperature = msbLsb(payload[14], payload[15])/100;
9077
10775
 
9078
10776
  globalDevices[deviceAddr] = {
9079
10777
  // stream_size: expected_packets,
@@ -9083,7 +10781,7 @@ function sensor_types(parent){
9083
10781
  fsr: fsr,
9084
10782
  hour: hour,
9085
10783
  minute: minute,
9086
- device_temp: device_temp,
10784
+ temperature: temperature,
9087
10785
  }
9088
10786
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9089
10787
  return;
@@ -9360,7 +11058,65 @@ function sensor_types(parent){
9360
11058
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
9361
11059
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9362
11060
  frame_data.smart_mode_threshold = frame[34] * 50;
9363
- if(frame[2] > 4){ // for Firmware v5 and above
11061
+ if(frame[2] > 5){ // for Firmware v6 and above
11062
+ frame_data.motion_to_delay = frame[41] * 50;
11063
+ return {
11064
+ 'firmware': frame[2],
11065
+ 'destination_address': toMac(frame.slice(12, 16)),
11066
+ 'mode': frame_data.mode,
11067
+ 'odr': frame_data.odr_1+'Hz',
11068
+ 'sampling_duration': frame_data.sampling_duration_1,
11069
+ 'filter_status': frame_data.filter_status,
11070
+ 'lpf_coeff': frame_data.lpf_coeff_1,
11071
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
11072
+ 'hpf_coeff': frame_data.hpf_coeff_1,
11073
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
11074
+ 'sampling_interval': frame_data.sampling_interval,
11075
+ 'on_request_timeout': frame_data.on_request_timeout,
11076
+ 'deadband': frame_data.deadband,
11077
+ 'payload_length': frame_data.payload_length,
11078
+ 'fsr': frame_data.fsr_text,
11079
+ 'rpm_compute_status': frame_data.rpm_status,
11080
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
11081
+ 'auto_raw_interval': frame_data.auto_raw_interval,
11082
+ 'smart_mode_skip_count': frame[33],
11083
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
11084
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
11085
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
11086
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
11087
+ 'max_num_of_motion_tx_per_interval': frame[42],
11088
+ 'hardware_id': frame.slice(43, 46),
11089
+ 'reserved': frame.slice(46, 50),
11090
+ 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
11091
+ 'machine_values': {
11092
+ 'firmware': frame[2],
11093
+ 'destination_address': toMac(frame.slice(12, 16), false),
11094
+ 'mode': frame[16],
11095
+ 'odr': frame[17],
11096
+ 'sampling_duration': frame[18],
11097
+ 'filter_status': frame[19],
11098
+ 'lpf_coeff': frame[20],
11099
+ 'hpf_coeff': frame[21],
11100
+ 'sampling_interval': frame[22],
11101
+ 'on_request_timeout': frame[23],
11102
+ 'deadband': frame[24],
11103
+ 'payload_length': frame[25],
11104
+ 'fsr': frame[26],
11105
+ 'rpm_compute_status': frame[27],
11106
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
11107
+ 'auto_raw_interval': frame[32],
11108
+ 'smart_mode_skip_count': frame[33],
11109
+ 'smart_mode_acc_threshold':frame[34],
11110
+ 'uptime_counter': frame.slice(35, 39),
11111
+ 'max_tx_raw_samples': frame.slice(39, 41),
11112
+ 'motion_to_sampling_delay': frame[41],
11113
+ 'max_num_of_motion_tx_per_interval': frame[42],
11114
+ 'hardware_id': frame.slice(43, 46),
11115
+ 'reserved': frame.slice(46, 50),
11116
+ 'tx_lifetime_counter': frame.slice(50, 54)
11117
+ }
11118
+ }
11119
+ } else if(frame[2] > 4){ // for Firmware v5 and above
9364
11120
  return {
9365
11121
  'firmware': frame[2],
9366
11122
  'destination_address': toMac(frame.slice(12, 16)),
@@ -9500,7 +11256,7 @@ function sensor_types(parent){
9500
11256
  var mode = payload[8];
9501
11257
  var odr = msbLsb(payload[9], payload[10]);
9502
11258
  var fsr = payload[11] >> 5;
9503
- var device_temp = msbLsb(payload[14], payload[15])/100;
11259
+ var temperature = msbLsb(payload[14], payload[15])/100;
9504
11260
 
9505
11261
  globalDevices[deviceAddr] = {
9506
11262
  data: {},
@@ -9509,7 +11265,7 @@ function sensor_types(parent){
9509
11265
  fsr: fsr,
9510
11266
  hour: hour,
9511
11267
  minute: minute,
9512
- device_temp: device_temp,
11268
+ temperature: temperature,
9513
11269
  }
9514
11270
  globalDevices[deviceAddr].last_packet_counter = current_packet;
9515
11271
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -9524,7 +11280,7 @@ function sensor_types(parent){
9524
11280
  var mode = payload[8];
9525
11281
  var odr = msbLsb(payload[9], payload[10]);
9526
11282
  var fsr = payload[11] >> 5;
9527
- var device_temp = msbLsb(payload[14], payload[15])/100;
11283
+ var temperature = msbLsb(payload[14], payload[15])/100;
9528
11284
 
9529
11285
  globalDevices[deviceAddr] = {
9530
11286
  data: {},
@@ -9533,7 +11289,7 @@ function sensor_types(parent){
9533
11289
  fsr: fsr,
9534
11290
  hour: hour,
9535
11291
  minute: minute,
9536
- device_temp: device_temp,
11292
+ temperature: temperature,
9537
11293
  }
9538
11294
  globalDevices[deviceAddr].last_packet_counter = current_packet;
9539
11295
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -9543,7 +11299,7 @@ function sensor_types(parent){
9543
11299
  var mode = payload[8];
9544
11300
  var odr = msbLsb(payload[9], payload[10]);
9545
11301
  var fsr = payload[11] >> 5;
9546
- var device_temp = msbLsb(payload[14], payload[15])/100;
11302
+ var temperature = msbLsb(payload[14], payload[15])/100;
9547
11303
 
9548
11304
  globalDevices[deviceAddr] = {
9549
11305
  data: {},
@@ -9552,7 +11308,7 @@ function sensor_types(parent){
9552
11308
  fsr: fsr,
9553
11309
  hour: hour,
9554
11310
  minute: minute,
9555
- device_temp: device_temp,
11311
+ temperature: temperature,
9556
11312
  }
9557
11313
  globalDevices[deviceAddr].last_packet_counter = current_packet;
9558
11314
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -9626,7 +11382,7 @@ function sensor_types(parent){
9626
11382
  mac_address: deviceAddr,
9627
11383
  fsr: fsr_text,
9628
11384
  odr: globalDevices[deviceAddr].odr,
9629
- device_temp: globalDevices[deviceAddr].device_temp,
11385
+ temperature: globalDevices[deviceAddr].temperature,
9630
11386
  total_samples: label,
9631
11387
  fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
9632
11388
  data: fft_concat
@@ -9909,7 +11665,65 @@ function sensor_types(parent){
9909
11665
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
9910
11666
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9911
11667
  frame_data.smart_mode_threshold = frame[34] * 50;
9912
- if(frame[2] > 4){ // for Firmware v5 and above
11668
+ if(frame[2] > 5){ // for Firmware v6 and above
11669
+ frame_data.motion_to_delay = frame[41] * 50;
11670
+ return {
11671
+ 'firmware': frame[2],
11672
+ 'destination_address': toMac(frame.slice(12, 16)),
11673
+ 'mode': frame_data.mode,
11674
+ 'odr': frame_data.odr_1+'Hz',
11675
+ 'sampling_duration': frame_data.sampling_duration_1,
11676
+ 'filter_status': frame_data.filter_status,
11677
+ 'lpf_coeff': frame_data.lpf_coeff_1,
11678
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
11679
+ 'hpf_coeff': frame_data.hpf_coeff_1,
11680
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
11681
+ 'sampling_interval': frame_data.sampling_interval,
11682
+ 'on_request_timeout': frame_data.on_request_timeout,
11683
+ 'deadband': frame_data.deadband,
11684
+ 'payload_length': frame_data.payload_length,
11685
+ 'fsr': frame_data.fsr_text,
11686
+ 'rpm_compute_status': frame_data.rpm_status,
11687
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
11688
+ 'auto_raw_interval': frame_data.auto_raw_interval,
11689
+ 'smart_mode_skip_count': frame[33],
11690
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
11691
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
11692
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
11693
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
11694
+ 'max_num_of_motion_tx_per_interval': frame[42],
11695
+ 'hardware_id': frame.slice(43, 46),
11696
+ 'reserved': frame.slice(46, 50),
11697
+ 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
11698
+ 'machine_values': {
11699
+ 'firmware': frame[2],
11700
+ 'destination_address': toMac(frame.slice(12, 16), false),
11701
+ 'mode': frame[16],
11702
+ 'odr': frame[17],
11703
+ 'sampling_duration': frame[18],
11704
+ 'filter_status': frame[19],
11705
+ 'lpf_coeff': frame[20],
11706
+ 'hpf_coeff': frame[21],
11707
+ 'sampling_interval': frame[22],
11708
+ 'on_request_timeout': frame[23],
11709
+ 'deadband': frame[24],
11710
+ 'payload_length': frame[25],
11711
+ 'fsr': frame[26],
11712
+ 'rpm_compute_status': frame[27],
11713
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
11714
+ 'auto_raw_interval': frame[32],
11715
+ 'smart_mode_skip_count': frame[33],
11716
+ 'smart_mode_acc_threshold':frame[34],
11717
+ 'uptime_counter': frame.slice(35, 39),
11718
+ 'max_tx_raw_samples': frame.slice(39, 41),
11719
+ 'motion_to_sampling_delay': frame[41],
11720
+ 'max_num_of_motion_tx_per_interval': frame[42],
11721
+ 'hardware_id': frame.slice(43, 46),
11722
+ 'reserved': frame.slice(46, 50),
11723
+ 'tx_lifetime_counter': frame.slice(50, 54)
11724
+ }
11725
+ }
11726
+ } else if(frame[2] > 4){ // for Firmware v5 and above
9913
11727
  return {
9914
11728
  'firmware': frame[2],
9915
11729
  'destination_address': toMac(frame.slice(12, 16)),
@@ -10045,7 +11859,7 @@ function sensor_types(parent){
10045
11859
  var firmware = payload[1];
10046
11860
  var odr = msbLsb(payload[10], payload[11]);
10047
11861
  var fsr = payload[12];
10048
- var device_temp = msbLsb(payload[13], payload[14])/100;
11862
+ var temperature = msbLsb(payload[13], payload[14])/100;
10049
11863
  var expected_packets = msbLsb(payload[15], payload[16]);
10050
11864
  var current_packet = msbLsb(payload[17], payload[18]);
10051
11865
  var sdata_start = 19;
@@ -10211,21 +12025,30 @@ function sensor_types(parent){
10211
12025
 
10212
12026
  odr: payload.slice(10, 12).reduce(msbLsb),
10213
12027
  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)
12028
+
12029
+ x_max_acceleration: payload.slice(14, 16).reduce(msbLsb),
12030
+ x_rms_acceleration: payload.slice(16, 18).reduce(msbLsb),
12031
+ x_max_velocity: payload.slice(18, 20).reduce(msbLsb) / 100,
12032
+ x_rms_velocity:payload.slice(20, 22).reduce(msbLsb) / 100,
12033
+ x_peak_one_Hz: payload.slice(22, 24).reduce(msbLsb),
12034
+ x_peak_two_Hz: payload.slice(24, 26).reduce(msbLsb),
12035
+ x_peak_three_Hz: payload.slice(26, 28).reduce(msbLsb),
12036
+
12037
+ y_max_acceleration: payload.slice(28, 30).reduce(msbLsb),
12038
+ y_rms_acceleration: payload.slice(30, 32).reduce(msbLsb),
12039
+ y_max_velocity: payload.slice(32, 34).reduce(msbLsb) / 100,
12040
+ y_rms_velocity:payload.slice(34, 36).reduce(msbLsb) / 100,
12041
+ y_peak_one_Hz: payload.slice(36, 38).reduce(msbLsb),
12042
+ y_peak_two_Hz: payload.slice(38, 40).reduce(msbLsb),
12043
+ y_peak_three_Hz: payload.slice(40, 42).reduce(msbLsb),
12044
+
12045
+ z_max_acceleration: payload.slice(42, 44).reduce(msbLsb),
12046
+ z_rms_acceleration: payload.slice(44, 46).reduce(msbLsb),
12047
+ z_max_velocity: payload.slice(46, 48).reduce(msbLsb) / 100,
12048
+ z_rms_velocity:payload.slice(48, 50).reduce(msbLsb) / 100,
12049
+ z_peak_one_Hz: payload.slice(50, 52).reduce(msbLsb),
12050
+ z_peak_two_Hz: payload.slice(52, 54).reduce(msbLsb),
12051
+ z_peak_three_Hz: payload.slice(54, 56).reduce(msbLsb),
10229
12052
  };
10230
12053
  }
10231
12054
  // else{
@@ -10235,17 +12058,19 @@ function sensor_types(parent){
10235
12058
  },
10236
12059
  'parse_fly': (frame) => {
10237
12060
  return {
10238
- 'fly_rate': frame.slice(12, 13).reduce(msbLsb) + " Min.",
12061
+ 'fly_rate': frame.slice(12, 14).reduce(msbLsb) + " Min.",
10239
12062
  '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),
12063
+ 'deadband': frame[15],
12064
+ 'hardware_id': frame.slice(16, 19),
12065
+ 'report_rate': frame.slice(19, 23).reduce(msbLsb) + " Sec.",
12066
+ 'tx_lifetime_counter': frame.slice(23, 27).reduce(msbLsb),
10243
12067
  'machine_values': {
10244
- 'fly_rate': frame.slice(12, 13).reduce(msbLsb),
12068
+ 'fly_rate': frame.slice(12, 14),
10245
12069
  '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)
12070
+ 'deadband': frame[15],
12071
+ 'hardware_id': frame.slice(16, 19),
12072
+ 'report_rate': frame.slice(19, 23),
12073
+ 'tx_lifetime_counter': frame.slice(23, 27)
10249
12074
  }
10250
12075
  }
10251
12076
  }
@@ -10402,25 +12227,62 @@ function sensor_types(parent){
10402
12227
  let frame_data = {};
10403
12228
  switch(frame[16]){
10404
12229
  case 0:
10405
- frame_data.fsr = "+-0.256 V";
10406
- break;
12230
+ frame_data.fsr = "+-6.114 V";
12231
+ break;
10407
12232
  case 1:
10408
- frame_data.fsr = "+-0.512 V";
10409
- break;
12233
+ frame_data.fsr = "+-4.096 V";
12234
+ break;
10410
12235
  case 2:
10411
- frame_data.fsr = "+-1.024 V";
10412
- break;
10413
- case 3:
10414
12236
  frame_data.fsr = "+-2.048 V";
10415
- break;
12237
+ break;
12238
+ case 3:
12239
+ frame_data.fsr = "+-1.024 V";
12240
+ break;
10416
12241
  case 4:
10417
- frame_data.fsr = "+-4.096 V";
10418
- break;
12242
+ frame_data.fsr = "+-0.512 V";
12243
+ break;
10419
12244
  case 5:
10420
- frame_data.fsr = "+-6.144 V";
10421
- break;
12245
+ frame_data.fsr = "+-0.256 V";
12246
+ break;
10422
12247
  }
10423
- if(frame[2]>12){
12248
+ if(frame[2]>13){ // firmware 14 and above
12249
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
12250
+ if(!auto_check_interval){
12251
+ frame_data.auto_check_interval = 'Disabled';
12252
+ }else{
12253
+ frame_data.auto_check_interval = auto_check_interval + " sec";
12254
+ }
12255
+ return {
12256
+ 'firmware': frame[2],
12257
+ 'fsr': frame_data.fsr,
12258
+ 'boot_time': frame[17] + " sec",
12259
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
12260
+ 'auto_check_interval': frame_data.auto_check_interval,
12261
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
12262
+ 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
12263
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
12264
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
12265
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
12266
+ 'hardware_id': frame.slice(37, 40),
12267
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
12268
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
12269
+ 'machine_values': {
12270
+ 'firmware': frame[2],
12271
+ 'fsr': frame[16],
12272
+ 'boot_time': frame[17],
12273
+ 'power_adc': frame.slice(18, 20),
12274
+ 'auto_check_interval': frame.slice(20, 22),
12275
+ 'auto_check_percentage': frame.slice(22, 24),
12276
+ 'always_on': frame[24],
12277
+ 'calibration_one': frame.slice(25, 29),
12278
+ 'calibration_two':frame.slice(29, 33),
12279
+ 'calibration_three':frame.slice(33, 37),
12280
+ 'hardware_id': frame.slice(37, 40),
12281
+ 'report_rate': frame.slice(40, 44),
12282
+ 'tx_life_counter': frame.slice(44, 48)
12283
+ }
12284
+ }
12285
+ }else if(frame[2]>12){
10424
12286
  return {
10425
12287
  'firmware': frame[2],
10426
12288
  'report_rate': frame.slice(12, 16).reduce(msbLsb),
@@ -10453,6 +12315,155 @@ function sensor_types(parent){
10453
12315
  }
10454
12316
  }
10455
12317
  },
12318
+ '123': {
12319
+ name: '3 Channel Production Counter',
12320
+ parse: (d, payload) => {
12321
+ if(payload[7] & 2 != 0){
12322
+ console.log('Error found');
12323
+ // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
12324
+ let error = {error: 'Error found, Acclerometer Probe may be unattached'};
12325
+ return error;
12326
+ }
12327
+ let report_type = "Regular";
12328
+ switch(d[25]){
12329
+ case 0:
12330
+ report_type = "Regular";
12331
+ break;
12332
+ case 1:
12333
+ report_type = "Shift end";
12334
+ break;
12335
+ case 2:
12336
+ report_type = "Interrupt";
12337
+ break;
12338
+ case 3:
12339
+ report_type = "Threshold";
12340
+ break;
12341
+ }
12342
+ return {
12343
+ digital_input_1_counter: d.slice(0, 4).reduce(msbLsb),
12344
+ digital_input_1_uptime: d.slice(4, 8).reduce(msbLsb),
12345
+ digital_input_2_counter: d.slice(8, 12).reduce(msbLsb),
12346
+ digital_input_2_uptime: d.slice(12, 16).reduce(msbLsb),
12347
+ digital_input_3_counter: d.slice(16, 20).reduce(msbLsb),
12348
+ digital_input_3_uptime: d.slice(20, 24).reduce(msbLsb),
12349
+ input_1: d[24] & 1 ? 1 : 0,
12350
+ input_2: d[24] & 2 ? 1 : 0,
12351
+ input_3: d[24] & 4 ? 1 : 0,
12352
+ report_type: report_type,
12353
+ rtc: [
12354
+ String(d[26]).padStart(2, '0'),
12355
+ String(d[27]).padStart(2, '0'),
12356
+ String(d[28]).padStart(2, '0')
12357
+ ].join(':')
12358
+ };
12359
+ },
12360
+ 'parse_fly': (frame) => {
12361
+ let reset_mode = "Disabled";
12362
+ switch(frame[36]){
12363
+ case 0:
12364
+ reset_mode = "Disabled";
12365
+ break;
12366
+ case 1:
12367
+ reset_mode = "Shift Ends";
12368
+ break;
12369
+ case 2:
12370
+ reset_mode = "Timeout";
12371
+ break;
12372
+ }
12373
+ let rtc_sampling_interval = "5sec";
12374
+ switch(frame[37]){
12375
+ case 0:
12376
+ rtc_sampling_interval = "1min";
12377
+ break;
12378
+ case 1:
12379
+ rtc_sampling_interval = "5min";
12380
+ break;
12381
+ case 2:
12382
+ rtc_sampling_interval = "15min";
12383
+ break;
12384
+ case 3:
12385
+ rtc_sampling_interval = "30min";
12386
+ break;
12387
+ case 4:
12388
+ rtc_sampling_interval = "1h";
12389
+ break;
12390
+ case 5:
12391
+ rtc_sampling_interval = "2h";
12392
+ break;
12393
+ case 6:
12394
+ rtc_sampling_interval = "3h";
12395
+ break;
12396
+ case 7:
12397
+ rtc_sampling_interval = "6h";
12398
+ break;
12399
+ case 8:
12400
+ rtc_sampling_interval = "12h";
12401
+ break;
12402
+ case 9:
12403
+ rtc_sampling_interval = "5sec";
12404
+ break;
12405
+ case 10:
12406
+ rtc_sampling_interval = "10sec";
12407
+ break;
12408
+ case 11:
12409
+ rtc_sampling_interval = "15sec";
12410
+ break;
12411
+ case 12:
12412
+ rtc_sampling_interval = "30sec";
12413
+ break;
12414
+ }
12415
+ return {
12416
+ 'firmware': frame[2],
12417
+ 'debouncing_timeout': frame.slice(16, 18).reduce(msbLsb) + "msec",
12418
+ 'input_1_active_edge': frame[18]? "Rising": "Falling",
12419
+ 'input_2_active_edge': frame[19]? "Rising": "Falling",
12420
+ 'input_3_active_edge': frame[20]? "Rising": "Falling",
12421
+ 'counter_threshold': frame.slice(21, 25).reduce(msbLsb),
12422
+ 'trasnmit_on_change_status': frame[25]? "Enabled": "Disabled",
12423
+ 'Shift_end_1': [
12424
+ String(frame[26]).padStart(2, '0'),
12425
+ String(frame[27]).padStart(2, '0')
12426
+ ].join(':'),
12427
+ 'Shift_end_2': [
12428
+ String(frame[28]).padStart(2, '0'),
12429
+ String(frame[29]).padStart(2, '0')
12430
+ ].join(':'),
12431
+ 'Shift_end_3': [
12432
+ String(frame[30]).padStart(2, '0'),
12433
+ String(frame[31]).padStart(2, '0')
12434
+ ].join(':'),
12435
+ 'Shift_end_4': [
12436
+ String(frame[32]).padStart(2, '0'),
12437
+ String(frame[33]).padStart(2, '0')
12438
+ ].join(':'),
12439
+ 'reset_timeout': frame.slice(34, 36).reduce(msbLsb) + "min",
12440
+ 'counter_reset_mode': reset_mode,
12441
+ 'sampling_interval': rtc_sampling_interval,
12442
+ 'hardware_id': frame.slice(38, 41),
12443
+ 'report_rate': frame.slice(41, 45).reduce(msbLsb) + "sec",
12444
+ 'tx_life_counter': frame.slice(45, 49).reduce(msbLsb),
12445
+ 'machine_values': {
12446
+ 'firmware': frame[2],
12447
+ 'debouncing_timeout': frame.slice(16, 18),
12448
+ 'input_1_active_edge': frame[18],
12449
+ 'input_2_active_edge': frame[19],
12450
+ 'input_3_active_edge': frame[20],
12451
+ 'counter_threshold': frame.slice(21, 25),
12452
+ 'trasnmit_on_change_status': frame[25],
12453
+ 'Shift_end_1': frame.slice(26, 28),
12454
+ 'Shift_end_2': frame.slice(28, 30),
12455
+ 'Shift_end_3': frame.slice(30, 32),
12456
+ 'Shift_end_4': frame.slice(32, 34),
12457
+ 'reset_timeout': frame.slice(34, 36),
12458
+ 'counter_reset_mode': frame[36],
12459
+ 'sampling_interval': frame[37],
12460
+ 'hardware_id': frame.slice(38, 41),
12461
+ 'report_rate': frame.slice(41, 45),
12462
+ 'tx_life_counter': frame.slice(45, 49)
12463
+ }
12464
+ }
12465
+ }
12466
+ },
10456
12467
  '180': {
10457
12468
  name: 'C1D2 One Channel Vibration Plus',
10458
12469
  parse: (payload, parsed, mac) => {
@@ -10500,6 +12511,59 @@ function sensor_types(parent){
10500
12511
  };
10501
12512
  }
10502
12513
  },
12514
+ '211': {
12515
+ name: 'D0 and Flow Sensor',
12516
+ parse: (payload, parsed, mac) => {
12517
+ if(payload[0] == 0){ // regular
12518
+ return {
12519
+ msg_type: 'regular',
12520
+ temperature: signInt(payload.slice(1, 3).reduce(msbLsb), 16),
12521
+ oxygen_saturation_percent: payload.slice(3, 7).reduce(msbLsb),
12522
+ oxygen_ppm: payload.slice(7, 11).reduce(msbLsb),
12523
+ oxygen_mg_l: payload.slice(11, 15).reduce(msbLsb)
12524
+ };
12525
+ }
12526
+ else{ // theshold
12527
+ let solenoid_status = payload[2];
12528
+ if(solenoid_status == 1){ // Solenoid On
12529
+ return {
12530
+ msg_type: 'threshold',
12531
+ solenoid_number: payload[1],
12532
+ solenoid_status: 'on',
12533
+ temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
12534
+ oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
12535
+ oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
12536
+ oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb),
12537
+ flow_rate: payload.slice(17, 21).reduce(msbLsb)
12538
+ };
12539
+ } else{ // Solenoid Off
12540
+ return {
12541
+ msg_type: 'threshold',
12542
+ solenoid_number: payload[1],
12543
+ solenoid_status: 'off',
12544
+ temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
12545
+ oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
12546
+ oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
12547
+ oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb)
12548
+ };
12549
+ }
12550
+ }
12551
+ },
12552
+ 'parse_fly': (frame) => {
12553
+ return {
12554
+ 'firmware': frame[2],
12555
+ 'hardware_id': frame.slice(12, 15),
12556
+ 'report_rate': frame.slice(15, 19).reduce(msbLsb) + "Sec",
12557
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
12558
+ 'machine_values': {
12559
+ 'firmware': frame[2],
12560
+ 'hardware_id': frame.slice(12, 15),
12561
+ 'report_rate': frame.slice(15, 19),
12562
+ 'tx_life_counter': frame.slice(19, 23)
12563
+ }
12564
+ }
12565
+ }
12566
+ },
10503
12567
  '217': {
10504
12568
  name: 'Wireless Weight Scale',
10505
12569
  parse: (d) => {
@@ -10508,6 +12572,68 @@ function sensor_types(parent){
10508
12572
  };
10509
12573
  }
10510
12574
  },
12575
+ '270': {
12576
+ name: 'Custom Salinity DO sensor',
12577
+ parse: (d) => {
12578
+ return {
12579
+ sensor_status: d[0],
12580
+ do_temperature_1: d.slice(1, 3).reduce(msbLsb) / 100,
12581
+ do_temperature_2: d.slice(3, 5).reduce(msbLsb) / 100,
12582
+ do_temperature_3: d.slice(5, 7).reduce(msbLsb) / 100,
12583
+ do_temperature_4: d.slice(7, 9).reduce(msbLsb) / 100,
12584
+ ec_temperature_1: d.slice(9, 11).reduce(msbLsb) / 100,
12585
+ ec_temperature_2: d.slice(11, 13).reduce(msbLsb) / 100,
12586
+ ec_temperature_3: d.slice(13, 15).reduce(msbLsb) / 100,
12587
+ ec_temperature_4: d.slice(15, 17).reduce(msbLsb) / 100,
12588
+ do_saturation_perc_1: d.slice(17, 19).reduce(msbLsb) / 100,
12589
+ do_saturation_perc_2: d.slice(19, 21).reduce(msbLsb) / 100,
12590
+ do_saturation_perc_3: d.slice(21, 23).reduce(msbLsb) / 100,
12591
+ do_saturation_perc_4: d.slice(23, 25).reduce(msbLsb) / 100,
12592
+ do_ppm_1: d.slice(25, 27).reduce(msbLsb) / 100,
12593
+ do_ppm_2: d.slice(27, 29).reduce(msbLsb) / 100,
12594
+ do_ppm_3: d.slice(29, 31).reduce(msbLsb) / 100,
12595
+ do_ppm_4: d.slice(31, 33).reduce(msbLsb) / 100,
12596
+ do_mgl_1: d.slice(33, 35).reduce(msbLsb) / 100,
12597
+ do_mgl_2: d.slice(35, 37).reduce(msbLsb) / 100,
12598
+ do_mgl_3: d.slice(37, 39).reduce(msbLsb) / 100,
12599
+ do_mgl_4: d.slice(39, 41).reduce(msbLsb) / 100,
12600
+ ec_conductivity_1: d.slice(41, 43).reduce(msbLsb) / 100,
12601
+ ec_conductivity_2: d.slice(43, 45).reduce(msbLsb) / 100,
12602
+ ec_conductivity_3: d.slice(45, 47).reduce(msbLsb) / 100,
12603
+ ec_conductivity_4: d.slice(47, 49).reduce(msbLsb) / 100,
12604
+ ec_salinity_ppt_1: d.slice(49, 57).reduce(msbLsb) / 100,
12605
+ ec_salinity_ppt_2: d.slice(57, 65).reduce(msbLsb) / 100,
12606
+ ec_salinity_ppt_3: d.slice(65, 73).reduce(msbLsb) / 100,
12607
+ ec_salinity_ppt_4: d.slice(73, 81).reduce(msbLsb) / 100,
12608
+ ec_tds_1: d.slice(81, 85).reduce(msbLsb) / 100,
12609
+ ec_tds_2: d.slice(85, 89).reduce(msbLsb) / 100,
12610
+ ec_tds_3: d.slice(89, 93).reduce(msbLsb) / 100,
12611
+ ec_tds_4: d.slice(93, 97).reduce(msbLsb) / 100
12612
+ };
12613
+ },
12614
+ 'parse_fly': (frame) => {
12615
+ return {
12616
+ 'firmware': frame[2],
12617
+ 'do_bootup_time': frame[12] + "Sec",
12618
+ 'ec_bootup_time': frame[13] + "Sec",
12619
+ 'device_ids_do_sensors': frame.slice(14, 18),
12620
+ 'device_ids_ec_sensors': frame.slice(18, 22),
12621
+ 'hardware_id': frame.slice(22, 25),
12622
+ 'report_rate': frame.slice(25, 29).reduce(msbLsb) + "Sec",
12623
+ 'tx_life_counter': frame.slice(29, 33).reduce(msbLsb),
12624
+ 'machine_values': {
12625
+ 'firmware': frame[2],
12626
+ 'do_bootup_time': frame[12],
12627
+ 'ec_bootup_time': frame[13],
12628
+ 'device_ids_do_sensors': frame.slice(14, 18),
12629
+ 'device_ids_ec_sensors': frame.slice(18, 22),
12630
+ 'hardware_id': frame.slice(22, 25),
12631
+ 'report_rate': frame.slice(25, 29),
12632
+ 'tx_life_counter': frame.slice(29, 33)
12633
+ }
12634
+ }
12635
+ }
12636
+ },
10511
12637
  '502': {
10512
12638
  name: 'Custom Environmental Sensor',
10513
12639
  parse: (d, full) => {
@@ -12871,6 +14997,149 @@ function sensor_types(parent){
12871
14997
  ma: d.slice(2, 4).reduce(msbLsb) / 100,
12872
14998
  flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
12873
14999
  };
15000
+ },
15001
+ 'parse_fly': (frame) => {
15002
+ let firmware = frame[2];
15003
+ if(firmware > 13){ // firmware 14 and above
15004
+ let frame_data = {};
15005
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15006
+ if(!auto_check_interval){
15007
+ frame_data.auto_check_interval = 'Disabled';
15008
+ }else{
15009
+ frame_data.auto_check_interval = auto_check_interval + " sec";
15010
+ }
15011
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
15012
+ switch(frame[16]){
15013
+ case 0:
15014
+ frame_data.fsr = "+-6.114 V";
15015
+ break;
15016
+ case 1:
15017
+ frame_data.fsr = "+-4.096 V";
15018
+ break;
15019
+ case 2:
15020
+ frame_data.fsr = "+-2.048 V";
15021
+ break;
15022
+ case 3:
15023
+ frame_data.fsr = "+-1.024 V";
15024
+ break;
15025
+ case 4:
15026
+ frame_data.fsr = "+-0.512 V";
15027
+ break;
15028
+ case 5:
15029
+ frame_data.fsr = "+-0.256 V";
15030
+ break;
15031
+ }
15032
+ return {
15033
+ 'firmware': frame[2],
15034
+ 'fsr': frame_data.fsr,
15035
+ 'boot_time': frame[17] + " sec",
15036
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
15037
+ 'auto_check_interval': frame_data.auto_check_interval,
15038
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15039
+ 'always_on': frame_data.always_on,
15040
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15041
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15042
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15043
+ 'hardware_id': frame.slice(37, 40),
15044
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
15045
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
15046
+ 'machine_values': {
15047
+ 'firmware': frame[2],
15048
+ 'fsr': frame[16],
15049
+ 'boot_time': frame[17],
15050
+ 'power_adc': frame.slice(18, 20),
15051
+ 'auto_check_interval': frame.slice(20, 22),
15052
+ 'auto_check_percentage': frame.slice(22, 24),
15053
+ 'always_on': frame[24],
15054
+ 'calibration_one': frame.slice(25, 29),
15055
+ 'calibration_two':frame.slice(29, 33),
15056
+ 'calibration_three':frame.slice(33, 37),
15057
+ 'hardware_id': frame.slice(37, 40),
15058
+ 'report_rate': frame.slice(40, 44),
15059
+ 'tx_life_counter': frame.slice(44, 48)
15060
+ }
15061
+ }
15062
+ }
15063
+ }
15064
+ },
15065
+ '541': {
15066
+ name: 'Custom Inline Flow Sensor',
15067
+ parse: (d) => {
15068
+ return {
15069
+ adc1: signInt(d.slice(0, 2).reduce(msbLsb)),
15070
+ adc2: signInt(d.slice(2, 4).reduce(msbLsb)),
15071
+ mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
15072
+ mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100,
15073
+ flow_1: signInt(d.slice(8, 12).reduce(msbLsb))/100,
15074
+ flow_2:signInt(d.slice(12, 16).reduce(msbLsb))/100
15075
+ };
15076
+ },
15077
+ 'parse_fly': (frame) => {
15078
+ let firmware = frame[2];
15079
+ if(firmware > 13){ // firmware 14 and above
15080
+ let frame_data = {};
15081
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15082
+ if(!auto_check_interval){
15083
+ frame_data.auto_check_interval = 'Disabled';
15084
+ }else{
15085
+ frame_data.auto_check_interval = auto_check_interval + " sec";
15086
+ }
15087
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
15088
+ switch(frame[16]){
15089
+ case 0:
15090
+ frame_data.fsr = "+-6.114 V";
15091
+ break;
15092
+ case 1:
15093
+ frame_data.fsr = "+-4.096 V";
15094
+ break;
15095
+ case 2:
15096
+ frame_data.fsr = "+-2.048 V";
15097
+ break;
15098
+ case 3:
15099
+ frame_data.fsr = "+-1.024 V";
15100
+ break;
15101
+ case 4:
15102
+ frame_data.fsr = "+-0.512 V";
15103
+ break;
15104
+ case 5:
15105
+ frame_data.fsr = "+-0.256 V";
15106
+ break;
15107
+ }
15108
+ return {
15109
+ 'firmware': frame[2],
15110
+ 'fsr': frame_data.fsr,
15111
+ 'boot_up_time': frame[17] + " sec",
15112
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15113
+ 'auto_check_interval': frame_data.auto_check_interval,
15114
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15115
+ 'always_on': frame_data.always_on,
15116
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15117
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15118
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15119
+ 'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
15120
+ 'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
15121
+ 'hardware_id': frame.slice(41, 44),
15122
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
15123
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
15124
+ 'machine_values': {
15125
+ 'firmware': frame[2],
15126
+ 'fsr': frame[16],
15127
+ 'boot_up_time': frame[17],
15128
+ 'adc_pin_reading': frame.slice(18, 20),
15129
+ 'auto_check_interval': frame.slice(20, 22),
15130
+ 'auto_check_percentage': frame.slice(22, 24),
15131
+ 'always_on': frame[24],
15132
+ 'calibration_one': frame.slice(25, 29),
15133
+ 'calibration_two':frame.slice(29, 33),
15134
+ 'calibration_three':frame.slice(33, 37),
15135
+ 'min_flow_rate':frame.slice(37, 39),
15136
+ 'max_flow_rate':frame.slice(39, 41),
15137
+ 'hardware_id': frame.slice(41, 44),
15138
+ 'report_rate': frame.slice(44, 48),
15139
+ 'tx_life_counter': frame.slice(48, 52),
15140
+ }
15141
+ }
15142
+ }
12874
15143
  }
12875
15144
  },
12876
15145
  '1010': {