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

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,7 +9479,7 @@ function sensor_types(parent){
9207
9479
  'tx_life_counter': frame.slice(50, 54)
9208
9480
  }
9209
9481
  }
9210
- } else if(frame[2] > 9){ // firmware 10 11 12 13 14 15
9482
+ } else if(frame[2] == 14){ // 14
9211
9483
  let reset_mode = "Disabled";
9212
9484
  switch(frame[38]){
9213
9485
  case 0:
@@ -9313,9 +9585,10 @@ function sensor_types(parent){
9313
9585
  'counter_reset_mode': reset_mode,
9314
9586
  'sampling_interval': rtc_sampling_interval,
9315
9587
  'acc_odr': acc_odr,
9316
- 'hardware_id': frame.slice(41, 44),
9317
- 'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
9318
- 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
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),
9319
9592
  'machine_values': {
9320
9593
  'firmware': frame[2],
9321
9594
  'accelerometer_threshold': frame[16],
@@ -9334,14 +9607,15 @@ function sensor_types(parent){
9334
9607
  'counter_reset_mode': frame[38],
9335
9608
  'sampling_interval': frame[39],
9336
9609
  'acc_odr': frame[40],
9337
- 'hardware_id': frame.slice(41, 44),
9338
- 'report_rate': frame.slice(44, 48),
9339
- 'tx_life_counter': frame.slice(48, 52)
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)
9340
9614
  }
9341
9615
  }
9342
- } else if(frame[2] > 8){
9616
+ } else if(frame[2] > 9){ // firmware 10 11 12 13 14 15
9343
9617
  let reset_mode = "Disabled";
9344
- switch(frame[37]){
9618
+ switch(frame[38]){
9345
9619
  case 0:
9346
9620
  reset_mode = "Disabled";
9347
9621
  break;
@@ -9353,7 +9627,7 @@ function sensor_types(parent){
9353
9627
  break;
9354
9628
  }
9355
9629
  let acc_odr = "10Hz";
9356
- switch(frame[39]){
9630
+ switch(frame[40]){
9357
9631
  case 0:
9358
9632
  acc_odr = "10Hz";
9359
9633
  break;
@@ -9374,7 +9648,7 @@ function sensor_types(parent){
9374
9648
  break;
9375
9649
  }
9376
9650
  let rtc_sampling_interval = "5 seconds";
9377
- switch(frame[38]){
9651
+ switch(frame[39]){
9378
9652
  case 0:
9379
9653
  rtc_sampling_interval = "1 minute";
9380
9654
  break;
@@ -9418,69 +9692,201 @@ function sensor_types(parent){
9418
9692
  return {
9419
9693
  'firmware': frame[2],
9420
9694
  'accelerometer_threshold': (frame[16]* 32) + "mg",
9421
- 'debouncing_timeout': frame[17] + "msec",
9422
- 'accelero_state': frame[18]? "Enabled": "Disabled",
9423
- 'input_1_active_edge': frame[19]? "Rising": "Falling",
9424
- 'input_2_active_edge': frame[20]? "Rising": "Falling",
9425
- 'input_3_active_edge': frame[21]? "Rising": "Falling",
9426
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
9427
- 'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
9695
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
9696
+ 'accelero_state': frame[19]? "Enabled": "Disabled",
9697
+ 'input_1_active_edge': frame[20]? "Rising": "Falling",
9698
+ 'input_2_active_edge': frame[21]? "Rising": "Falling",
9699
+ 'input_3_active_edge': frame[22]? "Rising": "Falling",
9700
+ 'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
9701
+ 'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
9428
9702
  'Shift_end_1': [
9429
- String(frame[27]).padStart(2, '0'),
9430
- String(frame[28]).padStart(2, '0')
9703
+ String(frame[28]).padStart(2, '0'),
9704
+ String(frame[29]).padStart(2, '0')
9431
9705
  ].join(':'),
9432
9706
  'Shift_end_2': [
9433
- String(frame[29]).padStart(2, '0'),
9434
- String(frame[30]).padStart(2, '0')
9707
+ String(frame[30]).padStart(2, '0'),
9708
+ String(frame[31]).padStart(2, '0')
9435
9709
  ].join(':'),
9436
9710
  'Shift_end_3': [
9437
- String(frame[31]).padStart(2, '0'),
9438
- String(frame[32]).padStart(2, '0')
9711
+ String(frame[32]).padStart(2, '0'),
9712
+ String(frame[33]).padStart(2, '0')
9439
9713
  ].join(':'),
9440
9714
  'Shift_end_4': [
9441
- String(frame[33]).padStart(2, '0'),
9442
- String(frame[34]).padStart(2, '0')
9715
+ String(frame[34]).padStart(2, '0'),
9716
+ String(frame[35]).padStart(2, '0')
9443
9717
  ].join(':'),
9444
- 'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
9718
+ 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
9445
9719
  'counter_reset_mode': reset_mode,
9446
9720
  'sampling_interval': rtc_sampling_interval,
9447
9721
  'acc_odr': acc_odr,
9448
- 'hardware_id': frame.slice(40, 43),
9449
- 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
9450
- 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
9722
+ 'hardware_id': frame.slice(41, 44),
9723
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
9724
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
9451
9725
  'machine_values': {
9452
9726
  'firmware': frame[2],
9453
9727
  'accelerometer_threshold': frame[16],
9454
- 'debouncing_timeout': frame[17],
9455
- 'accelero_state': frame[18],
9456
- 'input_1_active_edge': frame[19],
9457
- 'input_2_active_edge': frame[20],
9458
- 'input_3_active_edge': frame[21],
9459
- 'counter_threshold': frame.slice(22, 26),
9460
- 'trasnmit_on_change_status': frame[26],
9461
- 'Shift_end_1': frame.slice(27, 29),
9462
- 'Shift_end_2': frame.slice(29, 31),
9463
- 'Shift_end_3': frame.slice(31, 33),
9464
- 'Shift_end_4': frame.slice(33, 35),
9465
- 'reset_timeout': frame.slice(35, 37),
9466
- 'counter_reset_mode': frame[37],
9467
- 'sampling_interval': frame[38],
9468
- 'acc_odr': frame[39],
9469
- 'hardware_id': frame.slice(40, 43),
9470
- 'report_rate': frame.slice(43, 47),
9471
- 'tx_life_counter': frame.slice(47, 51)
9728
+ 'debouncing_timeout': frame.slice(17, 19),
9729
+ 'accelero_state': frame[19],
9730
+ 'input_1_active_edge': frame[20],
9731
+ 'input_2_active_edge': frame[21],
9732
+ 'input_3_active_edge': frame[22],
9733
+ 'counter_threshold': frame.slice(23, 27),
9734
+ 'trasnmit_on_change_status': frame[27],
9735
+ 'Shift_end_1': frame.slice(28, 30),
9736
+ 'Shift_end_2': frame.slice(30, 32),
9737
+ 'Shift_end_3': frame.slice(32, 34),
9738
+ 'Shift_end_4': frame.slice(34, 36),
9739
+ 'reset_timeout': frame.slice(36, 38),
9740
+ 'counter_reset_mode': frame[38],
9741
+ 'sampling_interval': frame[39],
9742
+ 'acc_odr': frame[40],
9743
+ 'hardware_id': frame.slice(41, 44),
9744
+ 'report_rate': frame.slice(44, 48),
9745
+ 'tx_life_counter': frame.slice(48, 52)
9472
9746
  }
9473
9747
  }
9474
- } else{
9475
- return {
9476
- 'firmware': frame[2],
9477
- 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
9478
- 'accelerometer_threshold': (frame[16]* 32) + "mg.",
9479
- 'debouncing_timeout': frame[17].toString() + "msec.",
9480
- 'accelero_state': frame[18],
9481
- 'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
9482
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
9483
- 'trasnmit_on_change_status': frame[26],
9748
+ } else if(frame[2] > 8){
9749
+ let reset_mode = "Disabled";
9750
+ switch(frame[37]){
9751
+ case 0:
9752
+ reset_mode = "Disabled";
9753
+ break;
9754
+ case 1:
9755
+ reset_mode = "Shift Ends";
9756
+ break;
9757
+ case 2:
9758
+ reset_mode = "Timeout";
9759
+ break;
9760
+ }
9761
+ let acc_odr = "10Hz";
9762
+ switch(frame[39]){
9763
+ case 0:
9764
+ acc_odr = "10Hz";
9765
+ break;
9766
+ case 1:
9767
+ acc_odr = "20Hz";
9768
+ break;
9769
+ case 2:
9770
+ acc_odr = "50Hz";
9771
+ break;
9772
+ case 3:
9773
+ acc_odr = "100Hz";
9774
+ break;
9775
+ case 4:
9776
+ acc_odr = "200Hz";
9777
+ break;
9778
+ case 5:
9779
+ acc_odr = "400Hz";
9780
+ break;
9781
+ }
9782
+ let rtc_sampling_interval = "5 seconds";
9783
+ switch(frame[38]){
9784
+ case 0:
9785
+ rtc_sampling_interval = "1 minute";
9786
+ break;
9787
+ case 1:
9788
+ rtc_sampling_interval = "5 minutes";
9789
+ break;
9790
+ case 2:
9791
+ rtc_sampling_interval = "15 minutes";
9792
+ break;
9793
+ case 3:
9794
+ rtc_sampling_interval = "30 minutes";
9795
+ break;
9796
+ case 4:
9797
+ rtc_sampling_interval = "1 hour";
9798
+ break;
9799
+ case 5:
9800
+ rtc_sampling_interval = "2 hours";
9801
+ break;
9802
+ case 6:
9803
+ rtc_sampling_interval = "3 hours";
9804
+ break;
9805
+ case 7:
9806
+ rtc_sampling_interval = "6 hours";
9807
+ break;
9808
+ case 8:
9809
+ rtc_sampling_interval = "12 hours";
9810
+ break;
9811
+ case 9:
9812
+ rtc_sampling_interval = "5 seconds";
9813
+ break;
9814
+ case 10:
9815
+ rtc_sampling_interval = "10 seconds";
9816
+ break;
9817
+ case 11:
9818
+ rtc_sampling_interval = "15 seconds";
9819
+ break;
9820
+ case 12:
9821
+ rtc_sampling_interval = "30 seconds";
9822
+ break;
9823
+ }
9824
+ return {
9825
+ 'firmware': frame[2],
9826
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
9827
+ 'debouncing_timeout': frame[17] + "msec",
9828
+ 'accelero_state': frame[18]? "Enabled": "Disabled",
9829
+ 'input_1_active_edge': frame[19]? "Rising": "Falling",
9830
+ 'input_2_active_edge': frame[20]? "Rising": "Falling",
9831
+ 'input_3_active_edge': frame[21]? "Rising": "Falling",
9832
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
9833
+ 'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
9834
+ 'Shift_end_1': [
9835
+ String(frame[27]).padStart(2, '0'),
9836
+ String(frame[28]).padStart(2, '0')
9837
+ ].join(':'),
9838
+ 'Shift_end_2': [
9839
+ String(frame[29]).padStart(2, '0'),
9840
+ String(frame[30]).padStart(2, '0')
9841
+ ].join(':'),
9842
+ 'Shift_end_3': [
9843
+ String(frame[31]).padStart(2, '0'),
9844
+ String(frame[32]).padStart(2, '0')
9845
+ ].join(':'),
9846
+ 'Shift_end_4': [
9847
+ String(frame[33]).padStart(2, '0'),
9848
+ String(frame[34]).padStart(2, '0')
9849
+ ].join(':'),
9850
+ 'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
9851
+ 'counter_reset_mode': reset_mode,
9852
+ 'sampling_interval': rtc_sampling_interval,
9853
+ 'acc_odr': acc_odr,
9854
+ 'hardware_id': frame.slice(40, 43),
9855
+ 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
9856
+ 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
9857
+ 'machine_values': {
9858
+ 'firmware': frame[2],
9859
+ 'accelerometer_threshold': frame[16],
9860
+ 'debouncing_timeout': frame[17],
9861
+ 'accelero_state': frame[18],
9862
+ 'input_1_active_edge': frame[19],
9863
+ 'input_2_active_edge': frame[20],
9864
+ 'input_3_active_edge': frame[21],
9865
+ 'counter_threshold': frame.slice(22, 26),
9866
+ 'trasnmit_on_change_status': frame[26],
9867
+ 'Shift_end_1': frame.slice(27, 29),
9868
+ 'Shift_end_2': frame.slice(29, 31),
9869
+ 'Shift_end_3': frame.slice(31, 33),
9870
+ 'Shift_end_4': frame.slice(33, 35),
9871
+ 'reset_timeout': frame.slice(35, 37),
9872
+ 'counter_reset_mode': frame[37],
9873
+ 'sampling_interval': frame[38],
9874
+ 'acc_odr': frame[39],
9875
+ 'hardware_id': frame.slice(40, 43),
9876
+ 'report_rate': frame.slice(43, 47),
9877
+ 'tx_life_counter': frame.slice(47, 51)
9878
+ }
9879
+ }
9880
+ } else{
9881
+ return {
9882
+ 'firmware': frame[2],
9883
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
9884
+ 'accelerometer_threshold': (frame[16]* 32) + "mg.",
9885
+ 'debouncing_timeout': frame[17].toString() + "msec.",
9886
+ 'accelero_state': frame[18],
9887
+ 'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
9888
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
9889
+ 'trasnmit_on_change_status': frame[26],
9484
9890
  'machine_values': {
9485
9891
  'firmware': frame[2],
9486
9892
  'report_rate': frame.slice(12, 16),
@@ -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,338 +13472,1190 @@ 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
  }
13021
13482
  },
13022
- '120': {
13023
- name: 'Wireless H2S Sensor',
13024
- parse: (d) => {
13025
- return {
13026
- ppm: d.slice(0, 2).reduce(msbLsb),
13027
- temperature: signInt(d.slice(2, 4).reduce(msbLsb), 16) / 100,
13028
- humidity: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100
13029
- };
13030
- },
13031
- 'parse_fly': (frame) => {
13032
- return {
13033
- 'firmware': frame[2],
13034
- 'h2s_threshold': frame[12],
13035
- 'always_on_status': frame[13],
13036
- 'hardware_id': frame.slice(14, 17),
13037
- 'sample_rate': frame.slice(17, 21).reduce(msbLsb) + " Sec.",
13038
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
13039
- 'machine_values': {
13040
- 'firmware': frame[2],
13041
- 'h2s threshold': frame[12],
13042
- 'always_on_status': frame[13],
13043
- 'hardware_id': frame.slice(14, 17),
13044
- 'sample_rate': frame.slice(17, 21).reduce(msbLsb),
13045
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
13046
- }
13483
+ '119': {
13484
+ name: 'Wireless Machine Run Time Hour Meter',
13485
+ parse: (d, payload) => {
13486
+ let firmware = payload[1];
13487
+ if(payload[7] & 2 != 0){
13488
+ console.log('Error found');
13489
+ // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
13490
+ let error = {error: 'Error found, Acclerometer Probe may be unattached'};
13491
+ return error;
13047
13492
  }
13048
- }
13049
- },
13050
- '121':{
13051
- name: 'Wireless Wood Moisture Sensor',
13052
- parse: (d) => {
13053
- return {
13054
- wood_type: d[0],
13055
- temperature: signInt(d.slice(1, 3).reduce(msbLsb), 16) / 100,
13056
- humidity: d.slice(3, 5).reduce(msbLsb) / 100,
13057
- wood_moisture: d.slice(5, 7).reduce(msbLsb) / 100,
13058
- wood_resistance: (d.slice(7, 15)).reduce(msbLsb) / 100
13059
- };
13060
- },
13061
- 'parse_fly': (frame) => {
13062
- return {
13063
- 'hardware_id': frame.slice(12, 15),
13064
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
13065
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
13066
- 'machine_values': {
13067
- 'hardware_id': frame.slice(12, 15),
13068
- 'sample_rate': frame.slice(15, 19),
13069
- 'tx_life_counter': frame.slice(19, 23)
13070
- }
13493
+ let report_type = "Regular";
13494
+ switch(d[17]){
13495
+ case 0:
13496
+ report_type = "Regular";
13497
+ break;
13498
+ case 1:
13499
+ report_type = "Shift end";
13500
+ break;
13501
+ case 2:
13502
+ report_type = "Interrupt";
13503
+ break;
13504
+ case 3:
13505
+ report_type = "Threshold";
13506
+ break;
13507
+ }
13508
+ if ((payload[7] & 4) != 0) {
13509
+ return {
13510
+ raw_data: "Enabled",
13511
+ accelerometer_counter: d.slice(0, 4).reduce(msbLsb),
13512
+ accelerometer_uptime: d.slice(4, 8).reduce(msbLsb),
13513
+ magnetometer_counter: d.slice(8, 12).reduce(msbLsb),
13514
+ magnetometer_uptime: d.slice(12, 16).reduce(msbLsb),
13515
+ input_acc: d[16] & 8 ? 1 : 0,
13516
+ input_mag: d[16] & 16 ? 1 : 0,
13517
+ report_type: report_type,
13518
+ rtc: [
13519
+ String(d[18]).padStart(2, '0'),
13520
+ String(d[19]).padStart(2, '0'),
13521
+ String(d[20]).padStart(2, '0')
13522
+ ].join(':'),
13523
+ 'temperature': d.slice(21, 23).reduce(msbLsb)/100,
13524
+ 'accelero_sample_1':{
13525
+ x:[signInt(d.slice(23, 25).reduce(msbLsb),16)/100],
13526
+ y:[signInt(d.slice(25, 27).reduce(msbLsb),16)/100],
13527
+ z:[signInt(d.slice(27, 29).reduce(msbLsb),16)/100]
13528
+ },
13529
+ 'accelero_sample_2':{
13530
+ x:[signInt(d.slice(29, 31).reduce(msbLsb),16)/100],
13531
+ y:[signInt(d.slice(31, 33).reduce(msbLsb),16)/100],
13532
+ z:[signInt(d.slice(33, 35).reduce(msbLsb),16)/100]
13533
+ },
13534
+ 'accelero_sample_3':{
13535
+ x:[signInt(d.slice(35, 37).reduce(msbLsb),16)/100],
13536
+ y:[signInt(d.slice(37, 39).reduce(msbLsb),16)/100],
13537
+ z:[signInt(d.slice(39, 41).reduce(msbLsb),16)/100]
13538
+ },
13539
+ 'accelero_sample_4':{
13540
+ x:[signInt(d.slice(41, 43).reduce(msbLsb),16)/100],
13541
+ y:[signInt(d.slice(43, 45).reduce(msbLsb),16)/100],
13542
+ z:[signInt(d.slice(45, 47).reduce(msbLsb),16)/100]
13543
+ },
13544
+ 'accelero_sample_5':{
13545
+ x:[signInt(d.slice(47, 49).reduce(msbLsb),16)/100],
13546
+ y:[signInt(d.slice(49, 51).reduce(msbLsb),16)/100],
13547
+ z:[signInt(d.slice(51, 53).reduce(msbLsb),16)/100]
13548
+ },
13549
+ 'accelero_sample_6':{
13550
+ x:[signInt(d.slice(53, 55).reduce(msbLsb),16)/100],
13551
+ y:[signInt(d.slice(55, 57).reduce(msbLsb),16)/100],
13552
+ z:[signInt(d.slice(57, 59).reduce(msbLsb),16)/100]
13553
+ },
13554
+ 'accelero_sample_7':{
13555
+ x:[signInt(d.slice(59, 61).reduce(msbLsb),16)/100],
13556
+ y:[signInt(d.slice(61, 63).reduce(msbLsb),16)/100],
13557
+ z:[signInt(d.slice(63, 65).reduce(msbLsb),16)/100]
13558
+ },
13559
+ 'accelero_sample_8':{
13560
+ x:[signInt(d.slice(65, 67).reduce(msbLsb),16)/100],
13561
+ y:[signInt(d.slice(67, 69).reduce(msbLsb),16)/100],
13562
+ z:[signInt(d.slice(69, 71).reduce(msbLsb),16)/100]
13563
+ },
13564
+ 'accelero_sample_9':{
13565
+ x:[signInt(d.slice(71, 73).reduce(msbLsb),16)/100],
13566
+ y:[signInt(d.slice(73, 75).reduce(msbLsb),16)/100],
13567
+ z:[signInt(d.slice(75, 77).reduce(msbLsb),16)/100]
13568
+ },
13569
+ 'accelero_sample_10':{
13570
+ x:[signInt(d.slice(77, 79).reduce(msbLsb),16)/100],
13571
+ y:[signInt(d.slice(79, 81).reduce(msbLsb),16)/100],
13572
+ z:[signInt(d.slice(81, 83).reduce(msbLsb),16)/100]
13573
+ }
13574
+ };
13575
+ }else{
13576
+ return {
13577
+ raw_data: "Disabled",
13578
+ accelerometer_counter: d.slice(0, 4).reduce(msbLsb),
13579
+ accelerometer_uptime: d.slice(4, 8).reduce(msbLsb),
13580
+ magnetometer_counter: d.slice(8, 12).reduce(msbLsb),
13581
+ magnetometer_uptime: d.slice(12, 16).reduce(msbLsb),
13582
+ input_acc: d[16] & 8 ? 1 : 0,
13583
+ input_mag: d[16] & 16 ? 1 : 0,
13584
+ report_type: report_type,
13585
+ rtc: [
13586
+ String(d[18]).padStart(2, '0'),
13587
+ String(d[19]).padStart(2, '0'),
13588
+ String(d[20]).padStart(2, '0')
13589
+ ].join(':'),
13590
+ 'temperature': d.slice(21, 23).reduce(msbLsb)/100
13591
+ };
13071
13592
  }
13072
- }
13073
- },
13074
- '122': {
13075
- name: 'Wireless 4-20mA Current Splitter',
13076
- parse: (d) => {
13077
- // This parser may be outdated if a customer has an issue check with Engineering
13078
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
13079
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
13080
- return {
13081
- adc1: adc1,
13082
- adc2: adc2,
13083
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
13084
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
13085
- };
13086
13593
  },
13087
13594
  'parse_fly': (frame) => {
13088
- let frame_data = {};
13089
- switch(frame[16]){
13595
+ let reset_mode = "Disabled";
13596
+ switch(frame[35]){
13090
13597
  case 0:
13091
- frame_data.fsr = "+-6.114 V";
13598
+ reset_mode = "Disabled";
13092
13599
  break;
13093
13600
  case 1:
13094
- frame_data.fsr = "+-4.096 V";
13601
+ reset_mode = "Shift Ends";
13095
13602
  break;
13096
13603
  case 2:
13097
- frame_data.fsr = "+-2.048 V";
13604
+ reset_mode = "Timeout";
13605
+ break;
13606
+ }
13607
+ let acc_odr = "10 Hz";
13608
+ switch(frame[37]){
13609
+ case 0:
13610
+ acc_odr = "10 Hz";
13611
+ break;
13612
+ case 1:
13613
+ acc_odr = "20 Hz";
13614
+ break;
13615
+ case 2:
13616
+ acc_odr = "50 Hz";
13098
13617
  break;
13099
13618
  case 3:
13100
- frame_data.fsr = "+-1.024 V";
13619
+ acc_odr = "100 Hz";
13101
13620
  break;
13102
13621
  case 4:
13103
- frame_data.fsr = "+-0.512 V";
13622
+ acc_odr = "200 Hz";
13104
13623
  break;
13105
13624
  case 5:
13106
- frame_data.fsr = "+-0.256 V";
13625
+ acc_odr = "400 Hz";
13107
13626
  break;
13108
13627
  }
13109
- if(frame[2]>13){ // firmware 14 and above
13110
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
13111
- if(!auto_check_interval){
13112
- frame_data.auto_check_interval = 'Disabled';
13113
- }else{
13114
- frame_data.auto_check_interval = auto_check_interval + " sec";
13115
- }
13116
- return {
13117
- 'firmware': frame[2],
13118
- 'fsr': frame_data.fsr,
13119
- 'boot_time': frame[17] + " sec",
13120
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
13121
- 'auto_check_interval': frame_data.auto_check_interval,
13122
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
13123
- 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
13124
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
13125
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
13126
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
13127
- 'hardware_id': frame.slice(37, 40),
13128
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
13129
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
13130
- 'machine_values': {
13131
- 'firmware': frame[2],
13132
- 'fsr': frame[16],
13133
- 'boot_time': frame[17],
13134
- 'adc_pin_reading': frame.slice(18, 20),
13135
- 'auto_check_interval': frame.slice(20, 22),
13136
- 'auto_check_percentage': frame.slice(22, 24),
13137
- 'always_on': frame[24],
13138
- 'calibration_one': frame.slice(25, 29),
13139
- 'calibration_two':frame.slice(29, 33),
13140
- 'calibration_three':frame.slice(33, 37),
13141
- 'hardware_id': frame.slice(37, 40),
13142
- 'report_rate': frame.slice(40, 44),
13143
- 'tx_life_counter': frame.slice(44, 48)
13144
- }
13145
- }
13146
- }else if(frame[2]>12){
13147
- return {
13148
- 'firmware': frame[2],
13149
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
13150
- 'fsr':frame_data.fsr,
13151
- 'boot_up_time': frame[17],
13152
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
13628
+ let rtc_sampling_interval = "5 sec";
13629
+ switch(frame[36]){
13630
+ case 0:
13631
+ rtc_sampling_interval = "1 min";
13632
+ break;
13633
+ case 1:
13634
+ rtc_sampling_interval = "5 min";
13635
+ break;
13636
+ case 2:
13637
+ rtc_sampling_interval = "15 min";
13638
+ break;
13639
+ case 3:
13640
+ rtc_sampling_interval = "30 min";
13641
+ break;
13642
+ case 4:
13643
+ rtc_sampling_interval = "1 hour";
13644
+ break;
13645
+ case 5:
13646
+ rtc_sampling_interval = "2 hours";
13647
+ break;
13648
+ case 6:
13649
+ rtc_sampling_interval = "3 hours";
13650
+ break;
13651
+ case 7:
13652
+ rtc_sampling_interval = "6 hours";
13653
+ break;
13654
+ case 8:
13655
+ rtc_sampling_interval = "12 hours";
13656
+ break;
13657
+ case 9:
13658
+ rtc_sampling_interval = "5 sec";
13659
+ break;
13660
+ case 10:
13661
+ rtc_sampling_interval = "10 sec";
13662
+ break;
13663
+ case 11:
13664
+ rtc_sampling_interval = "15 sec";
13665
+ break;
13666
+ case 12:
13667
+ rtc_sampling_interval = "30 sec";
13668
+ break;
13669
+ }
13670
+ let acc_enabled_axis = 'Disabled All';
13671
+ switch(frame[40]){
13672
+ case 0:
13673
+ acc_enabled_axis = 'Disabled All';
13674
+ break;
13675
+ case 1:
13676
+ acc_enabled_axis = 'x axis';
13677
+ break;
13678
+ case 2:
13679
+ acc_enabled_axis = 'y axis';
13680
+ break;
13681
+ case 3:
13682
+ acc_enabled_axis = 'z axis';
13683
+ break;
13684
+ case 7:
13685
+ acc_enabled_axis = 'all axis';
13686
+ break;
13687
+ }
13688
+ return {
13689
+ 'firmware': frame[2],
13690
+ 'accelerometer_threshold': (frame[16]* 32) + " mg",
13691
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + " msec",
13692
+ 'accelero_state': frame[19]? "Enabled": "Disabled",
13693
+ 'counter_threshold': frame.slice(20, 24).reduce(msbLsb),
13694
+ 'trasnmit_on_change_status': frame[24]? "Enabled": "Disabled",
13695
+ 'Shift_end_1': [
13696
+ String(frame[25]).padStart(2, '0'),
13697
+ String(frame[26]).padStart(2, '0')
13698
+ ].join(':'),
13699
+ 'Shift_end_2': [
13700
+ String(frame[27]).padStart(2, '0'),
13701
+ String(frame[28]).padStart(2, '0')
13702
+ ].join(':'),
13703
+ 'Shift_end_3': [
13704
+ String(frame[29]).padStart(2, '0'),
13705
+ String(frame[30]).padStart(2, '0')
13706
+ ].join(':'),
13707
+ 'Shift_end_4': [
13708
+ String(frame[31]).padStart(2, '0'),
13709
+ String(frame[32]).padStart(2, '0')
13710
+ ].join(':'),
13711
+ 'reset_timeout': frame.slice(33, 35).reduce(msbLsb) + " min",
13712
+ 'counter_reset_mode': reset_mode,
13713
+ 'sampling_interval': rtc_sampling_interval,
13714
+ 'acc_odr': acc_odr,
13715
+ 'interrupt_timeout': frame.slice(38, 40).reduce(msbLsb) + ' msec',
13716
+ 'acc_enabled_axis': acc_enabled_axis,
13717
+ 'hardware_id': frame.slice(41, 44),
13718
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
13719
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
13720
+ 'machine_values': {
13721
+ 'firmware': frame[2],
13722
+ 'accelerometer_threshold': (frame[16]* 32),
13723
+ 'debouncing_timeout': frame.slice(17, 19),
13724
+ 'accelero_state': frame[19],
13725
+ 'counter_threshold': frame.slice(20, 24),
13726
+ 'trasnmit_on_change_status': frame[24],
13727
+ 'Shift_end_1': [
13728
+ frame[25],
13729
+ frame[26]
13730
+ ],
13731
+ 'Shift_end_2': [
13732
+ frame[27],
13733
+ frame[28]
13734
+ ],
13735
+ 'Shift_end_3': [
13736
+ frame[29],
13737
+ frame[30]
13738
+ ],
13739
+ 'Shift_end_4': [
13740
+ frame[31],
13741
+ frame[32]
13742
+ ],
13743
+ 'reset_timeout': frame.slice(33, 35),
13744
+ 'counter_reset_mode': frame[35],
13745
+ 'sampling_interval': frame[36],
13746
+ 'acc_odr': frame[37],
13747
+ 'interrupt_timeout': frame.slice(38, 40),
13748
+ 'acc_enabled_axis': frame[40],
13749
+ 'hardware_id': frame.slice(41, 44),
13750
+ 'report_rate': frame.slice(44, 48),
13751
+ 'tx_life_counter': frame.slice(48, 52)
13752
+ }
13753
+ }
13754
+ }
13755
+ },
13756
+ '120': {
13757
+ name: 'Wireless H2S Sensor',
13758
+ parse: (d) => {
13759
+ return {
13760
+ ppm: d.slice(0, 2).reduce(msbLsb),
13761
+ temperature: signInt(d.slice(2, 4).reduce(msbLsb), 16) / 100,
13762
+ humidity: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100
13763
+ };
13764
+ },
13765
+ 'parse_fly': (frame) => {
13766
+ return {
13767
+ 'firmware': frame[2],
13768
+ 'h2s_threshold': frame[12],
13769
+ 'always_on_status': frame[13],
13770
+ 'hardware_id': frame.slice(14, 17),
13771
+ 'sample_rate': frame.slice(17, 21).reduce(msbLsb) + " Sec.",
13772
+ 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
13773
+ 'machine_values': {
13774
+ 'firmware': frame[2],
13775
+ 'h2s threshold': frame[12],
13776
+ 'always_on_status': frame[13],
13777
+ 'hardware_id': frame.slice(14, 17),
13778
+ 'sample_rate': frame.slice(17, 21).reduce(msbLsb),
13779
+ 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
13780
+ }
13781
+ }
13782
+ }
13783
+ },
13784
+ '121':{
13785
+ name: 'Wireless Wood Moisture Sensor',
13786
+ parse: (d) => {
13787
+ return {
13788
+ wood_type: d[0],
13789
+ temperature: signInt(d.slice(1, 3).reduce(msbLsb), 16) / 100,
13790
+ humidity: d.slice(3, 5).reduce(msbLsb) / 100,
13791
+ wood_moisture: d.slice(5, 7).reduce(msbLsb) / 100,
13792
+ wood_resistance: (d.slice(7, 15)).reduce(msbLsb) / 100
13793
+ };
13794
+ },
13795
+ 'parse_fly': (frame) => {
13796
+ return {
13797
+ 'hardware_id': frame.slice(12, 15),
13798
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
13799
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
13800
+ 'machine_values': {
13801
+ 'hardware_id': frame.slice(12, 15),
13802
+ 'sample_rate': frame.slice(15, 19),
13803
+ 'tx_life_counter': frame.slice(19, 23)
13804
+ }
13805
+ }
13806
+ }
13807
+ },
13808
+ '122': {
13809
+ name: 'Wireless 4-20mA Current Splitter',
13810
+ parse: (d) => {
13811
+ // This parser may be outdated if a customer has an issue check with Engineering
13812
+ var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
13813
+ var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
13814
+ return {
13815
+ adc1: adc1,
13816
+ adc2: adc2,
13817
+ mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
13818
+ mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
13819
+ };
13820
+ },
13821
+ 'parse_fly': (frame) => {
13822
+ let frame_data = {};
13823
+ switch(frame[16]){
13824
+ case 0:
13825
+ frame_data.fsr = "+-6.114 V";
13826
+ break;
13827
+ case 1:
13828
+ frame_data.fsr = "+-4.096 V";
13829
+ break;
13830
+ case 2:
13831
+ frame_data.fsr = "+-2.048 V";
13832
+ break;
13833
+ case 3:
13834
+ frame_data.fsr = "+-1.024 V";
13835
+ break;
13836
+ case 4:
13837
+ frame_data.fsr = "+-0.512 V";
13838
+ break;
13839
+ case 5:
13840
+ frame_data.fsr = "+-0.256 V";
13841
+ break;
13842
+ }
13843
+ if(frame[2]>13){ // firmware 14 and above
13844
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
13845
+ if(!auto_check_interval){
13846
+ frame_data.auto_check_interval = 'Disabled';
13847
+ }else{
13848
+ frame_data.auto_check_interval = auto_check_interval + " sec";
13849
+ }
13850
+ return {
13851
+ 'firmware': frame[2],
13852
+ 'fsr': frame_data.fsr,
13853
+ 'boot_time': frame[17] + " sec",
13854
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
13855
+ 'auto_check_interval': frame_data.auto_check_interval,
13856
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
13857
+ 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
13858
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
13859
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
13860
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
13861
+ 'hardware_id': frame.slice(37, 40),
13862
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
13863
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
13153
13864
  'machine_values': {
13154
13865
  'firmware': frame[2],
13155
- 'report_rate': frame.slice(12, 16),
13156
- 'fsr':frame[16],
13157
- 'boot_up_time': frame[17],
13866
+ 'fsr': frame[16],
13867
+ 'boot_time': frame[17],
13158
13868
  'adc_pin_reading': frame.slice(18, 20),
13159
- 'frame': frame
13869
+ 'auto_check_interval': frame.slice(20, 22),
13870
+ 'auto_check_percentage': frame.slice(22, 24),
13871
+ 'always_on': frame[24],
13872
+ 'calibration_one': frame.slice(25, 29),
13873
+ 'calibration_two':frame.slice(29, 33),
13874
+ 'calibration_three':frame.slice(33, 37),
13875
+ 'hardware_id': frame.slice(37, 40),
13876
+ 'report_rate': frame.slice(40, 44),
13877
+ 'tx_life_counter': frame.slice(44, 48)
13160
13878
  }
13161
13879
  }
13162
- }else{
13163
- return {
13880
+ }else if(frame[2]>12){
13881
+ return {
13882
+ 'firmware': frame[2],
13883
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
13884
+ 'fsr':frame_data.fsr,
13885
+ 'boot_up_time': frame[17],
13886
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
13887
+ 'machine_values': {
13888
+ 'firmware': frame[2],
13889
+ 'report_rate': frame.slice(12, 16),
13890
+ 'fsr':frame[16],
13891
+ 'boot_up_time': frame[17],
13892
+ 'adc_pin_reading': frame.slice(18, 20),
13893
+ 'frame': frame
13894
+ }
13895
+ }
13896
+ }else{
13897
+ return {
13898
+ 'firmware': frame[2],
13899
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
13900
+ 'fsr':frame_data.fsr,
13901
+ 'boot_up_time': frame[17],
13902
+ 'machine_values': {
13903
+ 'firmware': frame[2],
13904
+ 'report_rate': frame.slice(12, 16),
13905
+ 'fsr':frame[16],
13906
+ 'boot_up_time': frame[17],
13907
+ 'frame': frame
13908
+ }
13909
+ }
13910
+ }
13911
+ }
13912
+ },
13913
+ '123': {
13914
+ name: '3 Channel Production Counter',
13915
+ parse: (d, payload) => {
13916
+ let report_type = "Regular";
13917
+ switch(d[25]){
13918
+ case 0:
13919
+ report_type = "Regular";
13920
+ break;
13921
+ case 1:
13922
+ report_type = "Shift end";
13923
+ break;
13924
+ case 2:
13925
+ report_type = "Interrupt";
13926
+ break;
13927
+ case 3:
13928
+ report_type = "Threshold";
13929
+ break;
13930
+ }
13931
+ return {
13932
+ digital_input_1_counter: d.slice(0, 4).reduce(msbLsb),
13933
+ digital_input_1_uptime: d.slice(4, 8).reduce(msbLsb),
13934
+ digital_input_2_counter: d.slice(8, 12).reduce(msbLsb),
13935
+ digital_input_2_uptime: d.slice(12, 16).reduce(msbLsb),
13936
+ digital_input_3_counter: d.slice(16, 20).reduce(msbLsb),
13937
+ digital_input_3_uptime: d.slice(20, 24).reduce(msbLsb),
13938
+ input_1: d[24] & 1 ? 1 : 0,
13939
+ input_2: d[24] & 2 ? 1 : 0,
13940
+ input_3: d[24] & 4 ? 1 : 0,
13941
+ report_type: report_type,
13942
+ rtc: [
13943
+ String(d[26]).padStart(2, '0'),
13944
+ String(d[27]).padStart(2, '0'),
13945
+ String(d[28]).padStart(2, '0')
13946
+ ].join(':')
13947
+ };
13948
+ },
13949
+ 'parse_fly': (frame) => {
13950
+ let reset_mode = "Disabled";
13951
+ switch(frame[36]){
13952
+ case 0:
13953
+ reset_mode = "Disabled";
13954
+ break;
13955
+ case 1:
13956
+ reset_mode = "Shift Ends";
13957
+ break;
13958
+ case 2:
13959
+ reset_mode = "Timeout";
13960
+ break;
13961
+ }
13962
+ let rtc_sampling_interval = "5sec";
13963
+ switch(frame[37]){
13964
+ case 0:
13965
+ rtc_sampling_interval = "1min";
13966
+ break;
13967
+ case 1:
13968
+ rtc_sampling_interval = "5min";
13969
+ break;
13970
+ case 2:
13971
+ rtc_sampling_interval = "15min";
13972
+ break;
13973
+ case 3:
13974
+ rtc_sampling_interval = "30min";
13975
+ break;
13976
+ case 4:
13977
+ rtc_sampling_interval = "1h";
13978
+ break;
13979
+ case 5:
13980
+ rtc_sampling_interval = "2h";
13981
+ break;
13982
+ case 6:
13983
+ rtc_sampling_interval = "3h";
13984
+ break;
13985
+ case 7:
13986
+ rtc_sampling_interval = "6h";
13987
+ break;
13988
+ case 8:
13989
+ rtc_sampling_interval = "12h";
13990
+ break;
13991
+ case 9:
13992
+ rtc_sampling_interval = "5sec";
13993
+ break;
13994
+ case 10:
13995
+ rtc_sampling_interval = "10sec";
13996
+ break;
13997
+ case 11:
13998
+ rtc_sampling_interval = "15sec";
13999
+ break;
14000
+ case 12:
14001
+ rtc_sampling_interval = "30sec";
14002
+ break;
14003
+ }
14004
+ return {
14005
+ 'firmware': frame[2],
14006
+ 'debouncing_timeout': frame.slice(16, 18).reduce(msbLsb) + "msec",
14007
+ 'input_1_active_edge': frame[18]? "Rising": "Falling",
14008
+ 'input_2_active_edge': frame[19]? "Rising": "Falling",
14009
+ 'input_3_active_edge': frame[20]? "Rising": "Falling",
14010
+ 'counter_threshold': frame.slice(21, 25).reduce(msbLsb),
14011
+ 'trasnmit_on_change_status': frame[25]? "Enabled": "Disabled",
14012
+ 'Shift_end_1': [
14013
+ String(frame[26]).padStart(2, '0'),
14014
+ String(frame[27]).padStart(2, '0')
14015
+ ].join(':'),
14016
+ 'Shift_end_2': [
14017
+ String(frame[28]).padStart(2, '0'),
14018
+ String(frame[29]).padStart(2, '0')
14019
+ ].join(':'),
14020
+ 'Shift_end_3': [
14021
+ String(frame[30]).padStart(2, '0'),
14022
+ String(frame[31]).padStart(2, '0')
14023
+ ].join(':'),
14024
+ 'Shift_end_4': [
14025
+ String(frame[32]).padStart(2, '0'),
14026
+ String(frame[33]).padStart(2, '0')
14027
+ ].join(':'),
14028
+ 'reset_timeout': frame.slice(34, 36).reduce(msbLsb) + "min",
14029
+ 'counter_reset_mode': reset_mode,
14030
+ 'sampling_interval': rtc_sampling_interval,
14031
+ 'interrupt_timeout': frame.slice(38, 40).reduce(msbLsb) + "msec",
14032
+ 'hardware_id': frame.slice(40, 43),
14033
+ 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
14034
+ 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
14035
+ 'machine_values': {
14036
+ 'firmware': frame[2],
14037
+ 'debouncing_timeout': frame.slice(16, 18),
14038
+ 'input_1_active_edge': frame[18],
14039
+ 'input_2_active_edge': frame[19],
14040
+ 'input_3_active_edge': frame[20],
14041
+ 'counter_threshold': frame.slice(21, 25),
14042
+ 'trasnmit_on_change_status': frame[25],
14043
+ 'Shift_end_1': frame.slice(26, 28),
14044
+ 'Shift_end_2': frame.slice(28, 30),
14045
+ 'Shift_end_3': frame.slice(30, 32),
14046
+ 'Shift_end_4': frame.slice(32, 34),
14047
+ 'reset_timeout': frame.slice(34, 36),
14048
+ 'counter_reset_mode': frame[36],
14049
+ 'sampling_interval': frame[37],
14050
+ 'interrupt_timeout': frame.slice(38, 40),
14051
+ 'hardware_id': frame.slice(40, 43),
14052
+ 'report_rate': frame.slice(43, 47),
14053
+ 'tx_life_counter': frame.slice(47, 51)
14054
+ }
14055
+ }
14056
+ }
14057
+ },
14058
+ '124': {
14059
+ name: 'Wireless EH Flow Sensor',
14060
+ parse: (d) => {
14061
+ return {
14062
+ volume_flow: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
14063
+ conductivity: d.slice(4, 8).reduce(msbLsb),
14064
+ flow_velocity: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100,
14065
+ pressure: signInt(d.slice(12, 16).reduce(msbLsb),32) / 100,
14066
+ // WARNING doesn't handle decimal values and will round to whole number.
14067
+ total_flow_1: d.slice(16, 24).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
14068
+ total_flow_2: d.slice(24, 32).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
14069
+ total_flow_3: d.slice(32, 40).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
14070
+ battery_life: d.slice(40, 42).reduce(msbLsb),
14071
+ battery_state: d[42],
14072
+ total_flow_1_raw: d.slice(16, 24),
14073
+ total_flow_2_raw: d.slice(24, 32),
14074
+ total_flow_3_raw: d.slice(32, 40)
14075
+ };
14076
+ },
14077
+ 'parse_fly': (frame) => {
14078
+ let frame_data = {};
14079
+ switch(frame[12]){
14080
+ case 0:
14081
+ frame_data.flow_unit = 'cm³/s';
14082
+ break;
14083
+ case 1:
14084
+ frame_data.flow_unit = 'cm³/min';
14085
+ break;
14086
+ case 2:
14087
+ frame_data.flow_unit = 'cm³/h';
14088
+ break;
14089
+ case 3:
14090
+ frame_data.flow_unit = 'cm³/d';
14091
+ break;
14092
+ case 4:
14093
+ frame_data.flow_unit = 'dm³/s';
14094
+ break;
14095
+ case 5:
14096
+ frame_data.flow_unit = 'dm³/min';
14097
+ break;
14098
+ case 6:
14099
+ frame_data.flow_unit = 'dm³/h';
14100
+ break;
14101
+ case 7:
14102
+ frame_data.flow_unit = 'dm³/d';
14103
+ break;
14104
+ case 8:
14105
+ frame_data.flow_unit = 'm³/s';
14106
+ break;
14107
+ case 9:
14108
+ frame_data.flow_unit = 'm³/min';
14109
+ break;
14110
+ case 10:
14111
+ frame_data.flow_unit = 'm³/h';
14112
+ break;
14113
+ case 11:
14114
+ frame_data.flow_unit = 'm³/d';
14115
+ break;
14116
+ case 12:
14117
+ frame_data.flow_unit = 'ml/s';
14118
+ break;
14119
+ case 13:
14120
+ frame_data.flow_unit = 'ml/min';
14121
+ break;
14122
+ case 14:
14123
+ frame_data.flow_unit = 'ml/h';
14124
+ break;
14125
+ case 15:
14126
+ frame_data.flow_unit = 'ml/d';
14127
+ break;
14128
+ case 16:
14129
+ unitStrframe_data.flow_uniting = 'l/s';
14130
+ break;
14131
+ case 17:
14132
+ frame_data.flow_unit = 'l/min';
14133
+ break;
14134
+ case 18:
14135
+ frame_data.flow_unit = 'l/h';
14136
+ break;
14137
+ case 19:
14138
+ frame_data.flow_unit = 'l/d';
14139
+ break;
14140
+ case 20:
14141
+ frame_data.flow_unit = 'hl/s';
14142
+ break;
14143
+ case 21:
14144
+ frame_data.flow_unit = 'hl/min';
14145
+ break;
14146
+ case 22:
14147
+ frame_data.flow_unit = 'hl/h';
14148
+ break;
14149
+ case 23:
14150
+ frame_data.flow_unit = 'hl/d';
14151
+ break;
14152
+ case 24:
14153
+ frame_data.flow_unit = 'Ml/s';
14154
+ break;
14155
+ case 25:
14156
+ frame_data.flow_unit = 'Ml/min';
14157
+ break;
14158
+ case 26:
14159
+ frame_data.flow_unit = 'Ml/h';
14160
+ break;
14161
+ case 27:
14162
+ frame_data.flow_unit = 'Ml/d';
14163
+ break;
14164
+
14165
+ // US Customary & Imperial Flow Rates
14166
+ case 32:
14167
+ frame_data.flow_unit = 'af/s';
14168
+ break;
14169
+ case 33:
14170
+ frame_data.flow_unit = 'af/min';
14171
+ break;
14172
+ case 34:
14173
+ frame_data.flow_unit = 'af/h';
14174
+ break;
14175
+ case 35:
14176
+ frame_data.flow_unit = 'af/d';
14177
+ break;
14178
+ case 36:
14179
+ frame_data.flow_unit = 'ft³/s';
14180
+ break;
14181
+ case 37:
14182
+ frame_data.flow_unit = 'ft³/min';
14183
+ break;
14184
+ case 38:
14185
+ frame_data.flow_unit = 'ft³/h';
14186
+ break;
14187
+ case 39:
14188
+ frame_data.flow_unit = 'ft³/d';
14189
+ break;
14190
+ case 40:
14191
+ frame_data.flow_unit = 'fl oz/s (us)';
14192
+ break;
14193
+ case 41:
14194
+ frame_data.flow_unit = 'fl oz/min (us)';
14195
+ break;
14196
+ case 42:
14197
+ frame_data.flow_unit = 'fl oz/h (us)';
14198
+ break;
14199
+ case 43:
14200
+ frame_data.flow_unit = 'fl oz/d (us)';
14201
+ break;
14202
+ case 44:
14203
+ frame_data.flow_unit = 'gal/s (us)';
14204
+ break;
14205
+ case 45:
14206
+ frame_data.flow_unit = 'gal/min (us)';
14207
+ break;
14208
+ case 46:
14209
+ frame_data.flow_unit = 'gal/h (us)';
14210
+ break;
14211
+ case 47:
14212
+ frame_data.flow_unit = 'gal/d (us)';
14213
+ break;
14214
+ case 48:
14215
+ frame_data.flow_unit = 'Mgal/s (us)';
14216
+ break;
14217
+ case 49:
14218
+ frame_data.flow_unit = 'Mgal/min (us)';
14219
+ break;
14220
+ case 50:
14221
+ frame_data.flow_unit = 'Mgal/h (us)';
14222
+ break;
14223
+ case 51:
14224
+ frame_data.flow_unit = 'Mgal/d (us)';
14225
+ break;
14226
+ case 52:
14227
+ frame_data.flow_unit = 'bbl/s (us;liq.)';
14228
+ break;
14229
+ case 53:
14230
+ frame_data.flow_unit = 'bbl/min (us;liq.)';
14231
+ break;
14232
+ case 54:
14233
+ frame_data.flow_unit = 'bbl/h (us;liq.)';
14234
+ break;
14235
+ case 55:
14236
+ frame_data.flow_unit = 'bbl/d (us;liq.)';
14237
+ break;
14238
+ case 56:
14239
+ frame_data.flow_unit = 'bbl/s (us;beer)';
14240
+ break;
14241
+ case 57:
14242
+ frame_data.flow_unit = 'bbl/min (us;beer)';
14243
+ break;
14244
+ case 58:
14245
+ frame_data.flow_unit = 'bbl/h (us;beer)';
14246
+ break;
14247
+ case 59:
14248
+ frame_data.flow_unit = 'bbl/d (us;beer)';
14249
+ break;
14250
+ case 60:
14251
+ frame_data.flow_unit = 'bbl/s (us;oil)';
14252
+ break;
14253
+ case 61:
14254
+ frame_data.flow_unit = 'bbl/min (us;oil)';
14255
+ break;
14256
+ case 62:
14257
+ frame_data.flow_unit = 'bbl/h (us;oil)';
14258
+ break;
14259
+ case 63:
14260
+ frame_data.flow_unit = 'bbl/d (us;oil)';
14261
+ break;
14262
+ case 64:
14263
+ frame_data.flow_unit = 'bbl/s (us;tank)';
14264
+ break;
14265
+ case 65:
14266
+ frame_data.flow_unit = 'bbl/min (us;tank)';
14267
+ break;
14268
+ case 66:
14269
+ frame_data.flow_unit = 'bbl/h (us;tank)';
14270
+ break;
14271
+ case 67:
14272
+ frame_data.flow_unit = 'bbl/d (us;tank)';
14273
+ break;
14274
+ case 68:
14275
+ frame_data.flow_unit = 'gal/s (imp)';
14276
+ break;
14277
+ case 69:
14278
+ frame_data.flow_unit = 'gal/min (imp)';
14279
+ break;
14280
+ case 70:
14281
+ frame_data.flow_unit = 'gal/h (imp)';
14282
+ break;
14283
+ case 71:
14284
+ frame_data.flow_unit = 'gal/d (imp)';
14285
+ break;
14286
+ case 72:
14287
+ frame_data.flow_unit = 'Mgal/s (imp)';
14288
+ break;
14289
+ case 73:
14290
+ frame_data.flow_unit = 'Mgal/min (imp)';
14291
+ break;
14292
+ case 74:
14293
+ frame_data.flow_unit = 'Mgal/h (imp)';
14294
+ break;
14295
+ case 75:
14296
+ frame_data.flow_unit = 'Mgal/d (imp)';
14297
+ break;
14298
+ case 76:
14299
+ frame_data.flow_unit = 'bbl/s (imp;beer)';
14300
+ break;
14301
+ case 77:
14302
+ frame_data.flow_unit = 'bbl/min (imp;beer)';
14303
+ break;
14304
+ case 78:
14305
+ frame_data.flow_unit = 'bbl/h (imp;beer)';
14306
+ break;
14307
+ case 79:
14308
+ frame_data.flow_unit = 'bbl/d (imp;beer)';
14309
+ break;
14310
+ case 80:
14311
+ frame_data.flow_unit = 'bbl/s (imp;oil)';
14312
+ break;
14313
+ case 81:
14314
+ frame_data.flow_unit = 'bbl/min (imp;oil)';
14315
+ break;
14316
+ case 82:
14317
+ frame_data.flow_unit = 'bbl/h (imp;oil)';
14318
+ break;
14319
+ case 83:
14320
+ frame_data.flow_unit = 'bbl/d (imp;oil)';
14321
+ break;
14322
+ case 88:
14323
+ frame_data.flow_unit = 'kgal/s (us)';
14324
+ break;
14325
+ case 89:
14326
+ frame_data.flow_unit = 'kgal/min (us)';
14327
+ break;
14328
+ case 90:
14329
+ frame_data.flow_unit = 'kgal/h (us)';
14330
+ break;
14331
+ case 91:
14332
+ frame_data.flow_unit = 'kgal/d (us)';
14333
+ break;
14334
+ case 92:
14335
+ frame_data.flow_unit = 'MMft³/s';
14336
+ break;
14337
+ case 93:
14338
+ frame_data.flow_unit = 'MMft³/min';
14339
+ break;
14340
+ case 94:
14341
+ frame_data.flow_unit = 'MMft³/h';
14342
+ break;
14343
+ case 96:
14344
+ frame_data.flow_unit = 'Mft³/d';
14345
+ break;
14346
+ }
14347
+ switch(frame[13]){
14348
+ case 0:
14349
+ frame_data.pressure_unit = 'bar';
14350
+ break;
14351
+ case 1:
14352
+ frame_data.pressure_unit = 'psi a';
14353
+ break;
14354
+ case 2:
14355
+ frame_data.pressure_unit = 'bar g';
14356
+ break;
14357
+ case 3:
14358
+ frame_data.pressure_unit = 'psi g';
14359
+ break;
14360
+ case 4:
14361
+ frame_data.pressure_unit = 'Pa a';
14362
+ break;
14363
+ case 5:
14364
+ frame_data.pressure_unit = 'kPa a';
14365
+ break;
14366
+ case 6:
14367
+ frame_data.pressure_unit = 'MPa a';
14368
+ break;
14369
+ case 7:
14370
+ frame_data.pressure_unit = 'Pa g';
14371
+ break;
14372
+ case 8:
14373
+ frame_data.pressure_unit = 'kPa g';
14374
+ break;
14375
+ case 9:
14376
+ frame_data.pressure_unit = 'MPa g';
14377
+ break;
14378
+ }
14379
+ switch(frame[14]){
14380
+ case 1:
14381
+ frame_data.conductivity_unit = 'MS/m';
14382
+ break;
14383
+ case 2:
14384
+ frame_data.conductivity_unit = 'kS/m';
14385
+ break;
14386
+ case 3:
14387
+ frame_data.conductivity_unit = 'S/m';
14388
+ break;
14389
+ case 4:
14390
+ frame_data.conductivity_unit = 'S/cm';
14391
+ break;
14392
+ case 5:
14393
+ frame_data.conductivity_unit = 'mS/m';
14394
+ break;
14395
+ case 6:
14396
+ frame_data.conductivity_unit = 'mS/cm';
14397
+ break;
14398
+ case 7:
14399
+ frame_data.conductivity_unit = 'μS/m';
14400
+ break;
14401
+ case 8:
14402
+ frame_data.conductivity_unit = 'μS/cm';
14403
+ break;
14404
+ case 9:
14405
+ frame_data.conductivity_unit = 'μS/mm';
14406
+ break;
14407
+ case 10:
14408
+ frame_data.conductivity_unit = 'nS/cm';
14409
+ break;
14410
+ }
14411
+
14412
+ frame_data.totalizer_unit = [];
14413
+
14414
+ for (let index = 0; index < 3; index++) {
14415
+ switch(frame[index + 15]){
14416
+ case 0:
14417
+ frame_data.totalizer_unit[index] = 'cm³';
14418
+ break;
14419
+ case 1:
14420
+ frame_data.totalizer_unit[index] = 'dm³';
14421
+ break;
14422
+ case 2:
14423
+ frame_data.totalizer_unit[index] = 'm³';
14424
+ break;
14425
+ case 3:
14426
+ frame_data.totalizer_unit[index] = 'ml';
14427
+ break;
14428
+ case 4:
14429
+ frame_data.totalizer_unit[index] = 'l';
14430
+ break;
14431
+ case 5:
14432
+ frame_data.totalizer_unit[index] = 'hl';
14433
+ break;
14434
+ case 6:
14435
+ frame_data.totalizer_unit[index] = 'Ml Mega';
14436
+ break;
14437
+ case 8:
14438
+ frame_data.totalizer_unit[index] = 'af';
14439
+ break;
14440
+ case 9:
14441
+ frame_data.totalizer_unit[index] = 'ft³';
14442
+ break;
14443
+ case 10:
14444
+ frame_data.totalizer_unit[index] = 'fl oz (us)';
14445
+ break;
14446
+ case 11:
14447
+ frame_data.totalizer_unit[index] = 'gal (us)';
14448
+ break;
14449
+ case 12:
14450
+ frame_data.totalizer_unit[index] = 'Mgal (us)';
14451
+ break;
14452
+ case 13:
14453
+ frame_data.totalizer_unit[index] = 'bbl (us;liq.)';
14454
+ break;
14455
+ case 14:
14456
+ frame_data.totalizer_unit[index] = 'bbl (us;beer)';
14457
+ break;
14458
+ case 15:
14459
+ frame_data.totalizer_unit[index] = 'bbl (us;oil)';
14460
+ break;
14461
+ case 16:
14462
+ frame_data.totalizer_unit[index] = 'bbl (us;tank)';
14463
+ break;
14464
+ case 17:
14465
+ frame_data.totalizer_unit[index] = 'gal (imp)';
14466
+ break;
14467
+ case 18:
14468
+ frame_data.totalizer_unit[index] = 'Mgal (imp)';
14469
+ break;
14470
+ case 19:
14471
+ frame_data.totalizer_unit[index] = 'bbl (imp;beer)';
14472
+ break;
14473
+ case 20:
14474
+ frame_data.totalizer_unit[index] = 'bbl (imp;oil)';
14475
+ break;
14476
+ case 22:
14477
+ frame_data.totalizer_unit[index] = 'kgal (us)';
14478
+ break;
14479
+ case 23:
14480
+ frame_data.totalizer_unit[index] = 'Mft³';
14481
+ break;
14482
+ }
14483
+
14484
+ }
14485
+ return {
14486
+ 'firmware': frame[2],
14487
+ 'flow_unit': frame_data.flow_unit,
14488
+ 'pressure_unit': frame_data.pressure_unit,
14489
+ 'conductivity_unit': frame_data.conductivity_unit,
14490
+ 'totalizer_1_unit': frame_data.totalizer_unit[0],
14491
+ 'totalizer_2_unit': frame_data.totalizer_unit[1],
14492
+ 'totalizer_3_unit': frame_data.totalizer_unit[2],
14493
+ 'hardware_id': frame.slice(18, 21),
14494
+ 'sample_rate': frame.slice(21, 25).reduce(msbLsb),
14495
+ 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
14496
+ 'machine_values': {
14497
+ 'firmware': frame[2],
14498
+ 'flow_unit': frame[12],
14499
+ 'pressure_unit': frame[13],
14500
+ 'conductivity_unit': frame[14],
14501
+ 'totalizer_1_unit': frame[15],
14502
+ 'totalizer_2_unit': frame[16],
14503
+ 'totalizer_3_unit': frame[17],
14504
+ 'hardware_id': frame.slice(18, 21),
14505
+ 'sample_rate': frame.slice(21, 25),
14506
+ 'tx_life_counter': frame.slice(25, 29)
14507
+ }
14508
+ }
14509
+ }
14510
+ },
14511
+ '124': {
14512
+ name: 'Wireless EH Flow Sensor',
14513
+ parse: (d) => {
14514
+ return {
14515
+ Temp: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
14516
+ Humid: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
14517
+ Pressure: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 100,
14518
+ WindSpd: signInt(payload.slice(20, 24).reduce(msbLsb),32) / 100,
14519
+ WindDir: signInt(payload.slice(24, 28).reduce(msbLsb),32) / 100,
14520
+ reserve: payload[7]
14521
+ };
14522
+ }
14523
+ },
14524
+ '211': {
14525
+ name: 'DO and Flow Sensor',
14526
+ parse: (payload, parsed, mac) => {
14527
+ if(payload[0] == 0){ // regular
14528
+ return {
14529
+ msg_type: 'regular',
14530
+ temperature: signInt(payload.slice(1, 3).reduce(msbLsb), 16),
14531
+ oxygen_saturation_percent: payload.slice(3, 7).reduce(msbLsb),
14532
+ oxygen_ppm: payload.slice(7, 11).reduce(msbLsb),
14533
+ oxygen_mg_l: payload.slice(11, 15).reduce(msbLsb)
14534
+ };
14535
+ }
14536
+ else{ // theshold
14537
+ let solenoid_status = payload[2];
14538
+ if(solenoid_status == 1){ // Solenoid On
14539
+ return {
14540
+ msg_type: 'threshold',
14541
+ solenoid_number: payload[1],
14542
+ solenoid_status: 'on',
14543
+ temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
14544
+ oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
14545
+ oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
14546
+ oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb),
14547
+ flow_rate: payload.slice(17, 21).reduce(msbLsb)
14548
+ };
14549
+ } else{ // Solenoid Off
14550
+ return {
14551
+ msg_type: 'threshold',
14552
+ solenoid_number: payload[1],
14553
+ solenoid_status: 'off',
14554
+ temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
14555
+ oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
14556
+ oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
14557
+ oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb)
14558
+ };
14559
+ }
14560
+ }
14561
+ },
14562
+ 'parse_fly': (frame) => {
14563
+ return {
14564
+ 'firmware': frame[2],
14565
+ 'hardware_id': frame.slice(12, 15),
14566
+ 'report_rate': frame.slice(15, 19).reduce(msbLsb) + "Sec",
14567
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
14568
+ 'machine_values': {
13164
14569
  'firmware': frame[2],
13165
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
13166
- 'fsr':frame_data.fsr,
13167
- 'boot_up_time': frame[17],
13168
- 'machine_values': {
13169
- 'firmware': frame[2],
13170
- 'report_rate': frame.slice(12, 16),
13171
- 'fsr':frame[16],
13172
- 'boot_up_time': frame[17],
13173
- 'frame': frame
13174
- }
14570
+ 'hardware_id': frame.slice(12, 15),
14571
+ 'report_rate': frame.slice(15, 19),
14572
+ 'tx_life_counter': frame.slice(19, 23)
13175
14573
  }
13176
14574
  }
13177
14575
  }
13178
14576
  },
13179
- '123': {
13180
- name: '3 Channel Production Counter',
13181
- parse: (d, payload) => {
13182
- if(payload[7] & 2 != 0){
14577
+ '217': {
14578
+ name: 'Wireless Weight Scale',
14579
+ parse: (d, parsed, mac) => {
14580
+ if(d[7] == 254){
13183
14581
  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
- let report_type = "Regular";
13189
- switch(d[25]){
13190
- case 0:
13191
- report_type = "Regular";
13192
- break;
13193
- case 1:
13194
- report_type = "Shift end";
13195
- break;
13196
- case 2:
13197
- report_type = "Interrupt";
13198
- break;
13199
- case 3:
13200
- report_type = "Threshold";
13201
- break;
14582
+ parsed.data = {error: 'Error found, Load cell comm error'};
14583
+ return parsed;
13202
14584
  }
13203
14585
  return {
13204
- digital_input_1_counter: d.slice(0, 4).reduce(msbLsb),
13205
- digital_input_1_uptime: d.slice(4, 8).reduce(msbLsb),
13206
- digital_input_2_counter: d.slice(8, 12).reduce(msbLsb),
13207
- digital_input_2_uptime: d.slice(12, 16).reduce(msbLsb),
13208
- digital_input_3_counter: d.slice(16, 20).reduce(msbLsb),
13209
- digital_input_3_uptime: d.slice(20, 24).reduce(msbLsb),
13210
- input_1: d[24] & 1 ? 1 : 0,
13211
- input_2: d[24] & 2 ? 1 : 0,
13212
- input_3: d[24] & 4 ? 1 : 0,
13213
- report_type: report_type,
13214
- rtc: [
13215
- String(d[26]).padStart(2, '0'),
13216
- String(d[27]).padStart(2, '0'),
13217
- String(d[28]).padStart(2, '0')
13218
- ].join(':')
14586
+ weight: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100
13219
14587
  };
13220
14588
  },
13221
14589
  'parse_fly': (frame) => {
13222
- let reset_mode = "Disabled";
13223
- switch(frame[36]){
13224
- case 0:
13225
- reset_mode = "Disabled";
13226
- break;
13227
- case 1:
13228
- reset_mode = "Shift Ends";
13229
- break;
13230
- case 2:
13231
- reset_mode = "Timeout";
13232
- break;
13233
- }
13234
- let rtc_sampling_interval = "5sec";
13235
- switch(frame[37]){
13236
- case 0:
13237
- rtc_sampling_interval = "1min";
13238
- break;
13239
- case 1:
13240
- rtc_sampling_interval = "5min";
13241
- break;
13242
- case 2:
13243
- rtc_sampling_interval = "15min";
13244
- break;
13245
- case 3:
13246
- rtc_sampling_interval = "30min";
13247
- break;
13248
- case 4:
13249
- rtc_sampling_interval = "1h";
13250
- break;
13251
- case 5:
13252
- rtc_sampling_interval = "2h";
13253
- break;
13254
- case 6:
13255
- rtc_sampling_interval = "3h";
13256
- break;
13257
- case 7:
13258
- rtc_sampling_interval = "6h";
13259
- break;
13260
- case 8:
13261
- rtc_sampling_interval = "12h";
13262
- break;
13263
- case 9:
13264
- rtc_sampling_interval = "5sec";
13265
- break;
13266
- case 10:
13267
- rtc_sampling_interval = "10sec";
13268
- break;
13269
- case 11:
13270
- rtc_sampling_interval = "15sec";
13271
- break;
13272
- case 12:
13273
- rtc_sampling_interval = "30sec";
13274
- break;
13275
- }
13276
- return {
13277
- 'firmware': frame[2],
13278
- 'debouncing_timeout': frame.slice(16, 18).reduce(msbLsb) + "msec",
13279
- 'input_1_active_edge': frame[18]? "Rising": "Falling",
13280
- 'input_2_active_edge': frame[19]? "Rising": "Falling",
13281
- 'input_3_active_edge': frame[20]? "Rising": "Falling",
13282
- 'counter_threshold': frame.slice(21, 25).reduce(msbLsb),
13283
- 'trasnmit_on_change_status': frame[25]? "Enabled": "Disabled",
13284
- 'Shift_end_1': [
13285
- String(frame[26]).padStart(2, '0'),
13286
- String(frame[27]).padStart(2, '0')
13287
- ].join(':'),
13288
- 'Shift_end_2': [
13289
- String(frame[28]).padStart(2, '0'),
13290
- String(frame[29]).padStart(2, '0')
13291
- ].join(':'),
13292
- 'Shift_end_3': [
13293
- String(frame[30]).padStart(2, '0'),
13294
- String(frame[31]).padStart(2, '0')
13295
- ].join(':'),
13296
- 'Shift_end_4': [
13297
- String(frame[32]).padStart(2, '0'),
13298
- String(frame[33]).padStart(2, '0')
13299
- ].join(':'),
13300
- 'reset_timeout': frame.slice(34, 36).reduce(msbLsb) + "min",
13301
- 'counter_reset_mode': reset_mode,
13302
- 'sampling_interval': rtc_sampling_interval,
13303
- 'interrupt_timeout': frame.slice(38, 40).reduce(msbLsb) + "msec",
13304
- 'hardware_id': frame.slice(40, 43),
13305
- 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
13306
- 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
13307
- 'machine_values': {
14590
+ if(frame[2] > 2){
14591
+ let date = [
14592
+ String(frame.slice(20, 22).reduce(msbLsb)),
14593
+ String(frame[22]).padStart(2, '0'),
14594
+ String(frame[23]).padStart(2, '0')
14595
+ ].join('-');
14596
+ let time = [
14597
+ String(frame[24]).padStart(2, '0'),
14598
+ String(frame[25]).padStart(2, '0'),
14599
+ String(frame[26]).padStart(2, '0')
14600
+ ].join(':');
14601
+ return {
13308
14602
  'firmware': frame[2],
13309
- 'debouncing_timeout': frame.slice(16, 18),
13310
- 'input_1_active_edge': frame[18],
13311
- 'input_2_active_edge': frame[19],
13312
- 'input_3_active_edge': frame[20],
13313
- 'counter_threshold': frame.slice(21, 25),
13314
- 'trasnmit_on_change_status': frame[25],
13315
- 'Shift_end_1': frame.slice(26, 28),
13316
- 'Shift_end_2': frame.slice(28, 30),
13317
- 'Shift_end_3': frame.slice(30, 32),
13318
- 'Shift_end_4': frame.slice(32, 34),
13319
- 'reset_timeout': frame.slice(34, 36),
13320
- 'counter_reset_mode': frame[36],
13321
- 'sampling_interval': frame[37],
13322
- 'interrupt_timeout': frame.slice(38, 40),
13323
- 'hardware_id': frame.slice(40, 43),
13324
- 'report_rate': frame.slice(43, 47),
13325
- 'tx_life_counter': frame.slice(47, 51)
14603
+ 'calibration_tare': frame.slice(12, 16).reduce(msbLsb),
14604
+ 'tare_counter': frame.slice(16, 20).reduce(msbLsb),
14605
+ 'timestamp': date + 'T' + time,
14606
+ 'hardware_id': frame.slice(27, 30),
14607
+ 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "Sec",
14608
+ 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
14609
+ 'machine_values': {
14610
+ 'firmware': frame[2],
14611
+ 'calibration_tare': frame.slice(12, 16),
14612
+ 'tare_counter': frame.slice(16, 20),
14613
+ 'date': frame.slice(20, 27),
14614
+ 'hardware_id': frame.slice(27, 30),
14615
+ 'report_rate': frame.slice(30, 34),
14616
+ 'tx_life_counter': frame.slice(34, 38)
14617
+ }
13326
14618
  }
13327
14619
  }
13328
14620
  }
13329
14621
  },
13330
- '124': {
13331
- name: 'Wireless EH Flow Sensor',
14622
+ '270': {
14623
+ name: 'Custom Salinity DO sensor',
13332
14624
  parse: (d) => {
13333
14625
  return {
13334
- volume_flow: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
13335
- conductivity: d.slice(4, 8).reduce(msbLsb),
13336
- flow_velocity: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100,
13337
- pressure: signInt(d.slice(12, 16).reduce(msbLsb),32) / 100,
13338
- // WARNING doesn't handle decimal values and will round to whole number.
13339
- total_flow_1: d.slice(16, 24).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
13340
- total_flow_2: d.slice(24, 32).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
13341
- total_flow_3: d.slice(32, 40).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
13342
- battery_life: d.slice(40, 42).reduce(msbLsb),
13343
- battery_state: d[42],
13344
- total_flow_1_raw: d.slice(16, 24),
13345
- total_flow_2_raw: d.slice(24, 32),
13346
- total_flow_3_raw: d.slice(32, 40)
14626
+ sensor_status: d[0],
14627
+ do_temperature_1: d.slice(1, 3).reduce(msbLsb) / 100,
14628
+ do_temperature_2: d.slice(3, 5).reduce(msbLsb) / 100,
14629
+ do_temperature_3: d.slice(5, 7).reduce(msbLsb) / 100,
14630
+ do_temperature_4: d.slice(7, 9).reduce(msbLsb) / 100,
14631
+ ec_temperature_1: d.slice(9, 11).reduce(msbLsb) / 100,
14632
+ ec_temperature_2: d.slice(11, 13).reduce(msbLsb) / 100,
14633
+ ec_temperature_3: d.slice(13, 15).reduce(msbLsb) / 100,
14634
+ ec_temperature_4: d.slice(15, 17).reduce(msbLsb) / 100,
14635
+ do_saturation_perc_1: d.slice(17, 19).reduce(msbLsb) / 100,
14636
+ do_saturation_perc_2: d.slice(19, 21).reduce(msbLsb) / 100,
14637
+ do_saturation_perc_3: d.slice(21, 23).reduce(msbLsb) / 100,
14638
+ do_saturation_perc_4: d.slice(23, 25).reduce(msbLsb) / 100,
14639
+ do_ppm_1: d.slice(25, 27).reduce(msbLsb) / 100,
14640
+ do_ppm_2: d.slice(27, 29).reduce(msbLsb) / 100,
14641
+ do_ppm_3: d.slice(29, 31).reduce(msbLsb) / 100,
14642
+ do_ppm_4: d.slice(31, 33).reduce(msbLsb) / 100,
14643
+ do_mgl_1: d.slice(33, 35).reduce(msbLsb) / 100,
14644
+ do_mgl_2: d.slice(35, 37).reduce(msbLsb) / 100,
14645
+ do_mgl_3: d.slice(37, 39).reduce(msbLsb) / 100,
14646
+ do_mgl_4: d.slice(39, 41).reduce(msbLsb) / 100,
14647
+ ec_conductivity_1: d.slice(41, 43).reduce(msbLsb) / 100,
14648
+ ec_conductivity_2: d.slice(43, 45).reduce(msbLsb) / 100,
14649
+ ec_conductivity_3: d.slice(45, 47).reduce(msbLsb) / 100,
14650
+ ec_conductivity_4: d.slice(47, 49).reduce(msbLsb) / 100,
14651
+ ec_salinity_ppt_1: d.slice(49, 57).reduce(msbLsb) / 100,
14652
+ ec_salinity_ppt_2: d.slice(57, 65).reduce(msbLsb) / 100,
14653
+ ec_salinity_ppt_3: d.slice(65, 73).reduce(msbLsb) / 100,
14654
+ ec_salinity_ppt_4: d.slice(73, 81).reduce(msbLsb) / 100,
14655
+ ec_tds_1: d.slice(81, 85).reduce(msbLsb) / 100,
14656
+ ec_tds_2: d.slice(85, 89).reduce(msbLsb) / 100,
14657
+ ec_tds_3: d.slice(89, 93).reduce(msbLsb) / 100,
14658
+ ec_tds_4: d.slice(93, 97).reduce(msbLsb) / 100
13347
14659
  };
13348
14660
  },
13349
14661
  'parse_fly': (frame) => {
@@ -16555,7 +17867,7 @@ function sensor_types(parent){
16555
17867
  parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
16556
17868
  return parsed;
16557
17869
  }
16558
- let msg_type = 'regular'; // (payload[7] & 16)? 'motion' : 'regular';
17870
+ let msg_type = 'regular';
16559
17871
  if(payload[8] === 1){
16560
17872
  var deviceAddr = mac;
16561
17873
  var firmware = payload[1];
@@ -16769,25 +18081,25 @@ function sensor_types(parent){
16769
18081
  x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
16770
18082
  x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
16771
18083
  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),
18084
+ x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb)/100,
18085
+ x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb)/100,
18086
+ x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb)/100,
16775
18087
 
16776
18088
  y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
16777
18089
  y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
16778
18090
  y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
16779
18091
  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),
18092
+ y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb)/100,
18093
+ y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb)/100,
18094
+ y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb)/100,
16783
18095
 
16784
18096
  z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
16785
18097
  z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
16786
18098
  z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
16787
18099
  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)
18100
+ z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb)/100,
18101
+ z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb)/100,
18102
+ z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb)/100
16791
18103
  };
16792
18104
  }
16793
18105
  // else{
@@ -16828,7 +18140,7 @@ function sensor_types(parent){
16828
18140
  frame_data.odr_1 = 500;
16829
18141
  break;
16830
18142
  }
16831
- frame_data.sampling_duration_1 = frame[18]*50 + "ms";
18143
+ frame_data.sampling_duration_1 = frame[18] + "sec";
16832
18144
  switch(frame[19]){
16833
18145
  case 0:
16834
18146
  frame_data.filter_status = "Disabled";