@ncd-io/node-red-enterprise-sensors 1.4.1 → 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.
@@ -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) {
@@ -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,13 +785,13 @@ 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');
@@ -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];
@@ -2087,6 +2096,155 @@ module.exports = class WirelessSensor{
2087
2096
  console.log(packet);
2088
2097
  return this.config_send(sensor_mac, packet);
2089
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
+
2090
2248
  config_get_delay(sensor_mac){
2091
2249
  return new Promise((fulfill, reject) => {
2092
2250
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -2422,17 +2580,19 @@ module.exports = class WirelessSensor{
2422
2580
  });
2423
2581
  });
2424
2582
  };
2425
- config_send(sensor_mac, data, opts, cmd_timeout = 1500){
2583
+ config_send(sensor_mac, data, opts, cmd_timeout = 1500, cmd_pretimeout = 0){
2426
2584
  var that = this;
2427
2585
  return new Promise((fulfill, reject) => {
2428
2586
  // Note: This code adds a delay before sending any communications. This is not generally required, but has shown increased reliability
2429
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.
2430
2588
  // consider adding a pre-time command parameter to allow this as in the v13 firmware send function.
2431
- // that.queue.add(() => {
2432
- // return new Promise((f, r) => {
2433
- // setTimeout(f, 500);
2434
- // });
2435
- // });
2589
+ if(cmd_pretimeout != 0){
2590
+ that.queue.add(() => {
2591
+ return new Promise((f, r) => {
2592
+ setTimeout(f, cmd_pretimeout);
2593
+ });
2594
+ });
2595
+ };
2436
2596
  that.queue.add(() => {
2437
2597
  return new Promise((f, r) => {
2438
2598
  var tout;
@@ -3135,25 +3295,31 @@ function sensor_types(parent){
3135
3295
  let firmware = frame[2];
3136
3296
  if(firmware > 13){ // firmware 14 and above
3137
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
+ }
3138
3304
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
3139
3305
  switch(frame[16]){
3140
3306
  case 0:
3141
- frame_data.fsr = "+-0.256 V";
3307
+ frame_data.fsr = "+-6.114 V";
3142
3308
  break;
3143
3309
  case 1:
3144
- frame_data.fsr = "+-0.512 V";
3310
+ frame_data.fsr = "+-4.096 V";
3145
3311
  break;
3146
3312
  case 2:
3147
- frame_data.fsr = "+-1.024 V";
3313
+ frame_data.fsr = "+-2.048 V";
3148
3314
  break;
3149
3315
  case 3:
3150
- frame_data.fsr = "+-2.048 V";
3316
+ frame_data.fsr = "+-1.024 V";
3151
3317
  break;
3152
3318
  case 4:
3153
- frame_data.fsr = "+-4.096 V";
3319
+ frame_data.fsr = "+-0.512 V";
3154
3320
  break;
3155
3321
  case 5:
3156
- frame_data.fsr = "+-6.144 V";
3322
+ frame_data.fsr = "+-0.256 V";
3157
3323
  break;
3158
3324
  }
3159
3325
  return {
@@ -3161,12 +3327,15 @@ function sensor_types(parent){
3161
3327
  'fsr': frame_data.fsr,
3162
3328
  'boot_time': frame[17] + " sec",
3163
3329
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
3164
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
3165
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
3330
+ 'auto_check_interval': frame_data.auto_check_interval,
3331
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
3166
3332
  'always_on': frame_data.always_on,
3167
- 'hardware_id': frame.slice(25, 28),
3168
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
3169
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
3170
3339
  'machine_values': {
3171
3340
  'firmware': frame[2],
3172
3341
  'fsr': frame[16],
@@ -3175,9 +3344,12 @@ function sensor_types(parent){
3175
3344
  'auto_check_interval': frame.slice(20, 22),
3176
3345
  'auto_check_percentage': frame.slice(22, 24),
3177
3346
  'always_on': frame[24],
3178
- 'hardware_id': frame.slice(25, 28),
3179
- 'report_rate': frame.slice(28, 32),
3180
- 'tx_life_counter': frame.slice(32, 36)
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)
3181
3353
  }
3182
3354
  }
3183
3355
  }
@@ -3185,16 +3357,34 @@ function sensor_types(parent){
3185
3357
  },
3186
3358
  '16': {
3187
3359
  name: 'Soil Moisture Sensor',
3188
- parse: (d) => {
3189
- var adc1 = d.slice(0, 2).reduce(msbLsb);
3190
- var adc2 = d.slice(2, 4).reduce(msbLsb);
3191
- return {
3192
- adc1: adc1,
3193
- adc2: adc2,
3194
- voltage1: adc1 * 0.00322265625,
3195
- voltage2: adc2 * 0.00322265625,
3196
- percentage: adc1 > 870 ? 100 : Math.round(adc1 / 870 * 100)
3197
- };
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
+ }
3198
3388
  }
3199
3389
  },
3200
3390
  '17': {
@@ -3691,25 +3881,31 @@ function sensor_types(parent){
3691
3881
  let firmware = frame[2];
3692
3882
  if(firmware > 13){ // firmware 14 and above
3693
3883
  let frame_data = {};
3694
- frame_data.always_on = frame[23]?"Enabled":"Disabled";
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";
3695
3891
  switch(frame[16]){
3696
3892
  case 0:
3697
- frame_data.fsr = "+-0.256 V";
3893
+ frame_data.fsr = "+-6.114 V";
3698
3894
  break;
3699
3895
  case 1:
3700
- frame_data.fsr = "+-0.512 V";
3896
+ frame_data.fsr = "+-4.096 V";
3701
3897
  break;
3702
3898
  case 2:
3703
- frame_data.fsr = "+-1.024 V";
3899
+ frame_data.fsr = "+-2.048 V";
3704
3900
  break;
3705
3901
  case 3:
3706
- frame_data.fsr = "+-2.048 V";
3902
+ frame_data.fsr = "+-1.024 V";
3707
3903
  break;
3708
3904
  case 4:
3709
- frame_data.fsr = "+-4.096 V";
3905
+ frame_data.fsr = "+-0.512 V";
3710
3906
  break;
3711
3907
  case 5:
3712
- frame_data.fsr = "+-6.144 V";
3908
+ frame_data.fsr = "+-0.256 V";
3713
3909
  break;
3714
3910
  }
3715
3911
  return {
@@ -3717,12 +3913,15 @@ function sensor_types(parent){
3717
3913
  'fsr': frame_data.fsr,
3718
3914
  'boot_time': frame[17] + " sec",
3719
3915
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
3720
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
3721
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
3916
+ 'auto_check_interval': frame_data.auto_check_interval,
3917
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
3722
3918
  'always_on': frame_data.always_on,
3723
- 'hardware_id': frame.slice(25, 28),
3724
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
3725
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
3726
3925
  'machine_values': {
3727
3926
  'firmware': frame[2],
3728
3927
  'fsr': frame[16],
@@ -3731,9 +3930,12 @@ function sensor_types(parent){
3731
3930
  'auto_check_interval': frame.slice(20, 22),
3732
3931
  'auto_check_percentage': frame.slice(22, 24),
3733
3932
  'always_on': frame[24],
3734
- 'hardware_id': frame.slice(25, 28),
3735
- 'report_rate': frame.slice(28, 32),
3736
- 'tx_life_counter': frame.slice(32, 36)
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)
3737
3939
  }
3738
3940
  }
3739
3941
  }
@@ -3768,25 +3970,31 @@ function sensor_types(parent){
3768
3970
  let firmware = frame[2];
3769
3971
  if(firmware > 13){ // firmware 14 and above
3770
3972
  let frame_data = {};
3771
- frame_data.always_on = frame[23]?"Enabled":"Disabled";
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";
3772
3980
  switch(frame[16]){
3773
3981
  case 0:
3774
- frame_data.fsr = "+-0.256 V";
3982
+ frame_data.fsr = "+-6.114 V";
3775
3983
  break;
3776
3984
  case 1:
3777
- frame_data.fsr = "+-0.512 V";
3985
+ frame_data.fsr = "+-4.096 V";
3778
3986
  break;
3779
3987
  case 2:
3780
- frame_data.fsr = "+-1.024 V";
3988
+ frame_data.fsr = "+-2.048 V";
3781
3989
  break;
3782
3990
  case 3:
3783
- frame_data.fsr = "+-2.048 V";
3991
+ frame_data.fsr = "+-1.024 V";
3784
3992
  break;
3785
3993
  case 4:
3786
- frame_data.fsr = "+-4.096 V";
3994
+ frame_data.fsr = "+-0.512 V";
3787
3995
  break;
3788
3996
  case 5:
3789
- frame_data.fsr = "+-6.144 V";
3997
+ frame_data.fsr = "+-0.256 V";
3790
3998
  break;
3791
3999
  }
3792
4000
  return {
@@ -3794,12 +4002,15 @@ function sensor_types(parent){
3794
4002
  'fsr': frame_data.fsr,
3795
4003
  'boot_time': frame[17] + " sec",
3796
4004
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
3797
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
3798
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
4005
+ 'auto_check_interval': frame_data.auto_check_interval,
4006
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
3799
4007
  'always_on': frame_data.always_on,
3800
- 'hardware_id': frame.slice(25, 28),
3801
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
3802
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
3803
4014
  'machine_values': {
3804
4015
  'firmware': frame[2],
3805
4016
  'fsr': frame[16],
@@ -3808,9 +4019,12 @@ function sensor_types(parent){
3808
4019
  'auto_check_interval': frame.slice(20, 22),
3809
4020
  'auto_check_percentage': frame.slice(22, 24),
3810
4021
  'always_on': frame[24],
3811
- 'hardware_id': frame.slice(25, 28),
3812
- 'report_rate': frame.slice(28, 32),
3813
- 'tx_life_counter': frame.slice(32, 36)
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)
3814
4028
  }
3815
4029
  }
3816
4030
  }
@@ -3897,48 +4111,61 @@ function sensor_types(parent){
3897
4111
  let frame_data = {};
3898
4112
  switch(frame[16]){
3899
4113
  case 0:
3900
- frame_data.fsr = "+-0.256 V";
4114
+ frame_data.fsr = "+-6.114 V";
3901
4115
  break;
3902
4116
  case 1:
3903
- frame_data.fsr = "+-0.512 V";
4117
+ frame_data.fsr = "+-4.096 V";
3904
4118
  break;
3905
4119
  case 2:
3906
- frame_data.fsr = "+-1.024 V";
4120
+ frame_data.fsr = "+-2.048 V";
3907
4121
  break;
3908
4122
  case 3:
3909
- frame_data.fsr = "+-2.048 V";
4123
+ frame_data.fsr = "+-1.024 V";
3910
4124
  break;
3911
4125
  case 4:
3912
- frame_data.fsr = "+-4.096 V";
4126
+ frame_data.fsr = "+-0.512 V";
3913
4127
  break;
3914
4128
  case 5:
3915
- frame_data.fsr = "+-6.144 V";
4129
+ frame_data.fsr = "+-0.256 V";
3916
4130
  break;
3917
4131
  }
3918
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
+ }
3919
4140
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
3920
4141
  return {
3921
4142
  'firmware': frame[2],
3922
4143
  'fsr': frame_data.fsr,
3923
- 'boot_time': frame[17] + " sec",
3924
- 'power_adc': frame.slice(18, 20).reduce(msbLsb),
3925
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
3926
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
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),
3927
4148
  'always_on': frame_data.always_on,
3928
- 'hardware_id': frame.slice(25, 28),
3929
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
3930
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
3931
4155
  'machine_values': {
3932
4156
  'firmware': frame[2],
3933
4157
  'fsr': frame[16],
3934
- 'boot_time': frame[17],
3935
- 'power_adc': frame.slice(18, 20),
4158
+ 'boot_up_time': frame[17],
4159
+ 'adc_pin_reading': frame.slice(18, 20),
3936
4160
  'auto_check_interval': frame.slice(20, 22),
3937
4161
  'auto_check_percentage': frame.slice(22, 24),
3938
4162
  'always_on': frame[24],
3939
- 'hardware_id': frame.slice(25, 28),
3940
- 'report_rate': frame.slice(28, 32),
3941
- 'tx_life_counter': frame.slice(32, 36)
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)
3942
4169
  }
3943
4170
  }
3944
4171
  }
@@ -4022,25 +4249,31 @@ function sensor_types(parent){
4022
4249
  let firmware = frame[2];
4023
4250
  if(firmware > 13){ // firmware 14 and above
4024
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
+ }
4025
4258
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
4026
4259
  switch(frame[16]){
4027
4260
  case 0:
4028
- frame_data.fsr = "+-0.256 V";
4261
+ frame_data.fsr = "+-6.114 V";
4029
4262
  break;
4030
4263
  case 1:
4031
- frame_data.fsr = "+-0.512 V";
4264
+ frame_data.fsr = "+-4.096 V";
4032
4265
  break;
4033
4266
  case 2:
4034
- frame_data.fsr = "+-1.024 V";
4267
+ frame_data.fsr = "+-2.048 V";
4035
4268
  break;
4036
4269
  case 3:
4037
- frame_data.fsr = "+-2.048 V";
4270
+ frame_data.fsr = "+-1.024 V";
4038
4271
  break;
4039
4272
  case 4:
4040
- frame_data.fsr = "+-4.096 V";
4273
+ frame_data.fsr = "+-0.512 V";
4041
4274
  break;
4042
4275
  case 5:
4043
- frame_data.fsr = "+-6.144 V";
4276
+ frame_data.fsr = "+-0.256 V";
4044
4277
  break;
4045
4278
  }
4046
4279
  return {
@@ -4048,12 +4281,15 @@ function sensor_types(parent){
4048
4281
  'fsr': frame_data.fsr,
4049
4282
  'boot_time': frame[17] + " sec",
4050
4283
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
4051
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
4052
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
4284
+ 'auto_check_interval': frame_data.auto_check_interval,
4285
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4053
4286
  'always_on': frame_data.always_on,
4054
- 'hardware_id': frame.slice(25, 28),
4055
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
4056
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
4057
4293
  'machine_values': {
4058
4294
  'firmware': frame[2],
4059
4295
  'fsr': frame[16],
@@ -4062,9 +4298,12 @@ function sensor_types(parent){
4062
4298
  'auto_check_interval': frame.slice(20, 22),
4063
4299
  'auto_check_percentage': frame.slice(22, 24),
4064
4300
  'always_on': frame[24],
4065
- 'hardware_id': frame.slice(25, 28),
4066
- 'report_rate': frame.slice(28, 32),
4067
- 'tx_life_counter': frame.slice(32, 36)
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)
4068
4307
  }
4069
4308
  }
4070
4309
  }
@@ -4306,25 +4545,31 @@ function sensor_types(parent){
4306
4545
  let firmware = frame[2];
4307
4546
  if(firmware > 13){ // firmware 14 and above
4308
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
+ }
4309
4554
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
4310
4555
  switch(frame[16]){
4311
4556
  case 0:
4312
- frame_data.fsr = "+-0.256 V";
4557
+ frame_data.fsr = "+-6.114 V";
4313
4558
  break;
4314
4559
  case 1:
4315
- frame_data.fsr = "+-0.512 V";
4560
+ frame_data.fsr = "+-4.096 V";
4316
4561
  break;
4317
4562
  case 2:
4318
- frame_data.fsr = "+-1.024 V";
4563
+ frame_data.fsr = "+-2.048 V";
4319
4564
  break;
4320
4565
  case 3:
4321
- frame_data.fsr = "+-2.048 V";
4566
+ frame_data.fsr = "+-1.024 V";
4322
4567
  break;
4323
4568
  case 4:
4324
- frame_data.fsr = "+-4.096 V";
4569
+ frame_data.fsr = "+-0.512 V";
4325
4570
  break;
4326
4571
  case 5:
4327
- frame_data.fsr = "+-6.144 V";
4572
+ frame_data.fsr = "+-0.256 V";
4328
4573
  break;
4329
4574
  }
4330
4575
  return {
@@ -4332,12 +4577,15 @@ function sensor_types(parent){
4332
4577
  'fsr': frame_data.fsr,
4333
4578
  'boot_time': frame[17] + " sec",
4334
4579
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
4335
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
4336
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
4580
+ 'auto_check_interval': frame_data.auto_check_interval,
4581
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4337
4582
  'always_on': frame_data.always_on,
4338
- 'hardware_id': frame.slice(25, 28),
4339
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
4340
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
4341
4589
  'machine_values': {
4342
4590
  'firmware': frame[2],
4343
4591
  'fsr': frame[16],
@@ -4346,9 +4594,12 @@ function sensor_types(parent){
4346
4594
  'auto_check_interval': frame.slice(20, 22),
4347
4595
  'auto_check_percentage': frame.slice(22, 24),
4348
4596
  'always_on': frame[24],
4349
- 'hardware_id': frame.slice(25, 28),
4350
- 'report_rate': frame.slice(28, 32),
4351
- 'tx_life_counter': frame.slice(32, 36)
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)
4352
4603
  }
4353
4604
  }
4354
4605
  }
@@ -4367,25 +4618,31 @@ function sensor_types(parent){
4367
4618
  let firmware = frame[2];
4368
4619
  if(firmware > 13){ // firmware 14 and above
4369
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
+ }
4370
4627
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
4371
4628
  switch(frame[16]){
4372
4629
  case 0:
4373
- frame_data.fsr = "+-0.256 V";
4630
+ frame_data.fsr = "+-6.114 V";
4374
4631
  break;
4375
4632
  case 1:
4376
- frame_data.fsr = "+-0.512 V";
4633
+ frame_data.fsr = "+-4.096 V";
4377
4634
  break;
4378
4635
  case 2:
4379
- frame_data.fsr = "+-1.024 V";
4636
+ frame_data.fsr = "+-2.048 V";
4380
4637
  break;
4381
4638
  case 3:
4382
- frame_data.fsr = "+-2.048 V";
4639
+ frame_data.fsr = "+-1.024 V";
4383
4640
  break;
4384
4641
  case 4:
4385
- frame_data.fsr = "+-4.096 V";
4642
+ frame_data.fsr = "+-0.512 V";
4386
4643
  break;
4387
4644
  case 5:
4388
- frame_data.fsr = "+-6.144 V";
4645
+ frame_data.fsr = "+-0.256 V";
4389
4646
  break;
4390
4647
  }
4391
4648
  return {
@@ -4393,12 +4650,15 @@ function sensor_types(parent){
4393
4650
  'fsr': frame_data.fsr,
4394
4651
  'boot_time': frame[17] + " sec",
4395
4652
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
4396
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
4397
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
4653
+ 'auto_check_interval': frame_data.auto_check_interval,
4654
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4398
4655
  'always_on': frame_data.always_on,
4399
- 'hardware_id': frame.slice(25, 28),
4400
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
4401
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
4402
4662
  'machine_values': {
4403
4663
  'firmware': frame[2],
4404
4664
  'fsr': frame[16],
@@ -4407,9 +4667,12 @@ function sensor_types(parent){
4407
4667
  'auto_check_interval': frame.slice(20, 22),
4408
4668
  'auto_check_percentage': frame.slice(22, 24),
4409
4669
  'always_on': frame[24],
4410
- 'hardware_id': frame.slice(25, 28),
4411
- 'report_rate': frame.slice(28, 32),
4412
- 'tx_life_counter': frame.slice(32, 36)
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)
4413
4676
  }
4414
4677
  }
4415
4678
  }
@@ -4505,66 +4768,51 @@ function sensor_types(parent){
4505
4768
  if(payload[8] === 1){
4506
4769
  var deviceAddr = mac;
4507
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;
4508
4781
 
4509
- if(firmware > 25){
4510
- var mode = payload[8];
4511
- var odr = msbLsb(payload[9], payload[10]);
4512
- var en_axis = payload[11] & 7;
4513
- var fsr = payload[11] >> 5;
4514
- var hour = payload[12];
4515
- var minute = payload[13];
4516
- var device_temp = msbLsb(payload[14], payload[15])/100;
4517
- var expected_packets = payload[16];
4518
- var current_packet = payload[17];
4519
- var sdata_start = 18;
4520
-
4521
- } else{
4522
- var mode = payload[8];
4523
- var odr = payload[9];
4524
- var en_axis = payload[10] & 7;
4525
- var fsr = payload[10] >> 5;
4526
- var hour = payload[11];
4527
- var minute = payload[12];
4528
- var device_temp = msbLsb(payload[13], payload[14])/100;
4529
- var expected_packets = payload[15];
4530
- var current_packet = payload[16];
4531
- var sdata_start = 17;
4532
-
4533
- switch(odr){
4534
- case 6:
4535
- odr = 50;
4536
- break;
4537
- case 7:
4538
- odr = 100;
4539
- break;
4540
- case 8:
4541
- odr = 200;
4542
- break;
4543
- case 9:
4544
- odr = 400;
4545
- break;
4546
- case 10:
4547
- odr = 800;
4548
- break;
4549
- case 11:
4550
- odr = 1600;
4551
- break;
4552
- case 12:
4553
- odr = 3200;
4554
- break;
4555
- case 13:
4556
- odr = 6400;
4557
- break;
4558
- case 14:
4559
- odr = 12800;
4560
- break;
4561
- case 15:
4562
- odr = 25600;
4563
- break;
4564
- default:
4565
- odr = 0;
4566
- }
4567
- }
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;
4815
+ }
4568
4816
 
4569
4817
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
4570
4818
  if(expected_packets != 1){
@@ -5056,65 +5304,50 @@ function sensor_types(parent){
5056
5304
  if(payload[8] === 1){
5057
5305
  var deviceAddr = mac;
5058
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;
5059
5317
 
5060
- if(firmware > 25){
5061
- var mode = payload[8];
5062
- var odr = msbLsb(payload[9], payload[10]);
5063
- var en_axis = payload[11] & 7;
5064
- var fsr = payload[11] >> 5;
5065
- var hour = payload[12];
5066
- var minute = payload[13];
5067
- var device_temp = msbLsb(payload[14], payload[15])/100;
5068
- var expected_packets = payload[16];
5069
- var current_packet = payload[17];
5070
- var sdata_start = 18;
5071
-
5072
- }else{
5073
- var mode = payload[8];
5074
- var odr = payload[9];
5075
- var en_axis = payload[10] & 7;
5076
- var fsr = payload[10] >> 5;
5077
- var hour = payload[11];
5078
- var minute = payload[12];
5079
- var device_temp = msbLsb(payload[13], payload[14])/100;
5080
- var expected_packets = payload[15];
5081
- var current_packet = payload[16];
5082
- var sdata_start = 17;
5083
-
5084
- switch(odr){
5085
- case 6:
5086
- odr = 50;
5087
- break;
5088
- case 7:
5089
- odr = 100;
5090
- break;
5091
- case 8:
5092
- odr = 200;
5093
- break;
5094
- case 9:
5095
- odr = 400;
5096
- break;
5097
- case 10:
5098
- odr = 800;
5099
- break;
5100
- case 11:
5101
- odr = 1600;
5102
- break;
5103
- case 12:
5104
- odr = 3200;
5105
- break;
5106
- case 13:
5107
- odr = 6400;
5108
- break;
5109
- case 14:
5110
- odr = 12800;
5111
- break;
5112
- case 15:
5113
- odr = 25600;
5114
- break;
5115
- default:
5116
- odr = 0;
5117
- }
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;
5118
5351
  }
5119
5352
 
5120
5353
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -5794,65 +6027,50 @@ function sensor_types(parent){
5794
6027
  if(payload[8] === 1){
5795
6028
  var deviceAddr = mac;
5796
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;
5797
6040
 
5798
- if(firmware > 25){
5799
- var mode = payload[8];
5800
- var odr = msbLsb(payload[9], payload[10]);
5801
- var en_axis = payload[11] & 7;
5802
- var fsr = payload[11] >> 5;
5803
- var hour = payload[12];
5804
- var minute = payload[13];
5805
- var device_temp = msbLsb(payload[14], payload[15])/100;
5806
- var expected_packets = payload[16];
5807
- var current_packet = payload[17];
5808
- var sdata_start = 18;
5809
-
5810
- } else{
5811
- var mode = payload[8];
5812
- var odr = payload[9];
5813
- var en_axis = payload[10] & 7;
5814
- var fsr = payload[10] >> 5;
5815
- var hour = payload[11];
5816
- var minute = payload[12];
5817
- var device_temp = msbLsb(payload[13], payload[14])/100;
5818
- var expected_packets = payload[15];
5819
- var current_packet = payload[16];
5820
- var sdata_start = 17;
5821
-
5822
- switch(odr){
5823
- case 6:
5824
- odr = 50;
5825
- break;
5826
- case 7:
5827
- odr = 100;
5828
- break;
5829
- case 8:
5830
- odr = 200;
5831
- break;
5832
- case 9:
5833
- odr = 400;
5834
- break;
5835
- case 10:
5836
- odr = 800;
5837
- break;
5838
- case 11:
5839
- odr = 1600;
5840
- break;
5841
- case 12:
5842
- odr = 3200;
5843
- break;
5844
- case 13:
5845
- odr = 6400;
5846
- break;
5847
- case 14:
5848
- odr = 12800;
5849
- break;
5850
- case 15:
5851
- odr = 25600;
5852
- break;
5853
- default:
5854
- odr = 0;
5855
- }
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;
5856
6074
  }
5857
6075
 
5858
6076
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -6338,65 +6556,50 @@ function sensor_types(parent){
6338
6556
  if(payload[8] === 1){
6339
6557
  var deviceAddr = mac;
6340
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;
6341
6569
 
6342
- if(firmware > 25){
6343
- var mode = payload[8];
6344
- var odr = msbLsb(payload[9], payload[10]);
6345
- var en_axis = payload[11] & 7;
6346
- var fsr = payload[11] >> 5;
6347
- var hour = payload[12];
6348
- var minute = payload[13];
6349
- var device_temp = msbLsb(payload[14], payload[15])/100;
6350
- var expected_packets = payload[16];
6351
- var current_packet = payload[17];
6352
- var sdata_start = 18;
6353
-
6354
- } else{
6355
- var mode = payload[8];
6356
- var odr = payload[9];
6357
- var en_axis = payload[10] & 7;
6358
- var fsr = payload[10] >> 5;
6359
- var hour = payload[11];
6360
- var minute = payload[12];
6361
- var device_temp = msbLsb(payload[13], payload[14])/100;
6362
- var expected_packets = payload[15];
6363
- var current_packet = payload[16];
6364
- var sdata_start = 17;
6365
-
6366
- switch(odr){
6367
- case 6:
6368
- odr = 50;
6369
- break;
6370
- case 7:
6371
- odr = 100;
6372
- break;
6373
- case 8:
6374
- odr = 200;
6375
- break;
6376
- case 9:
6377
- odr = 400;
6378
- break;
6379
- case 10:
6380
- odr = 800;
6381
- break;
6382
- case 11:
6383
- odr = 1600;
6384
- break;
6385
- case 12:
6386
- odr = 3200;
6387
- break;
6388
- case 13:
6389
- odr = 6400;
6390
- break;
6391
- case 14:
6392
- odr = 12800;
6393
- break;
6394
- case 15:
6395
- odr = 25600;
6396
- break;
6397
- default:
6398
- odr = 0;
6399
- }
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;
6400
6603
  }
6401
6604
 
6402
6605
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -6872,7 +7075,7 @@ function sensor_types(parent){
6872
7075
  }
6873
7076
  },
6874
7077
  '87': {
6875
- 'name': '24-Bit 1-Channel Current Monitor',
7078
+ 'name': 'Gen 4 One Channel Wireless Current Sensor',
6876
7079
  parse: (d) => {
6877
7080
  return {
6878
7081
  ct1_rms: d.slice(0, 4).reduce(msbLsb),
@@ -6880,6 +7083,28 @@ function sensor_types(parent){
6880
7083
  ct1_peak_2_freq: d.slice(6, 8).reduce(msbLsb),
6881
7084
  ct1_peak_3_freq: d.slice(8, 10).reduce(msbLsb),
6882
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
+ }
6883
7108
  }
6884
7109
  },
6885
7110
  '88': {
@@ -6896,48 +7121,61 @@ function sensor_types(parent){
6896
7121
  let frame_data = {};
6897
7122
  switch(frame[16]){
6898
7123
  case 0:
6899
- frame_data.fsr = "+-0.256 V";
7124
+ frame_data.fsr = "+-6.114 V";
6900
7125
  break;
6901
7126
  case 1:
6902
- frame_data.fsr = "+-0.512 V";
7127
+ frame_data.fsr = "+-4.096 V";
6903
7128
  break;
6904
7129
  case 2:
6905
- frame_data.fsr = "+-1.024 V";
7130
+ frame_data.fsr = "+-2.048 V";
6906
7131
  break;
6907
7132
  case 3:
6908
- frame_data.fsr = "+-2.048 V";
7133
+ frame_data.fsr = "+-1.024 V";
6909
7134
  break;
6910
7135
  case 4:
6911
- frame_data.fsr = "+-4.096 V";
7136
+ frame_data.fsr = "+-0.512 V";
6912
7137
  break;
6913
7138
  case 5:
6914
- frame_data.fsr = "+-6.144 V";
7139
+ frame_data.fsr = "+-0.256 V";
6915
7140
  break;
6916
7141
  }
6917
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
+ }
6918
7150
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
6919
7151
  return {
6920
7152
  'firmware': frame[2],
6921
7153
  'fsr': frame_data.fsr,
6922
- 'boot_time': frame[17] + " sec",
6923
- 'power_adc': frame.slice(18, 20).reduce(msbLsb),
6924
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
6925
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
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),
6926
7158
  'always_on': frame_data.always_on,
6927
- 'hardware_id': frame.slice(25, 28),
6928
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
6929
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
6930
7165
  'machine_values': {
6931
7166
  'firmware': frame[2],
6932
7167
  'fsr': frame[16],
6933
- 'boot_time': frame[17],
6934
- 'power_adc': frame.slice(18, 20),
7168
+ 'boot_up_time': frame[17],
7169
+ 'adc_pin_reading': frame.slice(18, 20),
6935
7170
  'auto_check_interval': frame.slice(20, 22),
6936
7171
  'auto_check_percentage': frame.slice(22, 24),
6937
7172
  'always_on': frame[24],
6938
- 'hardware_id': frame.slice(25, 28),
6939
- 'report_rate': frame.slice(28, 32),
6940
- 'tx_life_counter': frame.slice(32, 36)
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)
6941
7179
  }
6942
7180
  }
6943
7181
  }else{
@@ -6976,48 +7214,61 @@ function sensor_types(parent){
6976
7214
  let frame_data = {};
6977
7215
  switch(frame[16]){
6978
7216
  case 0:
6979
- frame_data.fsr = "+-0.256 V";
7217
+ frame_data.fsr = "+-6.114 V";
6980
7218
  break;
6981
7219
  case 1:
6982
- frame_data.fsr = "+-0.512 V";
7220
+ frame_data.fsr = "+-4.096 V";
6983
7221
  break;
6984
7222
  case 2:
6985
- frame_data.fsr = "+-1.024 V";
7223
+ frame_data.fsr = "+-2.048 V";
6986
7224
  break;
6987
7225
  case 3:
6988
- frame_data.fsr = "+-2.048 V";
7226
+ frame_data.fsr = "+-1.024 V";
6989
7227
  break;
6990
7228
  case 4:
6991
- frame_data.fsr = "+-4.096 V";
7229
+ frame_data.fsr = "+-0.512 V";
6992
7230
  break;
6993
7231
  case 5:
6994
- frame_data.fsr = "+-6.144 V";
7232
+ frame_data.fsr = "+-0.256 V";
6995
7233
  break;
6996
7234
  }
6997
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
+ }
6998
7243
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
6999
7244
  return {
7000
7245
  'firmware': frame[2],
7001
7246
  'fsr': frame_data.fsr,
7002
- 'boot_time': frame[17] + " sec",
7003
- 'power_adc': frame.slice(18, 20).reduce(msbLsb),
7004
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
7005
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
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),
7006
7251
  'always_on': frame_data.always_on,
7007
- 'hardware_id': frame.slice(25, 28),
7008
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
7009
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
7010
7258
  'machine_values': {
7011
7259
  'firmware': frame[2],
7012
7260
  'fsr': frame[16],
7013
- 'boot_time': frame[17],
7014
- 'power_adc': frame.slice(18, 20),
7261
+ 'boot_up_time': frame[17],
7262
+ 'adc_pin_reading': frame.slice(18, 20),
7015
7263
  'auto_check_interval': frame.slice(20, 22),
7016
7264
  'auto_check_percentage': frame.slice(22, 24),
7017
7265
  'always_on': frame[24],
7018
- 'hardware_id': frame.slice(25, 28),
7019
- 'report_rate': frame.slice(28, 32),
7020
- 'tx_life_counter': frame.slice(32, 36)
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)
7021
7272
  }
7022
7273
  }
7023
7274
  }else{
@@ -7051,25 +7302,31 @@ function sensor_types(parent){
7051
7302
  let firmware = frame[2];
7052
7303
  if(firmware > 13){ // firmware 14 and above
7053
7304
  let frame_data = {};
7054
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
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";
7055
7312
  switch(frame[16]){
7056
7313
  case 0:
7057
- frame_data.fsr = "+-0.256 V";
7314
+ frame_data.fsr = "+-6.114 V";
7058
7315
  break;
7059
7316
  case 1:
7060
- frame_data.fsr = "+-0.512 V";
7317
+ frame_data.fsr = "+-4.096 V";
7061
7318
  break;
7062
7319
  case 2:
7063
- frame_data.fsr = "+-1.024 V";
7320
+ frame_data.fsr = "+-2.048 V";
7064
7321
  break;
7065
7322
  case 3:
7066
- frame_data.fsr = "+-2.048 V";
7323
+ frame_data.fsr = "+-1.024 V";
7067
7324
  break;
7068
7325
  case 4:
7069
- frame_data.fsr = "+-4.096 V";
7326
+ frame_data.fsr = "+-0.512 V";
7070
7327
  break;
7071
7328
  case 5:
7072
- frame_data.fsr = "+-6.144 V";
7329
+ frame_data.fsr = "+-0.256 V";
7073
7330
  break;
7074
7331
  }
7075
7332
  return {
@@ -7077,23 +7334,25 @@ function sensor_types(parent){
7077
7334
  'fsr': frame_data.fsr,
7078
7335
  'boot_time': frame[17] + " sec",
7079
7336
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
7080
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
7081
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
7337
+ 'auto_check_interval': frame_data.auto_check_interval,
7338
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7082
7339
  'always_on': frame_data.always_on,
7083
- 'hardware_id': frame.slice(25, 28),
7084
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
7085
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
7086
7344
  'machine_values': {
7087
7345
  'firmware': frame[2],
7088
7346
  'fsr': frame[16],
7089
7347
  'boot_time': frame[17],
7090
7348
  'power_adc': frame.slice(18, 20),
7091
7349
  'auto_check_interval': frame.slice(20, 22),
7092
- 'auto_check_percentage': frame.slice(22, 24),
7350
+ 'auto_check_threshold': frame.slice(22, 24),
7093
7351
  'always_on': frame[24],
7094
- 'hardware_id': frame.slice(25, 28),
7095
- 'report_rate': frame.slice(28, 32),
7096
- 'tx_life_counter': frame.slice(32, 36)
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)
7097
7356
  }
7098
7357
  }
7099
7358
  }
@@ -7127,25 +7386,31 @@ function sensor_types(parent){
7127
7386
  let firmware = frame[2];
7128
7387
  if(firmware > 13){ // firmware 14 and above
7129
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
+ }
7130
7395
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7131
7396
  switch(frame[16]){
7132
7397
  case 0:
7133
- frame_data.fsr = "+-0.256 V";
7398
+ frame_data.fsr = "+-6.114 V";
7134
7399
  break;
7135
7400
  case 1:
7136
- frame_data.fsr = "+-0.512 V";
7401
+ frame_data.fsr = "+-4.096 V";
7137
7402
  break;
7138
7403
  case 2:
7139
- frame_data.fsr = "+-1.024 V";
7404
+ frame_data.fsr = "+-2.048 V";
7140
7405
  break;
7141
7406
  case 3:
7142
- frame_data.fsr = "+-2.048 V";
7407
+ frame_data.fsr = "+-1.024 V";
7143
7408
  break;
7144
7409
  case 4:
7145
- frame_data.fsr = "+-4.096 V";
7410
+ frame_data.fsr = "+-0.512 V";
7146
7411
  break;
7147
7412
  case 5:
7148
- frame_data.fsr = "+-6.144 V";
7413
+ frame_data.fsr = "+-0.256 V";
7149
7414
  break;
7150
7415
  }
7151
7416
  return {
@@ -7153,12 +7418,15 @@ function sensor_types(parent){
7153
7418
  'fsr': frame_data.fsr,
7154
7419
  'boot_time': frame[17] + " sec",
7155
7420
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
7156
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
7157
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
7421
+ 'auto_check_interval': frame_data.auto_check_interval,
7422
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7158
7423
  'always_on': frame_data.always_on,
7159
- 'hardware_id': frame.slice(25, 28),
7160
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
7161
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
7162
7430
  'machine_values': {
7163
7431
  'firmware': frame[2],
7164
7432
  'fsr': frame[16],
@@ -7167,9 +7435,12 @@ function sensor_types(parent){
7167
7435
  'auto_check_interval': frame.slice(20, 22),
7168
7436
  'auto_check_percentage': frame.slice(22, 24),
7169
7437
  'always_on': frame[24],
7170
- 'hardware_id': frame.slice(25, 28),
7171
- 'report_rate': frame.slice(28, 32),
7172
- 'tx_life_counter': frame.slice(32, 36)
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)
7173
7444
  }
7174
7445
  }
7175
7446
  }
@@ -7187,25 +7458,31 @@ function sensor_types(parent){
7187
7458
  let firmware = frame[2];
7188
7459
  if(firmware > 13){ // firmware 14 and above
7189
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
+ }
7190
7467
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7191
7468
  switch(frame[16]){
7192
7469
  case 0:
7193
- frame_data.fsr = "+-0.256 V";
7470
+ frame_data.fsr = "+-6.114 V";
7194
7471
  break;
7195
7472
  case 1:
7196
- frame_data.fsr = "+-0.512 V";
7473
+ frame_data.fsr = "+-4.096 V";
7197
7474
  break;
7198
7475
  case 2:
7199
- frame_data.fsr = "+-1.024 V";
7476
+ frame_data.fsr = "+-2.048 V";
7200
7477
  break;
7201
7478
  case 3:
7202
- frame_data.fsr = "+-2.048 V";
7479
+ frame_data.fsr = "+-1.024 V";
7203
7480
  break;
7204
7481
  case 4:
7205
- frame_data.fsr = "+-4.096 V";
7482
+ frame_data.fsr = "+-0.512 V";
7206
7483
  break;
7207
7484
  case 5:
7208
- frame_data.fsr = "+-6.144 V";
7485
+ frame_data.fsr = "+-0.256 V";
7209
7486
  break;
7210
7487
  }
7211
7488
  return {
@@ -7213,12 +7490,15 @@ function sensor_types(parent){
7213
7490
  'fsr': frame_data.fsr,
7214
7491
  'boot_time': frame[17] + " sec",
7215
7492
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
7216
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
7217
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
7493
+ 'auto_check_interval': frame_data.auto_check_interval,
7494
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7218
7495
  'always_on': frame_data.always_on,
7219
- 'hardware_id': frame.slice(25, 28),
7220
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
7221
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
7222
7502
  'machine_values': {
7223
7503
  'firmware': frame[2],
7224
7504
  'fsr': frame[16],
@@ -7227,9 +7507,12 @@ function sensor_types(parent){
7227
7507
  'auto_check_interval': frame.slice(20, 22),
7228
7508
  'auto_check_percentage': frame.slice(22, 24),
7229
7509
  'always_on': frame[24],
7230
- 'hardware_id': frame.slice(25, 28),
7231
- 'report_rate': frame.slice(28, 32),
7232
- 'tx_life_counter': frame.slice(32, 36)
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)
7233
7516
  }
7234
7517
  }
7235
7518
  }
@@ -7548,50 +7831,113 @@ function sensor_types(parent){
7548
7831
  }
7549
7832
  },
7550
7833
  'parse_fly': (frame) => {
7551
- let frame_data = {};
7552
- frame_data.mode = frame[12] ? 'Raw':'Processed';
7553
- switch(frame[13]){
7554
- case 0:
7555
- frame_data.raw_lenght = 55;
7556
- break;
7557
- case 1:
7558
- frame_data.raw_lenght = 100;
7559
- break;
7560
- case 2:
7561
- frame_data.raw_lenght = 150;
7562
- break;
7563
- case 3:
7564
- frame_data.raw_lenght = 180;
7565
- break;
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";
7842
+ }
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
+ }
7566
7894
  }
7567
- return {
7568
- 'firmware': frame[2],
7569
- 'mode': frame_data.mode,
7570
- 'raw_length': frame_data.raw_lenght + " Bytes",
7571
- 'raw_on_request_timeout': frame[14] + " sec",
7572
- 'fly_rate': frame.slice(15, 17).reduce(msbLsb) + " min",
7573
- 'c1_sensor_gain_db': frame[17] + " dB",
7574
- 'c1_sensor_boot_time': frame[18] + " sec",
7575
- 'c2_sensor_gain_db': frame[19] + " dB",
7576
- 'c2_sensor_boot_time': frame[20] + " sec",
7577
- 'sampling_frequency': frame.slice(21, 25).reduce(msbLsb) + " Hz",
7578
- // 'hardware_id': frame.slice(25, 28),
7579
- // 'report_rate': frame.slice(28, 32).reduce(msbLsb),
7580
- // 'tx_life_count': frame.slice(32, 36).reduce(msbLsb),
7581
- 'machine_values': {
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 {
7582
7913
  'firmware': frame[2],
7583
- 'mode': frame[12],
7584
- 'raw_lenght': frame[13],
7585
- 'raw_on_request_timeout': frame[14],
7586
- 'fly_rate': frame.slice(15, 17),
7587
- 'c1_sensor_gain_db': frame[17],
7588
- 'c1_sensor_boot_time': frame[18],
7589
- 'c2_sensor_gain_db': frame[19],
7590
- 'c2_sensor_boot_time': frame[20],
7591
- 'sampling_frequency': frame.slice(21, 25)
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",
7592
7923
  // 'hardware_id': frame.slice(25, 28),
7593
- // 'report_rate': frame.slice(28, 32),
7594
- // 'tx_life_count': frame.slice(32, 36)
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
+ }
7595
7941
  }
7596
7942
  }
7597
7943
  }
@@ -7612,7 +7958,7 @@ function sensor_types(parent){
7612
7958
  var data = {};
7613
7959
  switch(payload[8]){
7614
7960
  case 1:
7615
- data.sensor_type = 'adxl';
7961
+ data.sensor_type = 'Accel';
7616
7962
  break;
7617
7963
  case 2:
7618
7964
  data.sensor_type = 'gyro';
@@ -7626,74 +7972,70 @@ function sensor_types(parent){
7626
7972
  data.event_type = 'motion';
7627
7973
  break;
7628
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;
7629
7980
  var hour = payload[13];
7630
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;
7631
7984
  var expected_packets = payload.slice(19, 21).reduce(msbLsb);
7632
7985
  var current_packet = payload.slice(21, 23).reduce(msbLsb);
7633
7986
  var data_start = 23;
7634
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
+
7635
8005
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
7636
8006
  if(expected_packets != 1){
7637
- // 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
7638
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
7639
- console.log('-----');
7640
- console.log('bad packet breakdown deleting stream');
7641
- console.log(current_packet);
7642
- console.log(expected_packets);
7643
- console.log(current_packet in globalDevices[deviceAddr].data);
7644
- console.log(current_packet == 1);
7645
- console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
7646
- if(this.hasOwnProperty('failure_no')){
7647
- this.failure_no = this.failure_no + 1;
7648
- }
7649
- else{
7650
- this.failure_no = 1;
7651
- }
7652
- if(this.hasOwnProperty('failure_no')){
7653
- console.log('####falure no');
7654
- console.log(this.failure_no);
7655
- }
7656
- // 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
7657
8015
  delete globalDevices[deviceAddr];
7658
- if(current_packet != 1){
7659
- return;
7660
- } else{
7661
-
7662
- var mode = payload[9];
7663
- var odr = payload[11];
7664
- var en_axis = payload[12] & 7;
7665
- var fsr = payload[12] >> 5;
7666
- var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7667
- var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
7668
-
7669
- globalDevices[deviceAddr] = {
7670
- // stream_size: expected_packets,
7671
- data: {},
7672
- odr: odr,
7673
- mo: mode,
7674
- en_axis: en_axis,
7675
- fsr: fsr,
7676
- hour: hour,
7677
- minute: minute,
7678
- device_temp: device_temp,
7679
- external_temp: external_temperature
7680
- }
7681
- globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7682
- 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
7683
8028
  }
8029
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
8030
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8031
+ return;
7684
8032
  }
7685
8033
  else{
8034
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
7686
8035
  globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7687
8036
  }
7688
8037
  }
7689
8038
  else{
7690
- var mode = payload[9];
7691
- var odr = payload[11];
7692
- var en_axis = payload[12] & 7;
7693
- var fsr = payload[12] >> 5;
7694
- var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7695
- var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
7696
-
7697
8039
  globalDevices[deviceAddr] = {
7698
8040
  // stream_size: expected_packets,
7699
8041
  data: {},
@@ -7706,185 +8048,282 @@ function sensor_types(parent){
7706
8048
  device_temp: device_temp,
7707
8049
  external_temp: external_temperature
7708
8050
  }
8051
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
7709
8052
  globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7710
8053
  }
7711
- if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
7712
- var raw_data = new Array();
7713
- for(const packet in globalDevices[deviceAddr].data){
7714
- raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
7715
- }
7716
- var label = 0;
8054
+ }
8055
+ else{
7717
8056
 
7718
- var fft = new Array();
7719
- 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;
7720
8077
 
7721
- var en_axis_data = {};
7722
- switch (globalDevices[deviceAddr].en_axis){
7723
- case 1:
7724
- en_axis_data.x_offset = 0;
7725
- en_axis_data.increment = 2;
7726
- break;
7727
- case 2:
7728
- en_axis_data.y_offset = 0;
7729
- en_axis_data.increment = 2;
7730
- break;
7731
- case 3:
7732
- en_axis_data.x_offset = 0;
7733
- en_axis_data.y_offset = 2;
7734
- en_axis_data.increment = 4;
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;
7735
8095
  break;
7736
- case 4:
7737
- en_axis_data.z_offset = 0;
7738
- en_axis_data.increment = 2;
8096
+ case 1:
8097
+ fsr_mult = 0.000038;
7739
8098
  break;
7740
- case 5:
7741
- en_axis_data.x_offset = 0;
7742
- en_axis_data.z_offset = 2;
7743
- en_axis_data.increment = 4;
8099
+ case 2:
8100
+ fsr_mult = 0.000076;
7744
8101
  break;
7745
- case 6:
7746
- en_axis_data.y_offset = 0;
7747
- en_axis_data.z_offset = 2;
7748
- en_axis_data.increment = 4;
8102
+ }
8103
+ switch(globalDevices[deviceAddr].fsr){
8104
+ case 0:
8105
+ fsr_text = "10g";
7749
8106
  break;
7750
- case 7:
7751
- en_axis_data.x_offset = 0;
7752
- en_axis_data.y_offset = 2;
7753
- en_axis_data.z_offset = 4;
7754
- en_axis_data.increment = 6;
8107
+ case 1:
8108
+ fsr_text = "20g";
8109
+ break;
8110
+ case 2:
8111
+ fsr_text = "40g";
7755
8112
  break;
7756
- default:
7757
- en_axis_data.increment = 0;
7758
- }
7759
- /* Evaluate sensor type */
7760
- if(payload[0] == 1){ // adxl
7761
- var fsr_mult = .00030;
7762
- var fsr_text = "";
7763
- switch(globalDevices[deviceAddr].fsr){
7764
- case 0:
7765
- fsr_mult = 0.00030;
7766
- break;
7767
- case 1:
7768
- fsr_mult = 0.00061;
7769
- break;
7770
- case 2:
7771
- fsr_mult = 0.00122;
7772
- break;
7773
- }
7774
- switch(globalDevices[deviceAddr].fsr){
7775
- case 0:
7776
- fsr_text = "10g";
7777
- break;
7778
- case 1:
7779
- fsr_text = "20g";
7780
- break;
7781
- case 2:
7782
- fsr_text = "40g";
7783
- break;
7784
- }
7785
- }else{ // gyro
7786
- var fsr_mult = 0.00047;
7787
- var fsr_text = "";
7788
- switch(globalDevices[deviceAddr].fsr){
7789
- case 0:
7790
- fsr_mult = 0.00047;
7791
- break;
7792
- case 1:
7793
- fsr_mult = 0.00095;
7794
- break;
7795
- case 2:
7796
- fsr_mult = 0.00190;
7797
- break;
7798
- case 3:
7799
- fsr_mult = 0.00381;
7800
- break;
7801
- }
7802
- switch(globalDevices[deviceAddr].fsr){
7803
- case 0:
7804
- fsr_text = "250dps";
7805
- break;
7806
- case 1:
7807
- fsr_text = "500dps";
7808
- break;
7809
- case 2:
7810
- fsr_text = "1000dps";
7811
- break;
7812
- case 3:
7813
- fsr_text = "2000dps";
7814
- break;
7815
- }
7816
8113
  }
7817
-
7818
- for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7819
- label++;
7820
-
7821
- fft_concat[label] = {};
7822
-
7823
- if('x_offset' in en_axis_data){
7824
- 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));
7825
- }
7826
- if('y_offset' in en_axis_data){
7827
- 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));
7828
- }
7829
- if('z_offset' in en_axis_data){
7830
- 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));
7831
- }
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;
8120
+ break;
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;
8129
+ break;
7832
8130
  }
7833
- var fft_concat_obj = {
7834
- mode: payload[9],
7835
- sensor_type: data.sensor_type,
7836
- msg_type: data.event_type,
7837
- time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
7838
- mac_address: deviceAddr,
7839
- en_axis: globalDevices[deviceAddr].en_axis,
7840
- fsr: fsr_text,
7841
- odr: globalDevices[deviceAddr].odr,
7842
- device_temp: globalDevices[deviceAddr].device_temp,
7843
- external_temp: globalDevices[deviceAddr].external_temp,
7844
- total_samples: label,
7845
- data: fft_concat
7846
- };
7847
- // console.log(globalDevices[deviceAddr].data);
7848
- // console.log(raw_data);
7849
- sensor_data = fft_concat_obj;
7850
- // parsed.raw_packets = globalDevices[deviceAddr].data;
7851
- // parsed.raw_data = raw_data;
7852
- delete globalDevices[deviceAddr];
7853
- if(this.hasOwnProperty('failure_no')){
7854
- console.log('####falure no');
7855
- console.log(this.failure_no);
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;
7856
8144
  }
7857
-
7858
- return sensor_data;
7859
- }
7860
- else{
7861
- return;
7862
8145
  }
7863
- }else{
7864
8146
 
7865
- var mode = payload[9];
7866
- var odr = payload[11];
7867
- var en_axis = payload[12] & 7;
7868
- var fsr = payload[12] >> 5;
7869
- var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
7870
- var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
8147
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
8148
+ label++;
7871
8149
 
7872
- globalDevices[deviceAddr] = {
7873
- // stream_size: expected_packets,
7874
- data: {},
7875
- odr: odr,
7876
- mo: mode,
7877
- en_axis: en_axis,
7878
- fsr: fsr,
7879
- hour: hour,
7880
- minute: minute,
7881
- device_temp: device_temp,
7882
- external_temp: external_temperature
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)));
8152
+ }
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)));
8158
+ }
7883
8159
  }
7884
- 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{
7885
8180
  return;
7886
8181
  }
7887
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
+ }
7888
8327
  }
7889
8328
  },
7890
8329
  '105': {
@@ -7900,25 +8339,31 @@ function sensor_types(parent){
7900
8339
  let firmware = frame[2];
7901
8340
  if(firmware > 13){ // firmware 14 and above
7902
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
+ }
7903
8348
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7904
8349
  switch(frame[16]){
7905
8350
  case 0:
7906
- frame_data.fsr = "+-0.256 V";
8351
+ frame_data.fsr = "+-6.114 V";
7907
8352
  break;
7908
8353
  case 1:
7909
- frame_data.fsr = "+-0.512 V";
8354
+ frame_data.fsr = "+-4.096 V";
7910
8355
  break;
7911
8356
  case 2:
7912
- frame_data.fsr = "+-1.024 V";
8357
+ frame_data.fsr = "+-2.048 V";
7913
8358
  break;
7914
8359
  case 3:
7915
- frame_data.fsr = "+-2.048 V";
8360
+ frame_data.fsr = "+-1.024 V";
7916
8361
  break;
7917
8362
  case 4:
7918
- frame_data.fsr = "+-4.096 V";
8363
+ frame_data.fsr = "+-0.512 V";
7919
8364
  break;
7920
8365
  case 5:
7921
- frame_data.fsr = "+-6.144 V";
8366
+ frame_data.fsr = "+-0.256 V";
7922
8367
  break;
7923
8368
  }
7924
8369
  return {
@@ -7926,12 +8371,15 @@ function sensor_types(parent){
7926
8371
  'fsr': frame_data.fsr,
7927
8372
  'boot_time': frame[17] + " sec",
7928
8373
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
7929
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
7930
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
8374
+ 'auto_check_interval': frame_data.auto_check_interval,
8375
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7931
8376
  'always_on': frame_data.always_on,
7932
- 'hardware_id': frame.slice(25, 28),
7933
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
7934
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
7935
8383
  'machine_values': {
7936
8384
  'firmware': frame[2],
7937
8385
  'fsr': frame[16],
@@ -7940,9 +8388,12 @@ function sensor_types(parent){
7940
8388
  'auto_check_interval': frame.slice(20, 22),
7941
8389
  'auto_check_percentage': frame.slice(22, 24),
7942
8390
  'always_on': frame[24],
7943
- 'hardware_id': frame.slice(25, 28),
7944
- 'report_rate': frame.slice(28, 32),
7945
- 'tx_life_counter': frame.slice(32, 36)
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)
7946
8397
  }
7947
8398
  }
7948
8399
  }
@@ -7964,25 +8415,31 @@ function sensor_types(parent){
7964
8415
  let firmware = frame[2];
7965
8416
  if(firmware > 13){ // firmware 14 and above
7966
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
+ }
7967
8424
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7968
8425
  switch(frame[16]){
7969
8426
  case 0:
7970
- frame_data.fsr = "+-0.256 V";
8427
+ frame_data.fsr = "+-6.114 V";
7971
8428
  break;
7972
8429
  case 1:
7973
- frame_data.fsr = "+-0.512 V";
8430
+ frame_data.fsr = "+-4.096 V";
7974
8431
  break;
7975
8432
  case 2:
7976
- frame_data.fsr = "+-1.024 V";
8433
+ frame_data.fsr = "+-2.048 V";
7977
8434
  break;
7978
8435
  case 3:
7979
- frame_data.fsr = "+-2.048 V";
8436
+ frame_data.fsr = "+-1.024 V";
7980
8437
  break;
7981
8438
  case 4:
7982
- frame_data.fsr = "+-4.096 V";
8439
+ frame_data.fsr = "+-0.512 V";
7983
8440
  break;
7984
8441
  case 5:
7985
- frame_data.fsr = "+-6.144 V";
8442
+ frame_data.fsr = "+-0.256 V";
7986
8443
  break;
7987
8444
  }
7988
8445
  return {
@@ -7990,12 +8447,15 @@ function sensor_types(parent){
7990
8447
  'fsr': frame_data.fsr,
7991
8448
  'boot_time': frame[17] + " sec",
7992
8449
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
7993
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
7994
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
8450
+ 'auto_check_interval': frame_data.auto_check_interval,
8451
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7995
8452
  'always_on': frame_data.always_on,
7996
- 'hardware_id': frame.slice(25, 28),
7997
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
7998
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
7999
8459
  'machine_values': {
8000
8460
  'firmware': frame[2],
8001
8461
  'fsr': frame[16],
@@ -8004,9 +8464,12 @@ function sensor_types(parent){
8004
8464
  'auto_check_interval': frame.slice(20, 22),
8005
8465
  'auto_check_percentage': frame.slice(22, 24),
8006
8466
  'always_on': frame[24],
8007
- 'hardware_id': frame.slice(25, 28),
8008
- 'report_rate': frame.slice(28, 32),
8009
- 'tx_life_counter': frame.slice(32, 36)
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)
8010
8473
  }
8011
8474
  }
8012
8475
  }
@@ -8038,25 +8501,31 @@ function sensor_types(parent){
8038
8501
  let firmware = frame[2];
8039
8502
  if(firmware > 13){ // firmware 14 and above
8040
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
+ }
8041
8510
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
8042
8511
  switch(frame[16]){
8043
8512
  case 0:
8044
- frame_data.fsr = "+-0.256 V";
8513
+ frame_data.fsr = "+-6.114 V";
8045
8514
  break;
8046
8515
  case 1:
8047
- frame_data.fsr = "+-0.512 V";
8516
+ frame_data.fsr = "+-4.096 V";
8048
8517
  break;
8049
8518
  case 2:
8050
- frame_data.fsr = "+-1.024 V";
8519
+ frame_data.fsr = "+-2.048 V";
8051
8520
  break;
8052
8521
  case 3:
8053
- frame_data.fsr = "+-2.048 V";
8522
+ frame_data.fsr = "+-1.024 V";
8054
8523
  break;
8055
8524
  case 4:
8056
- frame_data.fsr = "+-4.096 V";
8525
+ frame_data.fsr = "+-0.512 V";
8057
8526
  break;
8058
8527
  case 5:
8059
- frame_data.fsr = "+-6.144 V";
8528
+ frame_data.fsr = "+-0.256 V";
8060
8529
  break;
8061
8530
  }
8062
8531
  return {
@@ -8064,12 +8533,15 @@ function sensor_types(parent){
8064
8533
  'fsr': frame_data.fsr,
8065
8534
  'boot_time': frame[17] + " sec",
8066
8535
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
8067
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
8068
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
8536
+ 'auto_check_interval': frame_data.auto_check_interval,
8537
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8069
8538
  'always_on': frame_data.always_on,
8070
- 'hardware_id': frame.slice(25, 28),
8071
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
8072
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
8073
8545
  'machine_values': {
8074
8546
  'firmware': frame[2],
8075
8547
  'fsr': frame[16],
@@ -8078,9 +8550,12 @@ function sensor_types(parent){
8078
8550
  'auto_check_interval': frame.slice(20, 22),
8079
8551
  'auto_check_percentage': frame.slice(22, 24),
8080
8552
  'always_on': frame[24],
8081
- 'hardware_id': frame.slice(25, 28),
8082
- 'report_rate': frame.slice(28, 32),
8083
- 'tx_life_counter': frame.slice(32, 36)
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)
8084
8559
  }
8085
8560
  }
8086
8561
  }
@@ -8113,50 +8588,182 @@ function sensor_types(parent){
8113
8588
  break;
8114
8589
  }
8115
8590
  return {
8116
- digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8117
- digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8118
- ct_input_counter: d.slice(8, 12).reduce(msbLsb),
8119
- ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
8120
- opto_input_counter: d.slice(16, 20).reduce(msbLsb),
8121
- opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
8122
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
8123
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
8124
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
8125
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
8126
- input_di: d[40] & 1 ? 1 : 0,
8127
- input_ct: d[40] & 2 ? 1 : 0,
8128
- input_opto: d[40] & 4 ? 1 : 0,
8129
- input_acc: d[40] & 8 ? 1 : 0,
8130
- input_mag: d[40] & 16 ? 1 : 0,
8131
- report_type: report_type,
8132
- rtc: [
8133
- String(d[42]).padStart(2, '0'),
8134
- String(d[43]).padStart(2, '0'),
8135
- String(d[44]).padStart(2, '0')
8136
- ].join(':')
8137
- };
8138
- }else{
8139
- return {
8140
- digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8141
- digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8142
- ct_input_counter: d.slice(8, 12).reduce(msbLsb),
8143
- ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
8144
- opto_input_counter: d.slice(16, 20).reduce(msbLsb),
8145
- opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
8146
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
8147
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
8148
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
8149
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
8150
- input_di: d[40] & 1 ? 1 : 0,
8151
- input_ct: d[40] & 2 ? 1 : 0,
8152
- input_opto: d[40] & 4 ? 1 : 0,
8153
- input_acc: d[40] & 8 ? 1 : 0,
8154
- input_mag: d[40] & 16 ? 1 : 0
8155
- };
8156
- }
8157
- },
8158
- 'parse_fly': (frame) => {
8159
- if(frame[2] > 8){
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){
8160
8767
  let reset_mode = "Disabled";
8161
8768
  switch(frame[37]){
8162
8769
  case 0:
@@ -8235,12 +8842,12 @@ function sensor_types(parent){
8235
8842
  return {
8236
8843
  'firmware': frame[2],
8237
8844
  'accelerometer_threshold': (frame[16]* 32) + "mg",
8238
- 'debouncing_timeout': frame[17] + "sec",
8845
+ 'debouncing_timeout': frame[17] + "msec",
8239
8846
  'accelero_state': frame[18]? "Enabled": "Disabled",
8240
8847
  'input_1_active_edge': frame[19]? "Rising": "Falling",
8241
8848
  'input_2_active_edge': frame[20]? "Rising": "Falling",
8242
8849
  'input_3_active_edge': frame[21]? "Rising": "Falling",
8243
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb) + "sec",
8850
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
8244
8851
  'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
8245
8852
  'Shift_end_1': [
8246
8853
  String(frame[27]).padStart(2, '0'),
@@ -8292,11 +8899,11 @@ function sensor_types(parent){
8292
8899
  return {
8293
8900
  'firmware': frame[2],
8294
8901
  'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
8295
- 'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
8296
- 'debouncing_timeout': frame[17].toString() + "sec.",
8902
+ 'accelerometer_threshold': (frame[16]* 32) + "mg.",
8903
+ 'debouncing_timeout': frame[17].toString() + "msec.",
8297
8904
  'accelero_state': frame[18],
8298
8905
  'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
8299
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
8906
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
8300
8907
  'trasnmit_on_change_status': frame[26],
8301
8908
  'machine_values': {
8302
8909
  'firmware': frame[2],
@@ -8478,30 +9085,6 @@ function sensor_types(parent){
8478
9085
  }
8479
9086
  }
8480
9087
  },
8481
- '109': {
8482
- name: 'Wireless Custom Solar Sensor',
8483
- parse: (d) => {
8484
- return {
8485
- illuminance: d.slice(0, 4).reduce(msbLsb),
8486
- total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
8487
- ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
8488
- };
8489
- },
8490
- 'parse_fly': (frame) => {
8491
- return {
8492
- 'firmware': frame[2],
8493
- 'hardware_id': frame.slice(12, 15),
8494
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
8495
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
8496
- 'machine_values': {
8497
- 'firmware': frame[2],
8498
- 'hardware_id': frame.slice(12, 15),
8499
- 'sample_rate': frame.slice(15, 19),
8500
- 'tx_life_counter': frame.slice(19, 23)
8501
- }
8502
- }
8503
- }
8504
- },
8505
9088
  '109': {
8506
9089
  name: 'Wireless Custom Solar Sensor',
8507
9090
  parse: (d) => {
@@ -8574,7 +9157,7 @@ function sensor_types(parent){
8574
9157
  var mode = payload[8];
8575
9158
  var odr = msbLsb(payload[9], payload[10]);
8576
9159
  var fsr = payload[11] >> 5;
8577
- var device_temp = msbLsb(payload[14], payload[15])/100;
9160
+ var temperature = msbLsb(payload[14], payload[15])/100;
8578
9161
 
8579
9162
  globalDevices[deviceAddr] = {
8580
9163
  // stream_size: expected_packets,
@@ -8584,7 +9167,7 @@ function sensor_types(parent){
8584
9167
  fsr: fsr,
8585
9168
  hour: hour,
8586
9169
  minute: minute,
8587
- device_temp: device_temp,
9170
+ temperature: temperature,
8588
9171
  }
8589
9172
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8590
9173
  return;
@@ -8598,7 +9181,7 @@ function sensor_types(parent){
8598
9181
  var mode = payload[8];
8599
9182
  var odr = msbLsb(payload[9], payload[10]);
8600
9183
  var fsr = payload[11] >> 5;
8601
- var device_temp = msbLsb(payload[14], payload[15])/100;
9184
+ var temperature = msbLsb(payload[14], payload[15])/100;
8602
9185
 
8603
9186
  globalDevices[deviceAddr] = {
8604
9187
  // stream_size: expected_packets,
@@ -8608,7 +9191,7 @@ function sensor_types(parent){
8608
9191
  fsr: fsr,
8609
9192
  hour: hour,
8610
9193
  minute: minute,
8611
- device_temp: device_temp,
9194
+ temperature: temperature,
8612
9195
  }
8613
9196
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8614
9197
  }
@@ -8682,7 +9265,7 @@ function sensor_types(parent){
8682
9265
  mac_address: deviceAddr,
8683
9266
  fsr: fsr_text,
8684
9267
  odr: globalDevices[deviceAddr].odr,
8685
- device_temp: globalDevices[deviceAddr].device_temp,
9268
+ temperature: globalDevices[deviceAddr].temperature,
8686
9269
  total_samples: label,
8687
9270
  data: fft_concat
8688
9271
  };
@@ -8703,7 +9286,7 @@ function sensor_types(parent){
8703
9286
  var mode = payload[8];
8704
9287
  var odr = msbLsb(payload[9], payload[10]);
8705
9288
  var fsr = payload[11] >> 5;
8706
- var device_temp = msbLsb(payload[14], payload[15])/100;
9289
+ var temperature = msbLsb(payload[14], payload[15])/100;
8707
9290
 
8708
9291
  globalDevices[deviceAddr] = {
8709
9292
  // stream_size: expected_packets,
@@ -8713,7 +9296,7 @@ function sensor_types(parent){
8713
9296
  fsr: fsr,
8714
9297
  hour: hour,
8715
9298
  minute: minute,
8716
- device_temp: device_temp,
9299
+ temperature: temperature,
8717
9300
  }
8718
9301
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8719
9302
  return;
@@ -8989,7 +9572,65 @@ function sensor_types(parent){
8989
9572
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
8990
9573
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8991
9574
  frame_data.smart_mode_threshold = frame[34] * 50;
8992
- 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
8993
9634
  return {
8994
9635
  'firmware': frame[2],
8995
9636
  'destination_address': toMac(frame.slice(12, 16)),
@@ -9148,7 +9789,7 @@ function sensor_types(parent){
9148
9789
  var mode = payload[8];
9149
9790
  var odr = msbLsb(payload[9], payload[10]);
9150
9791
  var fsr = payload[11] >> 5;
9151
- var device_temp = msbLsb(payload[14], payload[15])/100;
9792
+ var temperature = msbLsb(payload[14], payload[15])/100;
9152
9793
 
9153
9794
  globalDevices[deviceAddr] = {
9154
9795
  // stream_size: expected_packets,
@@ -9158,7 +9799,7 @@ function sensor_types(parent){
9158
9799
  fsr: fsr,
9159
9800
  hour: hour,
9160
9801
  minute: minute,
9161
- device_temp: device_temp,
9802
+ temperature: temperature,
9162
9803
  }
9163
9804
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9164
9805
  return;
@@ -9172,7 +9813,7 @@ function sensor_types(parent){
9172
9813
  var mode = payload[8];
9173
9814
  var odr = msbLsb(payload[9], payload[10]);
9174
9815
  var fsr = payload[11] >> 5;
9175
- var device_temp = msbLsb(payload[14], payload[15])/100;
9816
+ var temperature = msbLsb(payload[14], payload[15])/100;
9176
9817
 
9177
9818
  globalDevices[deviceAddr] = {
9178
9819
  // stream_size: expected_packets,
@@ -9182,7 +9823,7 @@ function sensor_types(parent){
9182
9823
  fsr: fsr,
9183
9824
  hour: hour,
9184
9825
  minute: minute,
9185
- device_temp: device_temp,
9826
+ temperature: temperature,
9186
9827
  }
9187
9828
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9188
9829
  }
@@ -9267,7 +9908,7 @@ function sensor_types(parent){
9267
9908
  mac_address: deviceAddr,
9268
9909
  fsr: fsr_text,
9269
9910
  odr: globalDevices[deviceAddr].odr,
9270
- device_temp: globalDevices[deviceAddr].device_temp,
9911
+ temperature: globalDevices[deviceAddr].temperature,
9271
9912
  total_samples: label,
9272
9913
  data: fft_concat
9273
9914
  };
@@ -9287,7 +9928,7 @@ function sensor_types(parent){
9287
9928
  var mode = payload[8];
9288
9929
  var odr = msbLsb(payload[9], payload[10]);
9289
9930
  var fsr = payload[11] >> 5;
9290
- var device_temp = msbLsb(payload[14], payload[15])/100;
9931
+ var temperature = msbLsb(payload[14], payload[15])/100;
9291
9932
 
9292
9933
  globalDevices[deviceAddr] = {
9293
9934
  // stream_size: expected_packets,
@@ -9297,7 +9938,7 @@ function sensor_types(parent){
9297
9938
  fsr: fsr,
9298
9939
  hour: hour,
9299
9940
  minute: minute,
9300
- device_temp: device_temp,
9941
+ temperature: temperature,
9301
9942
  }
9302
9943
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9303
9944
  return;
@@ -9743,7 +10384,79 @@ function sensor_types(parent){
9743
10384
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9744
10385
  frame_data.p1_smart_mode_threshold = frame[38] * 50;
9745
10386
  frame_data.p2_smart_mode_threshold = frame[39] * 50;
9746
- 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
9747
10460
  return {
9748
10461
  'firmware': frame[2],
9749
10462
  'destination_address': toMac(frame.slice(12, 16)),
@@ -9927,7 +10640,7 @@ function sensor_types(parent){
9927
10640
  var mode = payload[8];
9928
10641
  var odr = msbLsb(payload[9], payload[10]);
9929
10642
  var fsr = payload[11] >> 5;
9930
- var device_temp = msbLsb(payload[14], payload[15])/100;
10643
+ var temperature = msbLsb(payload[14], payload[15])/100;
9931
10644
 
9932
10645
  globalDevices[deviceAddr] = {
9933
10646
  // stream_size: expected_packets,
@@ -9937,7 +10650,7 @@ function sensor_types(parent){
9937
10650
  fsr: fsr,
9938
10651
  hour: hour,
9939
10652
  minute: minute,
9940
- device_temp: device_temp,
10653
+ temperature: temperature,
9941
10654
  }
9942
10655
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9943
10656
  return;
@@ -9951,7 +10664,7 @@ function sensor_types(parent){
9951
10664
  var mode = payload[8];
9952
10665
  var odr = msbLsb(payload[9], payload[10]);
9953
10666
  var fsr = payload[11] >> 5;
9954
- var device_temp = msbLsb(payload[14], payload[15])/100;
10667
+ var temperature = msbLsb(payload[14], payload[15])/100;
9955
10668
 
9956
10669
  globalDevices[deviceAddr] = {
9957
10670
  // stream_size: expected_packets,
@@ -9961,7 +10674,7 @@ function sensor_types(parent){
9961
10674
  fsr: fsr,
9962
10675
  hour: hour,
9963
10676
  minute: minute,
9964
- device_temp: device_temp,
10677
+ temperature: temperature,
9965
10678
  }
9966
10679
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9967
10680
  }
@@ -10033,7 +10746,7 @@ function sensor_types(parent){
10033
10746
  mac_address: deviceAddr,
10034
10747
  fsr: fsr_text,
10035
10748
  odr: globalDevices[deviceAddr].odr,
10036
- device_temp: globalDevices[deviceAddr].device_temp,
10749
+ temperature: globalDevices[deviceAddr].temperature,
10037
10750
  total_samples: label,
10038
10751
  data: fft_concat
10039
10752
  };
@@ -10058,7 +10771,7 @@ function sensor_types(parent){
10058
10771
  var mode = payload[8];
10059
10772
  var odr = msbLsb(payload[9], payload[10]);
10060
10773
  var fsr = payload[11] >> 5;
10061
- var device_temp = msbLsb(payload[14], payload[15])/100;
10774
+ var temperature = msbLsb(payload[14], payload[15])/100;
10062
10775
 
10063
10776
  globalDevices[deviceAddr] = {
10064
10777
  // stream_size: expected_packets,
@@ -10068,7 +10781,7 @@ function sensor_types(parent){
10068
10781
  fsr: fsr,
10069
10782
  hour: hour,
10070
10783
  minute: minute,
10071
- device_temp: device_temp,
10784
+ temperature: temperature,
10072
10785
  }
10073
10786
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10074
10787
  return;
@@ -10345,7 +11058,65 @@ function sensor_types(parent){
10345
11058
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
10346
11059
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
10347
11060
  frame_data.smart_mode_threshold = frame[34] * 50;
10348
- 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
10349
11120
  return {
10350
11121
  'firmware': frame[2],
10351
11122
  'destination_address': toMac(frame.slice(12, 16)),
@@ -10485,7 +11256,7 @@ function sensor_types(parent){
10485
11256
  var mode = payload[8];
10486
11257
  var odr = msbLsb(payload[9], payload[10]);
10487
11258
  var fsr = payload[11] >> 5;
10488
- var device_temp = msbLsb(payload[14], payload[15])/100;
11259
+ var temperature = msbLsb(payload[14], payload[15])/100;
10489
11260
 
10490
11261
  globalDevices[deviceAddr] = {
10491
11262
  data: {},
@@ -10494,7 +11265,7 @@ function sensor_types(parent){
10494
11265
  fsr: fsr,
10495
11266
  hour: hour,
10496
11267
  minute: minute,
10497
- device_temp: device_temp,
11268
+ temperature: temperature,
10498
11269
  }
10499
11270
  globalDevices[deviceAddr].last_packet_counter = current_packet;
10500
11271
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -10509,7 +11280,7 @@ function sensor_types(parent){
10509
11280
  var mode = payload[8];
10510
11281
  var odr = msbLsb(payload[9], payload[10]);
10511
11282
  var fsr = payload[11] >> 5;
10512
- var device_temp = msbLsb(payload[14], payload[15])/100;
11283
+ var temperature = msbLsb(payload[14], payload[15])/100;
10513
11284
 
10514
11285
  globalDevices[deviceAddr] = {
10515
11286
  data: {},
@@ -10518,7 +11289,7 @@ function sensor_types(parent){
10518
11289
  fsr: fsr,
10519
11290
  hour: hour,
10520
11291
  minute: minute,
10521
- device_temp: device_temp,
11292
+ temperature: temperature,
10522
11293
  }
10523
11294
  globalDevices[deviceAddr].last_packet_counter = current_packet;
10524
11295
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -10528,7 +11299,7 @@ function sensor_types(parent){
10528
11299
  var mode = payload[8];
10529
11300
  var odr = msbLsb(payload[9], payload[10]);
10530
11301
  var fsr = payload[11] >> 5;
10531
- var device_temp = msbLsb(payload[14], payload[15])/100;
11302
+ var temperature = msbLsb(payload[14], payload[15])/100;
10532
11303
 
10533
11304
  globalDevices[deviceAddr] = {
10534
11305
  data: {},
@@ -10537,7 +11308,7 @@ function sensor_types(parent){
10537
11308
  fsr: fsr,
10538
11309
  hour: hour,
10539
11310
  minute: minute,
10540
- device_temp: device_temp,
11311
+ temperature: temperature,
10541
11312
  }
10542
11313
  globalDevices[deviceAddr].last_packet_counter = current_packet;
10543
11314
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -10611,7 +11382,7 @@ function sensor_types(parent){
10611
11382
  mac_address: deviceAddr,
10612
11383
  fsr: fsr_text,
10613
11384
  odr: globalDevices[deviceAddr].odr,
10614
- device_temp: globalDevices[deviceAddr].device_temp,
11385
+ temperature: globalDevices[deviceAddr].temperature,
10615
11386
  total_samples: label,
10616
11387
  fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
10617
11388
  data: fft_concat
@@ -10894,7 +11665,65 @@ function sensor_types(parent){
10894
11665
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
10895
11666
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
10896
11667
  frame_data.smart_mode_threshold = frame[34] * 50;
10897
- 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
10898
11727
  return {
10899
11728
  'firmware': frame[2],
10900
11729
  'destination_address': toMac(frame.slice(12, 16)),
@@ -11030,7 +11859,7 @@ function sensor_types(parent){
11030
11859
  var firmware = payload[1];
11031
11860
  var odr = msbLsb(payload[10], payload[11]);
11032
11861
  var fsr = payload[12];
11033
- var device_temp = msbLsb(payload[13], payload[14])/100;
11862
+ var temperature = msbLsb(payload[13], payload[14])/100;
11034
11863
  var expected_packets = msbLsb(payload[15], payload[16]);
11035
11864
  var current_packet = msbLsb(payload[17], payload[18]);
11036
11865
  var sdata_start = 19;
@@ -11398,25 +12227,62 @@ function sensor_types(parent){
11398
12227
  let frame_data = {};
11399
12228
  switch(frame[16]){
11400
12229
  case 0:
11401
- frame_data.fsr = "+-0.256 V";
11402
- break;
12230
+ frame_data.fsr = "+-6.114 V";
12231
+ break;
11403
12232
  case 1:
11404
- frame_data.fsr = "+-0.512 V";
11405
- break;
12233
+ frame_data.fsr = "+-4.096 V";
12234
+ break;
11406
12235
  case 2:
11407
- frame_data.fsr = "+-1.024 V";
11408
- break;
11409
- case 3:
11410
12236
  frame_data.fsr = "+-2.048 V";
11411
- break;
12237
+ break;
12238
+ case 3:
12239
+ frame_data.fsr = "+-1.024 V";
12240
+ break;
11412
12241
  case 4:
11413
- frame_data.fsr = "+-4.096 V";
11414
- break;
12242
+ frame_data.fsr = "+-0.512 V";
12243
+ break;
11415
12244
  case 5:
11416
- frame_data.fsr = "+-6.144 V";
11417
- break;
12245
+ frame_data.fsr = "+-0.256 V";
12246
+ break;
11418
12247
  }
11419
- 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){
11420
12286
  return {
11421
12287
  'firmware': frame[2],
11422
12288
  'report_rate': frame.slice(12, 16).reduce(msbLsb),
@@ -11449,6 +12315,155 @@ function sensor_types(parent){
11449
12315
  }
11450
12316
  }
11451
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
+ },
11452
12467
  '180': {
11453
12468
  name: 'C1D2 One Channel Vibration Plus',
11454
12469
  parse: (payload, parsed, mac) => {
@@ -11496,6 +12511,59 @@ function sensor_types(parent){
11496
12511
  };
11497
12512
  }
11498
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
+ },
11499
12567
  '217': {
11500
12568
  name: 'Wireless Weight Scale',
11501
12569
  parse: (d) => {
@@ -11504,6 +12572,68 @@ function sensor_types(parent){
11504
12572
  };
11505
12573
  }
11506
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
+ },
11507
12637
  '502': {
11508
12638
  name: 'Custom Environmental Sensor',
11509
12639
  parse: (d, full) => {
@@ -13872,25 +15002,31 @@ function sensor_types(parent){
13872
15002
  let firmware = frame[2];
13873
15003
  if(firmware > 13){ // firmware 14 and above
13874
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
+ }
13875
15011
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
13876
15012
  switch(frame[16]){
13877
15013
  case 0:
13878
- frame_data.fsr = "+-0.256 V";
15014
+ frame_data.fsr = "+-6.114 V";
13879
15015
  break;
13880
15016
  case 1:
13881
- frame_data.fsr = "+-0.512 V";
15017
+ frame_data.fsr = "+-4.096 V";
13882
15018
  break;
13883
15019
  case 2:
13884
- frame_data.fsr = "+-1.024 V";
15020
+ frame_data.fsr = "+-2.048 V";
13885
15021
  break;
13886
15022
  case 3:
13887
- frame_data.fsr = "+-2.048 V";
15023
+ frame_data.fsr = "+-1.024 V";
13888
15024
  break;
13889
15025
  case 4:
13890
- frame_data.fsr = "+-4.096 V";
15026
+ frame_data.fsr = "+-0.512 V";
13891
15027
  break;
13892
15028
  case 5:
13893
- frame_data.fsr = "+-6.144 V";
15029
+ frame_data.fsr = "+-0.256 V";
13894
15030
  break;
13895
15031
  }
13896
15032
  return {
@@ -13898,12 +15034,15 @@ function sensor_types(parent){
13898
15034
  'fsr': frame_data.fsr,
13899
15035
  'boot_time': frame[17] + " sec",
13900
15036
  'power_adc': frame.slice(18, 20).reduce(msbLsb),
13901
- 'auto_check_interval': frame.slice(20, 22).reduce(msbLsb) + " sec",
13902
- 'auto_check_percentage': frame.slice(22, 24).reduce(msbLsb),
15037
+ 'auto_check_interval': frame_data.auto_check_interval,
15038
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
13903
15039
  'always_on': frame_data.always_on,
13904
- 'hardware_id': frame.slice(25, 28),
13905
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
13906
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
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),
13907
15046
  'machine_values': {
13908
15047
  'firmware': frame[2],
13909
15048
  'fsr': frame[16],
@@ -13912,9 +15051,92 @@ function sensor_types(parent){
13912
15051
  'auto_check_interval': frame.slice(20, 22),
13913
15052
  'auto_check_percentage': frame.slice(22, 24),
13914
15053
  'always_on': frame[24],
13915
- 'hardware_id': frame.slice(25, 28),
13916
- 'report_rate': frame.slice(28, 32),
13917
- 'tx_life_counter': frame.slice(32, 36)
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),
13918
15140
  }
13919
15141
  }
13920
15142
  }