@ncd-io/node-red-enterprise-sensors 1.4.5 → 1.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -160,7 +160,7 @@ module.exports = class WirelessSensor{
160
160
  }
161
161
  }
162
162
  // #OTF
163
- var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,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,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,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,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,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 == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 97 || parsed.sensor_type == 98 || parsed.sensor_type == 103 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 117 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538 || 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){
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;
@@ -2109,6 +2109,14 @@ module.exports = class WirelessSensor{
2109
2109
  console.log(packet);
2110
2110
  return this.config_send(sensor_mac, packet);
2111
2111
  }
2112
+ config_set_tare_value_217(sensor_mac, value){
2113
+ console.log('config_set_tare_value_217');
2114
+ var packet = [244, 34, 0, 0, 26];
2115
+ let value_ = int2Bytes((value*100), 4);
2116
+ packet.push(...value_);
2117
+ console.log(packet);
2118
+ return this.config_send(sensor_mac, packet);
2119
+ }
2112
2120
  config_set_pressure_limit_26(sensor_mac, value){
2113
2121
  console.log('config_set_pressure_limit_26');
2114
2122
  var packet = [244, 82, 0, 0, 26];
@@ -2477,6 +2485,38 @@ module.exports = class WirelessSensor{
2477
2485
  console.log(packet);
2478
2486
  return this.config_send(sensor_mac, packet);
2479
2487
  }
2488
+ config_set_sensor_length_29(sensor_mac, value){
2489
+ console.log('config_set_sensor_length_29');
2490
+ var packet = [244, 63, 0, 0, 29];
2491
+ let value_ = int2Bytes(value, 2);
2492
+ packet.push(...value_);
2493
+ console.log(packet);
2494
+ return this.config_send(sensor_mac, packet);
2495
+ }
2496
+ config_set_rtd_wire_type_ch2_54(sensor_mac, value){
2497
+ console.log('config_set_rtd_wire_type_ch2_54');
2498
+ var packet = [244, 68, 0, 0, 39, value];
2499
+ console.log(packet);
2500
+ return this.config_send(sensor_mac, packet);
2501
+ }
2502
+ config_set_rtd_range_ch2_54(sensor_mac, value){
2503
+ console.log('config_set_rtd_range_ch2_54');
2504
+ var packet = [244, 70, 0, 0, 39, value];
2505
+ console.log(packet);
2506
+ return this.config_send(sensor_mac, packet);
2507
+ }
2508
+ config_set_rtd_wire_type_ch3_55(sensor_mac, value){
2509
+ console.log('config_set_rtd_wire_type_ch3_55');
2510
+ var packet = [244, 72, 0, 0, 39, value];
2511
+ console.log(packet);
2512
+ return this.config_send(sensor_mac, packet);
2513
+ }
2514
+ config_set_rtd_range_ch3_55(sensor_mac, value){
2515
+ console.log('config_set_rtd_range_ch3_55');
2516
+ var packet = [244, 74, 0, 0, 39, value];
2517
+ console.log(packet);
2518
+ return this.config_send(sensor_mac, packet);
2519
+ }
2480
2520
  config_get_delay(sensor_mac){
2481
2521
  return new Promise((fulfill, reject) => {
2482
2522
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -3929,12 +3969,42 @@ function sensor_types(parent){
3929
3969
  },
3930
3970
  '29': {
3931
3971
  'name': 'Linear Displacement Sensor',
3932
- parse: (d) => {
3933
- var adc = d.slice(0, 2).reduce(msbLsb);
3934
- return {
3935
- adc: adc,
3936
- position: adc/1023*100,
3937
- };
3972
+ parse: (payload, parsed, mac) => {
3973
+ if(payload[7] >> 1 != 0){
3974
+ console.log('Error found');
3975
+ parsed.data = {error: 'Error found, invalid data'};
3976
+ return parsed;
3977
+ }
3978
+ if(parsed.firmware > 4){
3979
+ return {
3980
+ position: (payload.slice(8, 10).reduce(msbLsb))/100
3981
+ };
3982
+ }else{
3983
+ var adc = payload.slice(8, 10).reduce(msbLsb);
3984
+ return {
3985
+ adc: adc,
3986
+ position: adc/1023*100,
3987
+ };
3988
+ }
3989
+ },
3990
+ 'parse_fly': (frame) => {
3991
+ let firmware = frame[2];
3992
+ if(firmware > 4){
3993
+ return {
3994
+ 'firmware': frame[2],
3995
+ 'sensor_length': (frame.slice(12, 14).reduce(msbLsb))+"mm",
3996
+ 'hardware_id': frame.slice(14, 17),
3997
+ 'report_rate': frame.slice(17, 21).reduce(msbLsb)+"sec",
3998
+ 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
3999
+ 'machine_values': {
4000
+ 'firmware': frame[2],
4001
+ 'sensor_length': frame.slice(12, 14),
4002
+ 'hardware_id': frame.slice(14, 17),
4003
+ 'report_rate': frame.slice(17, 21),
4004
+ 'tx_life_counter': frame.slice(21, 25)
4005
+ }
4006
+ }
4007
+ }
3938
4008
  }
3939
4009
  },
3940
4010
  '30': {
@@ -4036,10 +4106,62 @@ function sensor_types(parent){
4036
4106
  },
4037
4107
  '39': {
4038
4108
  name: 'RTD Temperature Sensor',
4039
- parse: (d) => {
4040
- return {
4041
- temperature: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100
4042
- };
4109
+ parse: (payload, parsed, mac) => {
4110
+ if(parsed.firmware > 5){
4111
+ let fault_status = '';
4112
+ if (payload[7] === 0) {
4113
+ fault_status = 'data_valid';
4114
+ } else if (payload[7] === 15) {
4115
+ fault_status = 'data_invalid';
4116
+ } else {
4117
+ const faultTypeBits = payload[7] & 0b00111100;
4118
+ switch (faultTypeBits) {
4119
+ case 32:
4120
+ fault_status = 'ref_in_vbias';
4121
+ break;
4122
+ case 16:
4123
+ fault_status = 'ref_in_force_close';
4124
+ break;
4125
+ case 8:
4126
+ fault_status = 'rtd_in_force_open';
4127
+ break;
4128
+ case 4:
4129
+ fault_status = 'over_under_voltage';
4130
+ break;
4131
+ }
4132
+ }
4133
+ return {
4134
+ fault_status: fault_status,
4135
+ temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4136
+ };
4137
+ } else {
4138
+ return {
4139
+ temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4140
+ };
4141
+ }
4142
+ },
4143
+ 'parse_fly': (frame) => {
4144
+ let firmware = frame[2];
4145
+ if(firmware > 5){
4146
+ const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
4147
+ const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4148
+ return {
4149
+ 'firmware': frame[2],
4150
+ 'sensor_interface': interface_types[frame[12]],
4151
+ 'sensor_type': rtd_types[frame[13]],
4152
+ 'hardware_id': frame.slice(14, 17),
4153
+ 'report_rate': frame.slice(17, 21).reduce(msbLsb) + " sec",
4154
+ 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
4155
+ 'machine_values': {
4156
+ 'firmware': frame[2],
4157
+ 'sensor_interface': frame[12],
4158
+ 'sensor_type': frame[13],
4159
+ 'hardware_id': frame.slice(14, 17),
4160
+ 'report_rate': frame.slice(17, 21),
4161
+ 'tx_life_counter': frame.slice(21, 25)
4162
+ }
4163
+ }
4164
+ }
4043
4165
  }
4044
4166
  },
4045
4167
  '40': {
@@ -4490,13 +4612,151 @@ function sensor_types(parent){
4490
4612
  }
4491
4613
  },
4492
4614
  '54': {
4493
- name: '3 Channel RTD',
4494
- parse: (d) => {
4615
+ name: '2-Channel RTD Temperature Sensor',
4616
+ parse: (payload, parsed, mac) => {
4617
+ if(parsed.firmware > 5){
4618
+ let fault_status = '';
4619
+ if (payload[7] === 0) {
4620
+ fault_status = 'data_valid';
4621
+ } else if (payload[7] === 15) {
4622
+ fault_status = 'data_invalid';
4623
+ } else {
4624
+ const fault_bits = (payload[7] >> 2) & 0b00001111;
4625
+ switch (fault_bits) {
4626
+ case 8:
4627
+ fault_status = 'ref_in_vbias';
4628
+ break;
4629
+ case 4:
4630
+ fault_status = 'ref_in_force_close';
4631
+ break;
4632
+ case 2:
4633
+ fault_status = 'rtd_in_force_open';
4634
+ break;
4635
+ case 1:
4636
+ fault_status = 'over_under_voltage';
4637
+ break;
4638
+ }
4639
+ const channel_bits = payload[7] & 0b00000011;
4640
+ switch (channel_bits) {
4641
+ case 1:
4642
+ fault_status = fault_status + '_ch1';
4643
+ break;
4644
+ case 2:
4645
+ fault_status = fault_status + '_ch2';
4646
+ break;
4647
+ }
4648
+ }
4649
+ return {
4650
+ fault_status: fault_status,
4651
+ temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
4652
+ temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
4653
+ };
4654
+ } else {
4655
+ return {
4656
+ temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
4657
+ temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
4658
+ };
4659
+ }
4660
+ },
4661
+ 'parse_fly': (frame) => {
4662
+ let firmware = frame[2];
4663
+ if(firmware > 5){
4664
+ const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
4665
+ const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4666
+ return {
4667
+ 'firmware': frame[2],
4668
+ 'sensor_interface_ch1': interface_types[frame[12]],
4669
+ 'sensor_type_ch1': rtd_types[frame[13]],
4670
+ 'sensor_interface_ch2': interface_types[frame[14]],
4671
+ 'sensor_type_ch2': rtd_types[frame[15]],
4672
+ 'hardware_id': frame.slice(16, 19),
4673
+ 'report_rate': frame.slice(19, 23).reduce(msbLsb) + " sec",
4674
+ 'tx_life_counter': frame.slice(23, 27).reduce(msbLsb),
4675
+ 'machine_values': {
4676
+ 'firmware': frame[2],
4677
+ 'sensor_interface_ch1': frame[12],
4678
+ 'sensor_type_ch1': frame[13],
4679
+ 'sensor_interface_ch2': frame[14],
4680
+ 'sensor_type_ch2': frame[15],
4681
+ 'hardware_id': frame.slice(16, 19),
4682
+ 'report_rate': frame.slice(19, 23),
4683
+ 'tx_life_counter': frame.slice(23, 27)
4684
+ }
4685
+ }
4686
+ }
4687
+ }
4688
+ },
4689
+ '55': {
4690
+ name: '3-Channel RTD Temperature Sensor',
4691
+ parse: (payload, parsed, mac) => {
4692
+ let fault_status = '';
4693
+ if (payload[7] === 0) {
4694
+ fault_status = 'data_valid';
4695
+ } else if (payload[7] === 15) {
4696
+ fault_status = 'data_invalid';
4697
+ } else {
4698
+ const fault_bits = (payload[7] >> 2) & 0b00001111;
4699
+ switch (fault_bits) {
4700
+ case 8:
4701
+ fault_status = 'ref_in_vbias';
4702
+ break;
4703
+ case 4:
4704
+ fault_status = 'ref_in_force_close';
4705
+ break;
4706
+ case 2:
4707
+ fault_status = 'rtd_in_force_open';
4708
+ break;
4709
+ case 1:
4710
+ fault_status = 'over_under_voltage';
4711
+ break;
4712
+ }
4713
+ const channel_bits = payload[7] & 0b00000011;
4714
+ switch (channel_bits) {
4715
+ case 1:
4716
+ fault_status = fault_status + '_ch1';
4717
+ break;
4718
+ case 2:
4719
+ fault_status = fault_status + '_ch2';
4720
+ break;
4721
+ case 3:
4722
+ fault_status = fault_status + '_ch3';
4723
+ break;
4724
+ }
4725
+ }
4495
4726
  return {
4496
- temperature_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4497
- temperature_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4498
- temperature_3: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100
4727
+ fault_status: fault_status,
4728
+ temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
4729
+ temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
4730
+ temperature_3: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 100
4499
4731
  };
4732
+ },
4733
+ 'parse_fly': (frame) => {
4734
+ const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
4735
+ const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4736
+ return {
4737
+ 'firmware': frame[2],
4738
+ 'sensor_interface_ch1': interface_types[frame[12]],
4739
+ 'sensor_type_ch1': rtd_types[frame[13]],
4740
+ 'sensor_interface_ch2': interface_types[frame[14]],
4741
+ 'sensor_type_ch2': rtd_types[frame[15]],
4742
+ 'sensor_interface_ch3': interface_types[frame[16]],
4743
+ 'sensor_type_ch3': rtd_types[frame[17]],
4744
+ 'hardware_id': frame.slice(18, 21),
4745
+ 'report_rate': frame.slice(21, 25).reduce(msbLsb) + " sec",
4746
+ 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
4747
+ 'machine_values': {
4748
+ 'firmware': frame[2],
4749
+ 'sensor_interface_ch1': frame[12],
4750
+ 'sensor_type_ch1': frame[13],
4751
+ 'sensor_interface_ch2': frame[14],
4752
+ 'sensor_type_ch2': frame[15],
4753
+ 'sensor_interface_ch3': frame[16],
4754
+ 'sensor_type_ch3': frame[17],
4755
+ 'hardware_id': frame.slice(18, 21),
4756
+ 'report_rate': frame.slice(21, 25),
4757
+ 'tx_life_counter': frame.slice(25, 29)
4758
+ }
4759
+ }
4500
4760
  }
4501
4761
  },
4502
4762
  '56': {
@@ -8414,13 +8674,13 @@ function sensor_types(parent){
8414
8674
  label++;
8415
8675
 
8416
8676
  if('x_offset' in en_axis_data){
8417
- 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)));
8677
+ 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(5)));
8418
8678
  }
8419
8679
  if('y_offset' in en_axis_data){
8420
- 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)));
8680
+ 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(5)));
8421
8681
  }
8422
8682
  if('z_offset' in en_axis_data){
8423
- 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)));
8683
+ 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(5)));
8424
8684
  }
8425
8685
  }
8426
8686
  var fft_concat_obj = {
@@ -8831,12 +9091,12 @@ function sensor_types(parent){
8831
9091
  name: 'Machine Uptime Monitoring Sensor',
8832
9092
  parse: (d, payload) => {
8833
9093
  let firmware = payload[1];
8834
- if(payload[7] & 2 != 0){
8835
- console.log('Error found');
8836
- // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
8837
- let error = {error: 'Error found, Acclerometer Probe may be unattached'};
8838
- return error;
8839
- }
9094
+ // if((payload[7] & 2) != 0){
9095
+ // console.log('Error found');
9096
+ // // parsed.data = {error: 'Error found, Accelerometer Probe may be unattached'};
9097
+ // let error = {error: 'Error found, Accelerometer Probe may be unattached'};
9098
+ // return error;
9099
+ // }
8840
9100
  if(firmware > 4){
8841
9101
  let report_type = "Regular";
8842
9102
  switch(d[41]){
@@ -8853,7 +9113,7 @@ function sensor_types(parent){
8853
9113
  report_type = "Threshold";
8854
9114
  break;
8855
9115
  }
8856
- return {
9116
+ let res = {
8857
9117
  digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8858
9118
  digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8859
9119
  ct_input_counter: d.slice(8, 12).reduce(msbLsb),
@@ -8876,8 +9136,14 @@ function sensor_types(parent){
8876
9136
  String(d[44]).padStart(2, '0')
8877
9137
  ].join(':')
8878
9138
  };
9139
+ if((payload[7] & 2) != 0){
9140
+ res.accelerometer_counter = "No probe detected";
9141
+ res.accelerometer_uptime = "No probe detected";
9142
+ res.input_acc = "No probe detected";
9143
+ };
9144
+ return res;
8879
9145
  }else{
8880
- return {
9146
+ let res = {
8881
9147
  digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8882
9148
  digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8883
9149
  ct_input_counter: d.slice(8, 12).reduce(msbLsb),
@@ -8894,6 +9160,12 @@ function sensor_types(parent){
8894
9160
  input_acc: d[40] & 8 ? 1 : 0,
8895
9161
  input_mag: d[40] & 16 ? 1 : 0
8896
9162
  };
9163
+ if((payload[7] & 2) != 0){
9164
+ res.accelerometer_counter = "No probe detected";
9165
+ res.accelerometer_uptime = "No probe detected";
9166
+ res.input_acc = "No probe detected";
9167
+ };
9168
+ return res;
8897
9169
  }
8898
9170
  },
8899
9171
  'parse_fly': (frame) => {
@@ -9207,6 +9479,140 @@ function sensor_types(parent){
9207
9479
  'tx_life_counter': frame.slice(50, 54)
9208
9480
  }
9209
9481
  }
9482
+ } else if(frame[2] == 14){ // 14
9483
+ let reset_mode = "Disabled";
9484
+ switch(frame[38]){
9485
+ case 0:
9486
+ reset_mode = "Disabled";
9487
+ break;
9488
+ case 1:
9489
+ reset_mode = "Shift Ends";
9490
+ break;
9491
+ case 2:
9492
+ reset_mode = "Timeout";
9493
+ break;
9494
+ }
9495
+ let acc_odr = "10Hz";
9496
+ switch(frame[40]){
9497
+ case 0:
9498
+ acc_odr = "10Hz";
9499
+ break;
9500
+ case 1:
9501
+ acc_odr = "20Hz";
9502
+ break;
9503
+ case 2:
9504
+ acc_odr = "50Hz";
9505
+ break;
9506
+ case 3:
9507
+ acc_odr = "100Hz";
9508
+ break;
9509
+ case 4:
9510
+ acc_odr = "200Hz";
9511
+ break;
9512
+ case 5:
9513
+ acc_odr = "400Hz";
9514
+ break;
9515
+ }
9516
+ let rtc_sampling_interval = "5 seconds";
9517
+ switch(frame[39]){
9518
+ case 0:
9519
+ rtc_sampling_interval = "1 minute";
9520
+ break;
9521
+ case 1:
9522
+ rtc_sampling_interval = "5 minutes";
9523
+ break;
9524
+ case 2:
9525
+ rtc_sampling_interval = "15 minutes";
9526
+ break;
9527
+ case 3:
9528
+ rtc_sampling_interval = "30 minutes";
9529
+ break;
9530
+ case 4:
9531
+ rtc_sampling_interval = "1 hour";
9532
+ break;
9533
+ case 5:
9534
+ rtc_sampling_interval = "2 hours";
9535
+ break;
9536
+ case 6:
9537
+ rtc_sampling_interval = "3 hours";
9538
+ break;
9539
+ case 7:
9540
+ rtc_sampling_interval = "6 hours";
9541
+ break;
9542
+ case 8:
9543
+ rtc_sampling_interval = "12 hours";
9544
+ break;
9545
+ case 9:
9546
+ rtc_sampling_interval = "5 seconds";
9547
+ break;
9548
+ case 10:
9549
+ rtc_sampling_interval = "10 seconds";
9550
+ break;
9551
+ case 11:
9552
+ rtc_sampling_interval = "15 seconds";
9553
+ break;
9554
+ case 12:
9555
+ rtc_sampling_interval = "30 seconds";
9556
+ break;
9557
+ }
9558
+ return {
9559
+ 'firmware': frame[2],
9560
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
9561
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
9562
+ 'accelero_state': frame[19]? "Enabled": "Disabled",
9563
+ 'input_1_active_edge': frame[20]? "Rising": "Falling",
9564
+ 'input_2_active_edge': frame[21]? "Rising": "Falling",
9565
+ 'input_3_active_edge': frame[22]? "Rising": "Falling",
9566
+ 'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
9567
+ 'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
9568
+ 'Shift_end_1': [
9569
+ String(frame[28]).padStart(2, '0'),
9570
+ String(frame[29]).padStart(2, '0')
9571
+ ].join(':'),
9572
+ 'Shift_end_2': [
9573
+ String(frame[30]).padStart(2, '0'),
9574
+ String(frame[31]).padStart(2, '0')
9575
+ ].join(':'),
9576
+ 'Shift_end_3': [
9577
+ String(frame[32]).padStart(2, '0'),
9578
+ String(frame[33]).padStart(2, '0')
9579
+ ].join(':'),
9580
+ 'Shift_end_4': [
9581
+ String(frame[34]).padStart(2, '0'),
9582
+ String(frame[35]).padStart(2, '0')
9583
+ ].join(':'),
9584
+ 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
9585
+ 'counter_reset_mode': reset_mode,
9586
+ 'sampling_interval': rtc_sampling_interval,
9587
+ 'acc_odr': acc_odr,
9588
+ 'counter_ignore_timeout': frame.slice(41, 43).reduce(msbLsb) + "sec",
9589
+ 'hardware_id': frame.slice(43, 46),
9590
+ 'report_rate': frame.slice(46, 50).reduce(msbLsb) + "sec",
9591
+ 'tx_life_counter': frame.slice(50, 54).reduce(msbLsb),
9592
+ 'machine_values': {
9593
+ 'firmware': frame[2],
9594
+ 'accelerometer_threshold': frame[16],
9595
+ 'debouncing_timeout': frame.slice(17, 19),
9596
+ 'accelero_state': frame[19],
9597
+ 'input_1_active_edge': frame[20],
9598
+ 'input_2_active_edge': frame[21],
9599
+ 'input_3_active_edge': frame[22],
9600
+ 'counter_threshold': frame.slice(23, 27),
9601
+ 'trasnmit_on_change_status': frame[27],
9602
+ 'Shift_end_1': frame.slice(28, 30),
9603
+ 'Shift_end_2': frame.slice(30, 32),
9604
+ 'Shift_end_3': frame.slice(32, 34),
9605
+ 'Shift_end_4': frame.slice(34, 36),
9606
+ 'reset_timeout': frame.slice(36, 38),
9607
+ 'counter_reset_mode': frame[38],
9608
+ 'sampling_interval': frame[39],
9609
+ 'acc_odr': frame[40],
9610
+ 'counter_ignore_timeout': frame.slice(41, 43),
9611
+ 'hardware_id': frame.slice(43, 46),
9612
+ 'report_rate': frame.slice(46, 50),
9613
+ 'tx_life_counter': frame.slice(50, 54)
9614
+ }
9615
+ }
9210
9616
  } else if(frame[2] > 9){ // firmware 10 11 12 13 14 15
9211
9617
  let reset_mode = "Disabled";
9212
9618
  switch(frame[38]){
@@ -12253,7 +12659,7 @@ function sensor_types(parent){
12253
12659
  frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
12254
12660
  frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
12255
12661
  frame_data.smart_mode_threshold = frame[34] * 50;
12256
- if(frame[2] > 5){ // for Firmware v6 and above
12662
+ if(frame[2] > 6){ // for Firmware v7 and above
12257
12663
  frame_data.motion_to_delay = frame[41] * 50;
12258
12664
  return {
12259
12665
  'firmware': frame[2],
@@ -12311,6 +12717,54 @@ function sensor_types(parent){
12311
12717
  'tx_lifetime_counter': frame.slice(50, 54)
12312
12718
  }
12313
12719
  }
12720
+ } else if(frame[2] > 5){ // for Firmware v6
12721
+ frame_data.motion_to_delay = frame[41] * 50;
12722
+ return {
12723
+ 'firmware': frame[2],
12724
+ 'destination_address': toMac(frame.slice(12, 16)),
12725
+ 'mode': frame_data.mode,
12726
+ 'odr': frame_data.odr_1+'Hz',
12727
+ 'sampling_duration': frame_data.sampling_duration_1,
12728
+ 'filter_status': frame_data.filter_status,
12729
+ 'lpf_coeff': frame_data.lpf_coeff_1,
12730
+ 'lpf_freq': frame_data.lpf_freq_1+'Hz',
12731
+ 'hpf_coeff': frame_data.hpf_coeff_1,
12732
+ 'hpf_freq': frame_data.hpf_freq_1+'Hz',
12733
+ 'sampling_interval': frame_data.sampling_interval,
12734
+ 'on_request_timeout': frame_data.on_request_timeout,
12735
+ 'deadband': frame_data.deadband,
12736
+ 'payload_length': frame_data.payload_length,
12737
+ 'fsr': frame_data.fsr_text,
12738
+ 'rpm_compute_status': frame_data.rpm_status,
12739
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
12740
+ 'auto_raw_interval': frame_data.auto_raw_interval,
12741
+ 'smart_mode_skip_count': frame[33],
12742
+ 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
12743
+ 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
12744
+ 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
12745
+ 'machine_values': {
12746
+ 'firmware': frame[2],
12747
+ 'destination_address': toMac(frame.slice(12, 16), false),
12748
+ 'mode': frame[16],
12749
+ 'odr': frame[17],
12750
+ 'sampling_duration': frame[18],
12751
+ 'filter_status': frame[19],
12752
+ 'lpf_coeff': frame[20],
12753
+ 'hpf_coeff': frame[21],
12754
+ 'sampling_interval': frame[22],
12755
+ 'on_request_timeout': frame[23],
12756
+ 'deadband': frame[24],
12757
+ 'payload_length': frame[25],
12758
+ 'fsr': frame[26],
12759
+ 'rpm_compute_status': frame[27],
12760
+ 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
12761
+ 'auto_raw_interval': frame[32],
12762
+ 'smart_mode_skip_count': frame[33],
12763
+ 'smart_mode_acc_threshold':frame[34],
12764
+ 'uptime_counter': frame.slice(35, 39),
12765
+ 'max_tx_raw_samples': frame.slice(39, 41)
12766
+ }
12767
+ }
12314
12768
  } else if(frame[2] > 4){ // for Firmware v5 and above
12315
12769
  return {
12316
12770
  'firmware': frame[2],
@@ -12665,13 +13119,21 @@ function sensor_types(parent){
12665
13119
  },
12666
13120
  '118': {
12667
13121
  name: 'Dual Pressure and Temperature Sensor',
12668
- parse: (d) => {
12669
- return{
12670
- pressure_s1: signInt(d.slice(0, 4).reduce(msbLsb),16)/100,
12671
- temperature_s1: signInt(d.slice(4, 6).reduce(msbLsb),16)/100,
12672
- pressure_s2: signInt(d.slice(6, 10).reduce(msbLsb),16)/100,
12673
- temperature_s2: signInt(d.slice(10, 12).reduce(msbLsb),16)/100
13122
+ parse: (payload, parsed, mac) => {
13123
+ let res = {
13124
+ pressure_s1: signInt(payload.slice(8, 12).reduce(msbLsb),16)/100,
13125
+ temperature_s1: signInt(payload.slice(12, 14).reduce(msbLsb),16)/100,
13126
+ pressure_s2: signInt(payload.slice(14, 18).reduce(msbLsb),16)/100,
13127
+ temperature_s2: signInt(payload.slice(18, 20).reduce(msbLsb),16)/100
12674
13128
  };
13129
+ if(payload[7] & 2 && payload[7] & 4){
13130
+ res.error = 'Error: Sensor Probe 1 and 2 communication error';
13131
+ } else if(payload[7] & 2){
13132
+ res.error = 'Error: Sensor Probe 1 communication error';
13133
+ } else if(payload[7] & 4){
13134
+ res.error = 'Error: Sensor Probe 2 communication error';
13135
+ }
13136
+ return res;
12675
13137
  },
12676
13138
  'parse_fly': (frame) => {
12677
13139
  let psi_1;
@@ -12747,13 +13209,13 @@ function sensor_types(parent){
12747
13209
  }
12748
13210
  },
12749
13211
  '119': {
12750
- name: 'Wireless Machine Run Time Hour Meter',
13212
+ name: 'Machine Runtime Hour Meter',
12751
13213
  parse: (d, payload) => {
12752
13214
  let firmware = payload[1];
12753
- if(payload[7] & 2 != 0){
13215
+ if((payload[7] & 2) != 0){
12754
13216
  console.log('Error found');
12755
- // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
12756
- let error = {error: 'Error found, Acclerometer Probe may be unattached'};
13217
+ // parsed.data = {error: 'Error found, Accelerometer Probe may be unattached'};
13218
+ let error = {error: 'Error found, Accelerometer'};
12757
13219
  return error;
12758
13220
  }
12759
13221
  let report_type = "Regular";
@@ -12771,15 +13233,15 @@ function sensor_types(parent){
12771
13233
  report_type = "Threshold";
12772
13234
  break;
12773
13235
  }
12774
- if ((payload[7] & 4) != 0) {
12775
- return {
13236
+ if ((payload[7] & 4)) {
13237
+ let res = {
12776
13238
  raw_data: "Enabled",
12777
13239
  accelerometer_counter: d.slice(0, 4).reduce(msbLsb),
12778
13240
  accelerometer_uptime: d.slice(4, 8).reduce(msbLsb),
12779
13241
  magnetometer_counter: d.slice(8, 12).reduce(msbLsb),
12780
13242
  magnetometer_uptime: d.slice(12, 16).reduce(msbLsb),
12781
- input_acc: d[16] & 8 ? 1 : 0,
12782
- input_mag: d[16] & 16 ? 1 : 0,
13243
+ input_acc: d[16] & 1 ? 1 : 0,
13244
+ input_mag: d[16] & 2 ? 1 : 0,
12783
13245
  report_type: report_type,
12784
13246
  rtc: [
12785
13247
  String(d[18]).padStart(2, '0'),
@@ -12787,66 +13249,58 @@ function sensor_types(parent){
12787
13249
  String(d[20]).padStart(2, '0')
12788
13250
  ].join(':'),
12789
13251
  'temperature': d.slice(21, 23).reduce(msbLsb)/100,
12790
- 'accelero_sample_1':{
12791
- x:[signInt(d.slice(23, 25).reduce(msbLsb),16)/100],
12792
- y:[signInt(d.slice(25, 27).reduce(msbLsb),16)/100],
12793
- z:[signInt(d.slice(27, 29).reduce(msbLsb),16)/100]
12794
- },
12795
- 'accelero_sample_2':{
12796
- x:[signInt(d.slice(29, 31).reduce(msbLsb),16)/100],
12797
- y:[signInt(d.slice(31, 33).reduce(msbLsb),16)/100],
12798
- z:[signInt(d.slice(33, 35).reduce(msbLsb),16)/100]
12799
- },
12800
- 'accelero_sample_3':{
12801
- x:[signInt(d.slice(35, 37).reduce(msbLsb),16)/100],
12802
- y:[signInt(d.slice(37, 39).reduce(msbLsb),16)/100],
12803
- z:[signInt(d.slice(39, 41).reduce(msbLsb),16)/100]
12804
- },
12805
- 'accelero_sample_4':{
12806
- x:[signInt(d.slice(41, 43).reduce(msbLsb),16)/100],
12807
- y:[signInt(d.slice(43, 45).reduce(msbLsb),16)/100],
12808
- z:[signInt(d.slice(45, 47).reduce(msbLsb),16)/100]
12809
- },
12810
- 'accelero_sample_5':{
12811
- x:[signInt(d.slice(47, 49).reduce(msbLsb),16)/100],
12812
- y:[signInt(d.slice(49, 51).reduce(msbLsb),16)/100],
12813
- z:[signInt(d.slice(51, 53).reduce(msbLsb),16)/100]
12814
- },
12815
- 'accelero_sample_6':{
12816
- x:[signInt(d.slice(53, 55).reduce(msbLsb),16)/100],
12817
- y:[signInt(d.slice(55, 57).reduce(msbLsb),16)/100],
12818
- z:[signInt(d.slice(57, 59).reduce(msbLsb),16)/100]
12819
- },
12820
- 'accelero_sample_7':{
12821
- x:[signInt(d.slice(59, 61).reduce(msbLsb),16)/100],
12822
- y:[signInt(d.slice(61, 63).reduce(msbLsb),16)/100],
12823
- z:[signInt(d.slice(63, 65).reduce(msbLsb),16)/100]
12824
- },
12825
- 'accelero_sample_8':{
12826
- x:[signInt(d.slice(65, 67).reduce(msbLsb),16)/100],
12827
- y:[signInt(d.slice(67, 69).reduce(msbLsb),16)/100],
12828
- z:[signInt(d.slice(69, 71).reduce(msbLsb),16)/100]
12829
- },
12830
- 'accelero_sample_9':{
12831
- x:[signInt(d.slice(71, 73).reduce(msbLsb),16)/100],
12832
- y:[signInt(d.slice(73, 75).reduce(msbLsb),16)/100],
12833
- z:[signInt(d.slice(75, 77).reduce(msbLsb),16)/100]
12834
- },
12835
- 'accelero_sample_10':{
12836
- x:[signInt(d.slice(77, 79).reduce(msbLsb),16)/100],
12837
- y:[signInt(d.slice(79, 81).reduce(msbLsb),16)/100],
12838
- z:[signInt(d.slice(81, 83).reduce(msbLsb),16)/100]
13252
+ 'data':{
13253
+ 'x':[
13254
+ signInt(d.slice(23, 25).reduce(msbLsb),16)/100,
13255
+ signInt(d.slice(29, 31).reduce(msbLsb),16)/100,
13256
+ signInt(d.slice(35, 37).reduce(msbLsb),16)/100,
13257
+ signInt(d.slice(41, 43).reduce(msbLsb),16)/100,
13258
+ signInt(d.slice(47, 49).reduce(msbLsb),16)/100,
13259
+ signInt(d.slice(53, 55).reduce(msbLsb),16)/100,
13260
+ signInt(d.slice(59, 61).reduce(msbLsb),16)/100,
13261
+ signInt(d.slice(65, 67).reduce(msbLsb),16)/100,
13262
+ signInt(d.slice(71, 73).reduce(msbLsb),16)/100,
13263
+ signInt(d.slice(77, 79).reduce(msbLsb),16)/100
13264
+ ],
13265
+ 'y':[
13266
+ signInt(d.slice(25, 27).reduce(msbLsb),16)/100,
13267
+ signInt(d.slice(29, 31).reduce(msbLsb),16)/100,
13268
+ signInt(d.slice(37, 39).reduce(msbLsb),16)/100,
13269
+ signInt(d.slice(43, 45).reduce(msbLsb),16)/100,
13270
+ signInt(d.slice(49, 51).reduce(msbLsb),16)/100,
13271
+ signInt(d.slice(55, 57).reduce(msbLsb),16)/100,
13272
+ signInt(d.slice(61, 63).reduce(msbLsb),16)/100,
13273
+ signInt(d.slice(67, 69).reduce(msbLsb),16)/100,
13274
+ signInt(d.slice(73, 75).reduce(msbLsb),16)/100,
13275
+ signInt(d.slice(79, 81).reduce(msbLsb),16)/100
13276
+ ],
13277
+ 'z':[
13278
+ signInt(d.slice(27, 29).reduce(msbLsb),16)/100,
13279
+ signInt(d.slice(31, 33).reduce(msbLsb),16)/100,
13280
+ signInt(d.slice(37, 39).reduce(msbLsb),16)/100,
13281
+ signInt(d.slice(43, 45).reduce(msbLsb),16)/100,
13282
+ signInt(d.slice(51, 53).reduce(msbLsb),16)/100,
13283
+ signInt(d.slice(57, 59).reduce(msbLsb),16)/100,
13284
+ signInt(d.slice(63, 65).reduce(msbLsb),16)/100,
13285
+ signInt(d.slice(69, 71).reduce(msbLsb),16)/100,
13286
+ signInt(d.slice(75, 77).reduce(msbLsb),16)/100,
13287
+ signInt(d.slice(81, 83).reduce(msbLsb),16)/100
13288
+ ]
12839
13289
  }
12840
13290
  };
13291
+ if((payload[7] & 2) != 0){
13292
+ res.error = 'Error: Accelerometer communication failure';
13293
+ }
13294
+ return res;
12841
13295
  }else{
12842
- return {
13296
+ let res = {
12843
13297
  raw_data: "Disabled",
12844
13298
  accelerometer_counter: d.slice(0, 4).reduce(msbLsb),
12845
13299
  accelerometer_uptime: d.slice(4, 8).reduce(msbLsb),
12846
13300
  magnetometer_counter: d.slice(8, 12).reduce(msbLsb),
12847
13301
  magnetometer_uptime: d.slice(12, 16).reduce(msbLsb),
12848
- input_acc: d[16] & 8 ? 1 : 0,
12849
- input_mag: d[16] & 16 ? 1 : 0,
13302
+ input_acc: d[16] & 1 ? 1 : 0,
13303
+ input_mag: d[16] & 2 ? 1 : 0,
12850
13304
  report_type: report_type,
12851
13305
  rtc: [
12852
13306
  String(d[18]).padStart(2, '0'),
@@ -12855,6 +13309,10 @@ function sensor_types(parent){
12855
13309
  ].join(':'),
12856
13310
  'temperature': d.slice(21, 23).reduce(msbLsb)/100
12857
13311
  };
13312
+ if((payload[7] & 2) != 0){
13313
+ res.error = 'Error: Accelerometer communication failure';
13314
+ }
13315
+ return res;
12858
13316
  }
12859
13317
  },
12860
13318
  'parse_fly': (frame) => {
@@ -12951,6 +13409,7 @@ function sensor_types(parent){
12951
13409
  acc_enabled_axis = 'all axis';
12952
13410
  break;
12953
13411
  }
13412
+ let raw_acc_data = frame[41]?'Enabled':'Disabled';
12954
13413
  return {
12955
13414
  'firmware': frame[2],
12956
13415
  'accelerometer_threshold': (frame[16]* 32) + " mg",
@@ -12958,19 +13417,19 @@ function sensor_types(parent){
12958
13417
  'accelero_state': frame[19]? "Enabled": "Disabled",
12959
13418
  'counter_threshold': frame.slice(20, 24).reduce(msbLsb),
12960
13419
  'trasnmit_on_change_status': frame[24]? "Enabled": "Disabled",
12961
- 'Shift_end_1': [
13420
+ 'shift_end_1': [
12962
13421
  String(frame[25]).padStart(2, '0'),
12963
13422
  String(frame[26]).padStart(2, '0')
12964
13423
  ].join(':'),
12965
- 'Shift_end_2': [
13424
+ 'shift_end_2': [
12966
13425
  String(frame[27]).padStart(2, '0'),
12967
13426
  String(frame[28]).padStart(2, '0')
12968
13427
  ].join(':'),
12969
- 'Shift_end_3': [
13428
+ 'shift_end_3': [
12970
13429
  String(frame[29]).padStart(2, '0'),
12971
13430
  String(frame[30]).padStart(2, '0')
12972
13431
  ].join(':'),
12973
- 'Shift_end_4': [
13432
+ 'shift_end_4': [
12974
13433
  String(frame[31]).padStart(2, '0'),
12975
13434
  String(frame[32]).padStart(2, '0')
12976
13435
  ].join(':'),
@@ -12980,9 +13439,10 @@ function sensor_types(parent){
12980
13439
  'acc_odr': acc_odr,
12981
13440
  'interrupt_timeout': frame.slice(38, 40).reduce(msbLsb) + ' msec',
12982
13441
  'acc_enabled_axis': acc_enabled_axis,
12983
- 'hardware_id': frame.slice(41, 44),
12984
- 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
12985
- 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
13442
+ 'raw_acc_data': raw_acc_data,
13443
+ 'hardware_id': frame.slice(42, 45),
13444
+ 'report_rate': frame.slice(45, 49).reduce(msbLsb) + " sec",
13445
+ 'tx_life_counter': frame.slice(49, 53).reduce(msbLsb),
12986
13446
  'machine_values': {
12987
13447
  'firmware': frame[2],
12988
13448
  'accelerometer_threshold': (frame[16]* 32),
@@ -12990,19 +13450,19 @@ function sensor_types(parent){
12990
13450
  'accelero_state': frame[19],
12991
13451
  'counter_threshold': frame.slice(20, 24),
12992
13452
  'trasnmit_on_change_status': frame[24],
12993
- 'Shift_end_1': [
13453
+ 'shift_end_1': [
12994
13454
  frame[25],
12995
13455
  frame[26]
12996
13456
  ],
12997
- 'Shift_end_2': [
13457
+ 'shift_end_2': [
12998
13458
  frame[27],
12999
13459
  frame[28]
13000
13460
  ],
13001
- 'Shift_end_3': [
13461
+ 'shift_end_3': [
13002
13462
  frame[29],
13003
13463
  frame[30]
13004
13464
  ],
13005
- 'Shift_end_4': [
13465
+ 'shift_end_4': [
13006
13466
  frame[31],
13007
13467
  frame[32]
13008
13468
  ],
@@ -13012,9 +13472,10 @@ function sensor_types(parent){
13012
13472
  'acc_odr': frame[37],
13013
13473
  'interrupt_timeout': frame.slice(38, 40),
13014
13474
  'acc_enabled_axis': frame[40],
13015
- 'hardware_id': frame.slice(41, 44),
13016
- 'report_rate': frame.slice(44, 48),
13017
- 'tx_life_counter': frame.slice(48, 52)
13475
+ 'raw_acc_data': frame[41],
13476
+ 'hardware_id': frame.slice(42, 45),
13477
+ 'report_rate': frame.slice(45, 49),
13478
+ 'tx_life_counter': frame.slice(49, 53)
13018
13479
  }
13019
13480
  }
13020
13481
  }
@@ -13179,12 +13640,6 @@ function sensor_types(parent){
13179
13640
  '123': {
13180
13641
  name: '3 Channel Production Counter',
13181
13642
  parse: (d, payload) => {
13182
- if(payload[7] & 2 != 0){
13183
- console.log('Error found');
13184
- // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
13185
- let error = {error: 'Error found, Acclerometer Probe may be unattached'};
13186
- return error;
13187
- }
13188
13643
  let report_type = "Regular";
13189
13644
  switch(d[25]){
13190
13645
  case 0:
@@ -13882,10 +14337,47 @@ function sensor_types(parent){
13882
14337
  },
13883
14338
  '217': {
13884
14339
  name: 'Wireless Weight Scale',
13885
- parse: (d) => {
14340
+ parse: (d, parsed, mac) => {
14341
+ if(d[7] == 254){
14342
+ console.log('Error found');
14343
+ parsed.data = {error: 'Error found, Load cell comm error'};
14344
+ return parsed;
14345
+ }
13886
14346
  return {
13887
- weight: signInt(d.slice(0, 4).reduce(msbLsb)) / 100
14347
+ weight: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100
13888
14348
  };
14349
+ },
14350
+ 'parse_fly': (frame) => {
14351
+ if(frame[2] > 2){
14352
+ let date = [
14353
+ String(frame.slice(20, 22).reduce(msbLsb)),
14354
+ String(frame[22]).padStart(2, '0'),
14355
+ String(frame[23]).padStart(2, '0')
14356
+ ].join('-');
14357
+ let time = [
14358
+ String(frame[24]).padStart(2, '0'),
14359
+ String(frame[25]).padStart(2, '0'),
14360
+ String(frame[26]).padStart(2, '0')
14361
+ ].join(':');
14362
+ return {
14363
+ 'firmware': frame[2],
14364
+ 'calibration_tare': frame.slice(12, 16).reduce(msbLsb),
14365
+ 'tare_counter': frame.slice(16, 20).reduce(msbLsb),
14366
+ 'timestamp': date + 'T' + time,
14367
+ 'hardware_id': frame.slice(27, 30),
14368
+ 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "Sec",
14369
+ 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
14370
+ 'machine_values': {
14371
+ 'firmware': frame[2],
14372
+ 'calibration_tare': frame.slice(12, 16),
14373
+ 'tare_counter': frame.slice(16, 20),
14374
+ 'date': frame.slice(20, 27),
14375
+ 'hardware_id': frame.slice(27, 30),
14376
+ 'report_rate': frame.slice(30, 34),
14377
+ 'tx_life_counter': frame.slice(34, 38)
14378
+ }
14379
+ }
14380
+ }
13889
14381
  }
13890
14382
  },
13891
14383
  '270': {
@@ -16555,7 +17047,7 @@ function sensor_types(parent){
16555
17047
  parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
16556
17048
  return parsed;
16557
17049
  }
16558
- let msg_type = 'regular'; // (payload[7] & 16)? 'motion' : 'regular';
17050
+ let msg_type = 'regular';
16559
17051
  if(payload[8] === 1){
16560
17052
  var deviceAddr = mac;
16561
17053
  var firmware = payload[1];
@@ -16769,25 +17261,25 @@ function sensor_types(parent){
16769
17261
  x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
16770
17262
  x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
16771
17263
  x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
16772
- x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
16773
- x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
16774
- x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
17264
+ x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb)/100,
17265
+ x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb)/100,
17266
+ x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb)/100,
16775
17267
 
16776
17268
  y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
16777
17269
  y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
16778
17270
  y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
16779
17271
  y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
16780
- y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
16781
- y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
16782
- y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
17272
+ y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb)/100,
17273
+ y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb)/100,
17274
+ y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb)/100,
16783
17275
 
16784
17276
  z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
16785
17277
  z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
16786
17278
  z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
16787
17279
  z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
16788
- z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
16789
- z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
16790
- z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb)
17280
+ z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb)/100,
17281
+ z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb)/100,
17282
+ z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb)/100
16791
17283
  };
16792
17284
  }
16793
17285
  // else{
@@ -16828,7 +17320,7 @@ function sensor_types(parent){
16828
17320
  frame_data.odr_1 = 500;
16829
17321
  break;
16830
17322
  }
16831
- frame_data.sampling_duration_1 = frame[18]*50 + "ms";
17323
+ frame_data.sampling_duration_1 = frame[18] + "sec";
16832
17324
  switch(frame[19]){
16833
17325
  case 0:
16834
17326
  frame_data.filter_status = "Disabled";