@ncd-io/node-red-enterprise-sensors 1.4.7 → 1.6.1
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.
- package/data/configuration_map.json +5320 -0
- package/data/sensor_configs.json +1 -0
- package/data/sensor_type_map.json +1117 -0
- package/lib/WirelessGateway.js +975 -595
- package/package.json +1 -1
- package/wireless.html +425 -87
- package/wireless.js +1014 -62
package/lib/WirelessGateway.js
CHANGED
|
@@ -160,7 +160,7 @@ module.exports = class WirelessSensor{
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
// #OTF
|
|
163
|
-
var otf_devices = [4,12,21,23,26,29,32,33,39,44,45,48,52,53,54,55,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,119,120,121,122,123,124,180,181,202,217,211,270,519,520,521,531,535,536,537,538,539,540,541,542,543,1010,1011];
|
|
163
|
+
var otf_devices = [4,12,21,23,26,29,32,33,39,44,45,48,52,53,54,55,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,119,120,121,122,123,124,180,181,202,217,211,270,519,520,521,531,535,536,537,538,539,540,541,542,543,545,1010,1011];
|
|
164
164
|
var device_type = msbLsb(frame.data[6], frame.data[7]);
|
|
165
165
|
// var device_type = frame.data[7];
|
|
166
166
|
|
|
@@ -361,7 +361,7 @@ module.exports = class WirelessSensor{
|
|
|
361
361
|
};
|
|
362
362
|
|
|
363
363
|
// #OTF
|
|
364
|
-
var otf_devices = [4,12,21,23,26,29,32,33,39,44,45,48,52,53,54,55,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,119,120,121,122,123,124,180,181,202,211,217,270,519,520,521,531,535,536,537,538,539,540,541,542,543,1010,1011];
|
|
364
|
+
var otf_devices = [4,12,21,23,26,29,32,33,39,44,45,48,52,53,54,55,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,119,120,121,122,123,124,180,181,202,211,217,270,519,520,521,531,535,536,537,538,539,540,541,542,543,545,1010,1011];
|
|
365
365
|
if(otf_devices.includes(parsed.sensor_type)){
|
|
366
366
|
// If the message says FLY and there is not FLY timer in progress.
|
|
367
367
|
if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
|
|
@@ -783,7 +783,7 @@ module.exports = class WirelessSensor{
|
|
|
783
783
|
data: payload.slice(8)
|
|
784
784
|
};
|
|
785
785
|
// #OTF
|
|
786
|
-
}else if(parsed.sensor_type == 21 || parsed.sensor_type == 33 || parsed.sensor_type == 39 || parsed.sensor_type == 29 || parsed.sensor_type == 54 || parsed.sensor_type == 55 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 97 || parsed.sensor_type == 98 || parsed.sensor_type == 103 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 117 || parsed.sensor_type == 118 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 217 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538 || parsed.sensor_type == 543){
|
|
786
|
+
}else if(parsed.sensor_type == 21 || parsed.sensor_type == 33 || parsed.sensor_type == 39 || parsed.sensor_type == 29 || parsed.sensor_type == 54 || parsed.sensor_type == 55 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 97 || parsed.sensor_type == 98 || parsed.sensor_type == 103 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 117 || parsed.sensor_type == 118 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 217 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538 || parsed.sensor_type == 543 || parsed.sensor_type == 545){
|
|
787
787
|
parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
|
|
788
788
|
if(!parsed.sensor_data){
|
|
789
789
|
return;
|
|
@@ -848,15 +848,28 @@ module.exports = class WirelessSensor{
|
|
|
848
848
|
return config_set_destination(sensor_mac, 0x0000FFFF);
|
|
849
849
|
}
|
|
850
850
|
config_set_destination(sensor_mac, modem_mac){
|
|
851
|
+
console.log('config_set_destination');
|
|
852
|
+
console.log(modem_mac);
|
|
851
853
|
var packet = [247, 3, 0, 0, 0];
|
|
852
854
|
var bytes = int2Bytes(modem_mac, 4);
|
|
853
855
|
packet.push(...bytes);
|
|
856
|
+
console.log(packet);
|
|
854
857
|
return this.config_send(sensor_mac, packet);
|
|
855
858
|
}
|
|
856
859
|
config_set_id_delay(sensor_mac, node_id, delay_s){
|
|
860
|
+
console.log('config_set_id_delay');
|
|
857
861
|
var packet = [247, 2, 0, 0, 0, node_id];
|
|
858
862
|
var delay_b = int2Bytes(delay_s, 3);
|
|
859
863
|
packet.push(...delay_b);
|
|
864
|
+
console.log(packet);
|
|
865
|
+
return this.config_send(sensor_mac, packet);
|
|
866
|
+
}
|
|
867
|
+
config_set_only_delay(sensor_mac, delay_s){
|
|
868
|
+
console.log('config_set_only_delay');
|
|
869
|
+
var packet = [247, 2, 0, 0, 0, 0];
|
|
870
|
+
var delay_b = int2Bytes(delay_s, 3);
|
|
871
|
+
packet.push(...delay_b);
|
|
872
|
+
console.log(packet);
|
|
860
873
|
return this.config_send(sensor_mac, packet);
|
|
861
874
|
}
|
|
862
875
|
config_set_power(sensor_mac, pwr){
|
|
@@ -1329,8 +1342,8 @@ module.exports = class WirelessSensor{
|
|
|
1329
1342
|
}
|
|
1330
1343
|
config_set_counter_threshold_108(sensor_mac, value){
|
|
1331
1344
|
console.log('config_set_counter_threshold_108');
|
|
1332
|
-
var packet = [244, 43, 0, 0, 0
|
|
1333
|
-
let threshold = int2Bytes((value),
|
|
1345
|
+
var packet = [244, 43, 0, 0, 0];
|
|
1346
|
+
let threshold = int2Bytes((value), 4);
|
|
1334
1347
|
packet.push(...threshold);
|
|
1335
1348
|
console.log(packet);
|
|
1336
1349
|
return this.config_send(sensor_mac, packet);
|
|
@@ -2517,6 +2530,46 @@ module.exports = class WirelessSensor{
|
|
|
2517
2530
|
console.log(packet);
|
|
2518
2531
|
return this.config_send(sensor_mac, packet);
|
|
2519
2532
|
}
|
|
2533
|
+
config_set_max_num_motion_103(sensor_mac, value){
|
|
2534
|
+
console.log('config_set_max_num_motion_103');
|
|
2535
|
+
let packet = [244, 79, 0, 0, 101, 33, value];
|
|
2536
|
+
console.log(packet);
|
|
2537
|
+
return this.config_send(sensor_mac, packet);
|
|
2538
|
+
}
|
|
2539
|
+
config_set_acc_output_data_rate_103(sensor_mac, value){
|
|
2540
|
+
console.log('config_set_acc_output_data_rate_103');
|
|
2541
|
+
let packet = [244, 79, 0, 0, 101, 25, value];
|
|
2542
|
+
console.log(packet);
|
|
2543
|
+
return this.config_send(sensor_mac, packet);
|
|
2544
|
+
}
|
|
2545
|
+
config_set_temperature_unit_545(sensor_mac, value){
|
|
2546
|
+
console.log('config_set_temperature_unit_545');
|
|
2547
|
+
let packet = [244, 37, 0, 0, 0, value];
|
|
2548
|
+
console.log(packet);
|
|
2549
|
+
return this.config_send(sensor_mac, packet);
|
|
2550
|
+
}
|
|
2551
|
+
config_set_flow_unit_545(sensor_mac, value){
|
|
2552
|
+
console.log('config_set_flow_unit_545');
|
|
2553
|
+
let packet = [244, 38, 0, 0, 0, value];
|
|
2554
|
+
console.log(packet);
|
|
2555
|
+
return this.config_send(sensor_mac, packet);
|
|
2556
|
+
}
|
|
2557
|
+
config_set_gas_type_545(sensor_mac, value){
|
|
2558
|
+
console.log('config_set_gas_type_545');
|
|
2559
|
+
let packet = [244, 34, 0, 0, 0, value];
|
|
2560
|
+
console.log(packet);
|
|
2561
|
+
return this.config_send(sensor_mac, packet);
|
|
2562
|
+
}
|
|
2563
|
+
config_set_gas_type_mix_545(sensor_mac, num, gas_type, percentage){
|
|
2564
|
+
console.log('config_set_gas_type_mix_545');
|
|
2565
|
+
var packet = [244, 35, 0, 0, 0];
|
|
2566
|
+
for(let index = 0; index < num; index++){
|
|
2567
|
+
packet.push(...int2Bytes(gas_type[index], 1));
|
|
2568
|
+
packet.push(...int2Bytes(percentage[index]*100, 2));
|
|
2569
|
+
}
|
|
2570
|
+
console.log(packet);
|
|
2571
|
+
return this.config_send(sensor_mac, packet);
|
|
2572
|
+
}
|
|
2520
2573
|
config_get_delay(sensor_mac){
|
|
2521
2574
|
return new Promise((fulfill, reject) => {
|
|
2522
2575
|
this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
|
|
@@ -3597,8 +3650,8 @@ function sensor_types(parent){
|
|
|
3597
3650
|
return {
|
|
3598
3651
|
'firmware': frame[2],
|
|
3599
3652
|
'fsr': frame_data.fsr,
|
|
3600
|
-
'
|
|
3601
|
-
'
|
|
3653
|
+
'boot_up_time': frame[17] + " sec",
|
|
3654
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
3602
3655
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
3603
3656
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
3604
3657
|
'always_on': frame_data.always_on,
|
|
@@ -3611,8 +3664,8 @@ function sensor_types(parent){
|
|
|
3611
3664
|
'machine_values': {
|
|
3612
3665
|
'firmware': frame[2],
|
|
3613
3666
|
'fsr': frame[16],
|
|
3614
|
-
'
|
|
3615
|
-
'
|
|
3667
|
+
'boot_up_time': frame[17],
|
|
3668
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
3616
3669
|
'auto_check_interval': frame.slice(20, 22),
|
|
3617
3670
|
'auto_check_percentage': frame.slice(22, 24),
|
|
3618
3671
|
'always_on': frame[24],
|
|
@@ -4108,13 +4161,14 @@ function sensor_types(parent){
|
|
|
4108
4161
|
name: 'RTD Temperature Sensor',
|
|
4109
4162
|
parse: (payload, parsed, mac) => {
|
|
4110
4163
|
if(parsed.firmware > 5){
|
|
4164
|
+
let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
|
|
4111
4165
|
let fault_status = '';
|
|
4112
|
-
if (
|
|
4166
|
+
if (reserved === 0) {
|
|
4113
4167
|
fault_status = 'data_valid';
|
|
4114
|
-
} else if (
|
|
4168
|
+
} else if (reserved === 15) {
|
|
4115
4169
|
fault_status = 'data_invalid';
|
|
4116
4170
|
} else {
|
|
4117
|
-
const faultTypeBits =
|
|
4171
|
+
const faultTypeBits = reserved & 0b00111100;
|
|
4118
4172
|
switch (faultTypeBits) {
|
|
4119
4173
|
case 32:
|
|
4120
4174
|
fault_status = 'ref_in_vbias';
|
|
@@ -4265,8 +4319,8 @@ function sensor_types(parent){
|
|
|
4265
4319
|
return {
|
|
4266
4320
|
'firmware': frame[2],
|
|
4267
4321
|
'fsr': frame_data.fsr,
|
|
4268
|
-
'
|
|
4269
|
-
'
|
|
4322
|
+
'boot_up_time': frame[17] + " sec",
|
|
4323
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
4270
4324
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4271
4325
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4272
4326
|
'always_on': frame_data.always_on,
|
|
@@ -4279,8 +4333,8 @@ function sensor_types(parent){
|
|
|
4279
4333
|
'machine_values': {
|
|
4280
4334
|
'firmware': frame[2],
|
|
4281
4335
|
'fsr': frame[16],
|
|
4282
|
-
'
|
|
4283
|
-
'
|
|
4336
|
+
'boot_up_time': frame[17],
|
|
4337
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
4284
4338
|
'auto_check_interval': frame.slice(20, 22),
|
|
4285
4339
|
'auto_check_percentage': frame.slice(22, 24),
|
|
4286
4340
|
'always_on': frame[24],
|
|
@@ -4354,8 +4408,8 @@ function sensor_types(parent){
|
|
|
4354
4408
|
return {
|
|
4355
4409
|
'firmware': frame[2],
|
|
4356
4410
|
'fsr': frame_data.fsr,
|
|
4357
|
-
'
|
|
4358
|
-
'
|
|
4411
|
+
'boot_up_time': frame[17] + " sec",
|
|
4412
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
4359
4413
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4360
4414
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4361
4415
|
'always_on': frame_data.always_on,
|
|
@@ -4368,8 +4422,8 @@ function sensor_types(parent){
|
|
|
4368
4422
|
'machine_values': {
|
|
4369
4423
|
'firmware': frame[2],
|
|
4370
4424
|
'fsr': frame[16],
|
|
4371
|
-
'
|
|
4372
|
-
'
|
|
4425
|
+
'boot_up_time': frame[17],
|
|
4426
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
4373
4427
|
'auto_check_interval': frame.slice(20, 22),
|
|
4374
4428
|
'auto_check_percentage': frame.slice(22, 24),
|
|
4375
4429
|
'always_on': frame[24],
|
|
@@ -4615,13 +4669,14 @@ function sensor_types(parent){
|
|
|
4615
4669
|
name: '2-Channel RTD Temperature Sensor',
|
|
4616
4670
|
parse: (payload, parsed, mac) => {
|
|
4617
4671
|
if(parsed.firmware > 5){
|
|
4672
|
+
let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
|
|
4618
4673
|
let fault_status = '';
|
|
4619
|
-
if (
|
|
4674
|
+
if (reserved === 0) {
|
|
4620
4675
|
fault_status = 'data_valid';
|
|
4621
|
-
} else if (
|
|
4676
|
+
} else if (reserved === 15) {
|
|
4622
4677
|
fault_status = 'data_invalid';
|
|
4623
4678
|
} else {
|
|
4624
|
-
const fault_bits = (
|
|
4679
|
+
const fault_bits = (reserved >> 2) & 0b00001111;
|
|
4625
4680
|
switch (fault_bits) {
|
|
4626
4681
|
case 8:
|
|
4627
4682
|
fault_status = 'ref_in_vbias';
|
|
@@ -4636,7 +4691,7 @@ function sensor_types(parent){
|
|
|
4636
4691
|
fault_status = 'over_under_voltage';
|
|
4637
4692
|
break;
|
|
4638
4693
|
}
|
|
4639
|
-
const channel_bits =
|
|
4694
|
+
const channel_bits = reserved & 0b00000011;
|
|
4640
4695
|
switch (channel_bits) {
|
|
4641
4696
|
case 1:
|
|
4642
4697
|
fault_status = fault_status + '_ch1';
|
|
@@ -4689,13 +4744,14 @@ function sensor_types(parent){
|
|
|
4689
4744
|
'55': {
|
|
4690
4745
|
name: '3-Channel RTD Temperature Sensor',
|
|
4691
4746
|
parse: (payload, parsed, mac) => {
|
|
4747
|
+
let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
|
|
4692
4748
|
let fault_status = '';
|
|
4693
|
-
if (
|
|
4749
|
+
if (reserved === 0) {
|
|
4694
4750
|
fault_status = 'data_valid';
|
|
4695
|
-
} else if (
|
|
4751
|
+
} else if (reserved === 15) {
|
|
4696
4752
|
fault_status = 'data_invalid';
|
|
4697
4753
|
} else {
|
|
4698
|
-
const fault_bits = (
|
|
4754
|
+
const fault_bits = (reserved >> 2) & 0b00001111;
|
|
4699
4755
|
switch (fault_bits) {
|
|
4700
4756
|
case 8:
|
|
4701
4757
|
fault_status = 'ref_in_vbias';
|
|
@@ -4710,7 +4766,7 @@ function sensor_types(parent){
|
|
|
4710
4766
|
fault_status = 'over_under_voltage';
|
|
4711
4767
|
break;
|
|
4712
4768
|
}
|
|
4713
|
-
const channel_bits =
|
|
4769
|
+
const channel_bits = reserved & 0b00000011;
|
|
4714
4770
|
switch (channel_bits) {
|
|
4715
4771
|
case 1:
|
|
4716
4772
|
fault_status = fault_status + '_ch1';
|
|
@@ -4805,8 +4861,8 @@ function sensor_types(parent){
|
|
|
4805
4861
|
return {
|
|
4806
4862
|
'firmware': frame[2],
|
|
4807
4863
|
'fsr': frame_data.fsr,
|
|
4808
|
-
'
|
|
4809
|
-
'
|
|
4864
|
+
'boot_up_time': frame[17] + " sec",
|
|
4865
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
4810
4866
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4811
4867
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4812
4868
|
'always_on': frame_data.always_on,
|
|
@@ -4819,8 +4875,8 @@ function sensor_types(parent){
|
|
|
4819
4875
|
'machine_values': {
|
|
4820
4876
|
'firmware': frame[2],
|
|
4821
4877
|
'fsr': frame[16],
|
|
4822
|
-
'
|
|
4823
|
-
'
|
|
4878
|
+
'boot_up_time': frame[17],
|
|
4879
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
4824
4880
|
'auto_check_interval': frame.slice(20, 22),
|
|
4825
4881
|
'auto_check_percentage': frame.slice(22, 24),
|
|
4826
4882
|
'always_on': frame[24],
|
|
@@ -5021,7 +5077,7 @@ function sensor_types(parent){
|
|
|
5021
5077
|
'calibration_days': frame[12] + ' days',
|
|
5022
5078
|
'sensor_update_rate':frame.slice(13, 15).reduce(msbLsb) + ' sec',
|
|
5023
5079
|
'heater_duration': frame.slice(15, 17).reduce(msbLsb) + ' msec',
|
|
5024
|
-
'heater_temperature': frame.slice(17, 19).reduce(msbLsb) + '
|
|
5080
|
+
'heater_temperature': frame.slice(17, 19).reduce(msbLsb) + ' C',
|
|
5025
5081
|
'hardware_id': frame.slice(19, 22),
|
|
5026
5082
|
'report_rate': frame.slice(22, 26).reduce(msbLsb) + ' sec',
|
|
5027
5083
|
'tx_counter': frame.slice(26, 30).reduce(msbLsb),
|
|
@@ -5101,8 +5157,8 @@ function sensor_types(parent){
|
|
|
5101
5157
|
return {
|
|
5102
5158
|
'firmware': frame[2],
|
|
5103
5159
|
'fsr': frame_data.fsr,
|
|
5104
|
-
'
|
|
5105
|
-
'
|
|
5160
|
+
'boot_up_time': frame[17] + " sec",
|
|
5161
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
5106
5162
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
5107
5163
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
5108
5164
|
'always_on': frame_data.always_on,
|
|
@@ -5115,8 +5171,8 @@ function sensor_types(parent){
|
|
|
5115
5171
|
'machine_values': {
|
|
5116
5172
|
'firmware': frame[2],
|
|
5117
5173
|
'fsr': frame[16],
|
|
5118
|
-
'
|
|
5119
|
-
'
|
|
5174
|
+
'boot_up_time': frame[17],
|
|
5175
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
5120
5176
|
'auto_check_interval': frame.slice(20, 22),
|
|
5121
5177
|
'auto_check_percentage': frame.slice(22, 24),
|
|
5122
5178
|
'always_on': frame[24],
|
|
@@ -5174,8 +5230,8 @@ function sensor_types(parent){
|
|
|
5174
5230
|
return {
|
|
5175
5231
|
'firmware': frame[2],
|
|
5176
5232
|
'fsr': frame_data.fsr,
|
|
5177
|
-
'
|
|
5178
|
-
'
|
|
5233
|
+
'boot_up_time': frame[17] + " sec",
|
|
5234
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
5179
5235
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
5180
5236
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
5181
5237
|
'always_on': frame_data.always_on,
|
|
@@ -5188,8 +5244,8 @@ function sensor_types(parent){
|
|
|
5188
5244
|
'machine_values': {
|
|
5189
5245
|
'firmware': frame[2],
|
|
5190
5246
|
'fsr': frame[16],
|
|
5191
|
-
'
|
|
5192
|
-
'
|
|
5247
|
+
'boot_up_time': frame[17],
|
|
5248
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
5193
5249
|
'auto_check_interval': frame.slice(20, 22),
|
|
5194
5250
|
'auto_check_percentage': frame.slice(22, 24),
|
|
5195
5251
|
'always_on': frame[24],
|
|
@@ -7858,8 +7914,8 @@ function sensor_types(parent){
|
|
|
7858
7914
|
return {
|
|
7859
7915
|
'firmware': frame[2],
|
|
7860
7916
|
'fsr': frame_data.fsr,
|
|
7861
|
-
'
|
|
7862
|
-
'
|
|
7917
|
+
'boot_up_time': frame[17] + " sec",
|
|
7918
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
7863
7919
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
7864
7920
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
7865
7921
|
'always_on': frame_data.always_on,
|
|
@@ -7870,8 +7926,8 @@ function sensor_types(parent){
|
|
|
7870
7926
|
'machine_values': {
|
|
7871
7927
|
'firmware': frame[2],
|
|
7872
7928
|
'fsr': frame[16],
|
|
7873
|
-
'
|
|
7874
|
-
'
|
|
7929
|
+
'boot_up_time': frame[17],
|
|
7930
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
7875
7931
|
'auto_check_interval': frame.slice(20, 22),
|
|
7876
7932
|
'auto_check_threshold': frame.slice(22, 24),
|
|
7877
7933
|
'always_on': frame[24],
|
|
@@ -7942,8 +7998,8 @@ function sensor_types(parent){
|
|
|
7942
7998
|
return {
|
|
7943
7999
|
'firmware': frame[2],
|
|
7944
8000
|
'fsr': frame_data.fsr,
|
|
7945
|
-
'
|
|
7946
|
-
'
|
|
8001
|
+
'boot_up_time': frame[17] + " sec",
|
|
8002
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
7947
8003
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
7948
8004
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
7949
8005
|
'always_on': frame_data.always_on,
|
|
@@ -7956,8 +8012,8 @@ function sensor_types(parent){
|
|
|
7956
8012
|
'machine_values': {
|
|
7957
8013
|
'firmware': frame[2],
|
|
7958
8014
|
'fsr': frame[16],
|
|
7959
|
-
'
|
|
7960
|
-
'
|
|
8015
|
+
'boot_up_time': frame[17],
|
|
8016
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
7961
8017
|
'auto_check_interval': frame.slice(20, 22),
|
|
7962
8018
|
'auto_check_percentage': frame.slice(22, 24),
|
|
7963
8019
|
'always_on': frame[24],
|
|
@@ -8014,8 +8070,8 @@ function sensor_types(parent){
|
|
|
8014
8070
|
return {
|
|
8015
8071
|
'firmware': frame[2],
|
|
8016
8072
|
'fsr': frame_data.fsr,
|
|
8017
|
-
'
|
|
8018
|
-
'
|
|
8073
|
+
'boot_up_time': frame[17] + " sec",
|
|
8074
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
8019
8075
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
8020
8076
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
8021
8077
|
'always_on': frame_data.always_on,
|
|
@@ -8028,8 +8084,8 @@ function sensor_types(parent){
|
|
|
8028
8084
|
'machine_values': {
|
|
8029
8085
|
'firmware': frame[2],
|
|
8030
8086
|
'fsr': frame[16],
|
|
8031
|
-
'
|
|
8032
|
-
'
|
|
8087
|
+
'boot_up_time': frame[17],
|
|
8088
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8033
8089
|
'auto_check_interval': frame.slice(20, 22),
|
|
8034
8090
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8035
8091
|
'always_on': frame[24],
|
|
@@ -8390,8 +8446,8 @@ function sensor_types(parent){
|
|
|
8390
8446
|
return {
|
|
8391
8447
|
'firmware': frame[2],
|
|
8392
8448
|
'fsr': frame_data.fsr,
|
|
8393
|
-
'
|
|
8394
|
-
'
|
|
8449
|
+
'boot_up_time': frame[17] + " sec",
|
|
8450
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
8395
8451
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
8396
8452
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
8397
8453
|
'always_on': frame_data.always_on,
|
|
@@ -8404,8 +8460,8 @@ function sensor_types(parent){
|
|
|
8404
8460
|
'machine_values': {
|
|
8405
8461
|
'firmware': frame[2],
|
|
8406
8462
|
'fsr': frame[16],
|
|
8407
|
-
'
|
|
8408
|
-
'
|
|
8463
|
+
'boot_up_time': frame[17],
|
|
8464
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8409
8465
|
'auto_check_interval': frame.slice(20, 22),
|
|
8410
8466
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8411
8467
|
'always_on': frame[24],
|
|
@@ -8480,14 +8536,46 @@ function sensor_types(parent){
|
|
|
8480
8536
|
name: 'Custom Wireless Accelerometer Sensor',
|
|
8481
8537
|
parse: (payload, parsed, mac) => {
|
|
8482
8538
|
if(payload[9] === 0){ // mode raw
|
|
8539
|
+
var sensor_type = payload[8];
|
|
8483
8540
|
var deviceAddr = mac;
|
|
8484
8541
|
var data = {};
|
|
8485
|
-
switch(
|
|
8542
|
+
switch(sensor_type){
|
|
8486
8543
|
case 1:
|
|
8487
8544
|
data.sensor_type = 'Accel';
|
|
8545
|
+
switch(payload[11]){
|
|
8546
|
+
case 0:
|
|
8547
|
+
data.odr = '8000Hz';
|
|
8548
|
+
break;
|
|
8549
|
+
case 1:
|
|
8550
|
+
data.odr = '4000Hz';
|
|
8551
|
+
break;
|
|
8552
|
+
case 2:
|
|
8553
|
+
data.odr = '2000Hz';
|
|
8554
|
+
break;
|
|
8555
|
+
case 3:
|
|
8556
|
+
data.odr = '1000Hz';
|
|
8557
|
+
break;
|
|
8558
|
+
case 4:
|
|
8559
|
+
data.odr = '100Hz';
|
|
8560
|
+
break;
|
|
8561
|
+
}
|
|
8488
8562
|
break;
|
|
8489
8563
|
case 2:
|
|
8490
8564
|
data.sensor_type = 'gyro';
|
|
8565
|
+
switch(payload[11]){
|
|
8566
|
+
case 0:
|
|
8567
|
+
data.odr = '125Hz';
|
|
8568
|
+
break;
|
|
8569
|
+
case 1:
|
|
8570
|
+
data.odr = '250Hz';
|
|
8571
|
+
break;
|
|
8572
|
+
case 2:
|
|
8573
|
+
data.odr = '500Hz';
|
|
8574
|
+
break;
|
|
8575
|
+
case 3:
|
|
8576
|
+
data.odr = '1000Hz';
|
|
8577
|
+
break;
|
|
8578
|
+
}
|
|
8491
8579
|
break;
|
|
8492
8580
|
}
|
|
8493
8581
|
switch(payload[10]){
|
|
@@ -8500,7 +8588,7 @@ function sensor_types(parent){
|
|
|
8500
8588
|
}
|
|
8501
8589
|
|
|
8502
8590
|
var mode = payload[9];
|
|
8503
|
-
var odr =
|
|
8591
|
+
var odr = data.odr;
|
|
8504
8592
|
var en_axis = payload[12] & 7;
|
|
8505
8593
|
var fsr = payload[12] >> 5;
|
|
8506
8594
|
var hour = payload[13];
|
|
@@ -8511,23 +8599,6 @@ function sensor_types(parent){
|
|
|
8511
8599
|
var current_packet = payload.slice(21, 23).reduce(msbLsb);
|
|
8512
8600
|
var data_start = 23;
|
|
8513
8601
|
|
|
8514
|
-
switch(odr){
|
|
8515
|
-
case 0:
|
|
8516
|
-
odr = '125Hz';
|
|
8517
|
-
break;
|
|
8518
|
-
case 1:
|
|
8519
|
-
odr = '250Hz';
|
|
8520
|
-
break;
|
|
8521
|
-
case 2:
|
|
8522
|
-
odr = '500Hz';
|
|
8523
|
-
break;
|
|
8524
|
-
case 3:
|
|
8525
|
-
odr = '1000Hz';
|
|
8526
|
-
break;
|
|
8527
|
-
default:
|
|
8528
|
-
odr = 0;
|
|
8529
|
-
}
|
|
8530
|
-
|
|
8531
8602
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
8532
8603
|
if(expected_packets != 1){
|
|
8533
8604
|
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
@@ -8613,28 +8684,28 @@ function sensor_types(parent){
|
|
|
8613
8684
|
|
|
8614
8685
|
/* Evaluate sensor type */
|
|
8615
8686
|
if(payload[8] == 1){ // accelerometer
|
|
8616
|
-
var fsr_mult = 0.
|
|
8687
|
+
var fsr_mult = 0.00732;
|
|
8617
8688
|
var fsr_text = "";
|
|
8618
8689
|
switch(globalDevices[deviceAddr].fsr){
|
|
8619
8690
|
case 0:
|
|
8620
|
-
fsr_mult = 0.
|
|
8691
|
+
fsr_mult = 0.00732;
|
|
8621
8692
|
break;
|
|
8622
8693
|
case 1:
|
|
8623
|
-
fsr_mult = 0.
|
|
8694
|
+
fsr_mult = 0.01464;
|
|
8624
8695
|
break;
|
|
8625
8696
|
case 2:
|
|
8626
|
-
fsr_mult = 0.
|
|
8697
|
+
fsr_mult = 0.02929;
|
|
8627
8698
|
break;
|
|
8628
8699
|
}
|
|
8629
8700
|
switch(globalDevices[deviceAddr].fsr){
|
|
8630
8701
|
case 0:
|
|
8631
|
-
fsr_text = "
|
|
8702
|
+
fsr_text = "15g";
|
|
8632
8703
|
break;
|
|
8633
8704
|
case 1:
|
|
8634
|
-
fsr_text = "
|
|
8705
|
+
fsr_text = "30g";
|
|
8635
8706
|
break;
|
|
8636
8707
|
case 2:
|
|
8637
|
-
fsr_text = "
|
|
8708
|
+
fsr_text = "60g";
|
|
8638
8709
|
break;
|
|
8639
8710
|
}
|
|
8640
8711
|
}else{ // gyro
|
|
@@ -8707,210 +8778,395 @@ function sensor_types(parent){
|
|
|
8707
8778
|
}
|
|
8708
8779
|
}
|
|
8709
8780
|
},
|
|
8710
|
-
'parse_fly': (frame) => {
|
|
8711
|
-
let frame_data = {};
|
|
8712
|
-
switch(frame[12]){
|
|
8713
|
-
case 0:
|
|
8714
|
-
frame_data.odr = 125;
|
|
8715
|
-
break;
|
|
8716
|
-
case 1:
|
|
8717
|
-
frame_data.odr = 250;
|
|
8718
|
-
break;
|
|
8719
|
-
case 2:
|
|
8720
|
-
frame_data.odr = 500;
|
|
8721
|
-
break;
|
|
8722
|
-
case 3:
|
|
8723
|
-
frame_data.odr = 1000;
|
|
8724
|
-
break;
|
|
8725
|
-
default:
|
|
8726
|
-
frame_data.odr = 0;
|
|
8727
|
-
}
|
|
8728
|
-
switch(frame[15]){
|
|
8729
|
-
case 0:
|
|
8730
|
-
frame_data.fsr_acc = "10g";
|
|
8731
|
-
break;
|
|
8732
|
-
case 1:
|
|
8733
|
-
frame_data.fsr_acc = "20g";
|
|
8734
|
-
break;
|
|
8735
|
-
case 2:
|
|
8736
|
-
frame_data.fsr_acc = "40g";
|
|
8737
|
-
break;
|
|
8738
|
-
}
|
|
8739
|
-
switch(frame[16]){
|
|
8740
|
-
case 0:
|
|
8741
|
-
frame_data.fsr_gyro = "250dps";
|
|
8742
|
-
break;
|
|
8743
|
-
case 1:
|
|
8744
|
-
frame_data.fsr_gyro = "500dps";
|
|
8745
|
-
break;
|
|
8746
|
-
case 2:
|
|
8747
|
-
frame_data.fsr_gyro = "1000dps";
|
|
8748
|
-
break;
|
|
8749
|
-
case 3:
|
|
8750
|
-
frame_data.fsr_gyro = "2000dps";
|
|
8751
|
-
break;
|
|
8752
|
-
}
|
|
8753
|
-
switch(frame[17]){
|
|
8754
|
-
case 7:
|
|
8755
|
-
frame_data.en_axis = "all";
|
|
8756
|
-
break;
|
|
8757
|
-
}
|
|
8758
|
-
switch(frame[20]){
|
|
8759
|
-
case 1:
|
|
8760
|
-
frame_data.en_sensors = "gyro_only";
|
|
8761
|
-
break;
|
|
8762
|
-
case 2:
|
|
8763
|
-
frame_data.en_sensors = "accel_only";
|
|
8764
|
-
break;
|
|
8765
|
-
case 3:
|
|
8766
|
-
frame_data.en_sensors = "all_enabled";
|
|
8767
|
-
break;
|
|
8768
|
-
}
|
|
8769
|
-
switch(frame[18]){
|
|
8770
|
-
case 0:
|
|
8771
|
-
frame_data.sampling_interval = 5;
|
|
8772
|
-
break;
|
|
8773
|
-
case 1:
|
|
8774
|
-
frame_data.sampling_interval = 10;
|
|
8775
|
-
break;
|
|
8776
|
-
case 2:
|
|
8777
|
-
frame_data.sampling_interval = 15;
|
|
8778
|
-
break;
|
|
8779
|
-
case 3:
|
|
8780
|
-
frame_data.sampling_interval = 20;
|
|
8781
|
-
break;
|
|
8782
|
-
case 4:
|
|
8783
|
-
frame_data.sampling_interval = 30;
|
|
8784
|
-
break;
|
|
8785
|
-
case 5:
|
|
8786
|
-
frame_data.sampling_interval = 60;
|
|
8787
|
-
break;
|
|
8788
|
-
case 6:
|
|
8789
|
-
frame_data.sampling_interval = 120;
|
|
8790
|
-
break;
|
|
8791
|
-
case 7:
|
|
8792
|
-
frame_data.sampling_interval = 180;
|
|
8793
|
-
break;
|
|
8794
|
-
}
|
|
8795
|
-
switch(frame[14]){
|
|
8796
|
-
case 0:
|
|
8797
|
-
frame_data.hpf_cutoff = 0.00247;
|
|
8798
|
-
break;
|
|
8799
|
-
case 1:
|
|
8800
|
-
frame_data.hpf_cutoff = 0.00062084;
|
|
8801
|
-
break;
|
|
8802
|
-
case 2:
|
|
8803
|
-
frame_data.hpf_cutoff = 0.00015545;
|
|
8804
|
-
break;
|
|
8805
|
-
case 3:
|
|
8806
|
-
frame_data.hpf_cutoff = 0.00003862;
|
|
8807
|
-
break;
|
|
8808
|
-
case 4:
|
|
8809
|
-
frame_data.hpf_cutoff = 0.00000954;
|
|
8810
|
-
break;
|
|
8811
|
-
case 5:
|
|
8812
|
-
frame_data.hpf_cutoff = 0.00000238;
|
|
8813
|
-
break;
|
|
8814
|
-
}
|
|
8815
|
-
return {
|
|
8816
|
-
'firmware': frame[2],
|
|
8817
|
-
'sample_rate': frame_data.odr + 'Hz',
|
|
8818
|
-
'sampling_duration': (frame[13]* 50) + 'msec',
|
|
8819
|
-
'hpf_cutoff': (frame_data.hpf_cutoff * frame_data.odr).toFixed(2) + 'Hz',
|
|
8820
|
-
'acc_fsr': frame_data.fsr_acc,
|
|
8821
|
-
'gyro_fsr': frame_data.fsr_gyro,
|
|
8822
|
-
'axis_enabled': frame_data.en_axis,
|
|
8823
|
-
'sampling_interval': frame_data.sampling_interval + 'min',
|
|
8824
|
-
'accelerometer_threshold': (frame[19]* 32) + "mg",
|
|
8825
|
-
'enabled_sensors': frame_data.en_sensors,
|
|
8826
|
-
'rtc': [
|
|
8827
|
-
String(frame[21]).padStart(2, '0'),
|
|
8828
|
-
String(frame[22]).padStart(2, '0'),
|
|
8829
|
-
String(frame[23]).padStart(2, '0')
|
|
8830
|
-
].join(':'),
|
|
8831
|
-
'hardware_id': frame.slice(24, 27),
|
|
8832
|
-
'report_rate': frame.slice(27, 31).reduce(msbLsb),
|
|
8833
|
-
'tx_life_counter': frame.slice(31, 35).reduce(msbLsb),
|
|
8834
|
-
'machine_values': {
|
|
8835
|
-
'firmware': frame[2],
|
|
8836
|
-
'odr': frame[12],
|
|
8837
|
-
'sampling_duration': frame[13],
|
|
8838
|
-
'hpf_cutoff': frame[14],
|
|
8839
|
-
'acc_fsr': frame[15],
|
|
8840
|
-
'gyro_fsr': frame[16],
|
|
8841
|
-
'axis_enabled': frame[17],
|
|
8842
|
-
'sampling_interval': frame[18],
|
|
8843
|
-
'accelerometer_threshold': frame[19],
|
|
8844
|
-
'enabled_sensors': frame[20],
|
|
8845
|
-
'hour': frame[21],
|
|
8846
|
-
'minute': frame[22],
|
|
8847
|
-
'second': frame[23],
|
|
8848
|
-
'hardware_id': frame.slice(24, 27),
|
|
8849
|
-
'report_rate': frame.slice(27, 31),
|
|
8850
|
-
'tx_life_counter': frame.slice(31, 35)
|
|
8851
|
-
}
|
|
8852
|
-
}
|
|
8853
|
-
}
|
|
8854
|
-
},
|
|
8855
|
-
'105': {
|
|
8856
|
-
name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
|
|
8857
|
-
parse: (d) => {
|
|
8858
|
-
return {
|
|
8859
|
-
raw_adc: d.slice(0, 2).reduce(msbLsb),
|
|
8860
|
-
ma: d.slice(2, 4).reduce(msbLsb) / 100,
|
|
8861
|
-
db: d.slice(4, 6).reduce(msbLsb) / 100
|
|
8862
|
-
};
|
|
8863
|
-
},
|
|
8864
8781
|
'parse_fly': (frame) => {
|
|
8865
8782
|
let firmware = frame[2];
|
|
8866
|
-
if(firmware >
|
|
8783
|
+
if(firmware > 1){
|
|
8867
8784
|
let frame_data = {};
|
|
8868
|
-
|
|
8869
|
-
|
|
8870
|
-
|
|
8871
|
-
|
|
8872
|
-
|
|
8785
|
+
switch(frame[12]){
|
|
8786
|
+
case 0:
|
|
8787
|
+
frame_data.gyro_odr = 125;
|
|
8788
|
+
break;
|
|
8789
|
+
case 1:
|
|
8790
|
+
frame_data.gyro_odr = 250;
|
|
8791
|
+
break;
|
|
8792
|
+
case 2:
|
|
8793
|
+
frame_data.gyro_odr = 500;
|
|
8794
|
+
break;
|
|
8795
|
+
case 3:
|
|
8796
|
+
frame_data.gyro_odr = 1000;
|
|
8797
|
+
break;
|
|
8873
8798
|
}
|
|
8874
|
-
|
|
8875
|
-
switch(frame[16]){
|
|
8799
|
+
switch(frame[13]){
|
|
8876
8800
|
case 0:
|
|
8877
|
-
frame_data.
|
|
8878
|
-
|
|
8801
|
+
frame_data.acc_odr = 8000;
|
|
8802
|
+
break;
|
|
8879
8803
|
case 1:
|
|
8880
|
-
frame_data.
|
|
8881
|
-
|
|
8804
|
+
frame_data.acc_odr = 4000;
|
|
8805
|
+
break;
|
|
8882
8806
|
case 2:
|
|
8883
|
-
frame_data.
|
|
8884
|
-
|
|
8807
|
+
frame_data.acc_odr = 2000;
|
|
8808
|
+
break;
|
|
8885
8809
|
case 3:
|
|
8886
|
-
frame_data.
|
|
8887
|
-
|
|
8810
|
+
frame_data.acc_odr = 1000;
|
|
8811
|
+
break;
|
|
8888
8812
|
case 4:
|
|
8889
|
-
frame_data.
|
|
8890
|
-
|
|
8813
|
+
frame_data.acc_odr = 100;
|
|
8814
|
+
break;
|
|
8815
|
+
}
|
|
8816
|
+
switch(frame[15]){
|
|
8817
|
+
case 0:
|
|
8818
|
+
frame_data.hpf_cutoff = false;
|
|
8819
|
+
break;
|
|
8820
|
+
case 1:
|
|
8821
|
+
frame_data.hpf_cutoff = 0.00247;
|
|
8822
|
+
break;
|
|
8823
|
+
case 2:
|
|
8824
|
+
frame_data.hpf_cutoff = 0.00062084;
|
|
8825
|
+
break;
|
|
8826
|
+
case 3:
|
|
8827
|
+
frame_data.hpf_cutoff = 0.00015545;
|
|
8828
|
+
break;
|
|
8829
|
+
case 4:
|
|
8830
|
+
frame_data.hpf_cutoff = 0.00003862;
|
|
8831
|
+
break;
|
|
8891
8832
|
case 5:
|
|
8892
|
-
frame_data.
|
|
8893
|
-
|
|
8833
|
+
frame_data.hpf_cutoff = 0.00000954;
|
|
8834
|
+
break;
|
|
8835
|
+
case 6:
|
|
8836
|
+
frame_data.hpf_cutoff = 0.00000238;
|
|
8837
|
+
break;
|
|
8894
8838
|
}
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
|
|
8900
|
-
|
|
8901
|
-
|
|
8902
|
-
|
|
8903
|
-
|
|
8904
|
-
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8839
|
+
switch(frame[16]){
|
|
8840
|
+
case 0:
|
|
8841
|
+
frame_data.fsr_acc = "15g";
|
|
8842
|
+
break;
|
|
8843
|
+
case 1:
|
|
8844
|
+
frame_data.fsr_acc = "30g";
|
|
8845
|
+
break;
|
|
8846
|
+
case 2:
|
|
8847
|
+
frame_data.fsr_acc = "60g";
|
|
8848
|
+
break;
|
|
8849
|
+
}
|
|
8850
|
+
switch(frame[17]){
|
|
8851
|
+
case 0:
|
|
8852
|
+
frame_data.fsr_gyro = "250dps";
|
|
8853
|
+
break;
|
|
8854
|
+
case 1:
|
|
8855
|
+
frame_data.fsr_gyro = "500dps";
|
|
8856
|
+
break;
|
|
8857
|
+
case 2:
|
|
8858
|
+
frame_data.fsr_gyro = "1000dps";
|
|
8859
|
+
break;
|
|
8860
|
+
case 3:
|
|
8861
|
+
frame_data.fsr_gyro = "2000dps";
|
|
8862
|
+
break;
|
|
8863
|
+
}
|
|
8864
|
+
switch(frame[18]){
|
|
8865
|
+
case 1:
|
|
8866
|
+
frame_data.en_axis = "X Axis";
|
|
8867
|
+
break;
|
|
8868
|
+
case 2:
|
|
8869
|
+
frame_data.en_axis = "Y Axis";
|
|
8870
|
+
break;
|
|
8871
|
+
case 3:
|
|
8872
|
+
frame_data.en_axis = "X-Y Axes";
|
|
8873
|
+
break;
|
|
8874
|
+
case 4:
|
|
8875
|
+
frame_data.en_axis = "Z Axis";
|
|
8876
|
+
break;
|
|
8877
|
+
case 5:
|
|
8878
|
+
frame_data.en_axis = "X-Z Axes";
|
|
8879
|
+
break;
|
|
8880
|
+
case 6:
|
|
8881
|
+
frame_data.en_axis = "Y-Z Axes";
|
|
8882
|
+
break;
|
|
8883
|
+
case 7:
|
|
8884
|
+
frame_data.en_axis = "All Axes";
|
|
8885
|
+
break;
|
|
8886
|
+
}
|
|
8887
|
+
switch(frame[19]){
|
|
8888
|
+
case 0:
|
|
8889
|
+
frame_data.sampling_interval = 5;
|
|
8890
|
+
break;
|
|
8891
|
+
case 1:
|
|
8892
|
+
frame_data.sampling_interval = 10;
|
|
8893
|
+
break;
|
|
8894
|
+
case 2:
|
|
8895
|
+
frame_data.sampling_interval = 15;
|
|
8896
|
+
break;
|
|
8897
|
+
case 3:
|
|
8898
|
+
frame_data.sampling_interval = 20;
|
|
8899
|
+
break;
|
|
8900
|
+
case 4:
|
|
8901
|
+
frame_data.sampling_interval = 30;
|
|
8902
|
+
break;
|
|
8903
|
+
case 5:
|
|
8904
|
+
frame_data.sampling_interval = 60;
|
|
8905
|
+
break;
|
|
8906
|
+
case 6:
|
|
8907
|
+
frame_data.sampling_interval = 120;
|
|
8908
|
+
break;
|
|
8909
|
+
case 7:
|
|
8910
|
+
frame_data.sampling_interval = 180;
|
|
8911
|
+
break;
|
|
8912
|
+
}
|
|
8913
|
+
switch(frame[21]){
|
|
8914
|
+
case 0:
|
|
8915
|
+
frame_data.en_sensors = "acc_only";
|
|
8916
|
+
break;
|
|
8917
|
+
case 1:
|
|
8918
|
+
frame_data.en_sensors = "gyro_only";
|
|
8919
|
+
break;
|
|
8920
|
+
case 2:
|
|
8921
|
+
frame_data.en_sensors = "both_enabled";
|
|
8922
|
+
break;
|
|
8923
|
+
}
|
|
8924
|
+
frame_data.hpf_cutoff = (frame_data.hpf_cutoff)?((frame_data.hpf_cutoff * frame_data.acc_odr).toFixed(2) + 'Hz'):'disabled';
|
|
8925
|
+
return {
|
|
8926
|
+
'firmware': firmware,
|
|
8927
|
+
'gyro_sample_rate': frame_data.gyro_odr + 'Hz',
|
|
8928
|
+
'acc_sample_rate': frame_data.acc_odr + 'Hz',
|
|
8929
|
+
'sampling_duration': (frame[14]* 50) + 'msec',
|
|
8930
|
+
'hpf_cutoff': frame_data.hpf_cutoff,
|
|
8931
|
+
'acc_fsr': frame_data.fsr_acc,
|
|
8932
|
+
'gyro_fsr': frame_data.fsr_gyro,
|
|
8933
|
+
'axis_enabled': frame_data.en_axis,
|
|
8934
|
+
'sampling_interval': frame_data.sampling_interval + 'min',
|
|
8935
|
+
'accelerometer_threshold': (frame[20]* 32) + "mg",
|
|
8936
|
+
'enabled_sensors': frame_data.en_sensors,
|
|
8937
|
+
'max_num_of_motion_tx_per_interval': frame[22],
|
|
8938
|
+
'rtc': [
|
|
8939
|
+
String(frame[23]).padStart(2, '0'),
|
|
8940
|
+
String(frame[24]).padStart(2, '0'),
|
|
8941
|
+
String(frame[25]).padStart(2, '0')
|
|
8942
|
+
].join(':'),
|
|
8943
|
+
'hardware_id': frame.slice(26, 29),
|
|
8944
|
+
'report_rate': frame.slice(29, 33).reduce(msbLsb),
|
|
8945
|
+
'tx_life_counter': frame.slice(33, 37).reduce(msbLsb),
|
|
8946
|
+
'machine_values': {
|
|
8947
|
+
'firmware': frame[2],
|
|
8948
|
+
'gyro_sample_rate': frame[12],
|
|
8949
|
+
'acc_sample_rate': frame[13],
|
|
8950
|
+
'sampling_duration': frame[14],
|
|
8951
|
+
'hpf_cutoff': frame[15],
|
|
8952
|
+
'acc_fsr': frame[16],
|
|
8953
|
+
'gyro_fsr': frame[17],
|
|
8954
|
+
'axis_enabled': frame[18],
|
|
8955
|
+
'sampling_interval': frame[19],
|
|
8956
|
+
'accelerometer_threshold': frame[20],
|
|
8957
|
+
'enabled_sensors': frame[21],
|
|
8958
|
+
'max_num_of_motion_tx_per_interval': frame[22],
|
|
8959
|
+
'hour': frame[23],
|
|
8960
|
+
'minute': frame[24],
|
|
8961
|
+
'second': frame[25],
|
|
8962
|
+
'hardware_id': frame.slice(26, 29),
|
|
8963
|
+
'report_rate': frame.slice(29, 33),
|
|
8964
|
+
'tx_life_counter': frame.slice(33, 37)
|
|
8965
|
+
}
|
|
8966
|
+
}
|
|
8967
|
+
}else{
|
|
8968
|
+
let frame_data = {};
|
|
8969
|
+
switch(frame[12]){
|
|
8970
|
+
case 0:
|
|
8971
|
+
frame_data.odr = 125;
|
|
8972
|
+
break;
|
|
8973
|
+
case 1:
|
|
8974
|
+
frame_data.odr = 250;
|
|
8975
|
+
break;
|
|
8976
|
+
case 2:
|
|
8977
|
+
frame_data.odr = 500;
|
|
8978
|
+
break;
|
|
8979
|
+
case 3:
|
|
8980
|
+
frame_data.odr = 1000;
|
|
8981
|
+
break;
|
|
8982
|
+
}
|
|
8983
|
+
switch(frame[15]){
|
|
8984
|
+
case 0:
|
|
8985
|
+
frame_data.fsr_acc = "10g";
|
|
8986
|
+
break;
|
|
8987
|
+
case 1:
|
|
8988
|
+
frame_data.fsr_acc = "20g";
|
|
8989
|
+
break;
|
|
8990
|
+
case 2:
|
|
8991
|
+
frame_data.fsr_acc = "40g";
|
|
8992
|
+
break;
|
|
8993
|
+
}
|
|
8994
|
+
switch(frame[16]){
|
|
8995
|
+
case 0:
|
|
8996
|
+
frame_data.fsr_gyro = "250dps";
|
|
8997
|
+
break;
|
|
8998
|
+
case 1:
|
|
8999
|
+
frame_data.fsr_gyro = "500dps";
|
|
9000
|
+
break;
|
|
9001
|
+
case 2:
|
|
9002
|
+
frame_data.fsr_gyro = "1000dps";
|
|
9003
|
+
break;
|
|
9004
|
+
case 3:
|
|
9005
|
+
frame_data.fsr_gyro = "2000dps";
|
|
9006
|
+
break;
|
|
9007
|
+
}
|
|
9008
|
+
switch(frame[17]){
|
|
9009
|
+
case 7:
|
|
9010
|
+
frame_data.en_axis = "all";
|
|
9011
|
+
break;
|
|
9012
|
+
}
|
|
9013
|
+
switch(frame[20]){
|
|
9014
|
+
case 1:
|
|
9015
|
+
frame_data.en_sensors = "gyro_only";
|
|
9016
|
+
break;
|
|
9017
|
+
case 2:
|
|
9018
|
+
frame_data.en_sensors = "accel_only";
|
|
9019
|
+
break;
|
|
9020
|
+
case 3:
|
|
9021
|
+
frame_data.en_sensors = "all_enabled";
|
|
9022
|
+
break;
|
|
9023
|
+
}
|
|
9024
|
+
switch(frame[18]){
|
|
9025
|
+
case 0:
|
|
9026
|
+
frame_data.sampling_interval = 5;
|
|
9027
|
+
break;
|
|
9028
|
+
case 1:
|
|
9029
|
+
frame_data.sampling_interval = 10;
|
|
9030
|
+
break;
|
|
9031
|
+
case 2:
|
|
9032
|
+
frame_data.sampling_interval = 15;
|
|
9033
|
+
break;
|
|
9034
|
+
case 3:
|
|
9035
|
+
frame_data.sampling_interval = 20;
|
|
9036
|
+
break;
|
|
9037
|
+
case 4:
|
|
9038
|
+
frame_data.sampling_interval = 30;
|
|
9039
|
+
break;
|
|
9040
|
+
case 5:
|
|
9041
|
+
frame_data.sampling_interval = 60;
|
|
9042
|
+
break;
|
|
9043
|
+
case 6:
|
|
9044
|
+
frame_data.sampling_interval = 120;
|
|
9045
|
+
break;
|
|
9046
|
+
case 7:
|
|
9047
|
+
frame_data.sampling_interval = 180;
|
|
9048
|
+
break;
|
|
9049
|
+
}
|
|
9050
|
+
switch(frame[14]){
|
|
9051
|
+
case 0:
|
|
9052
|
+
frame_data.hpf_cutoff = 0.00247;
|
|
9053
|
+
break;
|
|
9054
|
+
case 1:
|
|
9055
|
+
frame_data.hpf_cutoff = 0.00062084;
|
|
9056
|
+
break;
|
|
9057
|
+
case 2:
|
|
9058
|
+
frame_data.hpf_cutoff = 0.00015545;
|
|
9059
|
+
break;
|
|
9060
|
+
case 3:
|
|
9061
|
+
frame_data.hpf_cutoff = 0.00003862;
|
|
9062
|
+
break;
|
|
9063
|
+
case 4:
|
|
9064
|
+
frame_data.hpf_cutoff = 0.00000954;
|
|
9065
|
+
break;
|
|
9066
|
+
case 5:
|
|
9067
|
+
frame_data.hpf_cutoff = 0.00000238;
|
|
9068
|
+
break;
|
|
9069
|
+
}
|
|
9070
|
+
return {
|
|
9071
|
+
'firmware': firmware,
|
|
9072
|
+
'sample_rate': frame_data.odr + 'Hz',
|
|
9073
|
+
'sampling_duration': (frame[13]* 50) + 'msec',
|
|
9074
|
+
'hpf_cutoff': (frame_data.hpf_cutoff * frame_data.odr).toFixed(2) + 'Hz',
|
|
9075
|
+
'acc_fsr': frame_data.fsr_acc,
|
|
9076
|
+
'gyro_fsr': frame_data.fsr_gyro,
|
|
9077
|
+
'axis_enabled': frame_data.en_axis,
|
|
9078
|
+
'sampling_interval': frame_data.sampling_interval + 'min',
|
|
9079
|
+
'accelerometer_threshold': (frame[19]* 32) + "mg",
|
|
9080
|
+
'enabled_sensors': frame_data.en_sensors,
|
|
9081
|
+
'rtc': [
|
|
9082
|
+
String(frame[21]).padStart(2, '0'),
|
|
9083
|
+
String(frame[22]).padStart(2, '0'),
|
|
9084
|
+
String(frame[23]).padStart(2, '0')
|
|
9085
|
+
].join(':'),
|
|
9086
|
+
'hardware_id': frame.slice(24, 27),
|
|
9087
|
+
'report_rate': frame.slice(27, 31).reduce(msbLsb),
|
|
9088
|
+
'tx_life_counter': frame.slice(31, 35).reduce(msbLsb),
|
|
9089
|
+
'machine_values': {
|
|
9090
|
+
'firmware': frame[2],
|
|
9091
|
+
'odr': frame[12],
|
|
9092
|
+
'sampling_duration': frame[13],
|
|
9093
|
+
'hpf_cutoff': frame[14],
|
|
9094
|
+
'acc_fsr': frame[15],
|
|
9095
|
+
'gyro_fsr': frame[16],
|
|
9096
|
+
'axis_enabled': frame[17],
|
|
9097
|
+
'sampling_interval': frame[18],
|
|
9098
|
+
'accelerometer_threshold': frame[19],
|
|
9099
|
+
'enabled_sensors': frame[20],
|
|
9100
|
+
'hour': frame[21],
|
|
9101
|
+
'minute': frame[22],
|
|
9102
|
+
'second': frame[23],
|
|
9103
|
+
'hardware_id': frame.slice(24, 27),
|
|
9104
|
+
'report_rate': frame.slice(27, 31),
|
|
9105
|
+
'tx_life_counter': frame.slice(31, 35)
|
|
9106
|
+
}
|
|
9107
|
+
}
|
|
9108
|
+
}
|
|
9109
|
+
}
|
|
9110
|
+
},
|
|
9111
|
+
'105': {
|
|
9112
|
+
name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
|
|
9113
|
+
parse: (d) => {
|
|
9114
|
+
return {
|
|
9115
|
+
raw_adc: d.slice(0, 2).reduce(msbLsb),
|
|
9116
|
+
ma: d.slice(2, 4).reduce(msbLsb) / 100,
|
|
9117
|
+
db: d.slice(4, 6).reduce(msbLsb) / 100
|
|
9118
|
+
};
|
|
9119
|
+
},
|
|
9120
|
+
'parse_fly': (frame) => {
|
|
9121
|
+
let firmware = frame[2];
|
|
9122
|
+
if(firmware > 13){ // firmware 14 and above
|
|
9123
|
+
let frame_data = {};
|
|
9124
|
+
let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
|
|
9125
|
+
if(!auto_check_interval){
|
|
9126
|
+
frame_data.auto_check_interval = 'Disabled';
|
|
9127
|
+
}else{
|
|
9128
|
+
frame_data.auto_check_interval = auto_check_interval + " sec";
|
|
9129
|
+
}
|
|
9130
|
+
frame_data.always_on = frame[24]?"Enabled":"Disabled";
|
|
9131
|
+
switch(frame[16]){
|
|
9132
|
+
case 0:
|
|
9133
|
+
frame_data.fsr = "+-6.114 V";
|
|
9134
|
+
break;
|
|
9135
|
+
case 1:
|
|
9136
|
+
frame_data.fsr = "+-4.096 V";
|
|
9137
|
+
break;
|
|
9138
|
+
case 2:
|
|
9139
|
+
frame_data.fsr = "+-2.048 V";
|
|
9140
|
+
break;
|
|
9141
|
+
case 3:
|
|
9142
|
+
frame_data.fsr = "+-1.024 V";
|
|
9143
|
+
break;
|
|
9144
|
+
case 4:
|
|
9145
|
+
frame_data.fsr = "+-0.512 V";
|
|
9146
|
+
break;
|
|
9147
|
+
case 5:
|
|
9148
|
+
frame_data.fsr = "+-0.256 V";
|
|
9149
|
+
break;
|
|
9150
|
+
}
|
|
9151
|
+
return {
|
|
9152
|
+
'firmware': frame[2],
|
|
9153
|
+
'fsr': frame_data.fsr,
|
|
9154
|
+
'boot_up_time': frame[17] + " sec",
|
|
9155
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
9156
|
+
'auto_check_interval': frame_data.auto_check_interval,
|
|
9157
|
+
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
9158
|
+
'always_on': frame_data.always_on,
|
|
9159
|
+
'calibration_one': frame.slice(25, 29).reduce(msbLsb),
|
|
9160
|
+
'calibration_two':frame.slice(29, 33).reduce(msbLsb),
|
|
9161
|
+
'calibration_three':frame.slice(33, 37).reduce(msbLsb),
|
|
9162
|
+
'hardware_id': frame.slice(37, 40),
|
|
9163
|
+
'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
|
|
8908
9164
|
'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
|
|
8909
9165
|
'machine_values': {
|
|
8910
9166
|
'firmware': frame[2],
|
|
8911
9167
|
'fsr': frame[16],
|
|
8912
|
-
'
|
|
8913
|
-
'
|
|
9168
|
+
'boot_up_time': frame[17],
|
|
9169
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8914
9170
|
'auto_check_interval': frame.slice(20, 22),
|
|
8915
9171
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8916
9172
|
'always_on': frame[24],
|
|
@@ -8971,8 +9227,8 @@ function sensor_types(parent){
|
|
|
8971
9227
|
return {
|
|
8972
9228
|
'firmware': frame[2],
|
|
8973
9229
|
'fsr': frame_data.fsr,
|
|
8974
|
-
'
|
|
8975
|
-
'
|
|
9230
|
+
'boot_up_time': frame[17] + " sec",
|
|
9231
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
8976
9232
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
8977
9233
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
8978
9234
|
'always_on': frame_data.always_on,
|
|
@@ -8985,8 +9241,8 @@ function sensor_types(parent){
|
|
|
8985
9241
|
'machine_values': {
|
|
8986
9242
|
'firmware': frame[2],
|
|
8987
9243
|
'fsr': frame[16],
|
|
8988
|
-
'
|
|
8989
|
-
'
|
|
9244
|
+
'boot_up_time': frame[17],
|
|
9245
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8990
9246
|
'auto_check_interval': frame.slice(20, 22),
|
|
8991
9247
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8992
9248
|
'always_on': frame[24],
|
|
@@ -9057,8 +9313,8 @@ function sensor_types(parent){
|
|
|
9057
9313
|
return {
|
|
9058
9314
|
'firmware': frame[2],
|
|
9059
9315
|
'fsr': frame_data.fsr,
|
|
9060
|
-
'
|
|
9061
|
-
'
|
|
9316
|
+
'boot_up_time': frame[17] + " sec",
|
|
9317
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
9062
9318
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
9063
9319
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
9064
9320
|
'always_on': frame_data.always_on,
|
|
@@ -9071,8 +9327,8 @@ function sensor_types(parent){
|
|
|
9071
9327
|
'machine_values': {
|
|
9072
9328
|
'firmware': frame[2],
|
|
9073
9329
|
'fsr': frame[16],
|
|
9074
|
-
'
|
|
9075
|
-
'
|
|
9330
|
+
'boot_up_time': frame[17],
|
|
9331
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
9076
9332
|
'auto_check_interval': frame.slice(20, 22),
|
|
9077
9333
|
'auto_check_percentage': frame.slice(22, 24),
|
|
9078
9334
|
'always_on': frame[24],
|
|
@@ -10111,51 +10367,36 @@ function sensor_types(parent){
|
|
|
10111
10367
|
|
|
10112
10368
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
10113
10369
|
if(expected_packets != 1){
|
|
10114
|
-
// if
|
|
10115
|
-
if(
|
|
10116
|
-
console.log('
|
|
10117
|
-
|
|
10118
|
-
|
|
10119
|
-
|
|
10120
|
-
|
|
10121
|
-
|
|
10122
|
-
console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
|
|
10123
|
-
if(this.hasOwnProperty('failure_no')){
|
|
10124
|
-
this.failure_no = this.failure_no + 1;
|
|
10125
|
-
}
|
|
10126
|
-
else{
|
|
10127
|
-
this.failure_no = 1;
|
|
10128
|
-
}
|
|
10129
|
-
if(this.hasOwnProperty('failure_no')){
|
|
10130
|
-
console.log('####falure no');
|
|
10131
|
-
console.log(this.failure_no);
|
|
10132
|
-
}
|
|
10133
|
-
// console.log(globalDevices[deviceAddr].data);
|
|
10370
|
+
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
10371
|
+
if (globalDevices[deviceAddr].last_packet_counter == current_packet){
|
|
10372
|
+
console.log('Duplicated message')
|
|
10373
|
+
return;
|
|
10374
|
+
}
|
|
10375
|
+
// if current packet is equal to 1 or last packet counter is higher thant current packet
|
|
10376
|
+
if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
|
|
10377
|
+
// clear stream
|
|
10134
10378
|
delete globalDevices[deviceAddr];
|
|
10135
|
-
|
|
10136
|
-
|
|
10137
|
-
|
|
10138
|
-
|
|
10139
|
-
|
|
10140
|
-
var odr = msbLsb(payload[9], payload[10]);
|
|
10141
|
-
var fsr = payload[11] >> 5;
|
|
10142
|
-
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10379
|
+
// create new stream
|
|
10380
|
+
var mode = payload[8];
|
|
10381
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
10382
|
+
var fsr = payload[11] >> 5;
|
|
10383
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10143
10384
|
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
|
|
10147
|
-
|
|
10148
|
-
|
|
10149
|
-
|
|
10150
|
-
|
|
10151
|
-
|
|
10152
|
-
temperature: temperature,
|
|
10153
|
-
}
|
|
10154
|
-
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10155
|
-
return;
|
|
10385
|
+
globalDevices[deviceAddr] = {
|
|
10386
|
+
data: {},
|
|
10387
|
+
odr: odr,
|
|
10388
|
+
mo: mode,
|
|
10389
|
+
fsr: fsr,
|
|
10390
|
+
hour: hour,
|
|
10391
|
+
minute: minute,
|
|
10392
|
+
temperature: temperature,
|
|
10156
10393
|
}
|
|
10394
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10395
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10396
|
+
return;
|
|
10157
10397
|
}
|
|
10158
10398
|
else{
|
|
10399
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10159
10400
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10160
10401
|
}
|
|
10161
10402
|
}
|
|
@@ -10166,7 +10407,6 @@ function sensor_types(parent){
|
|
|
10166
10407
|
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10167
10408
|
|
|
10168
10409
|
globalDevices[deviceAddr] = {
|
|
10169
|
-
// stream_size: expected_packets,
|
|
10170
10410
|
data: {},
|
|
10171
10411
|
odr: odr,
|
|
10172
10412
|
mo: mode,
|
|
@@ -10175,106 +10415,17 @@ function sensor_types(parent){
|
|
|
10175
10415
|
minute: minute,
|
|
10176
10416
|
temperature: temperature,
|
|
10177
10417
|
}
|
|
10418
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10178
10419
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10179
10420
|
}
|
|
10180
|
-
|
|
10181
|
-
|
|
10182
|
-
var raw_data = new Array();
|
|
10183
|
-
for(const packet in globalDevices[deviceAddr].data){
|
|
10184
|
-
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
10185
|
-
}
|
|
10186
|
-
var label = 0;
|
|
10187
|
-
|
|
10188
|
-
var fft = new Array();
|
|
10189
|
-
var fft_concat = {};
|
|
10190
|
-
|
|
10191
|
-
var en_axis_data = {};
|
|
10192
|
-
en_axis_data.x_offset = 0;
|
|
10193
|
-
en_axis_data.y_offset = 2;
|
|
10194
|
-
en_axis_data.z_offset = 4;
|
|
10195
|
-
en_axis_data.increment = 6;
|
|
10196
|
-
fft_concat = {x: [], y: [], z: []};
|
|
10197
|
-
|
|
10198
|
-
var fsr_mult = .00006;
|
|
10199
|
-
var fsr_text = "";
|
|
10200
|
-
switch(globalDevices[deviceAddr].fsr){
|
|
10201
|
-
case 0:
|
|
10202
|
-
fsr_mult = 0.00006;
|
|
10203
|
-
break;
|
|
10204
|
-
case 1:
|
|
10205
|
-
fsr_mult = 0.00012;
|
|
10206
|
-
break;
|
|
10207
|
-
case 2:
|
|
10208
|
-
fsr_mult = 0.00024;
|
|
10209
|
-
break;
|
|
10210
|
-
case 3:
|
|
10211
|
-
fsr_mult = 0.00049;
|
|
10212
|
-
break;
|
|
10213
|
-
}
|
|
10214
|
-
switch(globalDevices[deviceAddr].fsr){
|
|
10215
|
-
case 0:
|
|
10216
|
-
fsr_text = "2g";
|
|
10217
|
-
break;
|
|
10218
|
-
case 1:
|
|
10219
|
-
fsr_text = "4g";
|
|
10220
|
-
break;
|
|
10221
|
-
case 2:
|
|
10222
|
-
fsr_text = "8g";
|
|
10223
|
-
break;
|
|
10224
|
-
case 3:
|
|
10225
|
-
fsr_text = "16g";
|
|
10226
|
-
break;
|
|
10227
|
-
}
|
|
10228
|
-
|
|
10229
|
-
|
|
10230
|
-
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
10231
|
-
label++;
|
|
10232
|
-
|
|
10233
|
-
if('x_offset' in en_axis_data){
|
|
10234
|
-
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)));
|
|
10235
|
-
}
|
|
10236
|
-
if('y_offset' in en_axis_data){
|
|
10237
|
-
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)));
|
|
10238
|
-
}
|
|
10239
|
-
if('z_offset' in en_axis_data){
|
|
10240
|
-
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)));
|
|
10241
|
-
}
|
|
10242
|
-
}
|
|
10243
|
-
var fft_concat_obj = {
|
|
10244
|
-
mode: payload[8],
|
|
10245
|
-
msg_type: msg_type,
|
|
10246
|
-
time_id: [
|
|
10247
|
-
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
10248
|
-
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
10249
|
-
].join(':'),
|
|
10250
|
-
mac_address: deviceAddr,
|
|
10251
|
-
fsr: fsr_text,
|
|
10252
|
-
odr: globalDevices[deviceAddr].odr,
|
|
10253
|
-
temperature: globalDevices[deviceAddr].temperature,
|
|
10254
|
-
total_samples: label,
|
|
10255
|
-
data: fft_concat
|
|
10256
|
-
};
|
|
10257
|
-
sensor_data = fft_concat_obj;
|
|
10258
|
-
delete globalDevices[deviceAddr];
|
|
10259
|
-
if(this.hasOwnProperty('failure_no')){
|
|
10260
|
-
console.log('####falure no');
|
|
10261
|
-
console.log(this.failure_no);
|
|
10262
|
-
}
|
|
10263
|
-
|
|
10264
|
-
return sensor_data;
|
|
10265
|
-
}
|
|
10266
|
-
else{
|
|
10267
|
-
return;
|
|
10268
|
-
}
|
|
10269
|
-
}else{
|
|
10270
|
-
|
|
10421
|
+
}
|
|
10422
|
+
else{
|
|
10271
10423
|
var mode = payload[8];
|
|
10272
10424
|
var odr = msbLsb(payload[9], payload[10]);
|
|
10273
10425
|
var fsr = payload[11] >> 5;
|
|
10274
10426
|
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10275
10427
|
|
|
10276
10428
|
globalDevices[deviceAddr] = {
|
|
10277
|
-
// stream_size: expected_packets,
|
|
10278
10429
|
data: {},
|
|
10279
10430
|
odr: odr,
|
|
10280
10431
|
mo: mode,
|
|
@@ -10283,7 +10434,91 @@ function sensor_types(parent){
|
|
|
10283
10434
|
minute: minute,
|
|
10284
10435
|
temperature: temperature,
|
|
10285
10436
|
}
|
|
10437
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10286
10438
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10439
|
+
}
|
|
10440
|
+
if(current_packet == expected_packets){
|
|
10441
|
+
var raw_data = new Array();
|
|
10442
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
10443
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
10444
|
+
}
|
|
10445
|
+
var label = 0;
|
|
10446
|
+
|
|
10447
|
+
var fft = new Array();
|
|
10448
|
+
var fft_concat = {};
|
|
10449
|
+
|
|
10450
|
+
var en_axis_data = {};
|
|
10451
|
+
en_axis_data.x_offset = 0;
|
|
10452
|
+
en_axis_data.y_offset = 2;
|
|
10453
|
+
en_axis_data.z_offset = 4;
|
|
10454
|
+
en_axis_data.increment = 6;
|
|
10455
|
+
fft_concat = {x: [], y: [], z: []};
|
|
10456
|
+
|
|
10457
|
+
var fsr_mult = .00006;
|
|
10458
|
+
var fsr_text = "";
|
|
10459
|
+
|
|
10460
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
10461
|
+
case 0:
|
|
10462
|
+
fsr_mult = 0.00006;
|
|
10463
|
+
break;
|
|
10464
|
+
case 1:
|
|
10465
|
+
fsr_mult = 0.00012;
|
|
10466
|
+
break;
|
|
10467
|
+
case 2:
|
|
10468
|
+
fsr_mult = 0.00024;
|
|
10469
|
+
break;
|
|
10470
|
+
case 3:
|
|
10471
|
+
fsr_mult = 0.00049;
|
|
10472
|
+
break;
|
|
10473
|
+
}
|
|
10474
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
10475
|
+
case 0:
|
|
10476
|
+
fsr_text = "2g";
|
|
10477
|
+
break;
|
|
10478
|
+
case 1:
|
|
10479
|
+
fsr_text = "4g";
|
|
10480
|
+
break;
|
|
10481
|
+
case 2:
|
|
10482
|
+
fsr_text = "8g";
|
|
10483
|
+
break;
|
|
10484
|
+
case 3:
|
|
10485
|
+
fsr_text = "16g";
|
|
10486
|
+
break;
|
|
10487
|
+
}
|
|
10488
|
+
|
|
10489
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
10490
|
+
label++;
|
|
10491
|
+
|
|
10492
|
+
if('x_offset' in en_axis_data){
|
|
10493
|
+
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)));
|
|
10494
|
+
}
|
|
10495
|
+
if('y_offset' in en_axis_data){
|
|
10496
|
+
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)));
|
|
10497
|
+
}
|
|
10498
|
+
if('z_offset' in en_axis_data){
|
|
10499
|
+
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)));
|
|
10500
|
+
}
|
|
10501
|
+
}
|
|
10502
|
+
var fft_concat_obj = {
|
|
10503
|
+
mode: payload[8],
|
|
10504
|
+
msg_type: msg_type,
|
|
10505
|
+
time_id: [
|
|
10506
|
+
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
10507
|
+
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
10508
|
+
].join(':'),
|
|
10509
|
+
mac_address: deviceAddr,
|
|
10510
|
+
fsr: fsr_text,
|
|
10511
|
+
odr: globalDevices[deviceAddr].odr,
|
|
10512
|
+
temperature: globalDevices[deviceAddr].temperature,
|
|
10513
|
+
total_samples: label,
|
|
10514
|
+
fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
|
|
10515
|
+
data: fft_concat
|
|
10516
|
+
};
|
|
10517
|
+
sensor_data = fft_concat_obj;
|
|
10518
|
+
delete globalDevices[deviceAddr];
|
|
10519
|
+
return sensor_data;
|
|
10520
|
+
}
|
|
10521
|
+
else{
|
|
10287
10522
|
return;
|
|
10288
10523
|
}
|
|
10289
10524
|
}
|
|
@@ -10747,179 +10982,65 @@ function sensor_types(parent){
|
|
|
10747
10982
|
|
|
10748
10983
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
10749
10984
|
if(expected_packets != 1){
|
|
10750
|
-
// if
|
|
10751
|
-
if(
|
|
10752
|
-
console.log('
|
|
10753
|
-
|
|
10754
|
-
console.log(current_packet);
|
|
10755
|
-
console.log(expected_packets);
|
|
10756
|
-
console.log(current_packet in globalDevices[deviceAddr].data);
|
|
10757
|
-
console.log(current_packet == 1);
|
|
10758
|
-
console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
|
|
10759
|
-
if(this.hasOwnProperty('failure_no')){
|
|
10760
|
-
this.failure_no = this.failure_no + 1;
|
|
10761
|
-
}
|
|
10762
|
-
else{
|
|
10763
|
-
this.failure_no = 1;
|
|
10764
|
-
}
|
|
10765
|
-
if(this.hasOwnProperty('failure_no')){
|
|
10766
|
-
console.log('####falure no');
|
|
10767
|
-
console.log(this.failure_no);
|
|
10768
|
-
}
|
|
10769
|
-
// console.log(globalDevices[deviceAddr].data);
|
|
10770
|
-
delete globalDevices[deviceAddr];
|
|
10771
|
-
if(current_packet != 1){
|
|
10772
|
-
return;
|
|
10773
|
-
} else{
|
|
10774
|
-
var mode = payload[8];
|
|
10775
|
-
var odr = msbLsb(payload[9], payload[10]);
|
|
10776
|
-
var fsr = payload[11] >> 5;
|
|
10777
|
-
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10778
|
-
|
|
10779
|
-
globalDevices[deviceAddr] = {
|
|
10780
|
-
// stream_size: expected_packets,
|
|
10781
|
-
data: {},
|
|
10782
|
-
odr: odr,
|
|
10783
|
-
mo: mode,
|
|
10784
|
-
fsr: fsr,
|
|
10785
|
-
hour: hour,
|
|
10786
|
-
minute: minute,
|
|
10787
|
-
temperature: temperature,
|
|
10788
|
-
}
|
|
10789
|
-
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10790
|
-
return;
|
|
10791
|
-
}
|
|
10792
|
-
}
|
|
10793
|
-
else{
|
|
10794
|
-
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10795
|
-
}
|
|
10796
|
-
}
|
|
10797
|
-
else{
|
|
10798
|
-
var mode = payload[8];
|
|
10799
|
-
var odr = msbLsb(payload[9], payload[10]);
|
|
10800
|
-
var fsr = payload[11] >> 5;
|
|
10801
|
-
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10802
|
-
|
|
10803
|
-
globalDevices[deviceAddr] = {
|
|
10804
|
-
// stream_size: expected_packets,
|
|
10805
|
-
data: {},
|
|
10806
|
-
odr: odr,
|
|
10807
|
-
mo: mode,
|
|
10808
|
-
fsr: fsr,
|
|
10809
|
-
hour: hour,
|
|
10810
|
-
minute: minute,
|
|
10811
|
-
temperature: temperature,
|
|
10812
|
-
}
|
|
10813
|
-
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10814
|
-
}
|
|
10815
|
-
if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
|
|
10816
|
-
var raw_data = new Array();
|
|
10817
|
-
|
|
10818
|
-
for(const packet in globalDevices[deviceAddr].data){
|
|
10819
|
-
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
10820
|
-
}
|
|
10821
|
-
var label = 0;
|
|
10822
|
-
|
|
10823
|
-
var fft = new Array();
|
|
10824
|
-
var fft_concat = {};
|
|
10825
|
-
|
|
10826
|
-
var en_axis_data = {};
|
|
10827
|
-
en_axis_data.x_offset = 0;
|
|
10828
|
-
en_axis_data.y_offset = 2;
|
|
10829
|
-
en_axis_data.z_offset = 4;
|
|
10830
|
-
en_axis_data.increment = 6;
|
|
10831
|
-
fft_concat = {x: [], y: [], z: []};
|
|
10832
|
-
|
|
10833
|
-
var fsr_mult = .00006;
|
|
10834
|
-
var fsr_text = "";
|
|
10835
|
-
switch(globalDevices[deviceAddr].fsr){
|
|
10836
|
-
case 0:
|
|
10837
|
-
fsr_mult = 0.00006;
|
|
10838
|
-
break;
|
|
10839
|
-
case 1:
|
|
10840
|
-
fsr_mult = 0.00012;
|
|
10841
|
-
break;
|
|
10842
|
-
case 2:
|
|
10843
|
-
fsr_mult = 0.00024;
|
|
10844
|
-
break;
|
|
10845
|
-
case 3:
|
|
10846
|
-
fsr_mult = 0.00049;
|
|
10847
|
-
break;
|
|
10848
|
-
}
|
|
10849
|
-
switch(globalDevices[deviceAddr].fsr){
|
|
10850
|
-
case 0:
|
|
10851
|
-
fsr_text = "2g";
|
|
10852
|
-
break;
|
|
10853
|
-
case 1:
|
|
10854
|
-
fsr_text = "4g";
|
|
10855
|
-
break;
|
|
10856
|
-
case 2:
|
|
10857
|
-
fsr_text = "8g";
|
|
10858
|
-
break;
|
|
10859
|
-
case 3:
|
|
10860
|
-
fsr_text = "16g";
|
|
10861
|
-
break;
|
|
10985
|
+
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
10986
|
+
if (globalDevices[deviceAddr].last_packet_counter == current_packet){
|
|
10987
|
+
console.log('Duplicated message')
|
|
10988
|
+
return;
|
|
10862
10989
|
}
|
|
10990
|
+
// if current packet is equal to 1 or last packet counter is higher thant current packet
|
|
10991
|
+
if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
|
|
10992
|
+
// clear stream
|
|
10993
|
+
delete globalDevices[deviceAddr];
|
|
10994
|
+
// create new stream
|
|
10995
|
+
var mode = payload[8];
|
|
10996
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
10997
|
+
var fsr = payload[11] >> 5;
|
|
10998
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10863
10999
|
|
|
10864
|
-
|
|
10865
|
-
|
|
10866
|
-
|
|
10867
|
-
|
|
10868
|
-
|
|
10869
|
-
|
|
10870
|
-
|
|
10871
|
-
|
|
10872
|
-
}
|
|
10873
|
-
if('z_offset' in en_axis_data){
|
|
10874
|
-
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)));
|
|
11000
|
+
globalDevices[deviceAddr] = {
|
|
11001
|
+
data: {},
|
|
11002
|
+
odr: odr,
|
|
11003
|
+
mo: mode,
|
|
11004
|
+
fsr: fsr,
|
|
11005
|
+
hour: hour,
|
|
11006
|
+
minute: minute,
|
|
11007
|
+
temperature: temperature,
|
|
10875
11008
|
}
|
|
10876
|
-
|
|
10877
|
-
|
|
10878
|
-
|
|
10879
|
-
var probe = '';
|
|
10880
|
-
if(payload[7] & 8){
|
|
10881
|
-
probe = '2';
|
|
11009
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
11010
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
11011
|
+
return;
|
|
10882
11012
|
}
|
|
10883
11013
|
else{
|
|
10884
|
-
|
|
10885
|
-
|
|
10886
|
-
|
|
10887
|
-
var fft_concat_obj = {
|
|
10888
|
-
mode: payload[8],
|
|
10889
|
-
msg_type: msg_type,
|
|
10890
|
-
probe: probe,
|
|
10891
|
-
time_id: [
|
|
10892
|
-
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
10893
|
-
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
10894
|
-
].join(':'),
|
|
10895
|
-
probe: probe,
|
|
10896
|
-
mac_address: deviceAddr,
|
|
10897
|
-
fsr: fsr_text,
|
|
10898
|
-
odr: globalDevices[deviceAddr].odr,
|
|
10899
|
-
temperature: globalDevices[deviceAddr].temperature,
|
|
10900
|
-
total_samples: label,
|
|
10901
|
-
data: fft_concat
|
|
10902
|
-
};
|
|
10903
|
-
sensor_data = fft_concat_obj;
|
|
10904
|
-
delete globalDevices[deviceAddr];
|
|
10905
|
-
if(this.hasOwnProperty('failure_no')){
|
|
10906
|
-
console.log('####falure no');
|
|
10907
|
-
console.log(this.failure_no);
|
|
11014
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
11015
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10908
11016
|
}
|
|
10909
|
-
|
|
10910
|
-
return sensor_data;
|
|
10911
11017
|
}
|
|
10912
11018
|
else{
|
|
10913
|
-
|
|
11019
|
+
var mode = payload[8];
|
|
11020
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
11021
|
+
var fsr = payload[11] >> 5;
|
|
11022
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
11023
|
+
|
|
11024
|
+
globalDevices[deviceAddr] = {
|
|
11025
|
+
data: {},
|
|
11026
|
+
odr: odr,
|
|
11027
|
+
mo: mode,
|
|
11028
|
+
fsr: fsr,
|
|
11029
|
+
hour: hour,
|
|
11030
|
+
minute: minute,
|
|
11031
|
+
temperature: temperature,
|
|
11032
|
+
}
|
|
11033
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
11034
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10914
11035
|
}
|
|
10915
|
-
}
|
|
11036
|
+
}
|
|
11037
|
+
else{
|
|
10916
11038
|
var mode = payload[8];
|
|
10917
11039
|
var odr = msbLsb(payload[9], payload[10]);
|
|
10918
11040
|
var fsr = payload[11] >> 5;
|
|
10919
11041
|
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10920
11042
|
|
|
10921
11043
|
globalDevices[deviceAddr] = {
|
|
10922
|
-
// stream_size: expected_packets,
|
|
10923
11044
|
data: {},
|
|
10924
11045
|
odr: odr,
|
|
10925
11046
|
mo: mode,
|
|
@@ -10928,7 +11049,101 @@ function sensor_types(parent){
|
|
|
10928
11049
|
minute: minute,
|
|
10929
11050
|
temperature: temperature,
|
|
10930
11051
|
}
|
|
11052
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10931
11053
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
11054
|
+
}
|
|
11055
|
+
if(current_packet == expected_packets){
|
|
11056
|
+
var raw_data = new Array();
|
|
11057
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
11058
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
11059
|
+
}
|
|
11060
|
+
var label = 0;
|
|
11061
|
+
|
|
11062
|
+
var fft = new Array();
|
|
11063
|
+
var fft_concat = {};
|
|
11064
|
+
|
|
11065
|
+
var en_axis_data = {};
|
|
11066
|
+
en_axis_data.x_offset = 0;
|
|
11067
|
+
en_axis_data.y_offset = 2;
|
|
11068
|
+
en_axis_data.z_offset = 4;
|
|
11069
|
+
en_axis_data.increment = 6;
|
|
11070
|
+
fft_concat = {x: [], y: [], z: []};
|
|
11071
|
+
|
|
11072
|
+
var fsr_mult = .00006;
|
|
11073
|
+
var fsr_text = "";
|
|
11074
|
+
|
|
11075
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
11076
|
+
case 0:
|
|
11077
|
+
fsr_mult = 0.00006;
|
|
11078
|
+
break;
|
|
11079
|
+
case 1:
|
|
11080
|
+
fsr_mult = 0.00012;
|
|
11081
|
+
break;
|
|
11082
|
+
case 2:
|
|
11083
|
+
fsr_mult = 0.00024;
|
|
11084
|
+
break;
|
|
11085
|
+
case 3:
|
|
11086
|
+
fsr_mult = 0.00049;
|
|
11087
|
+
break;
|
|
11088
|
+
}
|
|
11089
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
11090
|
+
case 0:
|
|
11091
|
+
fsr_text = "2g";
|
|
11092
|
+
break;
|
|
11093
|
+
case 1:
|
|
11094
|
+
fsr_text = "4g";
|
|
11095
|
+
break;
|
|
11096
|
+
case 2:
|
|
11097
|
+
fsr_text = "8g";
|
|
11098
|
+
break;
|
|
11099
|
+
case 3:
|
|
11100
|
+
fsr_text = "16g";
|
|
11101
|
+
break;
|
|
11102
|
+
}
|
|
11103
|
+
|
|
11104
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
11105
|
+
label++;
|
|
11106
|
+
|
|
11107
|
+
if('x_offset' in en_axis_data){
|
|
11108
|
+
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)));
|
|
11109
|
+
}
|
|
11110
|
+
if('y_offset' in en_axis_data){
|
|
11111
|
+
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)));
|
|
11112
|
+
}
|
|
11113
|
+
if('z_offset' in en_axis_data){
|
|
11114
|
+
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)));
|
|
11115
|
+
}
|
|
11116
|
+
}
|
|
11117
|
+
// If 4th bit is 1 the packet is from the second probe, if 0 from the first
|
|
11118
|
+
var probe = '';
|
|
11119
|
+
if(payload[7] & 8){
|
|
11120
|
+
probe = '2';
|
|
11121
|
+
}
|
|
11122
|
+
else{
|
|
11123
|
+
probe = '1';
|
|
11124
|
+
}
|
|
11125
|
+
|
|
11126
|
+
var fft_concat_obj = {
|
|
11127
|
+
mode: payload[8],
|
|
11128
|
+
msg_type: msg_type,
|
|
11129
|
+
probe: probe,
|
|
11130
|
+
time_id: [
|
|
11131
|
+
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
11132
|
+
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
11133
|
+
].join(':'),
|
|
11134
|
+
mac_address: deviceAddr,
|
|
11135
|
+
fsr: fsr_text,
|
|
11136
|
+
odr: globalDevices[deviceAddr].odr,
|
|
11137
|
+
temperature: globalDevices[deviceAddr].temperature,
|
|
11138
|
+
total_samples: label,
|
|
11139
|
+
fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
|
|
11140
|
+
data: fft_concat
|
|
11141
|
+
};
|
|
11142
|
+
sensor_data = fft_concat_obj;
|
|
11143
|
+
delete globalDevices[deviceAddr];
|
|
11144
|
+
return sensor_data;
|
|
11145
|
+
}
|
|
11146
|
+
else{
|
|
10932
11147
|
return;
|
|
10933
11148
|
}
|
|
10934
11149
|
}
|
|
@@ -12264,8 +12479,8 @@ function sensor_types(parent){
|
|
|
12264
12479
|
}
|
|
12265
12480
|
else{
|
|
12266
12481
|
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
12267
|
-
|
|
12268
|
-
|
|
12482
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
12483
|
+
}
|
|
12269
12484
|
}
|
|
12270
12485
|
else{
|
|
12271
12486
|
var mode = payload[8];
|
|
@@ -13120,21 +13335,25 @@ function sensor_types(parent){
|
|
|
13120
13335
|
'118': {
|
|
13121
13336
|
name: 'Dual Pressure and Temperature Sensor',
|
|
13122
13337
|
parse: (payload, parsed, mac) => {
|
|
13123
|
-
|
|
13124
|
-
|
|
13125
|
-
|
|
13126
|
-
|
|
13127
|
-
|
|
13128
|
-
|
|
13129
|
-
|
|
13130
|
-
|
|
13131
|
-
|
|
13132
|
-
|
|
13133
|
-
|
|
13134
|
-
|
|
13135
|
-
|
|
13136
|
-
|
|
13137
|
-
|
|
13338
|
+
let res = {};
|
|
13339
|
+
if(!(payload[7] & 2)){
|
|
13340
|
+
res.pressure_s1 = signInt(payload.slice(8, 12).reduce(msbLsb),32)/100;
|
|
13341
|
+
res.temperature_s1 = signInt(payload.slice(12, 14).reduce(msbLsb),16)/100;
|
|
13342
|
+
}else{
|
|
13343
|
+
res.pressure_s1 = null;
|
|
13344
|
+
res.temperature_s1 = null;
|
|
13345
|
+
res.error_s1 = 'Error: Sensor Probe 1 communication error';
|
|
13346
|
+
}
|
|
13347
|
+
if(!(payload[7] & 4)){
|
|
13348
|
+
res.pressure_s2 = signInt(payload.slice(14, 18).reduce(msbLsb),32)/100;
|
|
13349
|
+
res.temperature_s2 = signInt(payload.slice(18, 20).reduce(msbLsb),16)/100;
|
|
13350
|
+
}else{
|
|
13351
|
+
res.pressure_s2 = null;
|
|
13352
|
+
res.temperature_s2 = null;
|
|
13353
|
+
res.error_s2 = 'Error: Sensor Probe 2 communication error';
|
|
13354
|
+
}
|
|
13355
|
+
return res;
|
|
13356
|
+
},
|
|
13138
13357
|
'parse_fly': (frame) => {
|
|
13139
13358
|
let psi_1;
|
|
13140
13359
|
let psi_2;
|
|
@@ -13577,7 +13796,7 @@ function sensor_types(parent){
|
|
|
13577
13796
|
return {
|
|
13578
13797
|
'firmware': frame[2],
|
|
13579
13798
|
'fsr': frame_data.fsr,
|
|
13580
|
-
'
|
|
13799
|
+
'boot_up_time': frame[17] + " sec",
|
|
13581
13800
|
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
13582
13801
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
13583
13802
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
@@ -13591,7 +13810,7 @@ function sensor_types(parent){
|
|
|
13591
13810
|
'machine_values': {
|
|
13592
13811
|
'firmware': frame[2],
|
|
13593
13812
|
'fsr': frame[16],
|
|
13594
|
-
'
|
|
13813
|
+
'boot_up_time': frame[17],
|
|
13595
13814
|
'adc_pin_reading': frame.slice(18, 20),
|
|
13596
13815
|
'auto_check_interval': frame.slice(20, 22),
|
|
13597
13816
|
'auto_check_percentage': frame.slice(22, 24),
|
|
@@ -14348,7 +14567,7 @@ function sensor_types(parent){
|
|
|
14348
14567
|
};
|
|
14349
14568
|
},
|
|
14350
14569
|
'parse_fly': (frame) => {
|
|
14351
|
-
if(frame[2] >
|
|
14570
|
+
if(frame[2] > 3){
|
|
14352
14571
|
let date = [
|
|
14353
14572
|
String(frame.slice(20, 22).reduce(msbLsb)),
|
|
14354
14573
|
String(frame[22]).padStart(2, '0'),
|
|
@@ -16906,8 +17125,8 @@ function sensor_types(parent){
|
|
|
16906
17125
|
return {
|
|
16907
17126
|
'firmware': frame[2],
|
|
16908
17127
|
'fsr': frame_data.fsr,
|
|
16909
|
-
'
|
|
16910
|
-
'
|
|
17128
|
+
'boot_up_time': frame[17] + " sec",
|
|
17129
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
16911
17130
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
16912
17131
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
16913
17132
|
'always_on': frame_data.always_on,
|
|
@@ -16920,8 +17139,8 @@ function sensor_types(parent){
|
|
|
16920
17139
|
'machine_values': {
|
|
16921
17140
|
'firmware': frame[2],
|
|
16922
17141
|
'fsr': frame[16],
|
|
16923
|
-
'
|
|
16924
|
-
'
|
|
17142
|
+
'boot_up_time': frame[17],
|
|
17143
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
16925
17144
|
'auto_check_interval': frame.slice(20, 22),
|
|
16926
17145
|
'auto_check_percentage': frame.slice(22, 24),
|
|
16927
17146
|
'always_on': frame[24],
|
|
@@ -17517,6 +17736,167 @@ function sensor_types(parent){
|
|
|
17517
17736
|
}
|
|
17518
17737
|
}
|
|
17519
17738
|
},
|
|
17739
|
+
'545': {
|
|
17740
|
+
name: 'Fox Thermal Flow Sensor',
|
|
17741
|
+
parse: (payload, parsed, mac) => {
|
|
17742
|
+
let sensor_status = '';
|
|
17743
|
+
const error_message = [];
|
|
17744
|
+
if(payload[8] & 1){
|
|
17745
|
+
error_message.push('pwr_up');
|
|
17746
|
+
}
|
|
17747
|
+
if(payload[8] & 2){
|
|
17748
|
+
error_message.push('flw_hi_lim');
|
|
17749
|
+
}
|
|
17750
|
+
if(payload[8] & 4){
|
|
17751
|
+
error_message.push('flw_lo_lim');
|
|
17752
|
+
}
|
|
17753
|
+
if(payload[8] & 8){
|
|
17754
|
+
error_message.push('tmp_hi_lim');
|
|
17755
|
+
}
|
|
17756
|
+
if(payload[8] & 16){
|
|
17757
|
+
error_message.push('tmp_lo_lim');
|
|
17758
|
+
}
|
|
17759
|
+
if(payload[8] & 32){
|
|
17760
|
+
error_message.push('sensor_oor');
|
|
17761
|
+
}
|
|
17762
|
+
if(payload[8] & 64){
|
|
17763
|
+
error_message.push('gas_mix_err');
|
|
17764
|
+
}
|
|
17765
|
+
if(payload[8] & 128){
|
|
17766
|
+
error_message.push('inc_set');
|
|
17767
|
+
}
|
|
17768
|
+
if(error_message.length === 0){
|
|
17769
|
+
sensor_status = 'ready';
|
|
17770
|
+
} else {
|
|
17771
|
+
sensor_status = error_message.join(', ');
|
|
17772
|
+
}
|
|
17773
|
+
|
|
17774
|
+
const calv_value = payload.slice(9, 11).reduce(msbLsb) / 100;
|
|
17775
|
+
let cal_val = '';
|
|
17776
|
+
if(calv_value < 0.80){
|
|
17777
|
+
cal_val = 'pass';
|
|
17778
|
+
} else if(calv_value <= 1.0){
|
|
17779
|
+
cal_val = 'warning';
|
|
17780
|
+
} else {
|
|
17781
|
+
cal_val = 'fail';
|
|
17782
|
+
}
|
|
17783
|
+
|
|
17784
|
+
return {
|
|
17785
|
+
sensor_status: sensor_status,
|
|
17786
|
+
calcv_value: payload.slice(9, 11).reduce(msbLsb) / 100,
|
|
17787
|
+
calcv_status: cal_val,
|
|
17788
|
+
flow: payload.slice(11, 15).reduce(msbLsb)/100,
|
|
17789
|
+
ghv: payload.slice(15, 19).reduce(msbLsb)/100,
|
|
17790
|
+
total_flow: payload.slice(19, 27).reduce(msbLsb)/100,
|
|
17791
|
+
temperature: payload.slice(27,29).reduce(msbLsb)/100,
|
|
17792
|
+
density: payload.slice(29, 31).reduce(msbLsb)/100
|
|
17793
|
+
};
|
|
17794
|
+
},
|
|
17795
|
+
'parse_fly': (frame) => {
|
|
17796
|
+
let frame_data = {};
|
|
17797
|
+
switch(frame[12]){
|
|
17798
|
+
case 0:
|
|
17799
|
+
frame_data.flow_unit = 'scf_m';
|
|
17800
|
+
break;
|
|
17801
|
+
case 1:
|
|
17802
|
+
frame_data.flow_unit = 'scf_h';
|
|
17803
|
+
break;
|
|
17804
|
+
case 2:
|
|
17805
|
+
frame_data.flow_unit = 'nm3_h';
|
|
17806
|
+
break;
|
|
17807
|
+
case 3:
|
|
17808
|
+
frame_data.flow_unit = 'nm3_m';
|
|
17809
|
+
break;
|
|
17810
|
+
case 4:
|
|
17811
|
+
frame_data.flow_unit = 'kg_h';
|
|
17812
|
+
break;
|
|
17813
|
+
case 5:
|
|
17814
|
+
frame_data.flow_unit = 'kg_m';
|
|
17815
|
+
break;
|
|
17816
|
+
case 6:
|
|
17817
|
+
frame_data.flow_unit = 'kg_s';
|
|
17818
|
+
break;
|
|
17819
|
+
case 7:
|
|
17820
|
+
frame_data.flow_unit = 'lbs_h';
|
|
17821
|
+
break;
|
|
17822
|
+
case 8:
|
|
17823
|
+
frame_data.flow_unit = 'lbs_m';
|
|
17824
|
+
break;
|
|
17825
|
+
case 9:
|
|
17826
|
+
frame_data.flow_unit = 'lbs_s';
|
|
17827
|
+
break;
|
|
17828
|
+
case 10:
|
|
17829
|
+
frame_data.flow_unit = 'nlp_h';
|
|
17830
|
+
break;
|
|
17831
|
+
case 11:
|
|
17832
|
+
frame_data.flow_unit = 'nlp_m';
|
|
17833
|
+
break;
|
|
17834
|
+
case 12:
|
|
17835
|
+
frame_data.flow_unit = 'mmscf_d';
|
|
17836
|
+
break;
|
|
17837
|
+
case 13:
|
|
17838
|
+
frame_data.flow_unit = 'lbs_d';
|
|
17839
|
+
break;
|
|
17840
|
+
case 14:
|
|
17841
|
+
frame_data.flow_unit = 'slp_m';
|
|
17842
|
+
break;
|
|
17843
|
+
case 15:
|
|
17844
|
+
frame_data.flow_unit = 'nlp_s';
|
|
17845
|
+
break;
|
|
17846
|
+
case 16:
|
|
17847
|
+
frame_data.flow_unit = 'mscf_d';
|
|
17848
|
+
break;
|
|
17849
|
+
case 17:
|
|
17850
|
+
frame_data.flow_unit = 'sm3_h';
|
|
17851
|
+
break;
|
|
17852
|
+
case 18:
|
|
17853
|
+
frame_data.flow_unit = 'mt_h';
|
|
17854
|
+
break;
|
|
17855
|
+
case 19:
|
|
17856
|
+
frame_data.flow_unit = 'nm3_d';
|
|
17857
|
+
break;
|
|
17858
|
+
case 20:
|
|
17859
|
+
frame_data.flow_unit = 'mmscf_m';
|
|
17860
|
+
break;
|
|
17861
|
+
case 21:
|
|
17862
|
+
frame_data.flow_unit = 'scf_d';
|
|
17863
|
+
break;
|
|
17864
|
+
case 22:
|
|
17865
|
+
frame_data.flow_unit = 'mcf_d';
|
|
17866
|
+
break;
|
|
17867
|
+
case 23:
|
|
17868
|
+
frame_data.flow_unit = 'sm3_m';
|
|
17869
|
+
break;
|
|
17870
|
+
case 24:
|
|
17871
|
+
frame_data.flow_unit = 'sm3_d';
|
|
17872
|
+
break;
|
|
17873
|
+
}
|
|
17874
|
+
switch(frame[13]){
|
|
17875
|
+
case 0:
|
|
17876
|
+
frame_data.temperature_unit = 'F';
|
|
17877
|
+
break;
|
|
17878
|
+
case 1:
|
|
17879
|
+
frame_data.temperature_unit = 'C';
|
|
17880
|
+
break;
|
|
17881
|
+
}
|
|
17882
|
+
return {
|
|
17883
|
+
'firmware': frame[2],
|
|
17884
|
+
'flow_unit': frame_data.flow_unit,
|
|
17885
|
+
'temperature_unit': frame_data.temperature_unit,
|
|
17886
|
+
'hardware_id': frame.slice(14, 17),
|
|
17887
|
+
'report_rate': frame.slice(17, 21).reduce(msbLsb),
|
|
17888
|
+
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
|
|
17889
|
+
'machine_values': {
|
|
17890
|
+
'firmware': frame[2],
|
|
17891
|
+
'flow_unit': frame[12],
|
|
17892
|
+
'temperature_unit': frame[13],
|
|
17893
|
+
'hardware_id': frame.slice(14, 17),
|
|
17894
|
+
'report_rate': frame.slice(17, 21),
|
|
17895
|
+
'tx_life_counter': frame.slice(21, 25)
|
|
17896
|
+
}
|
|
17897
|
+
}
|
|
17898
|
+
}
|
|
17899
|
+
},
|
|
17520
17900
|
'1010': {
|
|
17521
17901
|
name: 'RS232 Wireless Converter',
|
|
17522
17902
|
parse: (d) => {
|