@ncd-io/node-red-enterprise-sensors 1.4.7 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +961 -584
- package/package.json +1 -1
- package/wireless.html +424 -86
- 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){
|
|
@@ -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],
|
|
@@ -4265,8 +4318,8 @@ function sensor_types(parent){
|
|
|
4265
4318
|
return {
|
|
4266
4319
|
'firmware': frame[2],
|
|
4267
4320
|
'fsr': frame_data.fsr,
|
|
4268
|
-
'
|
|
4269
|
-
'
|
|
4321
|
+
'boot_up_time': frame[17] + " sec",
|
|
4322
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
4270
4323
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4271
4324
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4272
4325
|
'always_on': frame_data.always_on,
|
|
@@ -4279,8 +4332,8 @@ function sensor_types(parent){
|
|
|
4279
4332
|
'machine_values': {
|
|
4280
4333
|
'firmware': frame[2],
|
|
4281
4334
|
'fsr': frame[16],
|
|
4282
|
-
'
|
|
4283
|
-
'
|
|
4335
|
+
'boot_up_time': frame[17],
|
|
4336
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
4284
4337
|
'auto_check_interval': frame.slice(20, 22),
|
|
4285
4338
|
'auto_check_percentage': frame.slice(22, 24),
|
|
4286
4339
|
'always_on': frame[24],
|
|
@@ -4354,8 +4407,8 @@ function sensor_types(parent){
|
|
|
4354
4407
|
return {
|
|
4355
4408
|
'firmware': frame[2],
|
|
4356
4409
|
'fsr': frame_data.fsr,
|
|
4357
|
-
'
|
|
4358
|
-
'
|
|
4410
|
+
'boot_up_time': frame[17] + " sec",
|
|
4411
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
4359
4412
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4360
4413
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4361
4414
|
'always_on': frame_data.always_on,
|
|
@@ -4368,8 +4421,8 @@ function sensor_types(parent){
|
|
|
4368
4421
|
'machine_values': {
|
|
4369
4422
|
'firmware': frame[2],
|
|
4370
4423
|
'fsr': frame[16],
|
|
4371
|
-
'
|
|
4372
|
-
'
|
|
4424
|
+
'boot_up_time': frame[17],
|
|
4425
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
4373
4426
|
'auto_check_interval': frame.slice(20, 22),
|
|
4374
4427
|
'auto_check_percentage': frame.slice(22, 24),
|
|
4375
4428
|
'always_on': frame[24],
|
|
@@ -4805,8 +4858,8 @@ function sensor_types(parent){
|
|
|
4805
4858
|
return {
|
|
4806
4859
|
'firmware': frame[2],
|
|
4807
4860
|
'fsr': frame_data.fsr,
|
|
4808
|
-
'
|
|
4809
|
-
'
|
|
4861
|
+
'boot_up_time': frame[17] + " sec",
|
|
4862
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
4810
4863
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4811
4864
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4812
4865
|
'always_on': frame_data.always_on,
|
|
@@ -4819,8 +4872,8 @@ function sensor_types(parent){
|
|
|
4819
4872
|
'machine_values': {
|
|
4820
4873
|
'firmware': frame[2],
|
|
4821
4874
|
'fsr': frame[16],
|
|
4822
|
-
'
|
|
4823
|
-
'
|
|
4875
|
+
'boot_up_time': frame[17],
|
|
4876
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
4824
4877
|
'auto_check_interval': frame.slice(20, 22),
|
|
4825
4878
|
'auto_check_percentage': frame.slice(22, 24),
|
|
4826
4879
|
'always_on': frame[24],
|
|
@@ -5021,7 +5074,7 @@ function sensor_types(parent){
|
|
|
5021
5074
|
'calibration_days': frame[12] + ' days',
|
|
5022
5075
|
'sensor_update_rate':frame.slice(13, 15).reduce(msbLsb) + ' sec',
|
|
5023
5076
|
'heater_duration': frame.slice(15, 17).reduce(msbLsb) + ' msec',
|
|
5024
|
-
'heater_temperature': frame.slice(17, 19).reduce(msbLsb) + '
|
|
5077
|
+
'heater_temperature': frame.slice(17, 19).reduce(msbLsb) + ' C',
|
|
5025
5078
|
'hardware_id': frame.slice(19, 22),
|
|
5026
5079
|
'report_rate': frame.slice(22, 26).reduce(msbLsb) + ' sec',
|
|
5027
5080
|
'tx_counter': frame.slice(26, 30).reduce(msbLsb),
|
|
@@ -5101,8 +5154,8 @@ function sensor_types(parent){
|
|
|
5101
5154
|
return {
|
|
5102
5155
|
'firmware': frame[2],
|
|
5103
5156
|
'fsr': frame_data.fsr,
|
|
5104
|
-
'
|
|
5105
|
-
'
|
|
5157
|
+
'boot_up_time': frame[17] + " sec",
|
|
5158
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
5106
5159
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
5107
5160
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
5108
5161
|
'always_on': frame_data.always_on,
|
|
@@ -5115,8 +5168,8 @@ function sensor_types(parent){
|
|
|
5115
5168
|
'machine_values': {
|
|
5116
5169
|
'firmware': frame[2],
|
|
5117
5170
|
'fsr': frame[16],
|
|
5118
|
-
'
|
|
5119
|
-
'
|
|
5171
|
+
'boot_up_time': frame[17],
|
|
5172
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
5120
5173
|
'auto_check_interval': frame.slice(20, 22),
|
|
5121
5174
|
'auto_check_percentage': frame.slice(22, 24),
|
|
5122
5175
|
'always_on': frame[24],
|
|
@@ -5174,8 +5227,8 @@ function sensor_types(parent){
|
|
|
5174
5227
|
return {
|
|
5175
5228
|
'firmware': frame[2],
|
|
5176
5229
|
'fsr': frame_data.fsr,
|
|
5177
|
-
'
|
|
5178
|
-
'
|
|
5230
|
+
'boot_up_time': frame[17] + " sec",
|
|
5231
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
5179
5232
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
5180
5233
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
5181
5234
|
'always_on': frame_data.always_on,
|
|
@@ -5188,8 +5241,8 @@ function sensor_types(parent){
|
|
|
5188
5241
|
'machine_values': {
|
|
5189
5242
|
'firmware': frame[2],
|
|
5190
5243
|
'fsr': frame[16],
|
|
5191
|
-
'
|
|
5192
|
-
'
|
|
5244
|
+
'boot_up_time': frame[17],
|
|
5245
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
5193
5246
|
'auto_check_interval': frame.slice(20, 22),
|
|
5194
5247
|
'auto_check_percentage': frame.slice(22, 24),
|
|
5195
5248
|
'always_on': frame[24],
|
|
@@ -7858,8 +7911,8 @@ function sensor_types(parent){
|
|
|
7858
7911
|
return {
|
|
7859
7912
|
'firmware': frame[2],
|
|
7860
7913
|
'fsr': frame_data.fsr,
|
|
7861
|
-
'
|
|
7862
|
-
'
|
|
7914
|
+
'boot_up_time': frame[17] + " sec",
|
|
7915
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
7863
7916
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
7864
7917
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
7865
7918
|
'always_on': frame_data.always_on,
|
|
@@ -7870,8 +7923,8 @@ function sensor_types(parent){
|
|
|
7870
7923
|
'machine_values': {
|
|
7871
7924
|
'firmware': frame[2],
|
|
7872
7925
|
'fsr': frame[16],
|
|
7873
|
-
'
|
|
7874
|
-
'
|
|
7926
|
+
'boot_up_time': frame[17],
|
|
7927
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
7875
7928
|
'auto_check_interval': frame.slice(20, 22),
|
|
7876
7929
|
'auto_check_threshold': frame.slice(22, 24),
|
|
7877
7930
|
'always_on': frame[24],
|
|
@@ -7942,8 +7995,8 @@ function sensor_types(parent){
|
|
|
7942
7995
|
return {
|
|
7943
7996
|
'firmware': frame[2],
|
|
7944
7997
|
'fsr': frame_data.fsr,
|
|
7945
|
-
'
|
|
7946
|
-
'
|
|
7998
|
+
'boot_up_time': frame[17] + " sec",
|
|
7999
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
7947
8000
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
7948
8001
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
7949
8002
|
'always_on': frame_data.always_on,
|
|
@@ -7956,8 +8009,8 @@ function sensor_types(parent){
|
|
|
7956
8009
|
'machine_values': {
|
|
7957
8010
|
'firmware': frame[2],
|
|
7958
8011
|
'fsr': frame[16],
|
|
7959
|
-
'
|
|
7960
|
-
'
|
|
8012
|
+
'boot_up_time': frame[17],
|
|
8013
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
7961
8014
|
'auto_check_interval': frame.slice(20, 22),
|
|
7962
8015
|
'auto_check_percentage': frame.slice(22, 24),
|
|
7963
8016
|
'always_on': frame[24],
|
|
@@ -8014,8 +8067,8 @@ function sensor_types(parent){
|
|
|
8014
8067
|
return {
|
|
8015
8068
|
'firmware': frame[2],
|
|
8016
8069
|
'fsr': frame_data.fsr,
|
|
8017
|
-
'
|
|
8018
|
-
'
|
|
8070
|
+
'boot_up_time': frame[17] + " sec",
|
|
8071
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
8019
8072
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
8020
8073
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
8021
8074
|
'always_on': frame_data.always_on,
|
|
@@ -8028,8 +8081,8 @@ function sensor_types(parent){
|
|
|
8028
8081
|
'machine_values': {
|
|
8029
8082
|
'firmware': frame[2],
|
|
8030
8083
|
'fsr': frame[16],
|
|
8031
|
-
'
|
|
8032
|
-
'
|
|
8084
|
+
'boot_up_time': frame[17],
|
|
8085
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8033
8086
|
'auto_check_interval': frame.slice(20, 22),
|
|
8034
8087
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8035
8088
|
'always_on': frame[24],
|
|
@@ -8390,8 +8443,8 @@ function sensor_types(parent){
|
|
|
8390
8443
|
return {
|
|
8391
8444
|
'firmware': frame[2],
|
|
8392
8445
|
'fsr': frame_data.fsr,
|
|
8393
|
-
'
|
|
8394
|
-
'
|
|
8446
|
+
'boot_up_time': frame[17] + " sec",
|
|
8447
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
8395
8448
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
8396
8449
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
8397
8450
|
'always_on': frame_data.always_on,
|
|
@@ -8404,8 +8457,8 @@ function sensor_types(parent){
|
|
|
8404
8457
|
'machine_values': {
|
|
8405
8458
|
'firmware': frame[2],
|
|
8406
8459
|
'fsr': frame[16],
|
|
8407
|
-
'
|
|
8408
|
-
'
|
|
8460
|
+
'boot_up_time': frame[17],
|
|
8461
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8409
8462
|
'auto_check_interval': frame.slice(20, 22),
|
|
8410
8463
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8411
8464
|
'always_on': frame[24],
|
|
@@ -8480,14 +8533,46 @@ function sensor_types(parent){
|
|
|
8480
8533
|
name: 'Custom Wireless Accelerometer Sensor',
|
|
8481
8534
|
parse: (payload, parsed, mac) => {
|
|
8482
8535
|
if(payload[9] === 0){ // mode raw
|
|
8536
|
+
var sensor_type = payload[8];
|
|
8483
8537
|
var deviceAddr = mac;
|
|
8484
8538
|
var data = {};
|
|
8485
|
-
switch(
|
|
8539
|
+
switch(sensor_type){
|
|
8486
8540
|
case 1:
|
|
8487
8541
|
data.sensor_type = 'Accel';
|
|
8542
|
+
switch(payload[11]){
|
|
8543
|
+
case 0:
|
|
8544
|
+
data.odr = '8000Hz';
|
|
8545
|
+
break;
|
|
8546
|
+
case 1:
|
|
8547
|
+
data.odr = '4000Hz';
|
|
8548
|
+
break;
|
|
8549
|
+
case 2:
|
|
8550
|
+
data.odr = '2000Hz';
|
|
8551
|
+
break;
|
|
8552
|
+
case 3:
|
|
8553
|
+
data.odr = '1000Hz';
|
|
8554
|
+
break;
|
|
8555
|
+
case 4:
|
|
8556
|
+
data.odr = '100Hz';
|
|
8557
|
+
break;
|
|
8558
|
+
}
|
|
8488
8559
|
break;
|
|
8489
8560
|
case 2:
|
|
8490
8561
|
data.sensor_type = 'gyro';
|
|
8562
|
+
switch(payload[11]){
|
|
8563
|
+
case 0:
|
|
8564
|
+
data.odr = '125Hz';
|
|
8565
|
+
break;
|
|
8566
|
+
case 1:
|
|
8567
|
+
data.odr = '250Hz';
|
|
8568
|
+
break;
|
|
8569
|
+
case 2:
|
|
8570
|
+
data.odr = '500Hz';
|
|
8571
|
+
break;
|
|
8572
|
+
case 3:
|
|
8573
|
+
data.odr = '1000Hz';
|
|
8574
|
+
break;
|
|
8575
|
+
}
|
|
8491
8576
|
break;
|
|
8492
8577
|
}
|
|
8493
8578
|
switch(payload[10]){
|
|
@@ -8500,7 +8585,7 @@ function sensor_types(parent){
|
|
|
8500
8585
|
}
|
|
8501
8586
|
|
|
8502
8587
|
var mode = payload[9];
|
|
8503
|
-
var odr =
|
|
8588
|
+
var odr = data.odr;
|
|
8504
8589
|
var en_axis = payload[12] & 7;
|
|
8505
8590
|
var fsr = payload[12] >> 5;
|
|
8506
8591
|
var hour = payload[13];
|
|
@@ -8511,23 +8596,6 @@ function sensor_types(parent){
|
|
|
8511
8596
|
var current_packet = payload.slice(21, 23).reduce(msbLsb);
|
|
8512
8597
|
var data_start = 23;
|
|
8513
8598
|
|
|
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
8599
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
8532
8600
|
if(expected_packets != 1){
|
|
8533
8601
|
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
@@ -8613,28 +8681,28 @@ function sensor_types(parent){
|
|
|
8613
8681
|
|
|
8614
8682
|
/* Evaluate sensor type */
|
|
8615
8683
|
if(payload[8] == 1){ // accelerometer
|
|
8616
|
-
var fsr_mult = 0.
|
|
8684
|
+
var fsr_mult = 0.00732;
|
|
8617
8685
|
var fsr_text = "";
|
|
8618
8686
|
switch(globalDevices[deviceAddr].fsr){
|
|
8619
8687
|
case 0:
|
|
8620
|
-
fsr_mult = 0.
|
|
8688
|
+
fsr_mult = 0.00732;
|
|
8621
8689
|
break;
|
|
8622
8690
|
case 1:
|
|
8623
|
-
fsr_mult = 0.
|
|
8691
|
+
fsr_mult = 0.01464;
|
|
8624
8692
|
break;
|
|
8625
8693
|
case 2:
|
|
8626
|
-
fsr_mult = 0.
|
|
8694
|
+
fsr_mult = 0.02929;
|
|
8627
8695
|
break;
|
|
8628
8696
|
}
|
|
8629
8697
|
switch(globalDevices[deviceAddr].fsr){
|
|
8630
8698
|
case 0:
|
|
8631
|
-
fsr_text = "
|
|
8699
|
+
fsr_text = "15g";
|
|
8632
8700
|
break;
|
|
8633
8701
|
case 1:
|
|
8634
|
-
fsr_text = "
|
|
8702
|
+
fsr_text = "30g";
|
|
8635
8703
|
break;
|
|
8636
8704
|
case 2:
|
|
8637
|
-
fsr_text = "
|
|
8705
|
+
fsr_text = "60g";
|
|
8638
8706
|
break;
|
|
8639
8707
|
}
|
|
8640
8708
|
}else{ // gyro
|
|
@@ -8707,210 +8775,395 @@ function sensor_types(parent){
|
|
|
8707
8775
|
}
|
|
8708
8776
|
}
|
|
8709
8777
|
},
|
|
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
8778
|
'parse_fly': (frame) => {
|
|
8865
8779
|
let firmware = frame[2];
|
|
8866
|
-
if(firmware >
|
|
8780
|
+
if(firmware > 1){
|
|
8867
8781
|
let frame_data = {};
|
|
8868
|
-
|
|
8869
|
-
|
|
8870
|
-
|
|
8871
|
-
|
|
8872
|
-
|
|
8782
|
+
switch(frame[12]){
|
|
8783
|
+
case 0:
|
|
8784
|
+
frame_data.gyro_odr = 125;
|
|
8785
|
+
break;
|
|
8786
|
+
case 1:
|
|
8787
|
+
frame_data.gyro_odr = 250;
|
|
8788
|
+
break;
|
|
8789
|
+
case 2:
|
|
8790
|
+
frame_data.gyro_odr = 500;
|
|
8791
|
+
break;
|
|
8792
|
+
case 3:
|
|
8793
|
+
frame_data.gyro_odr = 1000;
|
|
8794
|
+
break;
|
|
8873
8795
|
}
|
|
8874
|
-
|
|
8875
|
-
switch(frame[16]){
|
|
8796
|
+
switch(frame[13]){
|
|
8876
8797
|
case 0:
|
|
8877
|
-
frame_data.
|
|
8878
|
-
|
|
8798
|
+
frame_data.acc_odr = 8000;
|
|
8799
|
+
break;
|
|
8879
8800
|
case 1:
|
|
8880
|
-
frame_data.
|
|
8881
|
-
|
|
8801
|
+
frame_data.acc_odr = 4000;
|
|
8802
|
+
break;
|
|
8882
8803
|
case 2:
|
|
8883
|
-
frame_data.
|
|
8884
|
-
|
|
8804
|
+
frame_data.acc_odr = 2000;
|
|
8805
|
+
break;
|
|
8885
8806
|
case 3:
|
|
8886
|
-
frame_data.
|
|
8887
|
-
|
|
8807
|
+
frame_data.acc_odr = 1000;
|
|
8808
|
+
break;
|
|
8888
8809
|
case 4:
|
|
8889
|
-
frame_data.
|
|
8890
|
-
|
|
8810
|
+
frame_data.acc_odr = 100;
|
|
8811
|
+
break;
|
|
8812
|
+
}
|
|
8813
|
+
switch(frame[15]){
|
|
8814
|
+
case 0:
|
|
8815
|
+
frame_data.hpf_cutoff = false;
|
|
8816
|
+
break;
|
|
8817
|
+
case 1:
|
|
8818
|
+
frame_data.hpf_cutoff = 0.00247;
|
|
8819
|
+
break;
|
|
8820
|
+
case 2:
|
|
8821
|
+
frame_data.hpf_cutoff = 0.00062084;
|
|
8822
|
+
break;
|
|
8823
|
+
case 3:
|
|
8824
|
+
frame_data.hpf_cutoff = 0.00015545;
|
|
8825
|
+
break;
|
|
8826
|
+
case 4:
|
|
8827
|
+
frame_data.hpf_cutoff = 0.00003862;
|
|
8828
|
+
break;
|
|
8891
8829
|
case 5:
|
|
8892
|
-
frame_data.
|
|
8893
|
-
|
|
8830
|
+
frame_data.hpf_cutoff = 0.00000954;
|
|
8831
|
+
break;
|
|
8832
|
+
case 6:
|
|
8833
|
+
frame_data.hpf_cutoff = 0.00000238;
|
|
8834
|
+
break;
|
|
8894
8835
|
}
|
|
8895
|
-
|
|
8896
|
-
|
|
8897
|
-
|
|
8898
|
-
|
|
8899
|
-
|
|
8900
|
-
|
|
8901
|
-
|
|
8902
|
-
|
|
8903
|
-
|
|
8904
|
-
|
|
8905
|
-
|
|
8906
|
-
|
|
8907
|
-
|
|
8908
|
-
|
|
8909
|
-
|
|
8836
|
+
switch(frame[16]){
|
|
8837
|
+
case 0:
|
|
8838
|
+
frame_data.fsr_acc = "15g";
|
|
8839
|
+
break;
|
|
8840
|
+
case 1:
|
|
8841
|
+
frame_data.fsr_acc = "30g";
|
|
8842
|
+
break;
|
|
8843
|
+
case 2:
|
|
8844
|
+
frame_data.fsr_acc = "60g";
|
|
8845
|
+
break;
|
|
8846
|
+
}
|
|
8847
|
+
switch(frame[17]){
|
|
8848
|
+
case 0:
|
|
8849
|
+
frame_data.fsr_gyro = "250dps";
|
|
8850
|
+
break;
|
|
8851
|
+
case 1:
|
|
8852
|
+
frame_data.fsr_gyro = "500dps";
|
|
8853
|
+
break;
|
|
8854
|
+
case 2:
|
|
8855
|
+
frame_data.fsr_gyro = "1000dps";
|
|
8856
|
+
break;
|
|
8857
|
+
case 3:
|
|
8858
|
+
frame_data.fsr_gyro = "2000dps";
|
|
8859
|
+
break;
|
|
8860
|
+
}
|
|
8861
|
+
switch(frame[18]){
|
|
8862
|
+
case 1:
|
|
8863
|
+
frame_data.en_axis = "X Axis";
|
|
8864
|
+
break;
|
|
8865
|
+
case 2:
|
|
8866
|
+
frame_data.en_axis = "Y Axis";
|
|
8867
|
+
break;
|
|
8868
|
+
case 3:
|
|
8869
|
+
frame_data.en_axis = "X-Y Axes";
|
|
8870
|
+
break;
|
|
8871
|
+
case 4:
|
|
8872
|
+
frame_data.en_axis = "Z Axis";
|
|
8873
|
+
break;
|
|
8874
|
+
case 5:
|
|
8875
|
+
frame_data.en_axis = "X-Z Axes";
|
|
8876
|
+
break;
|
|
8877
|
+
case 6:
|
|
8878
|
+
frame_data.en_axis = "Y-Z Axes";
|
|
8879
|
+
break;
|
|
8880
|
+
case 7:
|
|
8881
|
+
frame_data.en_axis = "All Axes";
|
|
8882
|
+
break;
|
|
8883
|
+
}
|
|
8884
|
+
switch(frame[19]){
|
|
8885
|
+
case 0:
|
|
8886
|
+
frame_data.sampling_interval = 5;
|
|
8887
|
+
break;
|
|
8888
|
+
case 1:
|
|
8889
|
+
frame_data.sampling_interval = 10;
|
|
8890
|
+
break;
|
|
8891
|
+
case 2:
|
|
8892
|
+
frame_data.sampling_interval = 15;
|
|
8893
|
+
break;
|
|
8894
|
+
case 3:
|
|
8895
|
+
frame_data.sampling_interval = 20;
|
|
8896
|
+
break;
|
|
8897
|
+
case 4:
|
|
8898
|
+
frame_data.sampling_interval = 30;
|
|
8899
|
+
break;
|
|
8900
|
+
case 5:
|
|
8901
|
+
frame_data.sampling_interval = 60;
|
|
8902
|
+
break;
|
|
8903
|
+
case 6:
|
|
8904
|
+
frame_data.sampling_interval = 120;
|
|
8905
|
+
break;
|
|
8906
|
+
case 7:
|
|
8907
|
+
frame_data.sampling_interval = 180;
|
|
8908
|
+
break;
|
|
8909
|
+
}
|
|
8910
|
+
switch(frame[21]){
|
|
8911
|
+
case 0:
|
|
8912
|
+
frame_data.en_sensors = "acc_only";
|
|
8913
|
+
break;
|
|
8914
|
+
case 1:
|
|
8915
|
+
frame_data.en_sensors = "gyro_only";
|
|
8916
|
+
break;
|
|
8917
|
+
case 2:
|
|
8918
|
+
frame_data.en_sensors = "both_enabled";
|
|
8919
|
+
break;
|
|
8920
|
+
}
|
|
8921
|
+
frame_data.hpf_cutoff = (frame_data.hpf_cutoff)?((frame_data.hpf_cutoff * frame_data.acc_odr).toFixed(2) + 'Hz'):'disabled';
|
|
8922
|
+
return {
|
|
8923
|
+
'firmware': firmware,
|
|
8924
|
+
'gyro_sample_rate': frame_data.gyro_odr + 'Hz',
|
|
8925
|
+
'acc_sample_rate': frame_data.acc_odr + 'Hz',
|
|
8926
|
+
'sampling_duration': (frame[14]* 50) + 'msec',
|
|
8927
|
+
'hpf_cutoff': frame_data.hpf_cutoff,
|
|
8928
|
+
'acc_fsr': frame_data.fsr_acc,
|
|
8929
|
+
'gyro_fsr': frame_data.fsr_gyro,
|
|
8930
|
+
'axis_enabled': frame_data.en_axis,
|
|
8931
|
+
'sampling_interval': frame_data.sampling_interval + 'min',
|
|
8932
|
+
'accelerometer_threshold': (frame[20]* 32) + "mg",
|
|
8933
|
+
'enabled_sensors': frame_data.en_sensors,
|
|
8934
|
+
'max_num_of_motion_tx_per_interval': frame[22],
|
|
8935
|
+
'rtc': [
|
|
8936
|
+
String(frame[23]).padStart(2, '0'),
|
|
8937
|
+
String(frame[24]).padStart(2, '0'),
|
|
8938
|
+
String(frame[25]).padStart(2, '0')
|
|
8939
|
+
].join(':'),
|
|
8940
|
+
'hardware_id': frame.slice(26, 29),
|
|
8941
|
+
'report_rate': frame.slice(29, 33).reduce(msbLsb),
|
|
8942
|
+
'tx_life_counter': frame.slice(33, 37).reduce(msbLsb),
|
|
8943
|
+
'machine_values': {
|
|
8944
|
+
'firmware': frame[2],
|
|
8945
|
+
'gyro_sample_rate': frame[12],
|
|
8946
|
+
'acc_sample_rate': frame[13],
|
|
8947
|
+
'sampling_duration': frame[14],
|
|
8948
|
+
'hpf_cutoff': frame[15],
|
|
8949
|
+
'acc_fsr': frame[16],
|
|
8950
|
+
'gyro_fsr': frame[17],
|
|
8951
|
+
'axis_enabled': frame[18],
|
|
8952
|
+
'sampling_interval': frame[19],
|
|
8953
|
+
'accelerometer_threshold': frame[20],
|
|
8954
|
+
'enabled_sensors': frame[21],
|
|
8955
|
+
'max_num_of_motion_tx_per_interval': frame[22],
|
|
8956
|
+
'hour': frame[23],
|
|
8957
|
+
'minute': frame[24],
|
|
8958
|
+
'second': frame[25],
|
|
8959
|
+
'hardware_id': frame.slice(26, 29),
|
|
8960
|
+
'report_rate': frame.slice(29, 33),
|
|
8961
|
+
'tx_life_counter': frame.slice(33, 37)
|
|
8962
|
+
}
|
|
8963
|
+
}
|
|
8964
|
+
}else{
|
|
8965
|
+
let frame_data = {};
|
|
8966
|
+
switch(frame[12]){
|
|
8967
|
+
case 0:
|
|
8968
|
+
frame_data.odr = 125;
|
|
8969
|
+
break;
|
|
8970
|
+
case 1:
|
|
8971
|
+
frame_data.odr = 250;
|
|
8972
|
+
break;
|
|
8973
|
+
case 2:
|
|
8974
|
+
frame_data.odr = 500;
|
|
8975
|
+
break;
|
|
8976
|
+
case 3:
|
|
8977
|
+
frame_data.odr = 1000;
|
|
8978
|
+
break;
|
|
8979
|
+
}
|
|
8980
|
+
switch(frame[15]){
|
|
8981
|
+
case 0:
|
|
8982
|
+
frame_data.fsr_acc = "10g";
|
|
8983
|
+
break;
|
|
8984
|
+
case 1:
|
|
8985
|
+
frame_data.fsr_acc = "20g";
|
|
8986
|
+
break;
|
|
8987
|
+
case 2:
|
|
8988
|
+
frame_data.fsr_acc = "40g";
|
|
8989
|
+
break;
|
|
8990
|
+
}
|
|
8991
|
+
switch(frame[16]){
|
|
8992
|
+
case 0:
|
|
8993
|
+
frame_data.fsr_gyro = "250dps";
|
|
8994
|
+
break;
|
|
8995
|
+
case 1:
|
|
8996
|
+
frame_data.fsr_gyro = "500dps";
|
|
8997
|
+
break;
|
|
8998
|
+
case 2:
|
|
8999
|
+
frame_data.fsr_gyro = "1000dps";
|
|
9000
|
+
break;
|
|
9001
|
+
case 3:
|
|
9002
|
+
frame_data.fsr_gyro = "2000dps";
|
|
9003
|
+
break;
|
|
9004
|
+
}
|
|
9005
|
+
switch(frame[17]){
|
|
9006
|
+
case 7:
|
|
9007
|
+
frame_data.en_axis = "all";
|
|
9008
|
+
break;
|
|
9009
|
+
}
|
|
9010
|
+
switch(frame[20]){
|
|
9011
|
+
case 1:
|
|
9012
|
+
frame_data.en_sensors = "gyro_only";
|
|
9013
|
+
break;
|
|
9014
|
+
case 2:
|
|
9015
|
+
frame_data.en_sensors = "accel_only";
|
|
9016
|
+
break;
|
|
9017
|
+
case 3:
|
|
9018
|
+
frame_data.en_sensors = "all_enabled";
|
|
9019
|
+
break;
|
|
9020
|
+
}
|
|
9021
|
+
switch(frame[18]){
|
|
9022
|
+
case 0:
|
|
9023
|
+
frame_data.sampling_interval = 5;
|
|
9024
|
+
break;
|
|
9025
|
+
case 1:
|
|
9026
|
+
frame_data.sampling_interval = 10;
|
|
9027
|
+
break;
|
|
9028
|
+
case 2:
|
|
9029
|
+
frame_data.sampling_interval = 15;
|
|
9030
|
+
break;
|
|
9031
|
+
case 3:
|
|
9032
|
+
frame_data.sampling_interval = 20;
|
|
9033
|
+
break;
|
|
9034
|
+
case 4:
|
|
9035
|
+
frame_data.sampling_interval = 30;
|
|
9036
|
+
break;
|
|
9037
|
+
case 5:
|
|
9038
|
+
frame_data.sampling_interval = 60;
|
|
9039
|
+
break;
|
|
9040
|
+
case 6:
|
|
9041
|
+
frame_data.sampling_interval = 120;
|
|
9042
|
+
break;
|
|
9043
|
+
case 7:
|
|
9044
|
+
frame_data.sampling_interval = 180;
|
|
9045
|
+
break;
|
|
9046
|
+
}
|
|
9047
|
+
switch(frame[14]){
|
|
9048
|
+
case 0:
|
|
9049
|
+
frame_data.hpf_cutoff = 0.00247;
|
|
9050
|
+
break;
|
|
9051
|
+
case 1:
|
|
9052
|
+
frame_data.hpf_cutoff = 0.00062084;
|
|
9053
|
+
break;
|
|
9054
|
+
case 2:
|
|
9055
|
+
frame_data.hpf_cutoff = 0.00015545;
|
|
9056
|
+
break;
|
|
9057
|
+
case 3:
|
|
9058
|
+
frame_data.hpf_cutoff = 0.00003862;
|
|
9059
|
+
break;
|
|
9060
|
+
case 4:
|
|
9061
|
+
frame_data.hpf_cutoff = 0.00000954;
|
|
9062
|
+
break;
|
|
9063
|
+
case 5:
|
|
9064
|
+
frame_data.hpf_cutoff = 0.00000238;
|
|
9065
|
+
break;
|
|
9066
|
+
}
|
|
9067
|
+
return {
|
|
9068
|
+
'firmware': firmware,
|
|
9069
|
+
'sample_rate': frame_data.odr + 'Hz',
|
|
9070
|
+
'sampling_duration': (frame[13]* 50) + 'msec',
|
|
9071
|
+
'hpf_cutoff': (frame_data.hpf_cutoff * frame_data.odr).toFixed(2) + 'Hz',
|
|
9072
|
+
'acc_fsr': frame_data.fsr_acc,
|
|
9073
|
+
'gyro_fsr': frame_data.fsr_gyro,
|
|
9074
|
+
'axis_enabled': frame_data.en_axis,
|
|
9075
|
+
'sampling_interval': frame_data.sampling_interval + 'min',
|
|
9076
|
+
'accelerometer_threshold': (frame[19]* 32) + "mg",
|
|
9077
|
+
'enabled_sensors': frame_data.en_sensors,
|
|
9078
|
+
'rtc': [
|
|
9079
|
+
String(frame[21]).padStart(2, '0'),
|
|
9080
|
+
String(frame[22]).padStart(2, '0'),
|
|
9081
|
+
String(frame[23]).padStart(2, '0')
|
|
9082
|
+
].join(':'),
|
|
9083
|
+
'hardware_id': frame.slice(24, 27),
|
|
9084
|
+
'report_rate': frame.slice(27, 31).reduce(msbLsb),
|
|
9085
|
+
'tx_life_counter': frame.slice(31, 35).reduce(msbLsb),
|
|
9086
|
+
'machine_values': {
|
|
9087
|
+
'firmware': frame[2],
|
|
9088
|
+
'odr': frame[12],
|
|
9089
|
+
'sampling_duration': frame[13],
|
|
9090
|
+
'hpf_cutoff': frame[14],
|
|
9091
|
+
'acc_fsr': frame[15],
|
|
9092
|
+
'gyro_fsr': frame[16],
|
|
9093
|
+
'axis_enabled': frame[17],
|
|
9094
|
+
'sampling_interval': frame[18],
|
|
9095
|
+
'accelerometer_threshold': frame[19],
|
|
9096
|
+
'enabled_sensors': frame[20],
|
|
9097
|
+
'hour': frame[21],
|
|
9098
|
+
'minute': frame[22],
|
|
9099
|
+
'second': frame[23],
|
|
9100
|
+
'hardware_id': frame.slice(24, 27),
|
|
9101
|
+
'report_rate': frame.slice(27, 31),
|
|
9102
|
+
'tx_life_counter': frame.slice(31, 35)
|
|
9103
|
+
}
|
|
9104
|
+
}
|
|
9105
|
+
}
|
|
9106
|
+
}
|
|
9107
|
+
},
|
|
9108
|
+
'105': {
|
|
9109
|
+
name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
|
|
9110
|
+
parse: (d) => {
|
|
9111
|
+
return {
|
|
9112
|
+
raw_adc: d.slice(0, 2).reduce(msbLsb),
|
|
9113
|
+
ma: d.slice(2, 4).reduce(msbLsb) / 100,
|
|
9114
|
+
db: d.slice(4, 6).reduce(msbLsb) / 100
|
|
9115
|
+
};
|
|
9116
|
+
},
|
|
9117
|
+
'parse_fly': (frame) => {
|
|
9118
|
+
let firmware = frame[2];
|
|
9119
|
+
if(firmware > 13){ // firmware 14 and above
|
|
9120
|
+
let frame_data = {};
|
|
9121
|
+
let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
|
|
9122
|
+
if(!auto_check_interval){
|
|
9123
|
+
frame_data.auto_check_interval = 'Disabled';
|
|
9124
|
+
}else{
|
|
9125
|
+
frame_data.auto_check_interval = auto_check_interval + " sec";
|
|
9126
|
+
}
|
|
9127
|
+
frame_data.always_on = frame[24]?"Enabled":"Disabled";
|
|
9128
|
+
switch(frame[16]){
|
|
9129
|
+
case 0:
|
|
9130
|
+
frame_data.fsr = "+-6.114 V";
|
|
9131
|
+
break;
|
|
9132
|
+
case 1:
|
|
9133
|
+
frame_data.fsr = "+-4.096 V";
|
|
9134
|
+
break;
|
|
9135
|
+
case 2:
|
|
9136
|
+
frame_data.fsr = "+-2.048 V";
|
|
9137
|
+
break;
|
|
9138
|
+
case 3:
|
|
9139
|
+
frame_data.fsr = "+-1.024 V";
|
|
9140
|
+
break;
|
|
9141
|
+
case 4:
|
|
9142
|
+
frame_data.fsr = "+-0.512 V";
|
|
9143
|
+
break;
|
|
9144
|
+
case 5:
|
|
9145
|
+
frame_data.fsr = "+-0.256 V";
|
|
9146
|
+
break;
|
|
9147
|
+
}
|
|
9148
|
+
return {
|
|
9149
|
+
'firmware': frame[2],
|
|
9150
|
+
'fsr': frame_data.fsr,
|
|
9151
|
+
'boot_up_time': frame[17] + " sec",
|
|
9152
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
9153
|
+
'auto_check_interval': frame_data.auto_check_interval,
|
|
9154
|
+
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
9155
|
+
'always_on': frame_data.always_on,
|
|
9156
|
+
'calibration_one': frame.slice(25, 29).reduce(msbLsb),
|
|
9157
|
+
'calibration_two':frame.slice(29, 33).reduce(msbLsb),
|
|
9158
|
+
'calibration_three':frame.slice(33, 37).reduce(msbLsb),
|
|
9159
|
+
'hardware_id': frame.slice(37, 40),
|
|
9160
|
+
'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
|
|
9161
|
+
'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
|
|
9162
|
+
'machine_values': {
|
|
8910
9163
|
'firmware': frame[2],
|
|
8911
9164
|
'fsr': frame[16],
|
|
8912
|
-
'
|
|
8913
|
-
'
|
|
9165
|
+
'boot_up_time': frame[17],
|
|
9166
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8914
9167
|
'auto_check_interval': frame.slice(20, 22),
|
|
8915
9168
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8916
9169
|
'always_on': frame[24],
|
|
@@ -8971,8 +9224,8 @@ function sensor_types(parent){
|
|
|
8971
9224
|
return {
|
|
8972
9225
|
'firmware': frame[2],
|
|
8973
9226
|
'fsr': frame_data.fsr,
|
|
8974
|
-
'
|
|
8975
|
-
'
|
|
9227
|
+
'boot_up_time': frame[17] + " sec",
|
|
9228
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
8976
9229
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
8977
9230
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
8978
9231
|
'always_on': frame_data.always_on,
|
|
@@ -8985,8 +9238,8 @@ function sensor_types(parent){
|
|
|
8985
9238
|
'machine_values': {
|
|
8986
9239
|
'firmware': frame[2],
|
|
8987
9240
|
'fsr': frame[16],
|
|
8988
|
-
'
|
|
8989
|
-
'
|
|
9241
|
+
'boot_up_time': frame[17],
|
|
9242
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
8990
9243
|
'auto_check_interval': frame.slice(20, 22),
|
|
8991
9244
|
'auto_check_percentage': frame.slice(22, 24),
|
|
8992
9245
|
'always_on': frame[24],
|
|
@@ -9057,8 +9310,8 @@ function sensor_types(parent){
|
|
|
9057
9310
|
return {
|
|
9058
9311
|
'firmware': frame[2],
|
|
9059
9312
|
'fsr': frame_data.fsr,
|
|
9060
|
-
'
|
|
9061
|
-
'
|
|
9313
|
+
'boot_up_time': frame[17] + " sec",
|
|
9314
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
9062
9315
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
9063
9316
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
9064
9317
|
'always_on': frame_data.always_on,
|
|
@@ -9071,8 +9324,8 @@ function sensor_types(parent){
|
|
|
9071
9324
|
'machine_values': {
|
|
9072
9325
|
'firmware': frame[2],
|
|
9073
9326
|
'fsr': frame[16],
|
|
9074
|
-
'
|
|
9075
|
-
'
|
|
9327
|
+
'boot_up_time': frame[17],
|
|
9328
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
9076
9329
|
'auto_check_interval': frame.slice(20, 22),
|
|
9077
9330
|
'auto_check_percentage': frame.slice(22, 24),
|
|
9078
9331
|
'always_on': frame[24],
|
|
@@ -10111,51 +10364,36 @@ function sensor_types(parent){
|
|
|
10111
10364
|
|
|
10112
10365
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
10113
10366
|
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);
|
|
10367
|
+
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
10368
|
+
if (globalDevices[deviceAddr].last_packet_counter == current_packet){
|
|
10369
|
+
console.log('Duplicated message')
|
|
10370
|
+
return;
|
|
10371
|
+
}
|
|
10372
|
+
// if current packet is equal to 1 or last packet counter is higher thant current packet
|
|
10373
|
+
if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
|
|
10374
|
+
// clear stream
|
|
10134
10375
|
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;
|
|
10376
|
+
// create new stream
|
|
10377
|
+
var mode = payload[8];
|
|
10378
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
10379
|
+
var fsr = payload[11] >> 5;
|
|
10380
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10143
10381
|
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
|
|
10147
|
-
|
|
10148
|
-
|
|
10149
|
-
|
|
10150
|
-
|
|
10151
|
-
|
|
10152
|
-
temperature: temperature,
|
|
10153
|
-
}
|
|
10154
|
-
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10155
|
-
return;
|
|
10382
|
+
globalDevices[deviceAddr] = {
|
|
10383
|
+
data: {},
|
|
10384
|
+
odr: odr,
|
|
10385
|
+
mo: mode,
|
|
10386
|
+
fsr: fsr,
|
|
10387
|
+
hour: hour,
|
|
10388
|
+
minute: minute,
|
|
10389
|
+
temperature: temperature,
|
|
10156
10390
|
}
|
|
10391
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10392
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10393
|
+
return;
|
|
10157
10394
|
}
|
|
10158
10395
|
else{
|
|
10396
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10159
10397
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10160
10398
|
}
|
|
10161
10399
|
}
|
|
@@ -10166,7 +10404,6 @@ function sensor_types(parent){
|
|
|
10166
10404
|
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10167
10405
|
|
|
10168
10406
|
globalDevices[deviceAddr] = {
|
|
10169
|
-
// stream_size: expected_packets,
|
|
10170
10407
|
data: {},
|
|
10171
10408
|
odr: odr,
|
|
10172
10409
|
mo: mode,
|
|
@@ -10175,106 +10412,17 @@ function sensor_types(parent){
|
|
|
10175
10412
|
minute: minute,
|
|
10176
10413
|
temperature: temperature,
|
|
10177
10414
|
}
|
|
10415
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10178
10416
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10179
10417
|
}
|
|
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
|
-
|
|
10418
|
+
}
|
|
10419
|
+
else{
|
|
10271
10420
|
var mode = payload[8];
|
|
10272
10421
|
var odr = msbLsb(payload[9], payload[10]);
|
|
10273
10422
|
var fsr = payload[11] >> 5;
|
|
10274
10423
|
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10275
10424
|
|
|
10276
10425
|
globalDevices[deviceAddr] = {
|
|
10277
|
-
// stream_size: expected_packets,
|
|
10278
10426
|
data: {},
|
|
10279
10427
|
odr: odr,
|
|
10280
10428
|
mo: mode,
|
|
@@ -10283,7 +10431,91 @@ function sensor_types(parent){
|
|
|
10283
10431
|
minute: minute,
|
|
10284
10432
|
temperature: temperature,
|
|
10285
10433
|
}
|
|
10434
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10286
10435
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10436
|
+
}
|
|
10437
|
+
if(current_packet == expected_packets){
|
|
10438
|
+
var raw_data = new Array();
|
|
10439
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
10440
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
10441
|
+
}
|
|
10442
|
+
var label = 0;
|
|
10443
|
+
|
|
10444
|
+
var fft = new Array();
|
|
10445
|
+
var fft_concat = {};
|
|
10446
|
+
|
|
10447
|
+
var en_axis_data = {};
|
|
10448
|
+
en_axis_data.x_offset = 0;
|
|
10449
|
+
en_axis_data.y_offset = 2;
|
|
10450
|
+
en_axis_data.z_offset = 4;
|
|
10451
|
+
en_axis_data.increment = 6;
|
|
10452
|
+
fft_concat = {x: [], y: [], z: []};
|
|
10453
|
+
|
|
10454
|
+
var fsr_mult = .00006;
|
|
10455
|
+
var fsr_text = "";
|
|
10456
|
+
|
|
10457
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
10458
|
+
case 0:
|
|
10459
|
+
fsr_mult = 0.00006;
|
|
10460
|
+
break;
|
|
10461
|
+
case 1:
|
|
10462
|
+
fsr_mult = 0.00012;
|
|
10463
|
+
break;
|
|
10464
|
+
case 2:
|
|
10465
|
+
fsr_mult = 0.00024;
|
|
10466
|
+
break;
|
|
10467
|
+
case 3:
|
|
10468
|
+
fsr_mult = 0.00049;
|
|
10469
|
+
break;
|
|
10470
|
+
}
|
|
10471
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
10472
|
+
case 0:
|
|
10473
|
+
fsr_text = "2g";
|
|
10474
|
+
break;
|
|
10475
|
+
case 1:
|
|
10476
|
+
fsr_text = "4g";
|
|
10477
|
+
break;
|
|
10478
|
+
case 2:
|
|
10479
|
+
fsr_text = "8g";
|
|
10480
|
+
break;
|
|
10481
|
+
case 3:
|
|
10482
|
+
fsr_text = "16g";
|
|
10483
|
+
break;
|
|
10484
|
+
}
|
|
10485
|
+
|
|
10486
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
10487
|
+
label++;
|
|
10488
|
+
|
|
10489
|
+
if('x_offset' in en_axis_data){
|
|
10490
|
+
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)));
|
|
10491
|
+
}
|
|
10492
|
+
if('y_offset' in en_axis_data){
|
|
10493
|
+
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)));
|
|
10494
|
+
}
|
|
10495
|
+
if('z_offset' in en_axis_data){
|
|
10496
|
+
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)));
|
|
10497
|
+
}
|
|
10498
|
+
}
|
|
10499
|
+
var fft_concat_obj = {
|
|
10500
|
+
mode: payload[8],
|
|
10501
|
+
msg_type: msg_type,
|
|
10502
|
+
time_id: [
|
|
10503
|
+
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
10504
|
+
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
10505
|
+
].join(':'),
|
|
10506
|
+
mac_address: deviceAddr,
|
|
10507
|
+
fsr: fsr_text,
|
|
10508
|
+
odr: globalDevices[deviceAddr].odr,
|
|
10509
|
+
temperature: globalDevices[deviceAddr].temperature,
|
|
10510
|
+
total_samples: label,
|
|
10511
|
+
fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
|
|
10512
|
+
data: fft_concat
|
|
10513
|
+
};
|
|
10514
|
+
sensor_data = fft_concat_obj;
|
|
10515
|
+
delete globalDevices[deviceAddr];
|
|
10516
|
+
return sensor_data;
|
|
10517
|
+
}
|
|
10518
|
+
else{
|
|
10287
10519
|
return;
|
|
10288
10520
|
}
|
|
10289
10521
|
}
|
|
@@ -10747,179 +10979,65 @@ function sensor_types(parent){
|
|
|
10747
10979
|
|
|
10748
10980
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
10749
10981
|
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;
|
|
10982
|
+
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
10983
|
+
if (globalDevices[deviceAddr].last_packet_counter == current_packet){
|
|
10984
|
+
console.log('Duplicated message')
|
|
10985
|
+
return;
|
|
10862
10986
|
}
|
|
10987
|
+
// if current packet is equal to 1 or last packet counter is higher thant current packet
|
|
10988
|
+
if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
|
|
10989
|
+
// clear stream
|
|
10990
|
+
delete globalDevices[deviceAddr];
|
|
10991
|
+
// create new stream
|
|
10992
|
+
var mode = payload[8];
|
|
10993
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
10994
|
+
var fsr = payload[11] >> 5;
|
|
10995
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10863
10996
|
|
|
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)));
|
|
10997
|
+
globalDevices[deviceAddr] = {
|
|
10998
|
+
data: {},
|
|
10999
|
+
odr: odr,
|
|
11000
|
+
mo: mode,
|
|
11001
|
+
fsr: fsr,
|
|
11002
|
+
hour: hour,
|
|
11003
|
+
minute: minute,
|
|
11004
|
+
temperature: temperature,
|
|
10875
11005
|
}
|
|
10876
|
-
|
|
10877
|
-
|
|
10878
|
-
|
|
10879
|
-
var probe = '';
|
|
10880
|
-
if(payload[7] & 8){
|
|
10881
|
-
probe = '2';
|
|
11006
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
11007
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
11008
|
+
return;
|
|
10882
11009
|
}
|
|
10883
11010
|
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);
|
|
11011
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
11012
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10908
11013
|
}
|
|
10909
|
-
|
|
10910
|
-
return sensor_data;
|
|
10911
11014
|
}
|
|
10912
11015
|
else{
|
|
10913
|
-
|
|
11016
|
+
var mode = payload[8];
|
|
11017
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
11018
|
+
var fsr = payload[11] >> 5;
|
|
11019
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
11020
|
+
|
|
11021
|
+
globalDevices[deviceAddr] = {
|
|
11022
|
+
data: {},
|
|
11023
|
+
odr: odr,
|
|
11024
|
+
mo: mode,
|
|
11025
|
+
fsr: fsr,
|
|
11026
|
+
hour: hour,
|
|
11027
|
+
minute: minute,
|
|
11028
|
+
temperature: temperature,
|
|
11029
|
+
}
|
|
11030
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
11031
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
10914
11032
|
}
|
|
10915
|
-
}
|
|
11033
|
+
}
|
|
11034
|
+
else{
|
|
10916
11035
|
var mode = payload[8];
|
|
10917
11036
|
var odr = msbLsb(payload[9], payload[10]);
|
|
10918
11037
|
var fsr = payload[11] >> 5;
|
|
10919
11038
|
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
10920
11039
|
|
|
10921
11040
|
globalDevices[deviceAddr] = {
|
|
10922
|
-
// stream_size: expected_packets,
|
|
10923
11041
|
data: {},
|
|
10924
11042
|
odr: odr,
|
|
10925
11043
|
mo: mode,
|
|
@@ -10928,7 +11046,101 @@ function sensor_types(parent){
|
|
|
10928
11046
|
minute: minute,
|
|
10929
11047
|
temperature: temperature,
|
|
10930
11048
|
}
|
|
11049
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
10931
11050
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
11051
|
+
}
|
|
11052
|
+
if(current_packet == expected_packets){
|
|
11053
|
+
var raw_data = new Array();
|
|
11054
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
11055
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
11056
|
+
}
|
|
11057
|
+
var label = 0;
|
|
11058
|
+
|
|
11059
|
+
var fft = new Array();
|
|
11060
|
+
var fft_concat = {};
|
|
11061
|
+
|
|
11062
|
+
var en_axis_data = {};
|
|
11063
|
+
en_axis_data.x_offset = 0;
|
|
11064
|
+
en_axis_data.y_offset = 2;
|
|
11065
|
+
en_axis_data.z_offset = 4;
|
|
11066
|
+
en_axis_data.increment = 6;
|
|
11067
|
+
fft_concat = {x: [], y: [], z: []};
|
|
11068
|
+
|
|
11069
|
+
var fsr_mult = .00006;
|
|
11070
|
+
var fsr_text = "";
|
|
11071
|
+
|
|
11072
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
11073
|
+
case 0:
|
|
11074
|
+
fsr_mult = 0.00006;
|
|
11075
|
+
break;
|
|
11076
|
+
case 1:
|
|
11077
|
+
fsr_mult = 0.00012;
|
|
11078
|
+
break;
|
|
11079
|
+
case 2:
|
|
11080
|
+
fsr_mult = 0.00024;
|
|
11081
|
+
break;
|
|
11082
|
+
case 3:
|
|
11083
|
+
fsr_mult = 0.00049;
|
|
11084
|
+
break;
|
|
11085
|
+
}
|
|
11086
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
11087
|
+
case 0:
|
|
11088
|
+
fsr_text = "2g";
|
|
11089
|
+
break;
|
|
11090
|
+
case 1:
|
|
11091
|
+
fsr_text = "4g";
|
|
11092
|
+
break;
|
|
11093
|
+
case 2:
|
|
11094
|
+
fsr_text = "8g";
|
|
11095
|
+
break;
|
|
11096
|
+
case 3:
|
|
11097
|
+
fsr_text = "16g";
|
|
11098
|
+
break;
|
|
11099
|
+
}
|
|
11100
|
+
|
|
11101
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
11102
|
+
label++;
|
|
11103
|
+
|
|
11104
|
+
if('x_offset' in en_axis_data){
|
|
11105
|
+
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)));
|
|
11106
|
+
}
|
|
11107
|
+
if('y_offset' in en_axis_data){
|
|
11108
|
+
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)));
|
|
11109
|
+
}
|
|
11110
|
+
if('z_offset' in en_axis_data){
|
|
11111
|
+
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)));
|
|
11112
|
+
}
|
|
11113
|
+
}
|
|
11114
|
+
// If 4th bit is 1 the packet is from the second probe, if 0 from the first
|
|
11115
|
+
var probe = '';
|
|
11116
|
+
if(payload[7] & 8){
|
|
11117
|
+
probe = '2';
|
|
11118
|
+
}
|
|
11119
|
+
else{
|
|
11120
|
+
probe = '1';
|
|
11121
|
+
}
|
|
11122
|
+
|
|
11123
|
+
var fft_concat_obj = {
|
|
11124
|
+
mode: payload[8],
|
|
11125
|
+
msg_type: msg_type,
|
|
11126
|
+
probe: probe,
|
|
11127
|
+
time_id: [
|
|
11128
|
+
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
11129
|
+
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
11130
|
+
].join(':'),
|
|
11131
|
+
mac_address: deviceAddr,
|
|
11132
|
+
fsr: fsr_text,
|
|
11133
|
+
odr: globalDevices[deviceAddr].odr,
|
|
11134
|
+
temperature: globalDevices[deviceAddr].temperature,
|
|
11135
|
+
total_samples: label,
|
|
11136
|
+
fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / expected_packets) * 100).toFixed(2) + '%',
|
|
11137
|
+
data: fft_concat
|
|
11138
|
+
};
|
|
11139
|
+
sensor_data = fft_concat_obj;
|
|
11140
|
+
delete globalDevices[deviceAddr];
|
|
11141
|
+
return sensor_data;
|
|
11142
|
+
}
|
|
11143
|
+
else{
|
|
10932
11144
|
return;
|
|
10933
11145
|
}
|
|
10934
11146
|
}
|
|
@@ -12264,8 +12476,8 @@ function sensor_types(parent){
|
|
|
12264
12476
|
}
|
|
12265
12477
|
else{
|
|
12266
12478
|
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
12267
|
-
|
|
12268
|
-
|
|
12479
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
12480
|
+
}
|
|
12269
12481
|
}
|
|
12270
12482
|
else{
|
|
12271
12483
|
var mode = payload[8];
|
|
@@ -13120,21 +13332,25 @@ function sensor_types(parent){
|
|
|
13120
13332
|
'118': {
|
|
13121
13333
|
name: 'Dual Pressure and Temperature Sensor',
|
|
13122
13334
|
parse: (payload, parsed, mac) => {
|
|
13123
|
-
|
|
13124
|
-
|
|
13125
|
-
|
|
13126
|
-
|
|
13127
|
-
|
|
13128
|
-
|
|
13129
|
-
|
|
13130
|
-
|
|
13131
|
-
|
|
13132
|
-
|
|
13133
|
-
|
|
13134
|
-
|
|
13135
|
-
|
|
13136
|
-
|
|
13137
|
-
|
|
13335
|
+
let res = {};
|
|
13336
|
+
if(!(payload[7] & 2)){
|
|
13337
|
+
res.pressure_s1 = signInt(payload.slice(8, 12).reduce(msbLsb),16)/100;
|
|
13338
|
+
res.temperature_s1 = signInt(payload.slice(12, 14).reduce(msbLsb),16)/100;
|
|
13339
|
+
}else{
|
|
13340
|
+
res.pressure_s1 = null;
|
|
13341
|
+
res.temperature_s1 = null;
|
|
13342
|
+
res.error_s1 = 'Error: Sensor Probe 1 communication error';
|
|
13343
|
+
}
|
|
13344
|
+
if(!(payload[7] & 4)){
|
|
13345
|
+
res.pressure_s2 = signInt(payload.slice(14, 18).reduce(msbLsb),16)/100;
|
|
13346
|
+
res.temperature_s2 = signInt(payload.slice(18, 20).reduce(msbLsb),16)/100;
|
|
13347
|
+
}else{
|
|
13348
|
+
res.pressure_s2 = null;
|
|
13349
|
+
res.temperature_s2 = null;
|
|
13350
|
+
res.error_s2 = 'Error: Sensor Probe 2 communication error';
|
|
13351
|
+
}
|
|
13352
|
+
return res;
|
|
13353
|
+
},
|
|
13138
13354
|
'parse_fly': (frame) => {
|
|
13139
13355
|
let psi_1;
|
|
13140
13356
|
let psi_2;
|
|
@@ -13577,7 +13793,7 @@ function sensor_types(parent){
|
|
|
13577
13793
|
return {
|
|
13578
13794
|
'firmware': frame[2],
|
|
13579
13795
|
'fsr': frame_data.fsr,
|
|
13580
|
-
'
|
|
13796
|
+
'boot_up_time': frame[17] + " sec",
|
|
13581
13797
|
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
13582
13798
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
13583
13799
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
@@ -13591,7 +13807,7 @@ function sensor_types(parent){
|
|
|
13591
13807
|
'machine_values': {
|
|
13592
13808
|
'firmware': frame[2],
|
|
13593
13809
|
'fsr': frame[16],
|
|
13594
|
-
'
|
|
13810
|
+
'boot_up_time': frame[17],
|
|
13595
13811
|
'adc_pin_reading': frame.slice(18, 20),
|
|
13596
13812
|
'auto_check_interval': frame.slice(20, 22),
|
|
13597
13813
|
'auto_check_percentage': frame.slice(22, 24),
|
|
@@ -14348,7 +14564,7 @@ function sensor_types(parent){
|
|
|
14348
14564
|
};
|
|
14349
14565
|
},
|
|
14350
14566
|
'parse_fly': (frame) => {
|
|
14351
|
-
if(frame[2] >
|
|
14567
|
+
if(frame[2] > 3){
|
|
14352
14568
|
let date = [
|
|
14353
14569
|
String(frame.slice(20, 22).reduce(msbLsb)),
|
|
14354
14570
|
String(frame[22]).padStart(2, '0'),
|
|
@@ -16906,8 +17122,8 @@ function sensor_types(parent){
|
|
|
16906
17122
|
return {
|
|
16907
17123
|
'firmware': frame[2],
|
|
16908
17124
|
'fsr': frame_data.fsr,
|
|
16909
|
-
'
|
|
16910
|
-
'
|
|
17125
|
+
'boot_up_time': frame[17] + " sec",
|
|
17126
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
16911
17127
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
16912
17128
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
16913
17129
|
'always_on': frame_data.always_on,
|
|
@@ -16920,8 +17136,8 @@ function sensor_types(parent){
|
|
|
16920
17136
|
'machine_values': {
|
|
16921
17137
|
'firmware': frame[2],
|
|
16922
17138
|
'fsr': frame[16],
|
|
16923
|
-
'
|
|
16924
|
-
'
|
|
17139
|
+
'boot_up_time': frame[17],
|
|
17140
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
16925
17141
|
'auto_check_interval': frame.slice(20, 22),
|
|
16926
17142
|
'auto_check_percentage': frame.slice(22, 24),
|
|
16927
17143
|
'always_on': frame[24],
|
|
@@ -17517,6 +17733,167 @@ function sensor_types(parent){
|
|
|
17517
17733
|
}
|
|
17518
17734
|
}
|
|
17519
17735
|
},
|
|
17736
|
+
'545': {
|
|
17737
|
+
name: 'Fox Thermal Flow Sensor',
|
|
17738
|
+
parse: (payload, parsed, mac) => {
|
|
17739
|
+
let sensor_status = '';
|
|
17740
|
+
const error_message = [];
|
|
17741
|
+
if(payload[8] & 1){
|
|
17742
|
+
error_message.push('pwr_up');
|
|
17743
|
+
}
|
|
17744
|
+
if(payload[8] & 2){
|
|
17745
|
+
error_message.push('flw_hi_lim');
|
|
17746
|
+
}
|
|
17747
|
+
if(payload[8] & 4){
|
|
17748
|
+
error_message.push('flw_lo_lim');
|
|
17749
|
+
}
|
|
17750
|
+
if(payload[8] & 8){
|
|
17751
|
+
error_message.push('tmp_hi_lim');
|
|
17752
|
+
}
|
|
17753
|
+
if(payload[8] & 16){
|
|
17754
|
+
error_message.push('tmp_lo_lim');
|
|
17755
|
+
}
|
|
17756
|
+
if(payload[8] & 32){
|
|
17757
|
+
error_message.push('sensor_oor');
|
|
17758
|
+
}
|
|
17759
|
+
if(payload[8] & 64){
|
|
17760
|
+
error_message.push('gas_mix_err');
|
|
17761
|
+
}
|
|
17762
|
+
if(payload[8] & 128){
|
|
17763
|
+
error_message.push('inc_set');
|
|
17764
|
+
}
|
|
17765
|
+
if(error_message.length === 0){
|
|
17766
|
+
sensor_status = 'ready';
|
|
17767
|
+
} else {
|
|
17768
|
+
sensor_status = error_message.join(', ');
|
|
17769
|
+
}
|
|
17770
|
+
|
|
17771
|
+
const calv_value = payload.slice(9, 11).reduce(msbLsb) / 100;
|
|
17772
|
+
let cal_val = '';
|
|
17773
|
+
if(calv_value < 0.80){
|
|
17774
|
+
cal_val = 'pass';
|
|
17775
|
+
} else if(calv_value <= 1.0){
|
|
17776
|
+
cal_val = 'warning';
|
|
17777
|
+
} else {
|
|
17778
|
+
cal_val = 'fail';
|
|
17779
|
+
}
|
|
17780
|
+
|
|
17781
|
+
return {
|
|
17782
|
+
sensor_status: sensor_status,
|
|
17783
|
+
calcv_value: payload.slice(9, 11).reduce(msbLsb) / 100,
|
|
17784
|
+
calcv_status: cal_val,
|
|
17785
|
+
flow: payload.slice(11, 15).reduce(msbLsb)/100,
|
|
17786
|
+
ghv: payload.slice(15, 19).reduce(msbLsb)/100,
|
|
17787
|
+
total_flow: payload.slice(19, 27).reduce(msbLsb)/100,
|
|
17788
|
+
temperature: payload.slice(27,29).reduce(msbLsb)/100,
|
|
17789
|
+
density: payload.slice(29, 31).reduce(msbLsb)/100
|
|
17790
|
+
};
|
|
17791
|
+
},
|
|
17792
|
+
'parse_fly': (frame) => {
|
|
17793
|
+
let frame_data = {};
|
|
17794
|
+
switch(frame[12]){
|
|
17795
|
+
case 0:
|
|
17796
|
+
frame_data.flow_unit = 'scf_m';
|
|
17797
|
+
break;
|
|
17798
|
+
case 1:
|
|
17799
|
+
frame_data.flow_unit = 'scf_h';
|
|
17800
|
+
break;
|
|
17801
|
+
case 2:
|
|
17802
|
+
frame_data.flow_unit = 'nm3_h';
|
|
17803
|
+
break;
|
|
17804
|
+
case 3:
|
|
17805
|
+
frame_data.flow_unit = 'nm3_m';
|
|
17806
|
+
break;
|
|
17807
|
+
case 4:
|
|
17808
|
+
frame_data.flow_unit = 'kg_h';
|
|
17809
|
+
break;
|
|
17810
|
+
case 5:
|
|
17811
|
+
frame_data.flow_unit = 'kg_m';
|
|
17812
|
+
break;
|
|
17813
|
+
case 6:
|
|
17814
|
+
frame_data.flow_unit = 'kg_s';
|
|
17815
|
+
break;
|
|
17816
|
+
case 7:
|
|
17817
|
+
frame_data.flow_unit = 'lbs_h';
|
|
17818
|
+
break;
|
|
17819
|
+
case 8:
|
|
17820
|
+
frame_data.flow_unit = 'lbs_m';
|
|
17821
|
+
break;
|
|
17822
|
+
case 9:
|
|
17823
|
+
frame_data.flow_unit = 'lbs_s';
|
|
17824
|
+
break;
|
|
17825
|
+
case 10:
|
|
17826
|
+
frame_data.flow_unit = 'nlp_h';
|
|
17827
|
+
break;
|
|
17828
|
+
case 11:
|
|
17829
|
+
frame_data.flow_unit = 'nlp_m';
|
|
17830
|
+
break;
|
|
17831
|
+
case 12:
|
|
17832
|
+
frame_data.flow_unit = 'mmscf_d';
|
|
17833
|
+
break;
|
|
17834
|
+
case 13:
|
|
17835
|
+
frame_data.flow_unit = 'lbs_d';
|
|
17836
|
+
break;
|
|
17837
|
+
case 14:
|
|
17838
|
+
frame_data.flow_unit = 'slp_m';
|
|
17839
|
+
break;
|
|
17840
|
+
case 15:
|
|
17841
|
+
frame_data.flow_unit = 'nlp_s';
|
|
17842
|
+
break;
|
|
17843
|
+
case 16:
|
|
17844
|
+
frame_data.flow_unit = 'mscf_d';
|
|
17845
|
+
break;
|
|
17846
|
+
case 17:
|
|
17847
|
+
frame_data.flow_unit = 'sm3_h';
|
|
17848
|
+
break;
|
|
17849
|
+
case 18:
|
|
17850
|
+
frame_data.flow_unit = 'mt_h';
|
|
17851
|
+
break;
|
|
17852
|
+
case 19:
|
|
17853
|
+
frame_data.flow_unit = 'nm3_d';
|
|
17854
|
+
break;
|
|
17855
|
+
case 20:
|
|
17856
|
+
frame_data.flow_unit = 'mmscf_m';
|
|
17857
|
+
break;
|
|
17858
|
+
case 21:
|
|
17859
|
+
frame_data.flow_unit = 'scf_d';
|
|
17860
|
+
break;
|
|
17861
|
+
case 22:
|
|
17862
|
+
frame_data.flow_unit = 'mcf_d';
|
|
17863
|
+
break;
|
|
17864
|
+
case 23:
|
|
17865
|
+
frame_data.flow_unit = 'sm3_m';
|
|
17866
|
+
break;
|
|
17867
|
+
case 24:
|
|
17868
|
+
frame_data.flow_unit = 'sm3_d';
|
|
17869
|
+
break;
|
|
17870
|
+
}
|
|
17871
|
+
switch(frame[13]){
|
|
17872
|
+
case 0:
|
|
17873
|
+
frame_data.temperature_unit = 'F';
|
|
17874
|
+
break;
|
|
17875
|
+
case 1:
|
|
17876
|
+
frame_data.temperature_unit = 'C';
|
|
17877
|
+
break;
|
|
17878
|
+
}
|
|
17879
|
+
return {
|
|
17880
|
+
'firmware': frame[2],
|
|
17881
|
+
'flow_unit': frame_data.flow_unit,
|
|
17882
|
+
'temperature_unit': frame_data.temperature_unit,
|
|
17883
|
+
'hardware_id': frame.slice(14, 17),
|
|
17884
|
+
'report_rate': frame.slice(17, 21).reduce(msbLsb),
|
|
17885
|
+
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
|
|
17886
|
+
'machine_values': {
|
|
17887
|
+
'firmware': frame[2],
|
|
17888
|
+
'flow_unit': frame[12],
|
|
17889
|
+
'temperature_unit': frame[13],
|
|
17890
|
+
'hardware_id': frame.slice(14, 17),
|
|
17891
|
+
'report_rate': frame.slice(17, 21),
|
|
17892
|
+
'tx_life_counter': frame.slice(21, 25)
|
|
17893
|
+
}
|
|
17894
|
+
}
|
|
17895
|
+
}
|
|
17896
|
+
},
|
|
17520
17897
|
'1010': {
|
|
17521
17898
|
name: 'RS232 Wireless Converter',
|
|
17522
17899
|
parse: (d) => {
|