@ncd-io/node-red-enterprise-sensors 1.4.1 → 1.4.3

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,98 @@ 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";
3901
- break;
4114
+ frame_data.fsr = "+-6.114 V";
4115
+ break;
3902
4116
  case 1:
3903
- frame_data.fsr = "+-0.512 V";
3904
- break;
4117
+ frame_data.fsr = "+-4.096 V";
4118
+ break;
3905
4119
  case 2:
3906
- frame_data.fsr = "+-1.024 V";
3907
- break;
3908
- case 3:
3909
4120
  frame_data.fsr = "+-2.048 V";
3910
- break;
4121
+ break;
4122
+ case 3:
4123
+ frame_data.fsr = "+-1.024 V";
4124
+ break;
3911
4125
  case 4:
3912
- frame_data.fsr = "+-4.096 V";
3913
- break;
4126
+ frame_data.fsr = "+-0.512 V";
4127
+ break;
3914
4128
  case 5:
3915
- frame_data.fsr = "+-6.144 V";
3916
- break;
4129
+ frame_data.fsr = "+-0.256 V";
4130
+ break;
3917
4131
  }
3918
- if(firmware > 13){ // firmware 14 and above
4132
+ if(firmware > 18){ // firmware 14 and above
4133
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4134
+ if(!auto_check_interval){
4135
+ frame_data.auto_check_interval = 'Disabled';
4136
+ }else{
4137
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4138
+ }
3919
4139
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
3920
4140
  return {
3921
4141
  'firmware': frame[2],
3922
4142
  '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),
4143
+ 'boot_up_time': frame[17] + " sec",
4144
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4145
+ 'auto_check_interval': frame_data.auto_check_interval,
4146
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
3927
4147
  '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),
4148
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4149
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4150
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4151
+ 'hardware_id': frame.slice(37, 40),
4152
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4153
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
3931
4154
  'machine_values': {
3932
4155
  'firmware': frame[2],
3933
4156
  'fsr': frame[16],
3934
- 'boot_time': frame[17],
3935
- 'power_adc': frame.slice(18, 20),
4157
+ 'boot_up_time': frame[17],
4158
+ 'adc_pin_reading': frame.slice(18, 20),
4159
+ 'auto_check_interval': frame.slice(20, 22),
4160
+ 'auto_check_percentage': frame.slice(22, 24),
4161
+ 'always_on': frame[24],
4162
+ 'calibration_one': frame.slice(25, 29),
4163
+ 'calibration_two':frame.slice(29, 33),
4164
+ 'calibration_three':frame.slice(33, 37),
4165
+ 'hardware_id': frame.slice(37, 40),
4166
+ 'report_rate': frame.slice(40, 44),
4167
+ 'tx_life_counter': frame.slice(44, 48)
4168
+ }
4169
+ }
4170
+ }else if(firmware > 13){ // firmware 14 and above
4171
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4172
+ if(!auto_check_interval){
4173
+ frame_data.auto_check_interval = 'Disabled';
4174
+ }else{
4175
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4176
+ }
4177
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
4178
+ return {
4179
+ 'firmware': frame[2],
4180
+ 'fsr': frame_data.fsr,
4181
+ 'boot_up_time': frame[17] + " sec",
4182
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4183
+ 'auto_check_interval': frame_data.auto_check_interval,
4184
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4185
+ 'always_on': frame_data.always_on,
4186
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4187
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4188
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4189
+ 'hardware_id': frame.slice(37, 40),
4190
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4191
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4192
+ 'machine_values': {
4193
+ 'firmware': frame[2],
4194
+ 'fsr': frame[16],
4195
+ 'boot_up_time': frame[17],
4196
+ 'adc_pin_reading': frame.slice(18, 20),
3936
4197
  'auto_check_interval': frame.slice(20, 22),
3937
4198
  'auto_check_percentage': frame.slice(22, 24),
3938
4199
  '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)
4200
+ 'calibration_one': frame.slice(25, 29),
4201
+ 'calibration_two':frame.slice(29, 33),
4202
+ 'calibration_three':frame.slice(33, 37),
4203
+ 'hardware_id': frame.slice(37, 40),
4204
+ 'report_rate': frame.slice(40, 44),
4205
+ 'tx_life_counter': frame.slice(44, 48)
3942
4206
  }
3943
4207
  }
3944
4208
  }
@@ -4022,25 +4286,31 @@ function sensor_types(parent){
4022
4286
  let firmware = frame[2];
4023
4287
  if(firmware > 13){ // firmware 14 and above
4024
4288
  let frame_data = {};
4289
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4290
+ if(!auto_check_interval){
4291
+ frame_data.auto_check_interval = 'Disabled';
4292
+ }else{
4293
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4294
+ }
4025
4295
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
4026
4296
  switch(frame[16]){
4027
4297
  case 0:
4028
- frame_data.fsr = "+-0.256 V";
4298
+ frame_data.fsr = "+-6.114 V";
4029
4299
  break;
4030
4300
  case 1:
4031
- frame_data.fsr = "+-0.512 V";
4301
+ frame_data.fsr = "+-4.096 V";
4032
4302
  break;
4033
4303
  case 2:
4034
- frame_data.fsr = "+-1.024 V";
4304
+ frame_data.fsr = "+-2.048 V";
4035
4305
  break;
4036
4306
  case 3:
4037
- frame_data.fsr = "+-2.048 V";
4307
+ frame_data.fsr = "+-1.024 V";
4038
4308
  break;
4039
4309
  case 4:
4040
- frame_data.fsr = "+-4.096 V";
4310
+ frame_data.fsr = "+-0.512 V";
4041
4311
  break;
4042
4312
  case 5:
4043
- frame_data.fsr = "+-6.144 V";
4313
+ frame_data.fsr = "+-0.256 V";
4044
4314
  break;
4045
4315
  }
4046
4316
  return {
@@ -4048,12 +4318,15 @@ function sensor_types(parent){
4048
4318
  'fsr': frame_data.fsr,
4049
4319
  'boot_time': frame[17] + " sec",
4050
4320
  '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),
4321
+ 'auto_check_interval': frame_data.auto_check_interval,
4322
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4053
4323
  '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),
4324
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4325
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4326
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4327
+ 'hardware_id': frame.slice(37, 40),
4328
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4329
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4057
4330
  'machine_values': {
4058
4331
  'firmware': frame[2],
4059
4332
  'fsr': frame[16],
@@ -4062,9 +4335,12 @@ function sensor_types(parent){
4062
4335
  'auto_check_interval': frame.slice(20, 22),
4063
4336
  'auto_check_percentage': frame.slice(22, 24),
4064
4337
  '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)
4338
+ 'calibration_one': frame.slice(25, 29),
4339
+ 'calibration_two':frame.slice(29, 33),
4340
+ 'calibration_three':frame.slice(33, 37),
4341
+ 'hardware_id': frame.slice(37, 40),
4342
+ 'report_rate': frame.slice(40, 44),
4343
+ 'tx_life_counter': frame.slice(44, 48)
4068
4344
  }
4069
4345
  }
4070
4346
  }
@@ -4306,25 +4582,31 @@ function sensor_types(parent){
4306
4582
  let firmware = frame[2];
4307
4583
  if(firmware > 13){ // firmware 14 and above
4308
4584
  let frame_data = {};
4585
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4586
+ if(!auto_check_interval){
4587
+ frame_data.auto_check_interval = 'Disabled';
4588
+ }else{
4589
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4590
+ }
4309
4591
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
4310
4592
  switch(frame[16]){
4311
4593
  case 0:
4312
- frame_data.fsr = "+-0.256 V";
4594
+ frame_data.fsr = "+-6.114 V";
4313
4595
  break;
4314
4596
  case 1:
4315
- frame_data.fsr = "+-0.512 V";
4597
+ frame_data.fsr = "+-4.096 V";
4316
4598
  break;
4317
4599
  case 2:
4318
- frame_data.fsr = "+-1.024 V";
4600
+ frame_data.fsr = "+-2.048 V";
4319
4601
  break;
4320
4602
  case 3:
4321
- frame_data.fsr = "+-2.048 V";
4603
+ frame_data.fsr = "+-1.024 V";
4322
4604
  break;
4323
4605
  case 4:
4324
- frame_data.fsr = "+-4.096 V";
4606
+ frame_data.fsr = "+-0.512 V";
4325
4607
  break;
4326
4608
  case 5:
4327
- frame_data.fsr = "+-6.144 V";
4609
+ frame_data.fsr = "+-0.256 V";
4328
4610
  break;
4329
4611
  }
4330
4612
  return {
@@ -4332,12 +4614,15 @@ function sensor_types(parent){
4332
4614
  'fsr': frame_data.fsr,
4333
4615
  'boot_time': frame[17] + " sec",
4334
4616
  '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),
4617
+ 'auto_check_interval': frame_data.auto_check_interval,
4618
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4337
4619
  '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),
4620
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4621
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4622
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4623
+ 'hardware_id': frame.slice(37, 40),
4624
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4625
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4341
4626
  'machine_values': {
4342
4627
  'firmware': frame[2],
4343
4628
  'fsr': frame[16],
@@ -4346,9 +4631,12 @@ function sensor_types(parent){
4346
4631
  'auto_check_interval': frame.slice(20, 22),
4347
4632
  'auto_check_percentage': frame.slice(22, 24),
4348
4633
  '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)
4634
+ 'calibration_one': frame.slice(25, 29),
4635
+ 'calibration_two':frame.slice(29, 33),
4636
+ 'calibration_three':frame.slice(33, 37),
4637
+ 'hardware_id': frame.slice(37, 40),
4638
+ 'report_rate': frame.slice(40, 44),
4639
+ 'tx_life_counter': frame.slice(44, 48)
4352
4640
  }
4353
4641
  }
4354
4642
  }
@@ -4367,25 +4655,31 @@ function sensor_types(parent){
4367
4655
  let firmware = frame[2];
4368
4656
  if(firmware > 13){ // firmware 14 and above
4369
4657
  let frame_data = {};
4658
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4659
+ if(!auto_check_interval){
4660
+ frame_data.auto_check_interval = 'Disabled';
4661
+ }else{
4662
+ frame_data.auto_check_interval = auto_check_interval + " sec";
4663
+ }
4370
4664
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
4371
4665
  switch(frame[16]){
4372
4666
  case 0:
4373
- frame_data.fsr = "+-0.256 V";
4667
+ frame_data.fsr = "+-6.114 V";
4374
4668
  break;
4375
4669
  case 1:
4376
- frame_data.fsr = "+-0.512 V";
4670
+ frame_data.fsr = "+-4.096 V";
4377
4671
  break;
4378
4672
  case 2:
4379
- frame_data.fsr = "+-1.024 V";
4673
+ frame_data.fsr = "+-2.048 V";
4380
4674
  break;
4381
4675
  case 3:
4382
- frame_data.fsr = "+-2.048 V";
4676
+ frame_data.fsr = "+-1.024 V";
4383
4677
  break;
4384
4678
  case 4:
4385
- frame_data.fsr = "+-4.096 V";
4679
+ frame_data.fsr = "+-0.512 V";
4386
4680
  break;
4387
4681
  case 5:
4388
- frame_data.fsr = "+-6.144 V";
4682
+ frame_data.fsr = "+-0.256 V";
4389
4683
  break;
4390
4684
  }
4391
4685
  return {
@@ -4393,12 +4687,15 @@ function sensor_types(parent){
4393
4687
  'fsr': frame_data.fsr,
4394
4688
  'boot_time': frame[17] + " sec",
4395
4689
  '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),
4690
+ 'auto_check_interval': frame_data.auto_check_interval,
4691
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4398
4692
  '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),
4693
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4694
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4695
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4696
+ 'hardware_id': frame.slice(37, 40),
4697
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4698
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4402
4699
  'machine_values': {
4403
4700
  'firmware': frame[2],
4404
4701
  'fsr': frame[16],
@@ -4407,9 +4704,12 @@ function sensor_types(parent){
4407
4704
  'auto_check_interval': frame.slice(20, 22),
4408
4705
  'auto_check_percentage': frame.slice(22, 24),
4409
4706
  '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)
4707
+ 'calibration_one': frame.slice(25, 29),
4708
+ 'calibration_two':frame.slice(29, 33),
4709
+ 'calibration_three':frame.slice(33, 37),
4710
+ 'hardware_id': frame.slice(37, 40),
4711
+ 'report_rate': frame.slice(40, 44),
4712
+ 'tx_life_counter': frame.slice(44, 48)
4413
4713
  }
4414
4714
  }
4415
4715
  }
@@ -4505,65 +4805,50 @@ function sensor_types(parent){
4505
4805
  if(payload[8] === 1){
4506
4806
  var deviceAddr = mac;
4507
4807
  var firmware = payload[1];
4808
+ var mode = payload[8];
4809
+ var odr = payload[9];
4810
+ var en_axis = payload[10] & 7;
4811
+ var fsr = payload[10] >> 5;
4812
+ var hour = payload[11];
4813
+ var minute = payload[12];
4814
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4815
+ var expected_packets = payload[15];
4816
+ var current_packet = payload[16];
4817
+ var sdata_start = 17;
4508
4818
 
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
- }
4819
+ switch(odr){
4820
+ case 6:
4821
+ odr = 50;
4822
+ break;
4823
+ case 7:
4824
+ odr = 100;
4825
+ break;
4826
+ case 8:
4827
+ odr = 200;
4828
+ break;
4829
+ case 9:
4830
+ odr = 400;
4831
+ break;
4832
+ case 10:
4833
+ odr = 800;
4834
+ break;
4835
+ case 11:
4836
+ odr = 1600;
4837
+ break;
4838
+ case 12:
4839
+ odr = 3200;
4840
+ break;
4841
+ case 13:
4842
+ odr = 6400;
4843
+ break;
4844
+ case 14:
4845
+ odr = 12800;
4846
+ break;
4847
+ case 15:
4848
+ odr = 25600;
4849
+ break;
4850
+ default:
4851
+ odr = 0;
4567
4852
  }
4568
4853
 
4569
4854
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -5056,65 +5341,50 @@ function sensor_types(parent){
5056
5341
  if(payload[8] === 1){
5057
5342
  var deviceAddr = mac;
5058
5343
  var firmware = payload[1];
5344
+ var mode = payload[8];
5345
+ var odr = payload[9];
5346
+ var en_axis = payload[10] & 7;
5347
+ var fsr = payload[10] >> 5;
5348
+ var hour = payload[11];
5349
+ var minute = payload[12];
5350
+ var device_temp = msbLsb(payload[13], payload[14])/100;
5351
+ var expected_packets = payload[15];
5352
+ var current_packet = payload[16];
5353
+ var sdata_start = 17;
5059
5354
 
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
- }
5355
+ switch(odr){
5356
+ case 6:
5357
+ odr = 50;
5358
+ break;
5359
+ case 7:
5360
+ odr = 100;
5361
+ break;
5362
+ case 8:
5363
+ odr = 200;
5364
+ break;
5365
+ case 9:
5366
+ odr = 400;
5367
+ break;
5368
+ case 10:
5369
+ odr = 800;
5370
+ break;
5371
+ case 11:
5372
+ odr = 1600;
5373
+ break;
5374
+ case 12:
5375
+ odr = 3200;
5376
+ break;
5377
+ case 13:
5378
+ odr = 6400;
5379
+ break;
5380
+ case 14:
5381
+ odr = 12800;
5382
+ break;
5383
+ case 15:
5384
+ odr = 25600;
5385
+ break;
5386
+ default:
5387
+ odr = 0;
5118
5388
  }
5119
5389
 
5120
5390
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -5794,65 +6064,50 @@ function sensor_types(parent){
5794
6064
  if(payload[8] === 1){
5795
6065
  var deviceAddr = mac;
5796
6066
  var firmware = payload[1];
6067
+ var mode = payload[8];
6068
+ var odr = payload[9];
6069
+ var en_axis = payload[10] & 7;
6070
+ var fsr = payload[10] >> 5;
6071
+ var hour = payload[11];
6072
+ var minute = payload[12];
6073
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6074
+ var expected_packets = payload[15];
6075
+ var current_packet = payload[16];
6076
+ var sdata_start = 17;
5797
6077
 
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
- }
6078
+ switch(odr){
6079
+ case 6:
6080
+ odr = 50;
6081
+ break;
6082
+ case 7:
6083
+ odr = 100;
6084
+ break;
6085
+ case 8:
6086
+ odr = 200;
6087
+ break;
6088
+ case 9:
6089
+ odr = 400;
6090
+ break;
6091
+ case 10:
6092
+ odr = 800;
6093
+ break;
6094
+ case 11:
6095
+ odr = 1600;
6096
+ break;
6097
+ case 12:
6098
+ odr = 3200;
6099
+ break;
6100
+ case 13:
6101
+ odr = 6400;
6102
+ break;
6103
+ case 14:
6104
+ odr = 12800;
6105
+ break;
6106
+ case 15:
6107
+ odr = 25600;
6108
+ break;
6109
+ default:
6110
+ odr = 0;
5856
6111
  }
5857
6112
 
5858
6113
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
@@ -6338,66 +6593,51 @@ function sensor_types(parent){
6338
6593
  if(payload[8] === 1){
6339
6594
  var deviceAddr = mac;
6340
6595
  var firmware = payload[1];
6596
+ var mode = payload[8];
6597
+ var odr = payload[9];
6598
+ var en_axis = payload[10] & 7;
6599
+ var fsr = payload[10] >> 5;
6600
+ var hour = payload[11];
6601
+ var minute = payload[12];
6602
+ var device_temp = msbLsb(payload[13], payload[14])/100;
6603
+ var expected_packets = payload[15];
6604
+ var current_packet = payload[16];
6605
+ var sdata_start = 17;
6341
6606
 
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
- }
6400
- }
6607
+ switch(odr){
6608
+ case 6:
6609
+ odr = 50;
6610
+ break;
6611
+ case 7:
6612
+ odr = 100;
6613
+ break;
6614
+ case 8:
6615
+ odr = 200;
6616
+ break;
6617
+ case 9:
6618
+ odr = 400;
6619
+ break;
6620
+ case 10:
6621
+ odr = 800;
6622
+ break;
6623
+ case 11:
6624
+ odr = 1600;
6625
+ break;
6626
+ case 12:
6627
+ odr = 3200;
6628
+ break;
6629
+ case 13:
6630
+ odr = 6400;
6631
+ break;
6632
+ case 14:
6633
+ odr = 12800;
6634
+ break;
6635
+ case 15:
6636
+ odr = 25600;
6637
+ break;
6638
+ default:
6639
+ odr = 0;
6640
+ }
6401
6641
 
6402
6642
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6403
6643
  if(expected_packets != 1){
@@ -6872,7 +7112,7 @@ function sensor_types(parent){
6872
7112
  }
6873
7113
  },
6874
7114
  '87': {
6875
- 'name': '24-Bit 1-Channel Current Monitor',
7115
+ 'name': 'Gen 4 One Channel Wireless Current Sensor',
6876
7116
  parse: (d) => {
6877
7117
  return {
6878
7118
  ct1_rms: d.slice(0, 4).reduce(msbLsb),
@@ -6880,6 +7120,28 @@ function sensor_types(parent){
6880
7120
  ct1_peak_2_freq: d.slice(6, 8).reduce(msbLsb),
6881
7121
  ct1_peak_3_freq: d.slice(8, 10).reduce(msbLsb),
6882
7122
  }
7123
+ },
7124
+ 'parse_fly': (frame) => {
7125
+ return {
7126
+ 'firmware': frame[2],
7127
+ 'sampling_rate': frame[16] + 'Hz',
7128
+ 'current_calibration': (frame.slice(17, 21).reduce(msbLsb)) * 10,
7129
+ 'deadband': frame.slice(21, 23).reduce(msbLsb) + 'mA',
7130
+ 'max_supported_ct': frame.slice(23, 27).reduce(msbLsb),
7131
+ 'hardware_id': frame.slice(27, 30),
7132
+ 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "sec",
7133
+ 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
7134
+ 'machine_values': {
7135
+ 'firmware': frame[2],
7136
+ 'sampling_rate': frame[16],
7137
+ 'current_calibration': frame.slice(17, 21),
7138
+ 'deadband': frame.slice(21, 23),
7139
+ 'max_supported_ct': frame.slice(23, 27),
7140
+ 'hardware_id': frame.slice(27, 30),
7141
+ 'report_rate': frame.slice(30, 34),
7142
+ 'tx_life_counter': frame.slice(34, 38)
7143
+ }
7144
+ }
6883
7145
  }
6884
7146
  },
6885
7147
  '88': {
@@ -6896,48 +7158,61 @@ function sensor_types(parent){
6896
7158
  let frame_data = {};
6897
7159
  switch(frame[16]){
6898
7160
  case 0:
6899
- frame_data.fsr = "+-0.256 V";
7161
+ frame_data.fsr = "+-6.114 V";
6900
7162
  break;
6901
7163
  case 1:
6902
- frame_data.fsr = "+-0.512 V";
7164
+ frame_data.fsr = "+-4.096 V";
6903
7165
  break;
6904
7166
  case 2:
6905
- frame_data.fsr = "+-1.024 V";
7167
+ frame_data.fsr = "+-2.048 V";
6906
7168
  break;
6907
7169
  case 3:
6908
- frame_data.fsr = "+-2.048 V";
7170
+ frame_data.fsr = "+-1.024 V";
6909
7171
  break;
6910
7172
  case 4:
6911
- frame_data.fsr = "+-4.096 V";
7173
+ frame_data.fsr = "+-0.512 V";
6912
7174
  break;
6913
7175
  case 5:
6914
- frame_data.fsr = "+-6.144 V";
7176
+ frame_data.fsr = "+-0.256 V";
6915
7177
  break;
6916
7178
  }
6917
7179
  if(firmware > 13){ // firmware 14 and above
7180
+ let frame_data = {};
7181
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7182
+ if(!auto_check_interval){
7183
+ frame_data.auto_check_interval = 'Disabled';
7184
+ }else{
7185
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7186
+ }
6918
7187
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
6919
7188
  return {
6920
7189
  'firmware': frame[2],
6921
7190
  '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),
7191
+ 'boot_up_time': frame[17] + " sec",
7192
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
7193
+ 'auto_check_interval': frame_data.auto_check_interval,
7194
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
6926
7195
  '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),
7196
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7197
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7198
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7199
+ 'hardware_id': frame.slice(37, 40),
7200
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7201
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
6930
7202
  'machine_values': {
6931
7203
  'firmware': frame[2],
6932
7204
  'fsr': frame[16],
6933
- 'boot_time': frame[17],
6934
- 'power_adc': frame.slice(18, 20),
7205
+ 'boot_up_time': frame[17],
7206
+ 'adc_pin_reading': frame.slice(18, 20),
6935
7207
  'auto_check_interval': frame.slice(20, 22),
6936
7208
  'auto_check_percentage': frame.slice(22, 24),
6937
7209
  '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)
7210
+ 'calibration_one': frame.slice(25, 29),
7211
+ 'calibration_two':frame.slice(29, 33),
7212
+ 'calibration_three':frame.slice(33, 37),
7213
+ 'hardware_id': frame.slice(37, 40),
7214
+ 'report_rate': frame.slice(40, 44),
7215
+ 'tx_life_counter': frame.slice(44, 48)
6941
7216
  }
6942
7217
  }
6943
7218
  }else{
@@ -6976,48 +7251,61 @@ function sensor_types(parent){
6976
7251
  let frame_data = {};
6977
7252
  switch(frame[16]){
6978
7253
  case 0:
6979
- frame_data.fsr = "+-0.256 V";
7254
+ frame_data.fsr = "+-6.114 V";
6980
7255
  break;
6981
7256
  case 1:
6982
- frame_data.fsr = "+-0.512 V";
7257
+ frame_data.fsr = "+-4.096 V";
6983
7258
  break;
6984
7259
  case 2:
6985
- frame_data.fsr = "+-1.024 V";
7260
+ frame_data.fsr = "+-2.048 V";
6986
7261
  break;
6987
7262
  case 3:
6988
- frame_data.fsr = "+-2.048 V";
7263
+ frame_data.fsr = "+-1.024 V";
6989
7264
  break;
6990
7265
  case 4:
6991
- frame_data.fsr = "+-4.096 V";
7266
+ frame_data.fsr = "+-0.512 V";
6992
7267
  break;
6993
7268
  case 5:
6994
- frame_data.fsr = "+-6.144 V";
7269
+ frame_data.fsr = "+-0.256 V";
6995
7270
  break;
6996
7271
  }
6997
7272
  if(firmware > 13){ // firmware 14 and above
7273
+ let frame_data = {};
7274
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7275
+ if(!auto_check_interval){
7276
+ frame_data.auto_check_interval = 'Disabled';
7277
+ }else{
7278
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7279
+ }
6998
7280
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
6999
7281
  return {
7000
7282
  'firmware': frame[2],
7001
7283
  '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),
7284
+ 'boot_up_time': frame[17] + " sec",
7285
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
7286
+ 'auto_check_interval': frame_data.auto_check_interval,
7287
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7006
7288
  '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),
7289
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7290
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7291
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7292
+ 'hardware_id': frame.slice(37, 40),
7293
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7294
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7010
7295
  'machine_values': {
7011
7296
  'firmware': frame[2],
7012
7297
  'fsr': frame[16],
7013
- 'boot_time': frame[17],
7014
- 'power_adc': frame.slice(18, 20),
7298
+ 'boot_up_time': frame[17],
7299
+ 'adc_pin_reading': frame.slice(18, 20),
7015
7300
  'auto_check_interval': frame.slice(20, 22),
7016
7301
  'auto_check_percentage': frame.slice(22, 24),
7017
7302
  '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)
7303
+ 'calibration_one': frame.slice(25, 29),
7304
+ 'calibration_two':frame.slice(29, 33),
7305
+ 'calibration_three':frame.slice(33, 37),
7306
+ 'hardware_id': frame.slice(37, 40),
7307
+ 'report_rate': frame.slice(40, 44),
7308
+ 'tx_life_counter': frame.slice(44, 48)
7021
7309
  }
7022
7310
  }
7023
7311
  }else{
@@ -7051,25 +7339,31 @@ function sensor_types(parent){
7051
7339
  let firmware = frame[2];
7052
7340
  if(firmware > 13){ // firmware 14 and above
7053
7341
  let frame_data = {};
7054
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
7342
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7343
+ if(!auto_check_interval){
7344
+ frame_data.auto_check_interval = 'Disabled';
7345
+ }else{
7346
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7347
+ }
7348
+ frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
7055
7349
  switch(frame[16]){
7056
7350
  case 0:
7057
- frame_data.fsr = "+-0.256 V";
7351
+ frame_data.fsr = "+-6.114 V";
7058
7352
  break;
7059
7353
  case 1:
7060
- frame_data.fsr = "+-0.512 V";
7354
+ frame_data.fsr = "+-4.096 V";
7061
7355
  break;
7062
7356
  case 2:
7063
- frame_data.fsr = "+-1.024 V";
7357
+ frame_data.fsr = "+-2.048 V";
7064
7358
  break;
7065
7359
  case 3:
7066
- frame_data.fsr = "+-2.048 V";
7360
+ frame_data.fsr = "+-1.024 V";
7067
7361
  break;
7068
7362
  case 4:
7069
- frame_data.fsr = "+-4.096 V";
7363
+ frame_data.fsr = "+-0.512 V";
7070
7364
  break;
7071
7365
  case 5:
7072
- frame_data.fsr = "+-6.144 V";
7366
+ frame_data.fsr = "+-0.256 V";
7073
7367
  break;
7074
7368
  }
7075
7369
  return {
@@ -7077,23 +7371,25 @@ function sensor_types(parent){
7077
7371
  'fsr': frame_data.fsr,
7078
7372
  'boot_time': frame[17] + " sec",
7079
7373
  '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),
7374
+ 'auto_check_interval': frame_data.auto_check_interval,
7375
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7082
7376
  '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),
7377
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7378
+ 'hardware_id': frame.slice(29, 32),
7379
+ 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
7380
+ 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
7086
7381
  'machine_values': {
7087
7382
  'firmware': frame[2],
7088
7383
  'fsr': frame[16],
7089
7384
  'boot_time': frame[17],
7090
7385
  'power_adc': frame.slice(18, 20),
7091
7386
  'auto_check_interval': frame.slice(20, 22),
7092
- 'auto_check_percentage': frame.slice(22, 24),
7387
+ 'auto_check_threshold': frame.slice(22, 24),
7093
7388
  '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)
7389
+ 'calibration_one': frame.slice(25, 29),
7390
+ 'hardware_id': frame.slice(29, 32),
7391
+ 'report_rate': frame.slice(32, 36),
7392
+ 'tx_life_counter': frame.slice(36, 40)
7097
7393
  }
7098
7394
  }
7099
7395
  }
@@ -7127,25 +7423,31 @@ function sensor_types(parent){
7127
7423
  let firmware = frame[2];
7128
7424
  if(firmware > 13){ // firmware 14 and above
7129
7425
  let frame_data = {};
7426
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7427
+ if(!auto_check_interval){
7428
+ frame_data.auto_check_interval = 'Disabled';
7429
+ }else{
7430
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7431
+ }
7130
7432
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7131
7433
  switch(frame[16]){
7132
7434
  case 0:
7133
- frame_data.fsr = "+-0.256 V";
7435
+ frame_data.fsr = "+-6.114 V";
7134
7436
  break;
7135
7437
  case 1:
7136
- frame_data.fsr = "+-0.512 V";
7438
+ frame_data.fsr = "+-4.096 V";
7137
7439
  break;
7138
7440
  case 2:
7139
- frame_data.fsr = "+-1.024 V";
7441
+ frame_data.fsr = "+-2.048 V";
7140
7442
  break;
7141
7443
  case 3:
7142
- frame_data.fsr = "+-2.048 V";
7444
+ frame_data.fsr = "+-1.024 V";
7143
7445
  break;
7144
7446
  case 4:
7145
- frame_data.fsr = "+-4.096 V";
7447
+ frame_data.fsr = "+-0.512 V";
7146
7448
  break;
7147
7449
  case 5:
7148
- frame_data.fsr = "+-6.144 V";
7450
+ frame_data.fsr = "+-0.256 V";
7149
7451
  break;
7150
7452
  }
7151
7453
  return {
@@ -7153,12 +7455,15 @@ function sensor_types(parent){
7153
7455
  'fsr': frame_data.fsr,
7154
7456
  'boot_time': frame[17] + " sec",
7155
7457
  '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),
7458
+ 'auto_check_interval': frame_data.auto_check_interval,
7459
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7158
7460
  '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),
7461
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7462
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7463
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7464
+ 'hardware_id': frame.slice(37, 40),
7465
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7466
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7162
7467
  'machine_values': {
7163
7468
  'firmware': frame[2],
7164
7469
  'fsr': frame[16],
@@ -7167,9 +7472,12 @@ function sensor_types(parent){
7167
7472
  'auto_check_interval': frame.slice(20, 22),
7168
7473
  'auto_check_percentage': frame.slice(22, 24),
7169
7474
  '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)
7475
+ 'calibration_one': frame.slice(25, 29),
7476
+ 'calibration_two':frame.slice(29, 33),
7477
+ 'calibration_three':frame.slice(33, 37),
7478
+ 'hardware_id': frame.slice(37, 40),
7479
+ 'report_rate': frame.slice(40, 44),
7480
+ 'tx_life_counter': frame.slice(44, 48)
7173
7481
  }
7174
7482
  }
7175
7483
  }
@@ -7187,25 +7495,31 @@ function sensor_types(parent){
7187
7495
  let firmware = frame[2];
7188
7496
  if(firmware > 13){ // firmware 14 and above
7189
7497
  let frame_data = {};
7498
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7499
+ if(!auto_check_interval){
7500
+ frame_data.auto_check_interval = 'Disabled';
7501
+ }else{
7502
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7503
+ }
7190
7504
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7191
7505
  switch(frame[16]){
7192
7506
  case 0:
7193
- frame_data.fsr = "+-0.256 V";
7507
+ frame_data.fsr = "+-6.114 V";
7194
7508
  break;
7195
7509
  case 1:
7196
- frame_data.fsr = "+-0.512 V";
7510
+ frame_data.fsr = "+-4.096 V";
7197
7511
  break;
7198
7512
  case 2:
7199
- frame_data.fsr = "+-1.024 V";
7513
+ frame_data.fsr = "+-2.048 V";
7200
7514
  break;
7201
7515
  case 3:
7202
- frame_data.fsr = "+-2.048 V";
7516
+ frame_data.fsr = "+-1.024 V";
7203
7517
  break;
7204
7518
  case 4:
7205
- frame_data.fsr = "+-4.096 V";
7519
+ frame_data.fsr = "+-0.512 V";
7206
7520
  break;
7207
7521
  case 5:
7208
- frame_data.fsr = "+-6.144 V";
7522
+ frame_data.fsr = "+-0.256 V";
7209
7523
  break;
7210
7524
  }
7211
7525
  return {
@@ -7213,12 +7527,15 @@ function sensor_types(parent){
7213
7527
  'fsr': frame_data.fsr,
7214
7528
  'boot_time': frame[17] + " sec",
7215
7529
  '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),
7530
+ 'auto_check_interval': frame_data.auto_check_interval,
7531
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7218
7532
  '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),
7533
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7534
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7535
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7536
+ 'hardware_id': frame.slice(37, 40),
7537
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7538
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7222
7539
  'machine_values': {
7223
7540
  'firmware': frame[2],
7224
7541
  'fsr': frame[16],
@@ -7227,9 +7544,12 @@ function sensor_types(parent){
7227
7544
  'auto_check_interval': frame.slice(20, 22),
7228
7545
  'auto_check_percentage': frame.slice(22, 24),
7229
7546
  '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)
7547
+ 'calibration_one': frame.slice(25, 29),
7548
+ 'calibration_two':frame.slice(29, 33),
7549
+ 'calibration_three':frame.slice(33, 37),
7550
+ 'hardware_id': frame.slice(37, 40),
7551
+ 'report_rate': frame.slice(40, 44),
7552
+ 'tx_life_counter': frame.slice(44, 48)
7233
7553
  }
7234
7554
  }
7235
7555
  }
@@ -7548,50 +7868,113 @@ function sensor_types(parent){
7548
7868
  }
7549
7869
  },
7550
7870
  '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;
7871
+ let firmware = frame[2];
7872
+ if(firmware > 13){ // firmware 14 and above
7873
+ let frame_data = {};
7874
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
7875
+ if(!auto_check_interval){
7876
+ frame_data.auto_check_interval = 'Disabled';
7877
+ }else{
7878
+ frame_data.auto_check_interval = auto_check_interval + " sec";
7879
+ }
7880
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
7881
+ switch(frame[16]){
7882
+ case 0:
7883
+ frame_data.fsr = "+-6.114 V";
7884
+ break;
7885
+ case 1:
7886
+ frame_data.fsr = "+-4.096 V";
7887
+ break;
7888
+ case 2:
7889
+ frame_data.fsr = "+-2.048 V";
7890
+ break;
7891
+ case 3:
7892
+ frame_data.fsr = "+-1.024 V";
7893
+ break;
7894
+ case 4:
7895
+ frame_data.fsr = "+-0.512 V";
7896
+ break;
7897
+ case 5:
7898
+ frame_data.fsr = "+-0.256 V";
7899
+ break;
7900
+ }
7901
+ return {
7902
+ 'firmware': frame[2],
7903
+ 'fsr': frame_data.fsr,
7904
+ 'boot_time': frame[17] + " sec",
7905
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
7906
+ 'auto_check_interval': frame_data.auto_check_interval,
7907
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7908
+ 'always_on': frame_data.always_on,
7909
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
7910
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
7911
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
7912
+ 'hardware_id': frame.slice(37, 40),
7913
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
7914
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7915
+ 'machine_values': {
7916
+ 'firmware': frame[2],
7917
+ 'fsr': frame[16],
7918
+ 'boot_time': frame[17],
7919
+ 'power_adc': frame.slice(18, 20),
7920
+ 'auto_check_interval': frame.slice(20, 22),
7921
+ 'auto_check_percentage': frame.slice(22, 24),
7922
+ 'always_on': frame[24],
7923
+ 'calibration_one': frame.slice(25, 29),
7924
+ 'calibration_two':frame.slice(29, 33),
7925
+ 'calibration_three':frame.slice(33, 37),
7926
+ 'hardware_id': frame.slice(37, 40),
7927
+ 'report_rate': frame.slice(40, 44),
7928
+ 'tx_life_counter': frame.slice(44, 48)
7929
+ }
7930
+ }
7566
7931
  }
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': {
7932
+ else{
7933
+ let frame_data = {};
7934
+ frame_data.mode = frame[12] ? 'Raw':'Processed';
7935
+ switch(frame[13]){
7936
+ case 0:
7937
+ frame_data.raw_lenght = 55;
7938
+ break;
7939
+ case 1:
7940
+ frame_data.raw_lenght = 100;
7941
+ break;
7942
+ case 2:
7943
+ frame_data.raw_lenght = 150;
7944
+ break;
7945
+ case 3:
7946
+ frame_data.raw_lenght = 180;
7947
+ break;
7948
+ }
7949
+ return {
7582
7950
  '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)
7951
+ 'mode': frame_data.mode,
7952
+ 'raw_length': frame_data.raw_lenght + " Bytes",
7953
+ 'raw_on_request_timeout': frame[14] + " sec",
7954
+ 'fly_rate': frame.slice(15, 17).reduce(msbLsb) + " min",
7955
+ 'c1_sensor_gain_db': frame[17] + " dB",
7956
+ 'c1_sensor_boot_time': frame[18] + " sec",
7957
+ 'c2_sensor_gain_db': frame[19] + " dB",
7958
+ 'c2_sensor_boot_time': frame[20] + " sec",
7959
+ 'sampling_frequency': frame.slice(21, 25).reduce(msbLsb) + " Hz",
7592
7960
  // 'hardware_id': frame.slice(25, 28),
7593
- // 'report_rate': frame.slice(28, 32),
7594
- // 'tx_life_count': frame.slice(32, 36)
7961
+ // 'report_rate': frame.slice(28, 32).reduce(msbLsb),
7962
+ // 'tx_life_count': frame.slice(32, 36).reduce(msbLsb),
7963
+ 'machine_values': {
7964
+ 'firmware': frame[2],
7965
+ 'mode': frame[12],
7966
+ 'raw_lenght': frame[13],
7967
+ 'raw_on_request_timeout': frame[14],
7968
+ 'fly_rate': frame.slice(15, 17),
7969
+ 'c1_sensor_gain_db': frame[17],
7970
+ 'c1_sensor_boot_time': frame[18],
7971
+ 'c2_sensor_gain_db': frame[19],
7972
+ 'c2_sensor_boot_time': frame[20],
7973
+ 'sampling_frequency': frame.slice(21, 25)
7974
+ // 'hardware_id': frame.slice(25, 28),
7975
+ // 'report_rate': frame.slice(28, 32),
7976
+ // 'tx_life_count': frame.slice(32, 36)
7977
+ }
7595
7978
  }
7596
7979
  }
7597
7980
  }
@@ -7612,7 +7995,7 @@ function sensor_types(parent){
7612
7995
  var data = {};
7613
7996
  switch(payload[8]){
7614
7997
  case 1:
7615
- data.sensor_type = 'adxl';
7998
+ data.sensor_type = 'Accel';
7616
7999
  break;
7617
8000
  case 2:
7618
8001
  data.sensor_type = 'gyro';
@@ -7626,74 +8009,70 @@ function sensor_types(parent){
7626
8009
  data.event_type = 'motion';
7627
8010
  break;
7628
8011
  }
8012
+
8013
+ var mode = payload[9];
8014
+ var odr = payload[11];
8015
+ var en_axis = payload[12] & 7;
8016
+ var fsr = payload[12] >> 5;
7629
8017
  var hour = payload[13];
7630
8018
  var minute = payload[14];
8019
+ var device_temp = payload.slice(15, 17).reduce(msbLsb) / 100;
8020
+ var external_temperature = payload.slice(17, 19).reduce(msbLsb) / 100;
7631
8021
  var expected_packets = payload.slice(19, 21).reduce(msbLsb);
7632
8022
  var current_packet = payload.slice(21, 23).reduce(msbLsb);
7633
8023
  var data_start = 23;
7634
8024
 
8025
+ switch(odr){
8026
+ case 0:
8027
+ odr = '125Hz';
8028
+ break;
8029
+ case 1:
8030
+ odr = '250Hz';
8031
+ break;
8032
+ case 2:
8033
+ odr = '500Hz';
8034
+ break;
8035
+ case 3:
8036
+ odr = '1000Hz';
8037
+ break;
8038
+ default:
8039
+ odr = 0;
8040
+ }
8041
+
7635
8042
  if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
7636
8043
  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);
8044
+ // if current packet is equal to last one (duplicated data). This does not apply to the last package
8045
+ if (globalDevices[deviceAddr].last_packet_counter == current_packet){
8046
+ console.log('Duplicated message')
8047
+ return;
8048
+ }
8049
+ // if current packet is equal to 1 or last packet counter is higher thant current packet
8050
+ if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
8051
+ // clear stream
7657
8052
  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;
8053
+ // create new stream
8054
+ globalDevices[deviceAddr] = {
8055
+ // stream_size: expected_packets,
8056
+ data: {},
8057
+ odr: odr,
8058
+ mo: mode,
8059
+ en_axis: en_axis,
8060
+ fsr: fsr,
8061
+ hour: hour,
8062
+ minute: minute,
8063
+ device_temp: device_temp,
8064
+ external_temp: external_temperature
7683
8065
  }
8066
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
8067
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8068
+ return;
7684
8069
  }
7685
8070
  else{
8071
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
7686
8072
  globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7687
8073
  }
7688
8074
  }
7689
8075
  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
8076
  globalDevices[deviceAddr] = {
7698
8077
  // stream_size: expected_packets,
7699
8078
  data: {},
@@ -7706,185 +8085,282 @@ function sensor_types(parent){
7706
8085
  device_temp: device_temp,
7707
8086
  external_temp: external_temperature
7708
8087
  }
8088
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
7709
8089
  globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
7710
8090
  }
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;
7717
-
7718
- var fft = new Array();
7719
- var fft_concat = {};
8091
+ }
8092
+ else{
7720
8093
 
7721
- var en_axis_data = {};
7722
- switch (globalDevices[deviceAddr].en_axis){
8094
+ globalDevices[deviceAddr] = {
8095
+ data: {},
8096
+ odr: odr,
8097
+ mo: mode,
8098
+ en_axis: en_axis,
8099
+ fsr: fsr,
8100
+ hour: hour,
8101
+ minute: minute,
8102
+ device_temp: device_temp,
8103
+ external_temp: external_temperature
8104
+ }
8105
+ globalDevices[deviceAddr].last_packet_counter = current_packet;
8106
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8107
+ }
8108
+ if(current_packet == expected_packets){
8109
+ var raw_data = new Array();
8110
+ for(const packet in globalDevices[deviceAddr].data){
8111
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
8112
+ }
8113
+ var label = 0;
8114
+
8115
+ var fft = new Array();
8116
+ var fft_concat = {};
8117
+
8118
+ var en_axis_data = {};
8119
+ en_axis_data.x_offset = 0;
8120
+ en_axis_data.y_offset = 2;
8121
+ en_axis_data.z_offset = 4;
8122
+ en_axis_data.increment = 6;
8123
+ fft_concat = {x: [], y: [], z: []};
8124
+
8125
+ /* Evaluate sensor type */
8126
+ if(payload[8] == 1){ // accelerometer
8127
+ var fsr_mult = 0.00030;
8128
+ var fsr_text = "";
8129
+ switch(globalDevices[deviceAddr].fsr){
8130
+ case 0:
8131
+ fsr_mult = 0.00030;
8132
+ break;
7723
8133
  case 1:
7724
- en_axis_data.x_offset = 0;
7725
- en_axis_data.increment = 2;
8134
+ fsr_mult = 0.00061;
7726
8135
  break;
7727
8136
  case 2:
7728
- en_axis_data.y_offset = 0;
7729
- en_axis_data.increment = 2;
8137
+ fsr_mult = 0.00122;
7730
8138
  break;
7731
- case 3:
7732
- en_axis_data.x_offset = 0;
7733
- en_axis_data.y_offset = 2;
7734
- en_axis_data.increment = 4;
8139
+ }
8140
+ switch(globalDevices[deviceAddr].fsr){
8141
+ case 0:
8142
+ fsr_text = "10g";
7735
8143
  break;
7736
- case 4:
7737
- en_axis_data.z_offset = 0;
7738
- en_axis_data.increment = 2;
8144
+ case 1:
8145
+ fsr_text = "20g";
7739
8146
  break;
7740
- case 5:
7741
- en_axis_data.x_offset = 0;
7742
- en_axis_data.z_offset = 2;
7743
- en_axis_data.increment = 4;
8147
+ case 2:
8148
+ fsr_text = "40g";
7744
8149
  break;
7745
- case 6:
7746
- en_axis_data.y_offset = 0;
7747
- en_axis_data.z_offset = 2;
7748
- en_axis_data.increment = 4;
8150
+ }
8151
+ }else{ // gyro
8152
+ var fsr_mult = 0.0076;
8153
+ var fsr_text = "";
8154
+ switch(globalDevices[deviceAddr].fsr){
8155
+ case 0:
8156
+ fsr_mult = 0.0076;
7749
8157
  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;
8158
+ case 1:
8159
+ fsr_mult = 0.015;
8160
+ break;
8161
+ case 2:
8162
+ fsr_mult = 0.0305;
8163
+ break;
8164
+ case 3:
8165
+ fsr_mult = 0.061;
7755
8166
  break;
7756
- default:
7757
- en_axis_data.increment = 0;
7758
8167
  }
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
- }
8168
+ switch(globalDevices[deviceAddr].fsr){
8169
+ case 0:
8170
+ fsr_text = "250dps";
8171
+ break;
8172
+ case 1:
8173
+ fsr_text = "500dps";
8174
+ break;
8175
+ case 2:
8176
+ fsr_text = "1000dps";
8177
+ break;
8178
+ case 3:
8179
+ fsr_text = "2000dps";
8180
+ break;
7816
8181
  }
8182
+ }
7817
8183
 
7818
- for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
7819
- label++;
7820
-
7821
- fft_concat[label] = {};
8184
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
8185
+ label++;
7822
8186
 
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
- }
8187
+ if('x_offset' in en_axis_data){
8188
+ 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)));
7832
8189
  }
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);
8190
+ if('y_offset' in en_axis_data){
8191
+ 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)));
8192
+ }
8193
+ if('z_offset' in en_axis_data){
8194
+ 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)));
7856
8195
  }
7857
-
7858
- return sensor_data;
7859
- }
7860
- else{
7861
- return;
7862
- }
7863
- }else{
7864
-
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;
7871
-
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
7883
8196
  }
7884
- globalDevices[deviceAddr].data[current_packet] = payload.slice(data_start);
8197
+ var fft_concat_obj = {
8198
+ mode: mode,
8199
+ sensor_type: data.sensor_type,
8200
+ msg_type: data.event_type,
8201
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
8202
+ mac_address: deviceAddr,
8203
+ en_axis: globalDevices[deviceAddr].en_axis,
8204
+ fsr: fsr_text,
8205
+ odr: globalDevices[deviceAddr].odr,
8206
+ device_temp: globalDevices[deviceAddr].device_temp,
8207
+ external_temp: globalDevices[deviceAddr].external_temp,
8208
+ total_samples: label,
8209
+ fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
8210
+ data: fft_concat
8211
+ };
8212
+ sensor_data = fft_concat_obj;
8213
+ delete globalDevices[deviceAddr];
8214
+ return sensor_data;
8215
+ }
8216
+ else{
7885
8217
  return;
7886
8218
  }
7887
8219
  }
8220
+ },
8221
+ 'parse_fly': (frame) => {
8222
+ let frame_data = {};
8223
+ switch(frame[12]){
8224
+ case 0:
8225
+ frame_data.odr = 125;
8226
+ break;
8227
+ case 1:
8228
+ frame_data.odr = 250;
8229
+ break;
8230
+ case 2:
8231
+ frame_data.odr = 500;
8232
+ break;
8233
+ case 3:
8234
+ frame_data.odr = 1000;
8235
+ break;
8236
+ default:
8237
+ frame_data.odr = 0;
8238
+ }
8239
+ switch(frame[15]){
8240
+ case 0:
8241
+ frame_data.fsr_acc = "10g";
8242
+ break;
8243
+ case 1:
8244
+ frame_data.fsr_acc = "20g";
8245
+ break;
8246
+ case 2:
8247
+ frame_data.fsr_acc = "40g";
8248
+ break;
8249
+ }
8250
+ switch(frame[16]){
8251
+ case 0:
8252
+ frame_data.fsr_gyro = "250dps";
8253
+ break;
8254
+ case 1:
8255
+ frame_data.fsr_gyro = "500dps";
8256
+ break;
8257
+ case 2:
8258
+ frame_data.fsr_gyro = "1000dps";
8259
+ break;
8260
+ case 3:
8261
+ frame_data.fsr_gyro = "2000dps";
8262
+ break;
8263
+ }
8264
+ switch(frame[17]){
8265
+ case 7:
8266
+ frame_data.en_axis = "all";
8267
+ break;
8268
+ }
8269
+ switch(frame[20]){
8270
+ case 1:
8271
+ frame_data.en_sensors = "gyro_only";
8272
+ break;
8273
+ case 2:
8274
+ frame_data.en_sensors = "accel_only";
8275
+ break;
8276
+ case 3:
8277
+ frame_data.en_sensors = "all_enabled";
8278
+ break;
8279
+ }
8280
+ switch(frame[18]){
8281
+ case 0:
8282
+ frame_data.sampling_interval = 5;
8283
+ break;
8284
+ case 1:
8285
+ frame_data.sampling_interval = 10;
8286
+ break;
8287
+ case 2:
8288
+ frame_data.sampling_interval = 15;
8289
+ break;
8290
+ case 3:
8291
+ frame_data.sampling_interval = 20;
8292
+ break;
8293
+ case 4:
8294
+ frame_data.sampling_interval = 30;
8295
+ break;
8296
+ case 5:
8297
+ frame_data.sampling_interval = 60;
8298
+ break;
8299
+ case 6:
8300
+ frame_data.sampling_interval = 120;
8301
+ break;
8302
+ case 7:
8303
+ frame_data.sampling_interval = 180;
8304
+ break;
8305
+ }
8306
+ switch(frame[14]){
8307
+ case 0:
8308
+ frame_data.hpf_cutoff = 0.00247;
8309
+ break;
8310
+ case 1:
8311
+ frame_data.hpf_cutoff = 0.00062084;
8312
+ break;
8313
+ case 2:
8314
+ frame_data.hpf_cutoff = 0.00015545;
8315
+ break;
8316
+ case 3:
8317
+ frame_data.hpf_cutoff = 0.00003862;
8318
+ break;
8319
+ case 4:
8320
+ frame_data.hpf_cutoff = 0.00000954;
8321
+ break;
8322
+ case 5:
8323
+ frame_data.hpf_cutoff = 0.00000238;
8324
+ break;
8325
+ }
8326
+ return {
8327
+ 'firmware': frame[2],
8328
+ 'sample_rate': frame_data.odr + 'Hz',
8329
+ 'sampling_duration': (frame[13]* 50) + 'msec',
8330
+ 'hpf_cutoff': (frame_data.hpf_cutoff * frame_data.odr).toFixed(2) + 'Hz',
8331
+ 'acc_fsr': frame_data.fsr_acc,
8332
+ 'gyro_fsr': frame_data.fsr_gyro,
8333
+ 'axis_enabled': frame_data.en_axis,
8334
+ 'sampling_interval': frame_data.sampling_interval + 'min',
8335
+ 'accelerometer_threshold': (frame[19]* 32) + "mg",
8336
+ 'enabled_sensors': frame_data.en_sensors,
8337
+ 'rtc': [
8338
+ String(frame[21]).padStart(2, '0'),
8339
+ String(frame[22]).padStart(2, '0'),
8340
+ String(frame[23]).padStart(2, '0')
8341
+ ].join(':'),
8342
+ 'hardware_id': frame.slice(24, 27),
8343
+ 'report_rate': frame.slice(27, 31).reduce(msbLsb),
8344
+ 'tx_life_counter': frame.slice(31, 35).reduce(msbLsb),
8345
+ 'machine_values': {
8346
+ 'firmware': frame[2],
8347
+ 'odr': frame[12],
8348
+ 'sampling_duration': frame[13],
8349
+ 'hpf_cutoff': frame[14],
8350
+ 'acc_fsr': frame[15],
8351
+ 'gyro_fsr': frame[16],
8352
+ 'axis_enabled': frame[17],
8353
+ 'sampling_interval': frame[18],
8354
+ 'accelerometer_threshold': frame[19],
8355
+ 'enabled_sensors': frame[20],
8356
+ 'hour': frame[21],
8357
+ 'minute': frame[22],
8358
+ 'second': frame[23],
8359
+ 'hardware_id': frame.slice(24, 27),
8360
+ 'report_rate': frame.slice(27, 31),
8361
+ 'tx_life_counter': frame.slice(31, 35)
8362
+ }
8363
+ }
7888
8364
  }
7889
8365
  },
7890
8366
  '105': {
@@ -7900,25 +8376,31 @@ function sensor_types(parent){
7900
8376
  let firmware = frame[2];
7901
8377
  if(firmware > 13){ // firmware 14 and above
7902
8378
  let frame_data = {};
8379
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8380
+ if(!auto_check_interval){
8381
+ frame_data.auto_check_interval = 'Disabled';
8382
+ }else{
8383
+ frame_data.auto_check_interval = auto_check_interval + " sec";
8384
+ }
7903
8385
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7904
8386
  switch(frame[16]){
7905
8387
  case 0:
7906
- frame_data.fsr = "+-0.256 V";
8388
+ frame_data.fsr = "+-6.114 V";
7907
8389
  break;
7908
8390
  case 1:
7909
- frame_data.fsr = "+-0.512 V";
8391
+ frame_data.fsr = "+-4.096 V";
7910
8392
  break;
7911
8393
  case 2:
7912
- frame_data.fsr = "+-1.024 V";
8394
+ frame_data.fsr = "+-2.048 V";
7913
8395
  break;
7914
8396
  case 3:
7915
- frame_data.fsr = "+-2.048 V";
8397
+ frame_data.fsr = "+-1.024 V";
7916
8398
  break;
7917
8399
  case 4:
7918
- frame_data.fsr = "+-4.096 V";
8400
+ frame_data.fsr = "+-0.512 V";
7919
8401
  break;
7920
8402
  case 5:
7921
- frame_data.fsr = "+-6.144 V";
8403
+ frame_data.fsr = "+-0.256 V";
7922
8404
  break;
7923
8405
  }
7924
8406
  return {
@@ -7926,12 +8408,15 @@ function sensor_types(parent){
7926
8408
  'fsr': frame_data.fsr,
7927
8409
  'boot_time': frame[17] + " sec",
7928
8410
  '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),
8411
+ 'auto_check_interval': frame_data.auto_check_interval,
8412
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7931
8413
  '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),
8414
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8415
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8416
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8417
+ 'hardware_id': frame.slice(37, 40),
8418
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8419
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7935
8420
  'machine_values': {
7936
8421
  'firmware': frame[2],
7937
8422
  'fsr': frame[16],
@@ -7940,9 +8425,12 @@ function sensor_types(parent){
7940
8425
  'auto_check_interval': frame.slice(20, 22),
7941
8426
  'auto_check_percentage': frame.slice(22, 24),
7942
8427
  '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)
8428
+ 'calibration_one': frame.slice(25, 29),
8429
+ 'calibration_two':frame.slice(29, 33),
8430
+ 'calibration_three':frame.slice(33, 37),
8431
+ 'hardware_id': frame.slice(37, 40),
8432
+ 'report_rate': frame.slice(40, 44),
8433
+ 'tx_life_counter': frame.slice(44, 48)
7946
8434
  }
7947
8435
  }
7948
8436
  }
@@ -7964,25 +8452,31 @@ function sensor_types(parent){
7964
8452
  let firmware = frame[2];
7965
8453
  if(firmware > 13){ // firmware 14 and above
7966
8454
  let frame_data = {};
8455
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8456
+ if(!auto_check_interval){
8457
+ frame_data.auto_check_interval = 'Disabled';
8458
+ }else{
8459
+ frame_data.auto_check_interval = auto_check_interval + " sec";
8460
+ }
7967
8461
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
7968
8462
  switch(frame[16]){
7969
8463
  case 0:
7970
- frame_data.fsr = "+-0.256 V";
8464
+ frame_data.fsr = "+-6.114 V";
7971
8465
  break;
7972
8466
  case 1:
7973
- frame_data.fsr = "+-0.512 V";
8467
+ frame_data.fsr = "+-4.096 V";
7974
8468
  break;
7975
8469
  case 2:
7976
- frame_data.fsr = "+-1.024 V";
8470
+ frame_data.fsr = "+-2.048 V";
7977
8471
  break;
7978
8472
  case 3:
7979
- frame_data.fsr = "+-2.048 V";
8473
+ frame_data.fsr = "+-1.024 V";
7980
8474
  break;
7981
8475
  case 4:
7982
- frame_data.fsr = "+-4.096 V";
8476
+ frame_data.fsr = "+-0.512 V";
7983
8477
  break;
7984
8478
  case 5:
7985
- frame_data.fsr = "+-6.144 V";
8479
+ frame_data.fsr = "+-0.256 V";
7986
8480
  break;
7987
8481
  }
7988
8482
  return {
@@ -7990,12 +8484,15 @@ function sensor_types(parent){
7990
8484
  'fsr': frame_data.fsr,
7991
8485
  'boot_time': frame[17] + " sec",
7992
8486
  '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),
8487
+ 'auto_check_interval': frame_data.auto_check_interval,
8488
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
7995
8489
  '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),
8490
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8491
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8492
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8493
+ 'hardware_id': frame.slice(37, 40),
8494
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8495
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7999
8496
  'machine_values': {
8000
8497
  'firmware': frame[2],
8001
8498
  'fsr': frame[16],
@@ -8004,9 +8501,12 @@ function sensor_types(parent){
8004
8501
  'auto_check_interval': frame.slice(20, 22),
8005
8502
  'auto_check_percentage': frame.slice(22, 24),
8006
8503
  '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)
8504
+ 'calibration_one': frame.slice(25, 29),
8505
+ 'calibration_two':frame.slice(29, 33),
8506
+ 'calibration_three':frame.slice(33, 37),
8507
+ 'hardware_id': frame.slice(37, 40),
8508
+ 'report_rate': frame.slice(40, 44),
8509
+ 'tx_life_counter': frame.slice(44, 48)
8010
8510
  }
8011
8511
  }
8012
8512
  }
@@ -8038,25 +8538,31 @@ function sensor_types(parent){
8038
8538
  let firmware = frame[2];
8039
8539
  if(firmware > 13){ // firmware 14 and above
8040
8540
  let frame_data = {};
8541
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8542
+ if(!auto_check_interval){
8543
+ frame_data.auto_check_interval = 'Disabled';
8544
+ }else{
8545
+ frame_data.auto_check_interval = auto_check_interval + " sec";
8546
+ }
8041
8547
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
8042
8548
  switch(frame[16]){
8043
8549
  case 0:
8044
- frame_data.fsr = "+-0.256 V";
8550
+ frame_data.fsr = "+-6.114 V";
8045
8551
  break;
8046
8552
  case 1:
8047
- frame_data.fsr = "+-0.512 V";
8553
+ frame_data.fsr = "+-4.096 V";
8048
8554
  break;
8049
8555
  case 2:
8050
- frame_data.fsr = "+-1.024 V";
8556
+ frame_data.fsr = "+-2.048 V";
8051
8557
  break;
8052
8558
  case 3:
8053
- frame_data.fsr = "+-2.048 V";
8559
+ frame_data.fsr = "+-1.024 V";
8054
8560
  break;
8055
8561
  case 4:
8056
- frame_data.fsr = "+-4.096 V";
8562
+ frame_data.fsr = "+-0.512 V";
8057
8563
  break;
8058
8564
  case 5:
8059
- frame_data.fsr = "+-6.144 V";
8565
+ frame_data.fsr = "+-0.256 V";
8060
8566
  break;
8061
8567
  }
8062
8568
  return {
@@ -8064,12 +8570,15 @@ function sensor_types(parent){
8064
8570
  'fsr': frame_data.fsr,
8065
8571
  'boot_time': frame[17] + " sec",
8066
8572
  '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),
8573
+ 'auto_check_interval': frame_data.auto_check_interval,
8574
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8069
8575
  '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),
8576
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8577
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8578
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8579
+ 'hardware_id': frame.slice(37, 40),
8580
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8581
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8073
8582
  'machine_values': {
8074
8583
  'firmware': frame[2],
8075
8584
  'fsr': frame[16],
@@ -8078,9 +8587,12 @@ function sensor_types(parent){
8078
8587
  'auto_check_interval': frame.slice(20, 22),
8079
8588
  'auto_check_percentage': frame.slice(22, 24),
8080
8589
  '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)
8590
+ 'calibration_one': frame.slice(25, 29),
8591
+ 'calibration_two':frame.slice(29, 33),
8592
+ 'calibration_three':frame.slice(33, 37),
8593
+ 'hardware_id': frame.slice(37, 40),
8594
+ 'report_rate': frame.slice(40, 44),
8595
+ 'tx_life_counter': frame.slice(44, 48)
8084
8596
  }
8085
8597
  }
8086
8598
  }
@@ -8137,26 +8649,158 @@ function sensor_types(parent){
8137
8649
  };
8138
8650
  }else{
8139
8651
  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){
8652
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8653
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8654
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
8655
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
8656
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
8657
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
8658
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
8659
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
8660
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
8661
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
8662
+ input_di: d[40] & 1 ? 1 : 0,
8663
+ input_ct: d[40] & 2 ? 1 : 0,
8664
+ input_opto: d[40] & 4 ? 1 : 0,
8665
+ input_acc: d[40] & 8 ? 1 : 0,
8666
+ input_mag: d[40] & 16 ? 1 : 0
8667
+ };
8668
+ }
8669
+ },
8670
+ 'parse_fly': (frame) => {
8671
+ if(frame[2] > 9){ // firmware 10 and above
8672
+ let reset_mode = "Disabled";
8673
+ switch(frame[38]){
8674
+ case 0:
8675
+ reset_mode = "Disabled";
8676
+ break;
8677
+ case 1:
8678
+ reset_mode = "Shift Ends";
8679
+ break;
8680
+ case 2:
8681
+ reset_mode = "Timeout";
8682
+ break;
8683
+ }
8684
+ let acc_odr = "10Hz";
8685
+ switch(frame[40]){
8686
+ case 0:
8687
+ acc_odr = "10Hz";
8688
+ break;
8689
+ case 1:
8690
+ acc_odr = "20Hz";
8691
+ break;
8692
+ case 2:
8693
+ acc_odr = "50Hz";
8694
+ break;
8695
+ case 3:
8696
+ acc_odr = "100Hz";
8697
+ break;
8698
+ case 4:
8699
+ acc_odr = "200Hz";
8700
+ break;
8701
+ case 5:
8702
+ acc_odr = "400Hz";
8703
+ break;
8704
+ }
8705
+ let rtc_sampling_interval = "5 seconds";
8706
+ switch(frame[39]){
8707
+ case 0:
8708
+ rtc_sampling_interval = "1 minute";
8709
+ break;
8710
+ case 1:
8711
+ rtc_sampling_interval = "5 minutes";
8712
+ break;
8713
+ case 2:
8714
+ rtc_sampling_interval = "15 minutes";
8715
+ break;
8716
+ case 3:
8717
+ rtc_sampling_interval = "30 minutes";
8718
+ break;
8719
+ case 4:
8720
+ rtc_sampling_interval = "1 hour";
8721
+ break;
8722
+ case 5:
8723
+ rtc_sampling_interval = "2 hours";
8724
+ break;
8725
+ case 6:
8726
+ rtc_sampling_interval = "3 hours";
8727
+ break;
8728
+ case 7:
8729
+ rtc_sampling_interval = "6 hours";
8730
+ break;
8731
+ case 8:
8732
+ rtc_sampling_interval = "12 hours";
8733
+ break;
8734
+ case 9:
8735
+ rtc_sampling_interval = "5 seconds";
8736
+ break;
8737
+ case 10:
8738
+ rtc_sampling_interval = "10 seconds";
8739
+ break;
8740
+ case 11:
8741
+ rtc_sampling_interval = "15 seconds";
8742
+ break;
8743
+ case 12:
8744
+ rtc_sampling_interval = "30 seconds";
8745
+ break;
8746
+ }
8747
+ return {
8748
+ 'firmware': frame[2],
8749
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
8750
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
8751
+ 'accelero_state': frame[19]? "Enabled": "Disabled",
8752
+ 'input_1_active_edge': frame[20]? "Rising": "Falling",
8753
+ 'input_2_active_edge': frame[21]? "Rising": "Falling",
8754
+ 'input_3_active_edge': frame[22]? "Rising": "Falling",
8755
+ 'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
8756
+ 'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
8757
+ 'Shift_end_1': [
8758
+ String(frame[28]).padStart(2, '0'),
8759
+ String(frame[29]).padStart(2, '0')
8760
+ ].join(':'),
8761
+ 'Shift_end_2': [
8762
+ String(frame[30]).padStart(2, '0'),
8763
+ String(frame[31]).padStart(2, '0')
8764
+ ].join(':'),
8765
+ 'Shift_end_3': [
8766
+ String(frame[32]).padStart(2, '0'),
8767
+ String(frame[33]).padStart(2, '0')
8768
+ ].join(':'),
8769
+ 'Shift_end_4': [
8770
+ String(frame[34]).padStart(2, '0'),
8771
+ String(frame[35]).padStart(2, '0')
8772
+ ].join(':'),
8773
+ 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
8774
+ 'counter_reset_mode': reset_mode,
8775
+ 'sampling_interval': rtc_sampling_interval,
8776
+ 'acc_odr': acc_odr,
8777
+ 'hardware_id': frame.slice(41, 44),
8778
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
8779
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
8780
+ 'machine_values': {
8781
+ 'firmware': frame[2],
8782
+ 'accelerometer_threshold': frame[16],
8783
+ 'debouncing_timeout': frame.slice(17, 19),
8784
+ 'accelero_state': frame[19],
8785
+ 'input_1_active_edge': frame[20],
8786
+ 'input_2_active_edge': frame[21],
8787
+ 'input_3_active_edge': frame[22],
8788
+ 'counter_threshold': frame.slice(23, 27),
8789
+ 'trasnmit_on_change_status': frame[27],
8790
+ 'Shift_end_1': frame.slice(28, 30),
8791
+ 'Shift_end_2': frame.slice(30, 32),
8792
+ 'Shift_end_3': frame.slice(32, 34),
8793
+ 'Shift_end_4': frame.slice(34, 36),
8794
+ 'reset_timeout': frame.slice(36, 38),
8795
+ 'counter_reset_mode': frame[38],
8796
+ 'sampling_interval': frame[39],
8797
+ 'acc_odr': frame[40],
8798
+ 'hardware_id': frame.slice(41, 44),
8799
+ 'report_rate': frame.slice(44, 48),
8800
+ 'tx_life_counter': frame.slice(48, 52)
8801
+ }
8802
+ }
8803
+ } else if(frame[2] > 8){
8160
8804
  let reset_mode = "Disabled";
8161
8805
  switch(frame[37]){
8162
8806
  case 0:
@@ -8235,12 +8879,12 @@ function sensor_types(parent){
8235
8879
  return {
8236
8880
  'firmware': frame[2],
8237
8881
  'accelerometer_threshold': (frame[16]* 32) + "mg",
8238
- 'debouncing_timeout': frame[17] + "sec",
8882
+ 'debouncing_timeout': frame[17] + "msec",
8239
8883
  'accelero_state': frame[18]? "Enabled": "Disabled",
8240
8884
  'input_1_active_edge': frame[19]? "Rising": "Falling",
8241
8885
  'input_2_active_edge': frame[20]? "Rising": "Falling",
8242
8886
  'input_3_active_edge': frame[21]? "Rising": "Falling",
8243
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb) + "sec",
8887
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
8244
8888
  'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
8245
8889
  'Shift_end_1': [
8246
8890
  String(frame[27]).padStart(2, '0'),
@@ -8292,11 +8936,11 @@ function sensor_types(parent){
8292
8936
  return {
8293
8937
  'firmware': frame[2],
8294
8938
  '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.",
8939
+ 'accelerometer_threshold': (frame[16]* 32) + "mg.",
8940
+ 'debouncing_timeout': frame[17].toString() + "msec.",
8297
8941
  'accelero_state': frame[18],
8298
8942
  'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
8299
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
8943
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
8300
8944
  'trasnmit_on_change_status': frame[26],
8301
8945
  'machine_values': {
8302
8946
  'firmware': frame[2],
@@ -8478,30 +9122,6 @@ function sensor_types(parent){
8478
9122
  }
8479
9123
  }
8480
9124
  },
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
9125
  '109': {
8506
9126
  name: 'Wireless Custom Solar Sensor',
8507
9127
  parse: (d) => {
@@ -8574,7 +9194,7 @@ function sensor_types(parent){
8574
9194
  var mode = payload[8];
8575
9195
  var odr = msbLsb(payload[9], payload[10]);
8576
9196
  var fsr = payload[11] >> 5;
8577
- var device_temp = msbLsb(payload[14], payload[15])/100;
9197
+ var temperature = msbLsb(payload[14], payload[15])/100;
8578
9198
 
8579
9199
  globalDevices[deviceAddr] = {
8580
9200
  // stream_size: expected_packets,
@@ -8584,7 +9204,7 @@ function sensor_types(parent){
8584
9204
  fsr: fsr,
8585
9205
  hour: hour,
8586
9206
  minute: minute,
8587
- device_temp: device_temp,
9207
+ temperature: temperature,
8588
9208
  }
8589
9209
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8590
9210
  return;
@@ -8598,7 +9218,7 @@ function sensor_types(parent){
8598
9218
  var mode = payload[8];
8599
9219
  var odr = msbLsb(payload[9], payload[10]);
8600
9220
  var fsr = payload[11] >> 5;
8601
- var device_temp = msbLsb(payload[14], payload[15])/100;
9221
+ var temperature = msbLsb(payload[14], payload[15])/100;
8602
9222
 
8603
9223
  globalDevices[deviceAddr] = {
8604
9224
  // stream_size: expected_packets,
@@ -8608,7 +9228,7 @@ function sensor_types(parent){
8608
9228
  fsr: fsr,
8609
9229
  hour: hour,
8610
9230
  minute: minute,
8611
- device_temp: device_temp,
9231
+ temperature: temperature,
8612
9232
  }
8613
9233
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8614
9234
  }
@@ -8678,11 +9298,14 @@ function sensor_types(parent){
8678
9298
  var fft_concat_obj = {
8679
9299
  mode: payload[8],
8680
9300
  msg_type: msg_type,
8681
- time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
9301
+ time_id: [
9302
+ String(globalDevices[deviceAddr].hour).padStart(2, '0'),
9303
+ String(globalDevices[deviceAddr].minute).padStart(2, '0'),
9304
+ ].join(':'),
8682
9305
  mac_address: deviceAddr,
8683
9306
  fsr: fsr_text,
8684
9307
  odr: globalDevices[deviceAddr].odr,
8685
- device_temp: globalDevices[deviceAddr].device_temp,
9308
+ temperature: globalDevices[deviceAddr].temperature,
8686
9309
  total_samples: label,
8687
9310
  data: fft_concat
8688
9311
  };
@@ -8703,7 +9326,7 @@ function sensor_types(parent){
8703
9326
  var mode = payload[8];
8704
9327
  var odr = msbLsb(payload[9], payload[10]);
8705
9328
  var fsr = payload[11] >> 5;
8706
- var device_temp = msbLsb(payload[14], payload[15])/100;
9329
+ var temperature = msbLsb(payload[14], payload[15])/100;
8707
9330
 
8708
9331
  globalDevices[deviceAddr] = {
8709
9332
  // stream_size: expected_packets,
@@ -8713,7 +9336,7 @@ function sensor_types(parent){
8713
9336
  fsr: fsr,
8714
9337
  hour: hour,
8715
9338
  minute: minute,
8716
- device_temp: device_temp,
9339
+ temperature: temperature,
8717
9340
  }
8718
9341
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8719
9342
  return;
@@ -8989,7 +9612,65 @@ function sensor_types(parent){
8989
9612
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
8990
9613
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
8991
9614
  frame_data.smart_mode_threshold = frame[34] * 50;
8992
- if(frame[2] > 4){ // for Firmware v5 and above
9615
+ if(frame[2] > 5){ // for Firmware v6 and above
9616
+ frame_data.motion_to_delay = frame[41] * 50;
9617
+ return {
9618
+ 'firmware': frame[2],
9619
+ 'destination_address': toMac(frame.slice(12, 16)),
9620
+ 'mode': frame_data.mode,
9621
+ 'odr': frame_data.odr_1+'Hz',
9622
+ 'sampling_duration': frame_data.sampling_duration_1,
9623
+ 'filter_status': frame_data.filter_status,
9624
+ 'lpf_coeff': frame_data.lpf_coeff_1,
9625
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
9626
+ 'hpf_coeff': frame_data.hpf_coeff_1,
9627
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
9628
+ 'sampling_interval': frame_data.sampling_interval,
9629
+ 'on_request_timeout': frame_data.on_request_timeout,
9630
+ 'deadband': frame_data.deadband,
9631
+ 'payload_length': frame_data.payload_length,
9632
+ 'fsr': frame_data.fsr_text,
9633
+ 'rpm_compute_status': frame_data.rpm_status,
9634
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
9635
+ 'auto_raw_interval': frame_data.auto_raw_interval,
9636
+ 'smart_mode_skip_count': frame[33],
9637
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
9638
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
9639
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
9640
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
9641
+ 'max_num_of_motion_tx_per_interval': frame[42],
9642
+ 'hardware_id': frame.slice(43, 46),
9643
+ 'reserved': frame.slice(46, 50),
9644
+ 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
9645
+ 'machine_values': {
9646
+ 'firmware': frame[2],
9647
+ 'destination_address': toMac(frame.slice(12, 16), false),
9648
+ 'mode': frame[16],
9649
+ 'odr': frame[17],
9650
+ 'sampling_duration': frame[18],
9651
+ 'filter_status': frame[19],
9652
+ 'lpf_coeff': frame[20],
9653
+ 'hpf_coeff': frame[21],
9654
+ 'sampling_interval': frame[22],
9655
+ 'on_request_timeout': frame[23],
9656
+ 'deadband': frame[24],
9657
+ 'payload_length': frame[25],
9658
+ 'fsr': frame[26],
9659
+ 'rpm_compute_status': frame[27],
9660
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
9661
+ 'auto_raw_interval': frame[32],
9662
+ 'smart_mode_skip_count': frame[33],
9663
+ 'smart_mode_acc_threshold':frame[34],
9664
+ 'uptime_counter': frame.slice(35, 39),
9665
+ 'max_tx_raw_samples': frame.slice(39, 41),
9666
+ 'motion_to_sampling_delay': frame[41],
9667
+ 'max_num_of_motion_tx_per_interval': frame[42],
9668
+ 'hardware_id': frame.slice(43, 46),
9669
+ 'reserved': frame.slice(46, 50),
9670
+ 'tx_lifetime_counter': frame.slice(50, 54)
9671
+ }
9672
+ }
9673
+ } else if(frame[2] > 4){ // for Firmware v5 and above
8993
9674
  return {
8994
9675
  'firmware': frame[2],
8995
9676
  'destination_address': toMac(frame.slice(12, 16)),
@@ -9148,7 +9829,7 @@ function sensor_types(parent){
9148
9829
  var mode = payload[8];
9149
9830
  var odr = msbLsb(payload[9], payload[10]);
9150
9831
  var fsr = payload[11] >> 5;
9151
- var device_temp = msbLsb(payload[14], payload[15])/100;
9832
+ var temperature = msbLsb(payload[14], payload[15])/100;
9152
9833
 
9153
9834
  globalDevices[deviceAddr] = {
9154
9835
  // stream_size: expected_packets,
@@ -9158,7 +9839,7 @@ function sensor_types(parent){
9158
9839
  fsr: fsr,
9159
9840
  hour: hour,
9160
9841
  minute: minute,
9161
- device_temp: device_temp,
9842
+ temperature: temperature,
9162
9843
  }
9163
9844
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9164
9845
  return;
@@ -9172,7 +9853,7 @@ function sensor_types(parent){
9172
9853
  var mode = payload[8];
9173
9854
  var odr = msbLsb(payload[9], payload[10]);
9174
9855
  var fsr = payload[11] >> 5;
9175
- var device_temp = msbLsb(payload[14], payload[15])/100;
9856
+ var temperature = msbLsb(payload[14], payload[15])/100;
9176
9857
 
9177
9858
  globalDevices[deviceAddr] = {
9178
9859
  // stream_size: expected_packets,
@@ -9182,7 +9863,7 @@ function sensor_types(parent){
9182
9863
  fsr: fsr,
9183
9864
  hour: hour,
9184
9865
  minute: minute,
9185
- device_temp: device_temp,
9866
+ temperature: temperature,
9186
9867
  }
9187
9868
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9188
9869
  }
@@ -9262,12 +9943,15 @@ function sensor_types(parent){
9262
9943
  mode: payload[8],
9263
9944
  msg_type: msg_type,
9264
9945
  probe: probe,
9265
- time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
9946
+ time_id: [
9947
+ String(globalDevices[deviceAddr].hour).padStart(2, '0'),
9948
+ String(globalDevices[deviceAddr].minute).padStart(2, '0'),
9949
+ ].join(':'),
9266
9950
  probe: probe,
9267
9951
  mac_address: deviceAddr,
9268
9952
  fsr: fsr_text,
9269
9953
  odr: globalDevices[deviceAddr].odr,
9270
- device_temp: globalDevices[deviceAddr].device_temp,
9954
+ temperature: globalDevices[deviceAddr].temperature,
9271
9955
  total_samples: label,
9272
9956
  data: fft_concat
9273
9957
  };
@@ -9287,7 +9971,7 @@ function sensor_types(parent){
9287
9971
  var mode = payload[8];
9288
9972
  var odr = msbLsb(payload[9], payload[10]);
9289
9973
  var fsr = payload[11] >> 5;
9290
- var device_temp = msbLsb(payload[14], payload[15])/100;
9974
+ var temperature = msbLsb(payload[14], payload[15])/100;
9291
9975
 
9292
9976
  globalDevices[deviceAddr] = {
9293
9977
  // stream_size: expected_packets,
@@ -9297,7 +9981,7 @@ function sensor_types(parent){
9297
9981
  fsr: fsr,
9298
9982
  hour: hour,
9299
9983
  minute: minute,
9300
- device_temp: device_temp,
9984
+ temperature: temperature,
9301
9985
  }
9302
9986
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9303
9987
  return;
@@ -9743,7 +10427,79 @@ function sensor_types(parent){
9743
10427
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
9744
10428
  frame_data.p1_smart_mode_threshold = frame[38] * 50;
9745
10429
  frame_data.p2_smart_mode_threshold = frame[39] * 50;
9746
- if(frame[2] > 4){ // for Firmware v5 and above
10430
+ if(frame[2] > 5){ // for Firmware v6 and above
10431
+ frame_data.motion_to_delay = frame[50] * 50;
10432
+ return {
10433
+ 'firmware': frame[2],
10434
+ 'destination_address': toMac(frame.slice(12, 16)),
10435
+ 'mode': frame_data.mode,
10436
+ 'odr_1': frame_data.odr_1+'Hz',
10437
+ 'odr_2': frame_data.odr_2+'Hz',
10438
+ 'sampling_duration_1': frame_data.sampling_duration_1,
10439
+ 'sampling_duration_2': frame_data.sampling_duration_2,
10440
+ 'filter_status': frame_data.filter_status,
10441
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
10442
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
10443
+ 'lpf_coeff_2': frame_data.lpf_coeff_2,
10444
+ 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
10445
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
10446
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
10447
+ 'hpf_coeff_2': frame_data.hpf_coeff_2,
10448
+ 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
10449
+ 'sampling_interval': frame_data.sampling_interval,
10450
+ 'on_request_timeout': frame_data.on_request_timeout,
10451
+ 'deadband': frame_data.deadband,
10452
+ 'payload_length': frame_data.payload_length,
10453
+ 'fsr': frame_data.fsr_text,
10454
+ 'rpm_compute_status': frame_data.rpm_status,
10455
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
10456
+ 'auto_raw_interval': frame_data.auto_raw_interval,
10457
+ 'smart_mode_skip_count': frame[37],
10458
+ 'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
10459
+ 'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
10460
+ 'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb)+'sec',
10461
+ 'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb)+'sec',
10462
+ 'max_tx_raw_samples': frame.slice(48, 50).reduce(msbLsb),
10463
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
10464
+ 'max_num_of_motion_tx_per_interval': frame[51],
10465
+ 'hardware_id': frame.slice(52, 55),
10466
+ 'reserved': frame.slice(55, 59),
10467
+ 'tx_lifetime_counter': frame.slice(59, 63).reduce(msbLsb),
10468
+ 'machine_values': {
10469
+ 'firmware': frame[2],
10470
+ 'destination_address': toMac(frame.slice(12, 16), false),
10471
+ 'mode': frame[16],
10472
+ 'odr_1': frame[17],
10473
+ 'odr_2': frame[18],
10474
+ 'sampling_duration_1': frame[19],
10475
+ 'sampling_duration_2': frame[20],
10476
+ 'filter_status': frame[21],
10477
+ 'lpf_coeff_1': frame[22],
10478
+ 'lpf_coeff_2': frame[23],
10479
+ 'hpf_coeff_1': frame[24],
10480
+ 'hpf_coeff_2': frame[25],
10481
+ 'sampling_interval': frame[26],
10482
+ 'on_request_timeout': frame[27],
10483
+ 'deadband': frame[28],
10484
+ 'payload_length': frame[29],
10485
+ 'fsm': frame[30],
10486
+ 'rpm_compute_status': frame[31],
10487
+ 'auto_raw_destination_address': toMac(frame.slice(32 , 36), false),
10488
+ 'auto_raw_interval': frame[36],
10489
+ 'smart_mode_skip_count': frame[37],
10490
+ 'smart_mode_acc_threshold_probe_1':frame[38],
10491
+ 'smart_mode_acc_threshold_probe_2':frame[39],
10492
+ 'uptime_counter_probe_1': frame.slice(40, 44),
10493
+ 'uptime_counter_probe_2': frame.slice(44, 48),
10494
+ 'max_tx_raw_samples': frame.slice(48, 50),
10495
+ 'motion_to_sampling_delay': frame[50],
10496
+ 'max_num_of_motion_tx_per_interval': frame[51],
10497
+ 'hardware_id': frame.slice(52, 55),
10498
+ 'reserved': frame.slice(55, 59),
10499
+ 'tx_lifetime_counter': frame.slice(59, 63)
10500
+ }
10501
+ }
10502
+ } else if (frame[2] > 4){ // for Firmware v5 and above
9747
10503
  return {
9748
10504
  'firmware': frame[2],
9749
10505
  'destination_address': toMac(frame.slice(12, 16)),
@@ -9927,7 +10683,7 @@ function sensor_types(parent){
9927
10683
  var mode = payload[8];
9928
10684
  var odr = msbLsb(payload[9], payload[10]);
9929
10685
  var fsr = payload[11] >> 5;
9930
- var device_temp = msbLsb(payload[14], payload[15])/100;
10686
+ var temperature = msbLsb(payload[14], payload[15])/100;
9931
10687
 
9932
10688
  globalDevices[deviceAddr] = {
9933
10689
  // stream_size: expected_packets,
@@ -9937,7 +10693,7 @@ function sensor_types(parent){
9937
10693
  fsr: fsr,
9938
10694
  hour: hour,
9939
10695
  minute: minute,
9940
- device_temp: device_temp,
10696
+ temperature: temperature,
9941
10697
  }
9942
10698
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9943
10699
  return;
@@ -9951,7 +10707,7 @@ function sensor_types(parent){
9951
10707
  var mode = payload[8];
9952
10708
  var odr = msbLsb(payload[9], payload[10]);
9953
10709
  var fsr = payload[11] >> 5;
9954
- var device_temp = msbLsb(payload[14], payload[15])/100;
10710
+ var temperature = msbLsb(payload[14], payload[15])/100;
9955
10711
 
9956
10712
  globalDevices[deviceAddr] = {
9957
10713
  // stream_size: expected_packets,
@@ -9961,7 +10717,7 @@ function sensor_types(parent){
9961
10717
  fsr: fsr,
9962
10718
  hour: hour,
9963
10719
  minute: minute,
9964
- device_temp: device_temp,
10720
+ temperature: temperature,
9965
10721
  }
9966
10722
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
9967
10723
  }
@@ -10029,11 +10785,14 @@ function sensor_types(parent){
10029
10785
  var fft_concat_obj = {
10030
10786
  mode: payload[8],
10031
10787
  msg_type: msg_type,
10032
- time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
10788
+ time_id: [
10789
+ String(globalDevices[deviceAddr].hour).padStart(2, '0'),
10790
+ String(globalDevices[deviceAddr].minute).padStart(2, '0'),
10791
+ ].join(':'),
10033
10792
  mac_address: deviceAddr,
10034
10793
  fsr: fsr_text,
10035
10794
  odr: globalDevices[deviceAddr].odr,
10036
- device_temp: globalDevices[deviceAddr].device_temp,
10795
+ temperature: globalDevices[deviceAddr].temperature,
10037
10796
  total_samples: label,
10038
10797
  data: fft_concat
10039
10798
  };
@@ -10058,7 +10817,7 @@ function sensor_types(parent){
10058
10817
  var mode = payload[8];
10059
10818
  var odr = msbLsb(payload[9], payload[10]);
10060
10819
  var fsr = payload[11] >> 5;
10061
- var device_temp = msbLsb(payload[14], payload[15])/100;
10820
+ var temperature = msbLsb(payload[14], payload[15])/100;
10062
10821
 
10063
10822
  globalDevices[deviceAddr] = {
10064
10823
  // stream_size: expected_packets,
@@ -10068,7 +10827,7 @@ function sensor_types(parent){
10068
10827
  fsr: fsr,
10069
10828
  hour: hour,
10070
10829
  minute: minute,
10071
- device_temp: device_temp,
10830
+ temperature: temperature,
10072
10831
  }
10073
10832
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10074
10833
  return;
@@ -10345,7 +11104,65 @@ function sensor_types(parent){
10345
11104
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
10346
11105
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
10347
11106
  frame_data.smart_mode_threshold = frame[34] * 50;
10348
- if(frame[2] > 4){ // for Firmware v5 and above
11107
+ if(frame[2] > 5){ // for Firmware v6 and above
11108
+ frame_data.motion_to_delay = frame[41] * 50;
11109
+ return {
11110
+ 'firmware': frame[2],
11111
+ 'destination_address': toMac(frame.slice(12, 16)),
11112
+ 'mode': frame_data.mode,
11113
+ 'odr': frame_data.odr_1+'Hz',
11114
+ 'sampling_duration': frame_data.sampling_duration_1,
11115
+ 'filter_status': frame_data.filter_status,
11116
+ 'lpf_coeff': frame_data.lpf_coeff_1,
11117
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
11118
+ 'hpf_coeff': frame_data.hpf_coeff_1,
11119
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
11120
+ 'sampling_interval': frame_data.sampling_interval,
11121
+ 'on_request_timeout': frame_data.on_request_timeout,
11122
+ 'deadband': frame_data.deadband,
11123
+ 'payload_length': frame_data.payload_length,
11124
+ 'fsr': frame_data.fsr_text,
11125
+ 'rpm_compute_status': frame_data.rpm_status,
11126
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
11127
+ 'auto_raw_interval': frame_data.auto_raw_interval,
11128
+ 'smart_mode_skip_count': frame[33],
11129
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
11130
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
11131
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
11132
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
11133
+ 'max_num_of_motion_tx_per_interval': frame[42],
11134
+ 'hardware_id': frame.slice(43, 46),
11135
+ 'reserved': frame.slice(46, 50),
11136
+ 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
11137
+ 'machine_values': {
11138
+ 'firmware': frame[2],
11139
+ 'destination_address': toMac(frame.slice(12, 16), false),
11140
+ 'mode': frame[16],
11141
+ 'odr': frame[17],
11142
+ 'sampling_duration': frame[18],
11143
+ 'filter_status': frame[19],
11144
+ 'lpf_coeff': frame[20],
11145
+ 'hpf_coeff': frame[21],
11146
+ 'sampling_interval': frame[22],
11147
+ 'on_request_timeout': frame[23],
11148
+ 'deadband': frame[24],
11149
+ 'payload_length': frame[25],
11150
+ 'fsr': frame[26],
11151
+ 'rpm_compute_status': frame[27],
11152
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
11153
+ 'auto_raw_interval': frame[32],
11154
+ 'smart_mode_skip_count': frame[33],
11155
+ 'smart_mode_acc_threshold':frame[34],
11156
+ 'uptime_counter': frame.slice(35, 39),
11157
+ 'max_tx_raw_samples': frame.slice(39, 41),
11158
+ 'motion_to_sampling_delay': frame[41],
11159
+ 'max_num_of_motion_tx_per_interval': frame[42],
11160
+ 'hardware_id': frame.slice(43, 46),
11161
+ 'reserved': frame.slice(46, 50),
11162
+ 'tx_lifetime_counter': frame.slice(50, 54)
11163
+ }
11164
+ }
11165
+ } else if(frame[2] > 4){ // for Firmware v5 and above
10349
11166
  return {
10350
11167
  'firmware': frame[2],
10351
11168
  'destination_address': toMac(frame.slice(12, 16)),
@@ -10485,7 +11302,7 @@ function sensor_types(parent){
10485
11302
  var mode = payload[8];
10486
11303
  var odr = msbLsb(payload[9], payload[10]);
10487
11304
  var fsr = payload[11] >> 5;
10488
- var device_temp = msbLsb(payload[14], payload[15])/100;
11305
+ var temperature = msbLsb(payload[14], payload[15])/100;
10489
11306
 
10490
11307
  globalDevices[deviceAddr] = {
10491
11308
  data: {},
@@ -10494,7 +11311,7 @@ function sensor_types(parent){
10494
11311
  fsr: fsr,
10495
11312
  hour: hour,
10496
11313
  minute: minute,
10497
- device_temp: device_temp,
11314
+ temperature: temperature,
10498
11315
  }
10499
11316
  globalDevices[deviceAddr].last_packet_counter = current_packet;
10500
11317
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -10509,7 +11326,7 @@ function sensor_types(parent){
10509
11326
  var mode = payload[8];
10510
11327
  var odr = msbLsb(payload[9], payload[10]);
10511
11328
  var fsr = payload[11] >> 5;
10512
- var device_temp = msbLsb(payload[14], payload[15])/100;
11329
+ var temperature = msbLsb(payload[14], payload[15])/100;
10513
11330
 
10514
11331
  globalDevices[deviceAddr] = {
10515
11332
  data: {},
@@ -10518,7 +11335,7 @@ function sensor_types(parent){
10518
11335
  fsr: fsr,
10519
11336
  hour: hour,
10520
11337
  minute: minute,
10521
- device_temp: device_temp,
11338
+ temperature: temperature,
10522
11339
  }
10523
11340
  globalDevices[deviceAddr].last_packet_counter = current_packet;
10524
11341
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -10528,7 +11345,7 @@ function sensor_types(parent){
10528
11345
  var mode = payload[8];
10529
11346
  var odr = msbLsb(payload[9], payload[10]);
10530
11347
  var fsr = payload[11] >> 5;
10531
- var device_temp = msbLsb(payload[14], payload[15])/100;
11348
+ var temperature = msbLsb(payload[14], payload[15])/100;
10532
11349
 
10533
11350
  globalDevices[deviceAddr] = {
10534
11351
  data: {},
@@ -10537,7 +11354,7 @@ function sensor_types(parent){
10537
11354
  fsr: fsr,
10538
11355
  hour: hour,
10539
11356
  minute: minute,
10540
- device_temp: device_temp,
11357
+ temperature: temperature,
10541
11358
  }
10542
11359
  globalDevices[deviceAddr].last_packet_counter = current_packet;
10543
11360
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -10607,11 +11424,14 @@ function sensor_types(parent){
10607
11424
  var fft_concat_obj = {
10608
11425
  mode: payload[8],
10609
11426
  msg_type: msg_type,
10610
- time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
11427
+ time_id: [
11428
+ String(globalDevices[deviceAddr].hour).padStart(2, '0'),
11429
+ String(globalDevices[deviceAddr].minute).padStart(2, '0'),
11430
+ ].join(':'),
10611
11431
  mac_address: deviceAddr,
10612
11432
  fsr: fsr_text,
10613
11433
  odr: globalDevices[deviceAddr].odr,
10614
- device_temp: globalDevices[deviceAddr].device_temp,
11434
+ temperature: globalDevices[deviceAddr].temperature,
10615
11435
  total_samples: label,
10616
11436
  fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
10617
11437
  data: fft_concat
@@ -10894,7 +11714,65 @@ function sensor_types(parent){
10894
11714
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
10895
11715
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
10896
11716
  frame_data.smart_mode_threshold = frame[34] * 50;
10897
- if(frame[2] > 4){ // for Firmware v5 and above
11717
+ if(frame[2] > 5){ // for Firmware v6 and above
11718
+ frame_data.motion_to_delay = frame[41] * 50;
11719
+ return {
11720
+ 'firmware': frame[2],
11721
+ 'destination_address': toMac(frame.slice(12, 16)),
11722
+ 'mode': frame_data.mode,
11723
+ 'odr': frame_data.odr_1+'Hz',
11724
+ 'sampling_duration': frame_data.sampling_duration_1,
11725
+ 'filter_status': frame_data.filter_status,
11726
+ 'lpf_coeff': frame_data.lpf_coeff_1,
11727
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
11728
+ 'hpf_coeff': frame_data.hpf_coeff_1,
11729
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
11730
+ 'sampling_interval': frame_data.sampling_interval,
11731
+ 'on_request_timeout': frame_data.on_request_timeout,
11732
+ 'deadband': frame_data.deadband,
11733
+ 'payload_length': frame_data.payload_length,
11734
+ 'fsr': frame_data.fsr_text,
11735
+ 'rpm_compute_status': frame_data.rpm_status,
11736
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
11737
+ 'auto_raw_interval': frame_data.auto_raw_interval,
11738
+ 'smart_mode_skip_count': frame[33],
11739
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
11740
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
11741
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
11742
+ 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
11743
+ 'max_num_of_motion_tx_per_interval': frame[42],
11744
+ 'hardware_id': frame.slice(43, 46),
11745
+ 'reserved': frame.slice(46, 50),
11746
+ 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
11747
+ 'machine_values': {
11748
+ 'firmware': frame[2],
11749
+ 'destination_address': toMac(frame.slice(12, 16), false),
11750
+ 'mode': frame[16],
11751
+ 'odr': frame[17],
11752
+ 'sampling_duration': frame[18],
11753
+ 'filter_status': frame[19],
11754
+ 'lpf_coeff': frame[20],
11755
+ 'hpf_coeff': frame[21],
11756
+ 'sampling_interval': frame[22],
11757
+ 'on_request_timeout': frame[23],
11758
+ 'deadband': frame[24],
11759
+ 'payload_length': frame[25],
11760
+ 'fsr': frame[26],
11761
+ 'rpm_compute_status': frame[27],
11762
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
11763
+ 'auto_raw_interval': frame[32],
11764
+ 'smart_mode_skip_count': frame[33],
11765
+ 'smart_mode_acc_threshold':frame[34],
11766
+ 'uptime_counter': frame.slice(35, 39),
11767
+ 'max_tx_raw_samples': frame.slice(39, 41),
11768
+ 'motion_to_sampling_delay': frame[41],
11769
+ 'max_num_of_motion_tx_per_interval': frame[42],
11770
+ 'hardware_id': frame.slice(43, 46),
11771
+ 'reserved': frame.slice(46, 50),
11772
+ 'tx_lifetime_counter': frame.slice(50, 54)
11773
+ }
11774
+ }
11775
+ } else if(frame[2] > 4){ // for Firmware v5 and above
10898
11776
  return {
10899
11777
  'firmware': frame[2],
10900
11778
  'destination_address': toMac(frame.slice(12, 16)),
@@ -11030,7 +11908,7 @@ function sensor_types(parent){
11030
11908
  var firmware = payload[1];
11031
11909
  var odr = msbLsb(payload[10], payload[11]);
11032
11910
  var fsr = payload[12];
11033
- var device_temp = msbLsb(payload[13], payload[14])/100;
11911
+ var temperature = msbLsb(payload[13], payload[14])/100;
11034
11912
  var expected_packets = msbLsb(payload[15], payload[16]);
11035
11913
  var current_packet = msbLsb(payload[17], payload[18]);
11036
11914
  var sdata_start = 19;
@@ -11398,25 +12276,62 @@ function sensor_types(parent){
11398
12276
  let frame_data = {};
11399
12277
  switch(frame[16]){
11400
12278
  case 0:
11401
- frame_data.fsr = "+-0.256 V";
11402
- break;
12279
+ frame_data.fsr = "+-6.114 V";
12280
+ break;
11403
12281
  case 1:
11404
- frame_data.fsr = "+-0.512 V";
11405
- break;
12282
+ frame_data.fsr = "+-4.096 V";
12283
+ break;
11406
12284
  case 2:
11407
- frame_data.fsr = "+-1.024 V";
11408
- break;
11409
- case 3:
11410
12285
  frame_data.fsr = "+-2.048 V";
11411
- break;
12286
+ break;
12287
+ case 3:
12288
+ frame_data.fsr = "+-1.024 V";
12289
+ break;
11412
12290
  case 4:
11413
- frame_data.fsr = "+-4.096 V";
11414
- break;
12291
+ frame_data.fsr = "+-0.512 V";
12292
+ break;
11415
12293
  case 5:
11416
- frame_data.fsr = "+-6.144 V";
11417
- break;
12294
+ frame_data.fsr = "+-0.256 V";
12295
+ break;
11418
12296
  }
11419
- if(frame[2]>12){
12297
+ if(frame[2]>13){ // firmware 14 and above
12298
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
12299
+ if(!auto_check_interval){
12300
+ frame_data.auto_check_interval = 'Disabled';
12301
+ }else{
12302
+ frame_data.auto_check_interval = auto_check_interval + " sec";
12303
+ }
12304
+ return {
12305
+ 'firmware': frame[2],
12306
+ 'fsr': frame_data.fsr,
12307
+ 'boot_time': frame[17] + " sec",
12308
+ 'power_adc': frame.slice(18, 20).reduce(msbLsb),
12309
+ 'auto_check_interval': frame_data.auto_check_interval,
12310
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
12311
+ 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
12312
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
12313
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
12314
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
12315
+ 'hardware_id': frame.slice(37, 40),
12316
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
12317
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
12318
+ 'machine_values': {
12319
+ 'firmware': frame[2],
12320
+ 'fsr': frame[16],
12321
+ 'boot_time': frame[17],
12322
+ 'power_adc': frame.slice(18, 20),
12323
+ 'auto_check_interval': frame.slice(20, 22),
12324
+ 'auto_check_percentage': frame.slice(22, 24),
12325
+ 'always_on': frame[24],
12326
+ 'calibration_one': frame.slice(25, 29),
12327
+ 'calibration_two':frame.slice(29, 33),
12328
+ 'calibration_three':frame.slice(33, 37),
12329
+ 'hardware_id': frame.slice(37, 40),
12330
+ 'report_rate': frame.slice(40, 44),
12331
+ 'tx_life_counter': frame.slice(44, 48)
12332
+ }
12333
+ }
12334
+ }else if(frame[2]>12){
11420
12335
  return {
11421
12336
  'firmware': frame[2],
11422
12337
  'report_rate': frame.slice(12, 16).reduce(msbLsb),
@@ -11449,6 +12364,155 @@ function sensor_types(parent){
11449
12364
  }
11450
12365
  }
11451
12366
  },
12367
+ '123': {
12368
+ name: '3 Channel Production Counter',
12369
+ parse: (d, payload) => {
12370
+ if(payload[7] & 2 != 0){
12371
+ console.log('Error found');
12372
+ // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
12373
+ let error = {error: 'Error found, Acclerometer Probe may be unattached'};
12374
+ return error;
12375
+ }
12376
+ let report_type = "Regular";
12377
+ switch(d[25]){
12378
+ case 0:
12379
+ report_type = "Regular";
12380
+ break;
12381
+ case 1:
12382
+ report_type = "Shift end";
12383
+ break;
12384
+ case 2:
12385
+ report_type = "Interrupt";
12386
+ break;
12387
+ case 3:
12388
+ report_type = "Threshold";
12389
+ break;
12390
+ }
12391
+ return {
12392
+ digital_input_1_counter: d.slice(0, 4).reduce(msbLsb),
12393
+ digital_input_1_uptime: d.slice(4, 8).reduce(msbLsb),
12394
+ digital_input_2_counter: d.slice(8, 12).reduce(msbLsb),
12395
+ digital_input_2_uptime: d.slice(12, 16).reduce(msbLsb),
12396
+ digital_input_3_counter: d.slice(16, 20).reduce(msbLsb),
12397
+ digital_input_3_uptime: d.slice(20, 24).reduce(msbLsb),
12398
+ input_1: d[24] & 1 ? 1 : 0,
12399
+ input_2: d[24] & 2 ? 1 : 0,
12400
+ input_3: d[24] & 4 ? 1 : 0,
12401
+ report_type: report_type,
12402
+ rtc: [
12403
+ String(d[26]).padStart(2, '0'),
12404
+ String(d[27]).padStart(2, '0'),
12405
+ String(d[28]).padStart(2, '0')
12406
+ ].join(':')
12407
+ };
12408
+ },
12409
+ 'parse_fly': (frame) => {
12410
+ let reset_mode = "Disabled";
12411
+ switch(frame[36]){
12412
+ case 0:
12413
+ reset_mode = "Disabled";
12414
+ break;
12415
+ case 1:
12416
+ reset_mode = "Shift Ends";
12417
+ break;
12418
+ case 2:
12419
+ reset_mode = "Timeout";
12420
+ break;
12421
+ }
12422
+ let rtc_sampling_interval = "5sec";
12423
+ switch(frame[37]){
12424
+ case 0:
12425
+ rtc_sampling_interval = "1min";
12426
+ break;
12427
+ case 1:
12428
+ rtc_sampling_interval = "5min";
12429
+ break;
12430
+ case 2:
12431
+ rtc_sampling_interval = "15min";
12432
+ break;
12433
+ case 3:
12434
+ rtc_sampling_interval = "30min";
12435
+ break;
12436
+ case 4:
12437
+ rtc_sampling_interval = "1h";
12438
+ break;
12439
+ case 5:
12440
+ rtc_sampling_interval = "2h";
12441
+ break;
12442
+ case 6:
12443
+ rtc_sampling_interval = "3h";
12444
+ break;
12445
+ case 7:
12446
+ rtc_sampling_interval = "6h";
12447
+ break;
12448
+ case 8:
12449
+ rtc_sampling_interval = "12h";
12450
+ break;
12451
+ case 9:
12452
+ rtc_sampling_interval = "5sec";
12453
+ break;
12454
+ case 10:
12455
+ rtc_sampling_interval = "10sec";
12456
+ break;
12457
+ case 11:
12458
+ rtc_sampling_interval = "15sec";
12459
+ break;
12460
+ case 12:
12461
+ rtc_sampling_interval = "30sec";
12462
+ break;
12463
+ }
12464
+ return {
12465
+ 'firmware': frame[2],
12466
+ 'debouncing_timeout': frame.slice(16, 18).reduce(msbLsb) + "msec",
12467
+ 'input_1_active_edge': frame[18]? "Rising": "Falling",
12468
+ 'input_2_active_edge': frame[19]? "Rising": "Falling",
12469
+ 'input_3_active_edge': frame[20]? "Rising": "Falling",
12470
+ 'counter_threshold': frame.slice(21, 25).reduce(msbLsb),
12471
+ 'trasnmit_on_change_status': frame[25]? "Enabled": "Disabled",
12472
+ 'Shift_end_1': [
12473
+ String(frame[26]).padStart(2, '0'),
12474
+ String(frame[27]).padStart(2, '0')
12475
+ ].join(':'),
12476
+ 'Shift_end_2': [
12477
+ String(frame[28]).padStart(2, '0'),
12478
+ String(frame[29]).padStart(2, '0')
12479
+ ].join(':'),
12480
+ 'Shift_end_3': [
12481
+ String(frame[30]).padStart(2, '0'),
12482
+ String(frame[31]).padStart(2, '0')
12483
+ ].join(':'),
12484
+ 'Shift_end_4': [
12485
+ String(frame[32]).padStart(2, '0'),
12486
+ String(frame[33]).padStart(2, '0')
12487
+ ].join(':'),
12488
+ 'reset_timeout': frame.slice(34, 36).reduce(msbLsb) + "min",
12489
+ 'counter_reset_mode': reset_mode,
12490
+ 'sampling_interval': rtc_sampling_interval,
12491
+ 'hardware_id': frame.slice(38, 41),
12492
+ 'report_rate': frame.slice(41, 45).reduce(msbLsb) + "sec",
12493
+ 'tx_life_counter': frame.slice(45, 49).reduce(msbLsb),
12494
+ 'machine_values': {
12495
+ 'firmware': frame[2],
12496
+ 'debouncing_timeout': frame.slice(16, 18),
12497
+ 'input_1_active_edge': frame[18],
12498
+ 'input_2_active_edge': frame[19],
12499
+ 'input_3_active_edge': frame[20],
12500
+ 'counter_threshold': frame.slice(21, 25),
12501
+ 'trasnmit_on_change_status': frame[25],
12502
+ 'Shift_end_1': frame.slice(26, 28),
12503
+ 'Shift_end_2': frame.slice(28, 30),
12504
+ 'Shift_end_3': frame.slice(30, 32),
12505
+ 'Shift_end_4': frame.slice(32, 34),
12506
+ 'reset_timeout': frame.slice(34, 36),
12507
+ 'counter_reset_mode': frame[36],
12508
+ 'sampling_interval': frame[37],
12509
+ 'hardware_id': frame.slice(38, 41),
12510
+ 'report_rate': frame.slice(41, 45),
12511
+ 'tx_life_counter': frame.slice(45, 49)
12512
+ }
12513
+ }
12514
+ }
12515
+ },
11452
12516
  '180': {
11453
12517
  name: 'C1D2 One Channel Vibration Plus',
11454
12518
  parse: (payload, parsed, mac) => {
@@ -11496,6 +12560,59 @@ function sensor_types(parent){
11496
12560
  };
11497
12561
  }
11498
12562
  },
12563
+ '211': {
12564
+ name: 'D0 and Flow Sensor',
12565
+ parse: (payload, parsed, mac) => {
12566
+ if(payload[0] == 0){ // regular
12567
+ return {
12568
+ msg_type: 'regular',
12569
+ temperature: signInt(payload.slice(1, 3).reduce(msbLsb), 16),
12570
+ oxygen_saturation_percent: payload.slice(3, 7).reduce(msbLsb),
12571
+ oxygen_ppm: payload.slice(7, 11).reduce(msbLsb),
12572
+ oxygen_mg_l: payload.slice(11, 15).reduce(msbLsb)
12573
+ };
12574
+ }
12575
+ else{ // theshold
12576
+ let solenoid_status = payload[2];
12577
+ if(solenoid_status == 1){ // Solenoid On
12578
+ return {
12579
+ msg_type: 'threshold',
12580
+ solenoid_number: payload[1],
12581
+ solenoid_status: 'on',
12582
+ temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
12583
+ oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
12584
+ oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
12585
+ oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb),
12586
+ flow_rate: payload.slice(17, 21).reduce(msbLsb)
12587
+ };
12588
+ } else{ // Solenoid Off
12589
+ return {
12590
+ msg_type: 'threshold',
12591
+ solenoid_number: payload[1],
12592
+ solenoid_status: 'off',
12593
+ temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
12594
+ oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
12595
+ oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
12596
+ oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb)
12597
+ };
12598
+ }
12599
+ }
12600
+ },
12601
+ 'parse_fly': (frame) => {
12602
+ return {
12603
+ 'firmware': frame[2],
12604
+ 'hardware_id': frame.slice(12, 15),
12605
+ 'report_rate': frame.slice(15, 19).reduce(msbLsb) + "Sec",
12606
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
12607
+ 'machine_values': {
12608
+ 'firmware': frame[2],
12609
+ 'hardware_id': frame.slice(12, 15),
12610
+ 'report_rate': frame.slice(15, 19),
12611
+ 'tx_life_counter': frame.slice(19, 23)
12612
+ }
12613
+ }
12614
+ }
12615
+ },
11499
12616
  '217': {
11500
12617
  name: 'Wireless Weight Scale',
11501
12618
  parse: (d) => {
@@ -11504,6 +12621,68 @@ function sensor_types(parent){
11504
12621
  };
11505
12622
  }
11506
12623
  },
12624
+ '270': {
12625
+ name: 'Custom Salinity DO sensor',
12626
+ parse: (d) => {
12627
+ return {
12628
+ sensor_status: d[0],
12629
+ do_temperature_1: d.slice(1, 3).reduce(msbLsb) / 100,
12630
+ do_temperature_2: d.slice(3, 5).reduce(msbLsb) / 100,
12631
+ do_temperature_3: d.slice(5, 7).reduce(msbLsb) / 100,
12632
+ do_temperature_4: d.slice(7, 9).reduce(msbLsb) / 100,
12633
+ ec_temperature_1: d.slice(9, 11).reduce(msbLsb) / 100,
12634
+ ec_temperature_2: d.slice(11, 13).reduce(msbLsb) / 100,
12635
+ ec_temperature_3: d.slice(13, 15).reduce(msbLsb) / 100,
12636
+ ec_temperature_4: d.slice(15, 17).reduce(msbLsb) / 100,
12637
+ do_saturation_perc_1: d.slice(17, 19).reduce(msbLsb) / 100,
12638
+ do_saturation_perc_2: d.slice(19, 21).reduce(msbLsb) / 100,
12639
+ do_saturation_perc_3: d.slice(21, 23).reduce(msbLsb) / 100,
12640
+ do_saturation_perc_4: d.slice(23, 25).reduce(msbLsb) / 100,
12641
+ do_ppm_1: d.slice(25, 27).reduce(msbLsb) / 100,
12642
+ do_ppm_2: d.slice(27, 29).reduce(msbLsb) / 100,
12643
+ do_ppm_3: d.slice(29, 31).reduce(msbLsb) / 100,
12644
+ do_ppm_4: d.slice(31, 33).reduce(msbLsb) / 100,
12645
+ do_mgl_1: d.slice(33, 35).reduce(msbLsb) / 100,
12646
+ do_mgl_2: d.slice(35, 37).reduce(msbLsb) / 100,
12647
+ do_mgl_3: d.slice(37, 39).reduce(msbLsb) / 100,
12648
+ do_mgl_4: d.slice(39, 41).reduce(msbLsb) / 100,
12649
+ ec_conductivity_1: d.slice(41, 43).reduce(msbLsb) / 100,
12650
+ ec_conductivity_2: d.slice(43, 45).reduce(msbLsb) / 100,
12651
+ ec_conductivity_3: d.slice(45, 47).reduce(msbLsb) / 100,
12652
+ ec_conductivity_4: d.slice(47, 49).reduce(msbLsb) / 100,
12653
+ ec_salinity_ppt_1: d.slice(49, 57).reduce(msbLsb) / 100,
12654
+ ec_salinity_ppt_2: d.slice(57, 65).reduce(msbLsb) / 100,
12655
+ ec_salinity_ppt_3: d.slice(65, 73).reduce(msbLsb) / 100,
12656
+ ec_salinity_ppt_4: d.slice(73, 81).reduce(msbLsb) / 100,
12657
+ ec_tds_1: d.slice(81, 85).reduce(msbLsb) / 100,
12658
+ ec_tds_2: d.slice(85, 89).reduce(msbLsb) / 100,
12659
+ ec_tds_3: d.slice(89, 93).reduce(msbLsb) / 100,
12660
+ ec_tds_4: d.slice(93, 97).reduce(msbLsb) / 100
12661
+ };
12662
+ },
12663
+ 'parse_fly': (frame) => {
12664
+ return {
12665
+ 'firmware': frame[2],
12666
+ 'do_bootup_time': frame[12] + "Sec",
12667
+ 'ec_bootup_time': frame[13] + "Sec",
12668
+ 'device_ids_do_sensors': frame.slice(14, 18),
12669
+ 'device_ids_ec_sensors': frame.slice(18, 22),
12670
+ 'hardware_id': frame.slice(22, 25),
12671
+ 'report_rate': frame.slice(25, 29).reduce(msbLsb) + "Sec",
12672
+ 'tx_life_counter': frame.slice(29, 33).reduce(msbLsb),
12673
+ 'machine_values': {
12674
+ 'firmware': frame[2],
12675
+ 'do_bootup_time': frame[12],
12676
+ 'ec_bootup_time': frame[13],
12677
+ 'device_ids_do_sensors': frame.slice(14, 18),
12678
+ 'device_ids_ec_sensors': frame.slice(18, 22),
12679
+ 'hardware_id': frame.slice(22, 25),
12680
+ 'report_rate': frame.slice(25, 29),
12681
+ 'tx_life_counter': frame.slice(29, 33)
12682
+ }
12683
+ }
12684
+ }
12685
+ },
11507
12686
  '502': {
11508
12687
  name: 'Custom Environmental Sensor',
11509
12688
  parse: (d, full) => {
@@ -13872,25 +15051,31 @@ function sensor_types(parent){
13872
15051
  let firmware = frame[2];
13873
15052
  if(firmware > 13){ // firmware 14 and above
13874
15053
  let frame_data = {};
15054
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15055
+ if(!auto_check_interval){
15056
+ frame_data.auto_check_interval = 'Disabled';
15057
+ }else{
15058
+ frame_data.auto_check_interval = auto_check_interval + " sec";
15059
+ }
13875
15060
  frame_data.always_on = frame[24]?"Enabled":"Disabled";
13876
15061
  switch(frame[16]){
13877
15062
  case 0:
13878
- frame_data.fsr = "+-0.256 V";
15063
+ frame_data.fsr = "+-6.114 V";
13879
15064
  break;
13880
15065
  case 1:
13881
- frame_data.fsr = "+-0.512 V";
15066
+ frame_data.fsr = "+-4.096 V";
13882
15067
  break;
13883
15068
  case 2:
13884
- frame_data.fsr = "+-1.024 V";
15069
+ frame_data.fsr = "+-2.048 V";
13885
15070
  break;
13886
15071
  case 3:
13887
- frame_data.fsr = "+-2.048 V";
15072
+ frame_data.fsr = "+-1.024 V";
13888
15073
  break;
13889
15074
  case 4:
13890
- frame_data.fsr = "+-4.096 V";
15075
+ frame_data.fsr = "+-0.512 V";
13891
15076
  break;
13892
15077
  case 5:
13893
- frame_data.fsr = "+-6.144 V";
15078
+ frame_data.fsr = "+-0.256 V";
13894
15079
  break;
13895
15080
  }
13896
15081
  return {
@@ -13898,12 +15083,15 @@ function sensor_types(parent){
13898
15083
  'fsr': frame_data.fsr,
13899
15084
  'boot_time': frame[17] + " sec",
13900
15085
  '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),
15086
+ 'auto_check_interval': frame_data.auto_check_interval,
15087
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
13903
15088
  '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),
15089
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15090
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15091
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15092
+ 'hardware_id': frame.slice(37, 40),
15093
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
15094
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
13907
15095
  'machine_values': {
13908
15096
  'firmware': frame[2],
13909
15097
  'fsr': frame[16],
@@ -13912,9 +15100,92 @@ function sensor_types(parent){
13912
15100
  'auto_check_interval': frame.slice(20, 22),
13913
15101
  'auto_check_percentage': frame.slice(22, 24),
13914
15102
  '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)
15103
+ 'calibration_one': frame.slice(25, 29),
15104
+ 'calibration_two':frame.slice(29, 33),
15105
+ 'calibration_three':frame.slice(33, 37),
15106
+ 'hardware_id': frame.slice(37, 40),
15107
+ 'report_rate': frame.slice(40, 44),
15108
+ 'tx_life_counter': frame.slice(44, 48)
15109
+ }
15110
+ }
15111
+ }
15112
+ }
15113
+ },
15114
+ '541': {
15115
+ name: 'Custom Inline Flow Sensor',
15116
+ parse: (d) => {
15117
+ return {
15118
+ adc1: signInt(d.slice(0, 2).reduce(msbLsb)),
15119
+ adc2: signInt(d.slice(2, 4).reduce(msbLsb)),
15120
+ mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
15121
+ mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100,
15122
+ flow_1: signInt(d.slice(8, 12).reduce(msbLsb))/100,
15123
+ flow_2:signInt(d.slice(12, 16).reduce(msbLsb))/100
15124
+ };
15125
+ },
15126
+ 'parse_fly': (frame) => {
15127
+ let firmware = frame[2];
15128
+ if(firmware > 13){ // firmware 14 and above
15129
+ let frame_data = {};
15130
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15131
+ if(!auto_check_interval){
15132
+ frame_data.auto_check_interval = 'Disabled';
15133
+ }else{
15134
+ frame_data.auto_check_interval = auto_check_interval + " sec";
15135
+ }
15136
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
15137
+ switch(frame[16]){
15138
+ case 0:
15139
+ frame_data.fsr = "+-6.114 V";
15140
+ break;
15141
+ case 1:
15142
+ frame_data.fsr = "+-4.096 V";
15143
+ break;
15144
+ case 2:
15145
+ frame_data.fsr = "+-2.048 V";
15146
+ break;
15147
+ case 3:
15148
+ frame_data.fsr = "+-1.024 V";
15149
+ break;
15150
+ case 4:
15151
+ frame_data.fsr = "+-0.512 V";
15152
+ break;
15153
+ case 5:
15154
+ frame_data.fsr = "+-0.256 V";
15155
+ break;
15156
+ }
15157
+ return {
15158
+ 'firmware': frame[2],
15159
+ 'fsr': frame_data.fsr,
15160
+ 'boot_up_time': frame[17] + " sec",
15161
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15162
+ 'auto_check_interval': frame_data.auto_check_interval,
15163
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15164
+ 'always_on': frame_data.always_on,
15165
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15166
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15167
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15168
+ 'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
15169
+ 'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
15170
+ 'hardware_id': frame.slice(41, 44),
15171
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
15172
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
15173
+ 'machine_values': {
15174
+ 'firmware': frame[2],
15175
+ 'fsr': frame[16],
15176
+ 'boot_up_time': frame[17],
15177
+ 'adc_pin_reading': frame.slice(18, 20),
15178
+ 'auto_check_interval': frame.slice(20, 22),
15179
+ 'auto_check_percentage': frame.slice(22, 24),
15180
+ 'always_on': frame[24],
15181
+ 'calibration_one': frame.slice(25, 29),
15182
+ 'calibration_two':frame.slice(29, 33),
15183
+ 'calibration_three':frame.slice(33, 37),
15184
+ 'min_flow_rate':frame.slice(37, 39),
15185
+ 'max_flow_rate':frame.slice(39, 41),
15186
+ 'hardware_id': frame.slice(41, 44),
15187
+ 'report_rate': frame.slice(44, 48),
15188
+ 'tx_life_counter': frame.slice(48, 52),
13918
15189
  }
13919
15190
  }
13920
15191
  }