@ncd-io/node-red-enterprise-sensors 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3040,6 +3040,32 @@ module.exports = class WirelessSensor{
3040
3040
  console.log(packet);
3041
3041
  return this.config_send(sensor_mac, packet);
3042
3042
  }
3043
+ config_set_reset_total_545(sensor_mac){
3044
+ console.log('config_set_reset_total_545');
3045
+ var packet = [244, 36, 0, 0, 0];
3046
+ console.log(packet);
3047
+ return this.config_send(sensor_mac, packet);
3048
+ }
3049
+ config_set_cal_validation_545(sensor_mac){
3050
+ console.log('config_set_cal_validation_545');
3051
+ var packet = [244, 39, 0, 0, 0];
3052
+ console.log(packet);
3053
+ return this.config_send(sensor_mac, packet);
3054
+ }
3055
+ config_set_boot_time_4(sensor_mac, value){
3056
+ console.log('config_set_boot_time_4');
3057
+ var packet = [244, 97, 0, 0, 23];
3058
+ let value_ = int2Bytes(value, 2);
3059
+ packet.push(...value_);
3060
+ console.log(packet);
3061
+ return this.config_send(sensor_mac, packet);
3062
+ }
3063
+ config_set_operation_mode_4(sensor_mac, value){
3064
+ console.log('config_set_operation_mode_4');
3065
+ var packet = [244, 93, 0, 0, 23, value];
3066
+ console.log(packet);
3067
+ return this.config_send(sensor_mac, packet);
3068
+ }
3043
3069
  config_get_delay(sensor_mac){
3044
3070
  return new Promise((fulfill, reject) => {
3045
3071
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -4039,14 +4065,6 @@ function sensor_types(parent){
4039
4065
  };
4040
4066
  }
4041
4067
  },
4042
- '4': {
4043
- name: 'Thermocouple',
4044
- parse: (d) => {
4045
- return {
4046
- temperature: signInt(d.slice(0, 4).reduce(msbLsb), 32)/100,
4047
- };
4048
- }
4049
- },
4050
4068
  '5': {
4051
4069
  name: 'Gyro/Magneto/Temperature',
4052
4070
  parse: (d) => {
@@ -4126,16 +4144,6 @@ function sensor_types(parent){
4126
4144
  };
4127
4145
  }
4128
4146
  },
4129
- '12': {
4130
- name: '3-Channel Thermocouple',
4131
- parse: (d) => {
4132
- return {
4133
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4134
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4135
- channel_3: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100
4136
- };
4137
- }
4138
- },
4139
4147
  '13': {
4140
4148
  name: 'Current Monitor',
4141
4149
  parse: (d) => {
@@ -4154,79 +4162,6 @@ function sensor_types(parent){
4154
4162
  };
4155
4163
  }
4156
4164
  },
4157
- '15': {
4158
- name: '10-Bit 1-Channel ADC',
4159
- parse: (d) => {
4160
- var adc = d.slice(0, 2).reduce(msbLsb);
4161
- return {
4162
- adc: adc,
4163
- voltage: adc * 0.00322265625
4164
- };
4165
- },
4166
- 'parse_fly': (frame) => {
4167
- let firmware = frame[2];
4168
- if(firmware > 13){ // firmware 14 and above
4169
- let frame_data = {};
4170
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4171
- if(!auto_check_interval){
4172
- frame_data.auto_check_interval = 'Disabled';
4173
- }else{
4174
- frame_data.auto_check_interval = auto_check_interval + " sec";
4175
- }
4176
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4177
- switch(frame[16]){
4178
- case 0:
4179
- frame_data.fsr = "+-6.114 V";
4180
- break;
4181
- case 1:
4182
- frame_data.fsr = "+-4.096 V";
4183
- break;
4184
- case 2:
4185
- frame_data.fsr = "+-2.048 V";
4186
- break;
4187
- case 3:
4188
- frame_data.fsr = "+-1.024 V";
4189
- break;
4190
- case 4:
4191
- frame_data.fsr = "+-0.512 V";
4192
- break;
4193
- case 5:
4194
- frame_data.fsr = "+-0.256 V";
4195
- break;
4196
- }
4197
- return {
4198
- 'firmware': frame[2],
4199
- 'fsr': frame_data.fsr,
4200
- 'boot_up_time': frame[17] + " sec",
4201
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4202
- 'auto_check_interval': frame_data.auto_check_interval,
4203
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4204
- 'always_on': frame_data.always_on,
4205
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4206
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4207
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4208
- 'hardware_id': frame.slice(37, 40),
4209
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4210
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4211
- 'machine_values': {
4212
- 'firmware': frame[2],
4213
- 'fsr': frame[16],
4214
- 'boot_up_time': frame[17],
4215
- 'adc_pin_reading': frame.slice(18, 20),
4216
- 'auto_check_interval': frame.slice(20, 22),
4217
- 'auto_check_percentage': frame.slice(22, 24),
4218
- 'always_on': frame[24],
4219
- 'calibration_one': frame.slice(25, 29),
4220
- 'calibration_two':frame.slice(29, 33),
4221
- 'calibration_three':frame.slice(33, 37),
4222
- 'hardware_id': frame.slice(37, 40),
4223
- 'report_rate': frame.slice(40, 44),
4224
- 'tx_life_counter': frame.slice(44, 48)
4225
- }
4226
- }
4227
- }
4228
- }
4229
- },
4230
4165
  '16': {
4231
4166
  name: 'Soil Moisture Sensor',
4232
4167
  parse: (d, payload) => {
@@ -4504,15 +4439,6 @@ function sensor_types(parent){
4504
4439
  };
4505
4440
  }
4506
4441
  },
4507
- '23': {
4508
- name: '2-Channel Thermocouple',
4509
- parse: (d) => {
4510
- return {
4511
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4512
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4513
- };
4514
- }
4515
- },
4516
4442
  '24': {
4517
4443
  name: 'Activity Detection',
4518
4444
  parse: (d) => {
@@ -4717,67 +4643,6 @@ function sensor_types(parent){
4717
4643
  };
4718
4644
  }
4719
4645
  },
4720
- '39': {
4721
- name: 'RTD Temperature Sensor',
4722
- parse: (payload, parsed, mac) => {
4723
- if(parsed.firmware > 5){
4724
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
4725
- let fault_status = '';
4726
- if (reserved === 0) {
4727
- fault_status = 'data_valid';
4728
- } else if (reserved === 15) {
4729
- fault_status = 'data_invalid';
4730
- } else {
4731
- const faultTypeBits = reserved & 0b00111100;
4732
- switch (faultTypeBits) {
4733
- case 32:
4734
- fault_status = 'ref_in_vbias';
4735
- break;
4736
- case 16:
4737
- fault_status = 'ref_in_force_close';
4738
- break;
4739
- case 8:
4740
- fault_status = 'rtd_in_force_open';
4741
- break;
4742
- case 4:
4743
- fault_status = 'over_under_voltage';
4744
- break;
4745
- }
4746
- }
4747
- return {
4748
- fault_status: fault_status,
4749
- temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4750
- };
4751
- } else {
4752
- return {
4753
- temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4754
- };
4755
- }
4756
- },
4757
- 'parse_fly': (frame) => {
4758
- let firmware = frame[2];
4759
- if(firmware > 5){
4760
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
4761
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4762
- return {
4763
- 'firmware': frame[2],
4764
- 'sensor_interface': interface_types[frame[12]],
4765
- 'sensor_type': rtd_types[frame[13]],
4766
- 'hardware_id': frame.slice(14, 17),
4767
- 'report_rate': frame.slice(17, 21).reduce(msbLsb) + " sec",
4768
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
4769
- 'machine_values': {
4770
- 'firmware': frame[2],
4771
- 'sensor_interface': frame[12],
4772
- 'sensor_type': frame[13],
4773
- 'hardware_id': frame.slice(14, 17),
4774
- 'report_rate': frame.slice(17, 21),
4775
- 'tx_life_counter': frame.slice(21, 25)
4776
- }
4777
- }
4778
- }
4779
- }
4780
- },
4781
4646
  '40': {
4782
4647
  name: 'Vibration w/Time Domain (partial support)',
4783
4648
  parse: (d, full) => {
@@ -4837,78 +4702,6 @@ function sensor_types(parent){
4837
4702
  };
4838
4703
  }
4839
4704
  },
4840
- '45': {
4841
- name: '16-Bit 1-Channel Passive 4-20mA Current Receiver',
4842
- parse: (d) => {
4843
- return {
4844
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4845
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
4846
- };
4847
- },
4848
- 'parse_fly': (frame) => {
4849
- let firmware = frame[2];
4850
- if(firmware > 13){ // firmware 14 and above
4851
- let frame_data = {};
4852
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4853
- if(!auto_check_interval){
4854
- frame_data.auto_check_interval = 'Disabled';
4855
- }else{
4856
- frame_data.auto_check_interval = auto_check_interval + " sec";
4857
- }
4858
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4859
- switch(frame[16]){
4860
- case 0:
4861
- frame_data.fsr = "+-6.114 V";
4862
- break;
4863
- case 1:
4864
- frame_data.fsr = "+-4.096 V";
4865
- break;
4866
- case 2:
4867
- frame_data.fsr = "+-2.048 V";
4868
- break;
4869
- case 3:
4870
- frame_data.fsr = "+-1.024 V";
4871
- break;
4872
- case 4:
4873
- frame_data.fsr = "+-0.512 V";
4874
- break;
4875
- case 5:
4876
- frame_data.fsr = "+-0.256 V";
4877
- break;
4878
- }
4879
- return {
4880
- 'firmware': frame[2],
4881
- 'fsr': frame_data.fsr,
4882
- 'boot_up_time': frame[17] + " sec",
4883
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4884
- 'auto_check_interval': frame_data.auto_check_interval,
4885
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4886
- 'always_on': frame_data.always_on,
4887
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4888
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4889
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4890
- 'hardware_id': frame.slice(37, 40),
4891
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4892
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4893
- 'machine_values': {
4894
- 'firmware': frame[2],
4895
- 'fsr': frame[16],
4896
- 'boot_up_time': frame[17],
4897
- 'adc_pin_reading': frame.slice(18, 20),
4898
- 'auto_check_interval': frame.slice(20, 22),
4899
- 'auto_check_percentage': frame.slice(22, 24),
4900
- 'always_on': frame[24],
4901
- 'calibration_one': frame.slice(25, 29),
4902
- 'calibration_two':frame.slice(29, 33),
4903
- 'calibration_three':frame.slice(33, 37),
4904
- 'hardware_id': frame.slice(37, 40),
4905
- 'report_rate': frame.slice(40, 44),
4906
- 'tx_life_counter': frame.slice(44, 48)
4907
- }
4908
- }
4909
- }
4910
- }
4911
- },
4912
4705
  '46': {
4913
4706
  name: 'Motion Detection Sensor',
4914
4707
  parse: (d) => {
@@ -4926,80 +4719,8 @@ function sensor_types(parent){
4926
4719
  };
4927
4720
  }
4928
4721
  },
4929
- '48': {
4930
- name: '16-Bit 1-Channel Active 4-20mA Current Loop Receiver',
4931
- parse: (d) => {
4932
- return {
4933
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4934
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
4935
- };
4936
- },
4937
- 'parse_fly': (frame) => {
4938
- let firmware = frame[2];
4939
- if(firmware > 13){ // firmware 14 and above
4940
- let frame_data = {};
4941
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4942
- if(!auto_check_interval){
4943
- frame_data.auto_check_interval = 'Disabled';
4944
- }else{
4945
- frame_data.auto_check_interval = auto_check_interval + " sec";
4946
- }
4947
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4948
- switch(frame[16]){
4949
- case 0:
4950
- frame_data.fsr = "+-6.114 V";
4951
- break;
4952
- case 1:
4953
- frame_data.fsr = "+-4.096 V";
4954
- break;
4955
- case 2:
4956
- frame_data.fsr = "+-2.048 V";
4957
- break;
4958
- case 3:
4959
- frame_data.fsr = "+-1.024 V";
4960
- break;
4961
- case 4:
4962
- frame_data.fsr = "+-0.512 V";
4963
- break;
4964
- case 5:
4965
- frame_data.fsr = "+-0.256 V";
4966
- break;
4967
- }
4968
- return {
4969
- 'firmware': frame[2],
4970
- 'fsr': frame_data.fsr,
4971
- 'boot_up_time': frame[17] + " sec",
4972
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4973
- 'auto_check_interval': frame_data.auto_check_interval,
4974
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4975
- 'always_on': frame_data.always_on,
4976
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4977
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4978
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4979
- 'hardware_id': frame.slice(37, 40),
4980
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4981
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4982
- 'machine_values': {
4983
- 'firmware': frame[2],
4984
- 'fsr': frame[16],
4985
- 'boot_up_time': frame[17],
4986
- 'adc_pin_reading': frame.slice(18, 20),
4987
- 'auto_check_interval': frame.slice(20, 22),
4988
- 'auto_check_percentage': frame.slice(22, 24),
4989
- 'always_on': frame[24],
4990
- 'calibration_one': frame.slice(25, 29),
4991
- 'calibration_two':frame.slice(29, 33),
4992
- 'calibration_three':frame.slice(33, 37),
4993
- 'hardware_id': frame.slice(37, 40),
4994
- 'report_rate': frame.slice(40, 44),
4995
- 'tx_life_counter': frame.slice(44, 48)
4996
- }
4997
- }
4998
- }
4999
- }
5000
- },
5001
- '49': {
5002
- name: '6-Channel Thermocouple',
4722
+ '49': {
4723
+ name: '6-Channel Thermocouple',
5003
4724
  parse: (d) => {
5004
4725
  return {
5005
4726
  channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
@@ -5061,149 +4782,6 @@ function sensor_types(parent){
5061
4782
  };
5062
4783
  }
5063
4784
  },
5064
- '52': {
5065
- name: '16-Bit 2-Channel 4-20mA',
5066
- parse: (d) => {
5067
- // This parser may be outdated if a customer has an issue check with Engineering
5068
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5069
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5070
- return {
5071
- adc1: adc1,
5072
- adc2: adc2,
5073
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
5074
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
5075
- };
5076
- },
5077
- 'parse_fly': (frame) => {
5078
- let firmware = frame[2];
5079
- let frame_data = {};
5080
- switch(frame[16]){
5081
- case 0:
5082
- frame_data.fsr = "+-6.114 V";
5083
- break;
5084
- case 1:
5085
- frame_data.fsr = "+-4.096 V";
5086
- break;
5087
- case 2:
5088
- frame_data.fsr = "+-2.048 V";
5089
- break;
5090
- case 3:
5091
- frame_data.fsr = "+-1.024 V";
5092
- break;
5093
- case 4:
5094
- frame_data.fsr = "+-0.512 V";
5095
- break;
5096
- case 5:
5097
- frame_data.fsr = "+-0.256 V";
5098
- break;
5099
- }
5100
- if(firmware > 18){ // firmware 14 and above
5101
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5102
- if(!auto_check_interval){
5103
- frame_data.auto_check_interval = 'Disabled';
5104
- }else{
5105
- frame_data.auto_check_interval = auto_check_interval + " sec";
5106
- }
5107
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5108
- return {
5109
- 'firmware': frame[2],
5110
- 'fsr': frame_data.fsr,
5111
- 'boot_up_time': frame[17] + " sec",
5112
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5113
- 'auto_check_interval': frame_data.auto_check_interval,
5114
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5115
- 'always_on': frame_data.always_on,
5116
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5117
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5118
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5119
- 'hardware_id': frame.slice(37, 40),
5120
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5121
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5122
- 'machine_values': {
5123
- 'firmware': frame[2],
5124
- 'fsr': frame[16],
5125
- 'boot_up_time': frame[17],
5126
- 'adc_pin_reading': frame.slice(18, 20),
5127
- 'auto_check_interval': frame.slice(20, 22),
5128
- 'auto_check_percentage': frame.slice(22, 24),
5129
- 'always_on': frame[24],
5130
- 'calibration_one': frame.slice(25, 29),
5131
- 'calibration_two':frame.slice(29, 33),
5132
- 'calibration_three':frame.slice(33, 37),
5133
- 'hardware_id': frame.slice(37, 40),
5134
- 'report_rate': frame.slice(40, 44),
5135
- 'tx_life_counter': frame.slice(44, 48)
5136
- }
5137
- }
5138
- }else if(firmware > 13){ // firmware 14 and above
5139
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5140
- if(!auto_check_interval){
5141
- frame_data.auto_check_interval = 'Disabled';
5142
- }else{
5143
- frame_data.auto_check_interval = auto_check_interval + " sec";
5144
- }
5145
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5146
- return {
5147
- 'firmware': frame[2],
5148
- 'fsr': frame_data.fsr,
5149
- 'boot_up_time': frame[17] + " sec",
5150
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5151
- 'auto_check_interval': frame_data.auto_check_interval,
5152
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5153
- 'always_on': frame_data.always_on,
5154
- 'hardware_id': frame.slice(25, 28),
5155
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
5156
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
5157
- 'machine_values': {
5158
- 'firmware': frame[2],
5159
- 'fsr': frame[16],
5160
- 'boot_up_time': frame[17],
5161
- 'adc_pin_reading': frame.slice(18, 20),
5162
- 'auto_check_interval': frame.slice(20, 22),
5163
- 'auto_check_percentage': frame.slice(22, 24),
5164
- 'always_on': frame[24],
5165
- 'calibration_one': frame.slice(25, 29),
5166
- 'calibration_two':frame.slice(29, 33),
5167
- 'calibration_three':frame.slice(33, 37),
5168
- 'hardware_id': frame.slice(37, 40),
5169
- 'report_rate': frame.slice(40, 44),
5170
- 'tx_life_counter': frame.slice(44, 48)
5171
- }
5172
- }
5173
- }
5174
- else if(firmware > 12){
5175
- return {
5176
- 'firmware': frame[2],
5177
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
5178
- 'fsr':frame_data.fsr,
5179
- 'boot_up_time': frame[17],
5180
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5181
- 'machine_values': {
5182
- 'firmware': frame[2],
5183
- 'report_rate': frame.slice(12, 16),
5184
- 'fsr':frame[16],
5185
- 'boot_up_time': frame[17],
5186
- 'adc_pin_reading': frame.slice(18, 20),
5187
- 'frame': frame
5188
- }
5189
- }
5190
- }else{
5191
- return {
5192
- 'firmware': frame[2],
5193
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
5194
- 'fsr':frame_data.fsr,
5195
- 'boot_up_time': frame[17],
5196
- 'machine_values': {
5197
- 'firmware': frame[2],
5198
- 'report_rate': frame.slice(12, 16),
5199
- 'fsr':frame[16],
5200
- 'boot_up_time': frame[17],
5201
- 'frame': frame
5202
- }
5203
- }
5204
- }
5205
- }
5206
- },
5207
4785
  '53': {
5208
4786
  'name': 'Air Quality CO2 and Particulate Matter Sensor',
5209
4787
  parse: (d) => {
@@ -5225,275 +4803,49 @@ function sensor_types(parent){
5225
4803
  };
5226
4804
  }
5227
4805
  },
5228
- '54': {
5229
- name: '2-Channel RTD Temperature Sensor',
5230
- parse: (payload, parsed, mac) => {
5231
- if(parsed.firmware > 5){
5232
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
5233
- let fault_status = '';
5234
- if (reserved === 0) {
5235
- fault_status = 'data_valid';
5236
- } else if (reserved === 15) {
5237
- fault_status = 'data_invalid';
5238
- } else {
5239
- const fault_bits = (reserved >> 2) & 0b00001111;
5240
- switch (fault_bits) {
5241
- case 8:
5242
- fault_status = 'ref_in_vbias';
5243
- break;
5244
- case 4:
5245
- fault_status = 'ref_in_force_close';
5246
- break;
5247
- case 2:
5248
- fault_status = 'rtd_in_force_open';
5249
- break;
5250
- case 1:
5251
- fault_status = 'over_under_voltage';
5252
- break;
5253
- }
5254
- const channel_bits = reserved & 0b00000011;
5255
- switch (channel_bits) {
5256
- case 1:
5257
- fault_status = fault_status + '_ch1';
5258
- break;
5259
- case 2:
5260
- fault_status = fault_status + '_ch2';
5261
- break;
5262
- }
5263
- }
5264
- return {
5265
- fault_status: fault_status,
5266
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5267
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
5268
- };
5269
- } else {
5270
- return {
5271
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5272
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
5273
- };
5274
- }
5275
- },
5276
- 'parse_fly': (frame) => {
5277
- let firmware = frame[2];
5278
- if(firmware > 5){
5279
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
5280
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
5281
- return {
5282
- 'firmware': frame[2],
5283
- 'sensor_interface_ch1': interface_types[frame[12]],
5284
- 'sensor_type_ch1': rtd_types[frame[13]],
5285
- 'sensor_interface_ch2': interface_types[frame[14]],
5286
- 'sensor_type_ch2': rtd_types[frame[15]],
5287
- 'hardware_id': frame.slice(16, 19),
5288
- 'report_rate': frame.slice(19, 23).reduce(msbLsb) + " sec",
5289
- 'tx_life_counter': frame.slice(23, 27).reduce(msbLsb),
5290
- 'machine_values': {
5291
- 'firmware': frame[2],
5292
- 'sensor_interface_ch1': frame[12],
5293
- 'sensor_type_ch1': frame[13],
5294
- 'sensor_interface_ch2': frame[14],
5295
- 'sensor_type_ch2': frame[15],
5296
- 'hardware_id': frame.slice(16, 19),
5297
- 'report_rate': frame.slice(19, 23),
5298
- 'tx_life_counter': frame.slice(23, 27)
5299
- }
5300
- }
5301
- }
4806
+ '58': {
4807
+ name: 'Tank Level v3',
4808
+ parse: (d) => {
4809
+ return {
4810
+ filtered_range: d.slice(0, 2).reduce(msbLsb),
4811
+ long_range_algorithm: d.slice(2, 4).reduce(msbLsb),
4812
+ second_chance: d.slice(4, 6).reduce(msbLsb),
4813
+ second_reading: d.slice(6, 8).reduce(msbLsb),
4814
+ compare_reading: d.slice(8, 10).reduce(msbLsb),
4815
+ short_range_algorithm: d.slice(10, 12).reduce(msbLsb),
4816
+ trusted_reading: d.slice(12, 14).reduce(msbLsb),
4817
+ final_filter: d.slice(14, 16).reduce(msbLsb),
4818
+ raw_final: d.slice(16, 18).reduce(msbLsb),
4819
+ final_index: d.slice(18, 20).reduce(msbLsb),
4820
+ };
5302
4821
  }
5303
4822
  },
5304
- '55': {
5305
- name: '3-Channel RTD Temperature Sensor',
5306
- parse: (payload, parsed, mac) => {
5307
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
5308
- let fault_status = '';
5309
- if (reserved === 0) {
5310
- fault_status = 'data_valid';
5311
- } else if (reserved === 15) {
5312
- fault_status = 'data_invalid';
5313
- } else {
5314
- const fault_bits = (reserved >> 2) & 0b00001111;
5315
- switch (fault_bits) {
5316
- case 8:
5317
- fault_status = 'ref_in_vbias';
5318
- break;
5319
- case 4:
5320
- fault_status = 'ref_in_force_close';
5321
- break;
5322
- case 2:
5323
- fault_status = 'rtd_in_force_open';
5324
- break;
5325
- case 1:
5326
- fault_status = 'over_under_voltage';
5327
- break;
5328
- }
5329
- const channel_bits = reserved & 0b00000011;
5330
- switch (channel_bits) {
5331
- case 1:
5332
- fault_status = fault_status + '_ch1';
5333
- break;
5334
- case 2:
5335
- fault_status = fault_status + '_ch2';
5336
- break;
5337
- case 3:
5338
- fault_status = fault_status + '_ch3';
5339
- break;
5340
- }
5341
- }
4823
+ '60': {
4824
+ name: 'Air Velocity and Precision Pressure & Temperature Sensor',
4825
+ parse: (d) => {
5342
4826
  return {
5343
- fault_status: fault_status,
5344
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5345
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
5346
- temperature_3: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 100
4827
+ pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 1000,
4828
+ temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
4829
+ Air_Velocity: signInt(d.slice(6, 8).reduce(msbLsb), 16) / 1000
5347
4830
  };
5348
- },
5349
- 'parse_fly': (frame) => {
5350
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
5351
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4831
+ }
4832
+ },
4833
+
4834
+ '61': {
4835
+ name: 'pH and Temperature Sensor',
4836
+ parse: (d) => {
5352
4837
  return {
5353
- 'firmware': frame[2],
5354
- 'sensor_interface_ch1': interface_types[frame[12]],
5355
- 'sensor_type_ch1': rtd_types[frame[13]],
5356
- 'sensor_interface_ch2': interface_types[frame[14]],
5357
- 'sensor_type_ch2': rtd_types[frame[15]],
5358
- 'sensor_interface_ch3': interface_types[frame[16]],
5359
- 'sensor_type_ch3': rtd_types[frame[17]],
5360
- 'hardware_id': frame.slice(18, 21),
5361
- 'report_rate': frame.slice(21, 25).reduce(msbLsb) + " sec",
5362
- 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
5363
- 'machine_values': {
5364
- 'firmware': frame[2],
5365
- 'sensor_interface_ch1': frame[12],
5366
- 'sensor_type_ch1': frame[13],
5367
- 'sensor_interface_ch2': frame[14],
5368
- 'sensor_type_ch2': frame[15],
5369
- 'sensor_interface_ch3': frame[16],
5370
- 'sensor_type_ch3': frame[17],
5371
- 'hardware_id': frame.slice(18, 21),
5372
- 'report_rate': frame.slice(21, 25),
5373
- 'tx_life_counter': frame.slice(25, 29)
5374
- }
5375
- }
4838
+ pH: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
4839
+ Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
4840
+ };
5376
4841
  }
5377
4842
  },
5378
- '56': {
5379
- name: '2 Channel 0-10VDC Receiver',
4843
+ '62': {
4844
+ name: 'ORP and Temperature Sensor',
5380
4845
  parse: (d) => {
5381
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5382
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5383
4846
  return {
5384
- adc1: adc1,
5385
- adc2: adc2,
5386
- VDC1: parseFloat((adc1 * 0.00034122).toFixed(2)),
5387
- VDC2: parseFloat((adc2 * 0.00034122).toFixed(2))
5388
- };
5389
- },
5390
- 'parse_fly': (frame) => {
5391
- let firmware = frame[2];
5392
- if(firmware > 13){ // firmware 14 and above
5393
- let frame_data = {};
5394
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5395
- if(!auto_check_interval){
5396
- frame_data.auto_check_interval = 'Disabled';
5397
- }else{
5398
- frame_data.auto_check_interval = auto_check_interval + " sec";
5399
- }
5400
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5401
- switch(frame[16]){
5402
- case 0:
5403
- frame_data.fsr = "+-6.114 V";
5404
- break;
5405
- case 1:
5406
- frame_data.fsr = "+-4.096 V";
5407
- break;
5408
- case 2:
5409
- frame_data.fsr = "+-2.048 V";
5410
- break;
5411
- case 3:
5412
- frame_data.fsr = "+-1.024 V";
5413
- break;
5414
- case 4:
5415
- frame_data.fsr = "+-0.512 V";
5416
- break;
5417
- case 5:
5418
- frame_data.fsr = "+-0.256 V";
5419
- break;
5420
- }
5421
- return {
5422
- 'firmware': frame[2],
5423
- 'fsr': frame_data.fsr,
5424
- 'boot_up_time': frame[17] + " sec",
5425
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5426
- 'auto_check_interval': frame_data.auto_check_interval,
5427
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5428
- 'always_on': frame_data.always_on,
5429
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5430
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5431
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5432
- 'hardware_id': frame.slice(37, 40),
5433
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5434
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5435
- 'machine_values': {
5436
- 'firmware': frame[2],
5437
- 'fsr': frame[16],
5438
- 'boot_up_time': frame[17],
5439
- 'adc_pin_reading': frame.slice(18, 20),
5440
- 'auto_check_interval': frame.slice(20, 22),
5441
- 'auto_check_percentage': frame.slice(22, 24),
5442
- 'always_on': frame[24],
5443
- 'calibration_one': frame.slice(25, 29),
5444
- 'calibration_two':frame.slice(29, 33),
5445
- 'calibration_three':frame.slice(33, 37),
5446
- 'hardware_id': frame.slice(37, 40),
5447
- 'report_rate': frame.slice(40, 44),
5448
- 'tx_life_counter': frame.slice(44, 48)
5449
- }
5450
- }
5451
- }
5452
- }
5453
- },
5454
- '58': {
5455
- name: 'Tank Level v3',
5456
- parse: (d) => {
5457
- return {
5458
- filtered_range: d.slice(0, 2).reduce(msbLsb),
5459
- long_range_algorithm: d.slice(2, 4).reduce(msbLsb),
5460
- second_chance: d.slice(4, 6).reduce(msbLsb),
5461
- second_reading: d.slice(6, 8).reduce(msbLsb),
5462
- compare_reading: d.slice(8, 10).reduce(msbLsb),
5463
- short_range_algorithm: d.slice(10, 12).reduce(msbLsb),
5464
- trusted_reading: d.slice(12, 14).reduce(msbLsb),
5465
- final_filter: d.slice(14, 16).reduce(msbLsb),
5466
- raw_final: d.slice(16, 18).reduce(msbLsb),
5467
- final_index: d.slice(18, 20).reduce(msbLsb),
5468
- };
5469
- }
5470
- },
5471
- '60': {
5472
- name: 'Air Velocity and Precision Pressure & Temperature Sensor',
5473
- parse: (d) => {
5474
- return {
5475
- pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 1000,
5476
- temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
5477
- Air_Velocity: signInt(d.slice(6, 8).reduce(msbLsb), 16) / 1000
5478
- };
5479
- }
5480
- },
5481
-
5482
- '61': {
5483
- name: 'pH and Temperature Sensor',
5484
- parse: (d) => {
5485
- return {
5486
- pH: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
5487
- Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
5488
- };
5489
- }
5490
- },
5491
- '62': {
5492
- name: 'ORP and Temperature Sensor',
5493
- parse: (d) => {
5494
- return {
5495
- ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5496
- Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
4847
+ ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4848
+ Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
5497
4849
  };
5498
4850
  }
5499
4851
  },
@@ -5674,79 +5026,6 @@ function sensor_types(parent){
5674
5026
  }
5675
5027
  }
5676
5028
  },
5677
- '75': {
5678
- name: 'Siemens Air Velocity Probe',
5679
- parse: (d) => {
5680
- return {
5681
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5682
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
5683
- Velocity: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100
5684
- };
5685
- },
5686
- 'parse_fly': (frame) => {
5687
- let firmware = frame[2];
5688
- if(firmware > 13){ // firmware 14 and above
5689
- let frame_data = {};
5690
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5691
- if(!auto_check_interval){
5692
- frame_data.auto_check_interval = 'Disabled';
5693
- }else{
5694
- frame_data.auto_check_interval = auto_check_interval + " sec";
5695
- }
5696
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5697
- switch(frame[16]){
5698
- case 0:
5699
- frame_data.fsr = "+-6.114 V";
5700
- break;
5701
- case 1:
5702
- frame_data.fsr = "+-4.096 V";
5703
- break;
5704
- case 2:
5705
- frame_data.fsr = "+-2.048 V";
5706
- break;
5707
- case 3:
5708
- frame_data.fsr = "+-1.024 V";
5709
- break;
5710
- case 4:
5711
- frame_data.fsr = "+-0.512 V";
5712
- break;
5713
- case 5:
5714
- frame_data.fsr = "+-0.256 V";
5715
- break;
5716
- }
5717
- return {
5718
- 'firmware': frame[2],
5719
- 'fsr': frame_data.fsr,
5720
- 'boot_up_time': frame[17] + " sec",
5721
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5722
- 'auto_check_interval': frame_data.auto_check_interval,
5723
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5724
- 'always_on': frame_data.always_on,
5725
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5726
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5727
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5728
- 'hardware_id': frame.slice(37, 40),
5729
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5730
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5731
- 'machine_values': {
5732
- 'firmware': frame[2],
5733
- 'fsr': frame[16],
5734
- 'boot_up_time': frame[17],
5735
- 'adc_pin_reading': frame.slice(18, 20),
5736
- 'auto_check_interval': frame.slice(20, 22),
5737
- 'auto_check_percentage': frame.slice(22, 24),
5738
- 'always_on': frame[24],
5739
- 'calibration_one': frame.slice(25, 29),
5740
- 'calibration_two':frame.slice(29, 33),
5741
- 'calibration_three':frame.slice(33, 37),
5742
- 'hardware_id': frame.slice(37, 40),
5743
- 'report_rate': frame.slice(40, 44),
5744
- 'tx_life_counter': frame.slice(44, 48)
5745
- }
5746
- }
5747
- }
5748
- }
5749
- },
5750
5029
  '76': {
5751
5030
  name: 'Wireless CO Sensor',
5752
5031
  parse: (d) => {
@@ -8227,369 +7506,30 @@ function sensor_types(parent){
8227
7506
  'firmware': frame[2],
8228
7507
  'sampling_rate': frame[16] + 'Hz',
8229
7508
  'current_calibration': (frame.slice(17, 21).reduce(msbLsb)) * 10,
8230
- 'deadband': frame.slice(21, 23).reduce(msbLsb) + 'mA',
8231
- 'max_supported_ct': frame.slice(23, 27).reduce(msbLsb),
8232
- 'hardware_id': frame.slice(27, 30),
8233
- 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "sec",
8234
- 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
8235
- 'machine_values': {
8236
- 'firmware': frame[2],
8237
- 'sampling_rate': frame[16],
8238
- 'current_calibration': frame.slice(17, 21),
8239
- 'deadband': frame.slice(21, 23),
8240
- 'max_supported_ct': frame.slice(23, 27),
8241
- 'hardware_id': frame.slice(27, 30),
8242
- 'report_rate': frame.slice(30, 34),
8243
- 'tx_life_counter': frame.slice(34, 38)
8244
- }
8245
- }
8246
- }
8247
- },
8248
- '88': {
8249
- name: '1 Channel Ultrasound Vibration Sensor',
8250
- parse: (d) => {
8251
- return {
8252
- raw_adc: d.slice(0, 2).reduce(msbLsb),
8253
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
8254
- db: d.slice(4, 6).reduce(msbLsb) / 100
8255
- };
8256
- },
8257
- 'parse_fly': (frame) => {
8258
- let firmware = frame[2];
8259
- let frame_data = {};
8260
- switch(frame[16]){
8261
- case 0:
8262
- frame_data.fsr = "+-6.114 V";
8263
- break;
8264
- case 1:
8265
- frame_data.fsr = "+-4.096 V";
8266
- break;
8267
- case 2:
8268
- frame_data.fsr = "+-2.048 V";
8269
- break;
8270
- case 3:
8271
- frame_data.fsr = "+-1.024 V";
8272
- break;
8273
- case 4:
8274
- frame_data.fsr = "+-0.512 V";
8275
- break;
8276
- case 5:
8277
- frame_data.fsr = "+-0.256 V";
8278
- break;
8279
- }
8280
- if(firmware > 13){ // firmware 14 and above
8281
- let frame_data = {};
8282
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8283
- if(!auto_check_interval){
8284
- frame_data.auto_check_interval = 'Disabled';
8285
- }else{
8286
- frame_data.auto_check_interval = auto_check_interval + " sec";
8287
- }
8288
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8289
- return {
8290
- 'firmware': frame[2],
8291
- 'fsr': frame_data.fsr,
8292
- 'boot_up_time': frame[17] + " sec",
8293
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8294
- 'auto_check_interval': frame_data.auto_check_interval,
8295
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8296
- 'always_on': frame_data.always_on,
8297
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8298
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8299
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8300
- 'hardware_id': frame.slice(37, 40),
8301
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8302
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8303
- 'machine_values': {
8304
- 'firmware': frame[2],
8305
- 'fsr': frame[16],
8306
- 'boot_up_time': frame[17],
8307
- 'adc_pin_reading': frame.slice(18, 20),
8308
- 'auto_check_interval': frame.slice(20, 22),
8309
- 'auto_check_percentage': frame.slice(22, 24),
8310
- 'always_on': frame[24],
8311
- 'calibration_one': frame.slice(25, 29),
8312
- 'calibration_two':frame.slice(29, 33),
8313
- 'calibration_three':frame.slice(33, 37),
8314
- 'hardware_id': frame.slice(37, 40),
8315
- 'report_rate': frame.slice(40, 44),
8316
- 'tx_life_counter': frame.slice(44, 48)
8317
- }
8318
- }
8319
- }else{
8320
- return {
8321
- 'firmware': frame[2],
8322
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
8323
- 'fsr':frame_data.fsr,
8324
- 'boot_up_time': frame[17],
8325
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8326
- 'machine_values': {
8327
- 'firmware': frame[2],
8328
- 'report_rate': frame.slice(12, 16),
8329
- 'fsr':frame[16],
8330
- 'boot_up_time': frame[17],
8331
- // 'adc_pin_reading': frame.slice(18, 20),
8332
- 'frame': frame
8333
- }
8334
- }
8335
- }
8336
- }
8337
- },
8338
- '89': {
8339
- name: '2 Channel Ultrasound Vibration Sensor',
8340
- parse: (d) => {
8341
- return {
8342
- c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
8343
- c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
8344
- c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
8345
- c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
8346
- c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
8347
- c2_db: d.slice(10, 12).reduce(msbLsb) / 100
8348
- };
8349
- },
8350
- 'parse_fly': (frame) => {
8351
- let firmware = frame[2];
8352
- let frame_data = {};
8353
- switch(frame[16]){
8354
- case 0:
8355
- frame_data.fsr = "+-6.114 V";
8356
- break;
8357
- case 1:
8358
- frame_data.fsr = "+-4.096 V";
8359
- break;
8360
- case 2:
8361
- frame_data.fsr = "+-2.048 V";
8362
- break;
8363
- case 3:
8364
- frame_data.fsr = "+-1.024 V";
8365
- break;
8366
- case 4:
8367
- frame_data.fsr = "+-0.512 V";
8368
- break;
8369
- case 5:
8370
- frame_data.fsr = "+-0.256 V";
8371
- break;
8372
- }
8373
- if(firmware > 13){ // firmware 14 and above
8374
- let frame_data = {};
8375
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8376
- if(!auto_check_interval){
8377
- frame_data.auto_check_interval = 'Disabled';
8378
- }else{
8379
- frame_data.auto_check_interval = auto_check_interval + " sec";
8380
- }
8381
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8382
- return {
8383
- 'firmware': frame[2],
8384
- 'fsr': frame_data.fsr,
8385
- 'boot_up_time': frame[17] + " sec",
8386
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8387
- 'auto_check_interval': frame_data.auto_check_interval,
8388
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8389
- 'always_on': frame_data.always_on,
8390
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8391
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8392
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8393
- 'hardware_id': frame.slice(37, 40),
8394
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8395
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8396
- 'machine_values': {
8397
- 'firmware': frame[2],
8398
- 'fsr': frame[16],
8399
- 'boot_up_time': frame[17],
8400
- 'adc_pin_reading': frame.slice(18, 20),
8401
- 'auto_check_interval': frame.slice(20, 22),
8402
- 'auto_check_percentage': frame.slice(22, 24),
8403
- 'always_on': frame[24],
8404
- 'calibration_one': frame.slice(25, 29),
8405
- 'calibration_two':frame.slice(29, 33),
8406
- 'calibration_three':frame.slice(33, 37),
8407
- 'hardware_id': frame.slice(37, 40),
8408
- 'report_rate': frame.slice(40, 44),
8409
- 'tx_life_counter': frame.slice(44, 48)
8410
- }
8411
- }
8412
- }else{
8413
- return {
8414
- 'firmware': frame[2],
8415
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
8416
- 'fsr':frame_data.fsr,
8417
- 'boot_up_time': frame[17],
8418
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8419
- 'machine_values': {
8420
- 'firmware': frame[2],
8421
- 'report_rate': frame.slice(12, 16),
8422
- 'fsr':frame[16],
8423
- 'boot_up_time': frame[17],
8424
- // 'adc_pin_reading': frame.slice(18, 20),
8425
- 'frame': frame
8426
- }
8427
- }
8428
- }
8429
- }
8430
- },
8431
- '90': {
8432
- name: 'DC Current Sensor',
8433
- parse: (d) => {
8434
- return {
8435
- raw_adc: d.slice(0, 2).reduce(msbLsb),
8436
- amps: d.slice(2, 6).reduce(msbLsb) / 10,
8437
- };
8438
- },
8439
- 'parse_fly': (frame) => {
8440
- let firmware = frame[2];
8441
- if(firmware > 13){ // firmware 14 and above
8442
- let frame_data = {};
8443
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8444
- if(!auto_check_interval){
8445
- frame_data.auto_check_interval = 'Disabled';
8446
- }else{
8447
- frame_data.auto_check_interval = auto_check_interval + " sec";
8448
- }
8449
- frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
8450
- switch(frame[16]){
8451
- case 0:
8452
- frame_data.fsr = "+-6.114 V";
8453
- break;
8454
- case 1:
8455
- frame_data.fsr = "+-4.096 V";
8456
- break;
8457
- case 2:
8458
- frame_data.fsr = "+-2.048 V";
8459
- break;
8460
- case 3:
8461
- frame_data.fsr = "+-1.024 V";
8462
- break;
8463
- case 4:
8464
- frame_data.fsr = "+-0.512 V";
8465
- break;
8466
- case 5:
8467
- frame_data.fsr = "+-0.256 V";
8468
- break;
8469
- }
8470
- return {
8471
- 'firmware': frame[2],
8472
- 'fsr': frame_data.fsr,
8473
- 'boot_up_time': frame[17] + " sec",
8474
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8475
- 'auto_check_interval': frame_data.auto_check_interval,
8476
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8477
- 'always_on': frame_data.always_on,
8478
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8479
- 'hardware_id': frame.slice(29, 32),
8480
- 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
8481
- 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
8482
- 'machine_values': {
8483
- 'firmware': frame[2],
8484
- 'fsr': frame[16],
8485
- 'boot_up_time': frame[17],
8486
- 'adc_pin_reading': frame.slice(18, 20),
8487
- 'auto_check_interval': frame.slice(20, 22),
8488
- 'auto_check_threshold': frame.slice(22, 24),
8489
- 'always_on': frame[24],
8490
- 'calibration_one': frame.slice(25, 29),
8491
- 'hardware_id': frame.slice(29, 32),
8492
- 'report_rate': frame.slice(32, 36),
8493
- 'tx_life_counter': frame.slice(36, 40)
8494
- }
8495
- }
8496
- }
8497
- }
8498
- },
8499
- '91': {
8500
- name: 'Wireless Air Velocity Sensor HVAC',
8501
- parse: (d) => {
8502
- return {
8503
- velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
8504
- };
8505
- }
8506
- },
8507
- '92': {
8508
- name: 'Sound Sensor',
8509
- parse: (d) => {
8510
- return {
8511
- sound: signInt(d[3], 8)/100
8512
- };
8513
- }
8514
- },
8515
- '95': {
8516
- name: '16-Bit 1-Channel 0-24VDC Receiver',
8517
- parse: (d) => {
8518
- return {
8519
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
8520
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
8521
- };
8522
- },
8523
- 'parse_fly': (frame) => {
8524
- let firmware = frame[2];
8525
- if(firmware > 13){ // firmware 14 and above
8526
- let frame_data = {};
8527
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8528
- if(!auto_check_interval){
8529
- frame_data.auto_check_interval = 'Disabled';
8530
- }else{
8531
- frame_data.auto_check_interval = auto_check_interval + " sec";
8532
- }
8533
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8534
- switch(frame[16]){
8535
- case 0:
8536
- frame_data.fsr = "+-6.114 V";
8537
- break;
8538
- case 1:
8539
- frame_data.fsr = "+-4.096 V";
8540
- break;
8541
- case 2:
8542
- frame_data.fsr = "+-2.048 V";
8543
- break;
8544
- case 3:
8545
- frame_data.fsr = "+-1.024 V";
8546
- break;
8547
- case 4:
8548
- frame_data.fsr = "+-0.512 V";
8549
- break;
8550
- case 5:
8551
- frame_data.fsr = "+-0.256 V";
8552
- break;
8553
- }
8554
- return {
7509
+ 'deadband': frame.slice(21, 23).reduce(msbLsb) + 'mA',
7510
+ 'max_supported_ct': frame.slice(23, 27).reduce(msbLsb),
7511
+ 'hardware_id': frame.slice(27, 30),
7512
+ 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "sec",
7513
+ 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
7514
+ 'machine_values': {
8555
7515
  'firmware': frame[2],
8556
- 'fsr': frame_data.fsr,
8557
- 'boot_up_time': frame[17] + " sec",
8558
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8559
- 'auto_check_interval': frame_data.auto_check_interval,
8560
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8561
- 'always_on': frame_data.always_on,
8562
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8563
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8564
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8565
- 'hardware_id': frame.slice(37, 40),
8566
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8567
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8568
- 'machine_values': {
8569
- 'firmware': frame[2],
8570
- 'fsr': frame[16],
8571
- 'boot_up_time': frame[17],
8572
- 'adc_pin_reading': frame.slice(18, 20),
8573
- 'auto_check_interval': frame.slice(20, 22),
8574
- 'auto_check_percentage': frame.slice(22, 24),
8575
- 'always_on': frame[24],
8576
- 'calibration_one': frame.slice(25, 29),
8577
- 'calibration_two':frame.slice(29, 33),
8578
- 'calibration_three':frame.slice(33, 37),
8579
- 'hardware_id': frame.slice(37, 40),
8580
- 'report_rate': frame.slice(40, 44),
8581
- 'tx_life_counter': frame.slice(44, 48)
8582
- }
7516
+ 'sampling_rate': frame[16],
7517
+ 'current_calibration': frame.slice(17, 21),
7518
+ 'deadband': frame.slice(21, 23),
7519
+ 'max_supported_ct': frame.slice(23, 27),
7520
+ 'hardware_id': frame.slice(27, 30),
7521
+ 'report_rate': frame.slice(30, 34),
7522
+ 'tx_life_counter': frame.slice(34, 38)
8583
7523
  }
8584
7524
  }
8585
7525
  }
8586
7526
  },
8587
- '96': {
8588
- name: '16-Bit 1-Channel 0-48VDC Receiver',
7527
+ '90': {
7528
+ name: 'DC Current Sensor',
8589
7529
  parse: (d) => {
8590
7530
  return {
8591
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
8592
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
7531
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
7532
+ amps: d.slice(2, 6).reduce(msbLsb) / 10,
8593
7533
  };
8594
7534
  },
8595
7535
  'parse_fly': (frame) => {
@@ -8602,7 +7542,7 @@ function sensor_types(parent){
8602
7542
  }else{
8603
7543
  frame_data.auto_check_interval = auto_check_interval + " sec";
8604
7544
  }
8605
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
7545
+ frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
8606
7546
  switch(frame[16]){
8607
7547
  case 0:
8608
7548
  frame_data.fsr = "+-6.114 V";
@@ -8632,30 +7572,42 @@ function sensor_types(parent){
8632
7572
  'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8633
7573
  'always_on': frame_data.always_on,
8634
7574
  'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8635
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8636
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8637
- 'hardware_id': frame.slice(37, 40),
8638
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8639
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7575
+ 'hardware_id': frame.slice(29, 32),
7576
+ 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
7577
+ 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
8640
7578
  'machine_values': {
8641
7579
  'firmware': frame[2],
8642
7580
  'fsr': frame[16],
8643
7581
  'boot_up_time': frame[17],
8644
7582
  'adc_pin_reading': frame.slice(18, 20),
8645
7583
  'auto_check_interval': frame.slice(20, 22),
8646
- 'auto_check_percentage': frame.slice(22, 24),
7584
+ 'auto_check_threshold': frame.slice(22, 24),
8647
7585
  'always_on': frame[24],
8648
7586
  'calibration_one': frame.slice(25, 29),
8649
- 'calibration_two':frame.slice(29, 33),
8650
- 'calibration_three':frame.slice(33, 37),
8651
- 'hardware_id': frame.slice(37, 40),
8652
- 'report_rate': frame.slice(40, 44),
8653
- 'tx_life_counter': frame.slice(44, 48)
7587
+ 'hardware_id': frame.slice(29, 32),
7588
+ 'report_rate': frame.slice(32, 36),
7589
+ 'tx_life_counter': frame.slice(36, 40)
8654
7590
  }
8655
7591
  }
8656
7592
  }
8657
7593
  }
8658
7594
  },
7595
+ '91': {
7596
+ name: 'Wireless Air Velocity Sensor HVAC',
7597
+ parse: (d) => {
7598
+ return {
7599
+ velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
7600
+ };
7601
+ }
7602
+ },
7603
+ '92': {
7604
+ name: 'Sound Sensor',
7605
+ parse: (d) => {
7606
+ return {
7607
+ sound: signInt(d[3], 8)/100
7608
+ };
7609
+ }
7610
+ },
8659
7611
  '97': {
8660
7612
  name: 'One channel Dynamic Ultrasound vibration Sensor',
8661
7613
  parse: (payload, parsed, mac) => {
@@ -9259,92 +8211,6 @@ function sensor_types(parent){
9259
8211
  }
9260
8212
  }
9261
8213
  },
9262
- '107': {
9263
- name: '16-Bit 4-Channel 4-20mA',
9264
- parse: (d) => {
9265
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
9266
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
9267
- var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
9268
- var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
9269
- var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
9270
- var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
9271
- var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
9272
- var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
9273
- return {
9274
- adc1: adc1,
9275
- adc2: adc2,
9276
- adc3: adc3,
9277
- adc4: adc4,
9278
- ma1: ma1,
9279
- ma2: ma2,
9280
- ma3: ma3,
9281
- ma4: ma4
9282
- };
9283
- },
9284
- 'parse_fly': (frame) => {
9285
- let firmware = frame[2];
9286
- if(firmware > 13){ // firmware 14 and above
9287
- let frame_data = {};
9288
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
9289
- if(!auto_check_interval){
9290
- frame_data.auto_check_interval = 'Disabled';
9291
- }else{
9292
- frame_data.auto_check_interval = auto_check_interval + " sec";
9293
- }
9294
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
9295
- switch(frame[16]){
9296
- case 0:
9297
- frame_data.fsr = "+-6.114 V";
9298
- break;
9299
- case 1:
9300
- frame_data.fsr = "+-4.096 V";
9301
- break;
9302
- case 2:
9303
- frame_data.fsr = "+-2.048 V";
9304
- break;
9305
- case 3:
9306
- frame_data.fsr = "+-1.024 V";
9307
- break;
9308
- case 4:
9309
- frame_data.fsr = "+-0.512 V";
9310
- break;
9311
- case 5:
9312
- frame_data.fsr = "+-0.256 V";
9313
- break;
9314
- }
9315
- return {
9316
- 'firmware': frame[2],
9317
- 'fsr': frame_data.fsr,
9318
- 'boot_up_time': frame[17] + " sec",
9319
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
9320
- 'auto_check_interval': frame_data.auto_check_interval,
9321
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
9322
- 'always_on': frame_data.always_on,
9323
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
9324
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
9325
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
9326
- 'hardware_id': frame.slice(37, 40),
9327
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
9328
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
9329
- 'machine_values': {
9330
- 'firmware': frame[2],
9331
- 'fsr': frame[16],
9332
- 'boot_up_time': frame[17],
9333
- 'adc_pin_reading': frame.slice(18, 20),
9334
- 'auto_check_interval': frame.slice(20, 22),
9335
- 'auto_check_percentage': frame.slice(22, 24),
9336
- 'always_on': frame[24],
9337
- 'calibration_one': frame.slice(25, 29),
9338
- 'calibration_two':frame.slice(29, 33),
9339
- 'calibration_three':frame.slice(33, 37),
9340
- 'hardware_id': frame.slice(37, 40),
9341
- 'report_rate': frame.slice(40, 44),
9342
- 'tx_life_counter': frame.slice(44, 48)
9343
- }
9344
- }
9345
- }
9346
- }
9347
- },
9348
8214
  '108': {
9349
8215
  name: 'Machine Uptime Monitoring Sensor',
9350
8216
  parse: (d, payload) => {
@@ -11457,134 +10323,29 @@ function sensor_types(parent){
11457
10323
  'sample_rate': frame.slice(17, 21).reduce(msbLsb),
11458
10324
  'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
11459
10325
  }
11460
- }
11461
- }
11462
- },
11463
- '121':{
11464
- name: 'Wireless Wood Moisture Sensor',
11465
- parse: (d) => {
11466
- return {
11467
- wood_type: d[0],
11468
- temperature: signInt(d.slice(1, 3).reduce(msbLsb), 16) / 100,
11469
- humidity: d.slice(3, 5).reduce(msbLsb) / 100,
11470
- wood_moisture: d.slice(5, 7).reduce(msbLsb) / 100,
11471
- wood_resistance: (d.slice(7, 15)).reduce(msbLsb) / 100
11472
- };
11473
- },
11474
- 'parse_fly': (frame) => {
11475
- return {
11476
- 'hardware_id': frame.slice(12, 15),
11477
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
11478
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
11479
- 'machine_values': {
11480
- 'hardware_id': frame.slice(12, 15),
11481
- 'sample_rate': frame.slice(15, 19),
11482
- 'tx_life_counter': frame.slice(19, 23)
11483
- }
11484
- }
11485
- }
11486
- },
11487
- '122': {
11488
- name: 'Wireless 4-20mA Current Splitter',
11489
- parse: (d) => {
11490
- // This parser may be outdated if a customer has an issue check with Engineering
11491
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
11492
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
11493
- return {
11494
- adc1: adc1,
11495
- adc2: adc2,
11496
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
11497
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
11498
- };
11499
- },
11500
- 'parse_fly': (frame) => {
11501
- let frame_data = {};
11502
- switch(frame[16]){
11503
- case 0:
11504
- frame_data.fsr = "+-6.114 V";
11505
- break;
11506
- case 1:
11507
- frame_data.fsr = "+-4.096 V";
11508
- break;
11509
- case 2:
11510
- frame_data.fsr = "+-2.048 V";
11511
- break;
11512
- case 3:
11513
- frame_data.fsr = "+-1.024 V";
11514
- break;
11515
- case 4:
11516
- frame_data.fsr = "+-0.512 V";
11517
- break;
11518
- case 5:
11519
- frame_data.fsr = "+-0.256 V";
11520
- break;
11521
- }
11522
- if(frame[2]>13){ // firmware 14 and above
11523
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
11524
- if(!auto_check_interval){
11525
- frame_data.auto_check_interval = 'Disabled';
11526
- }else{
11527
- frame_data.auto_check_interval = auto_check_interval + " sec";
11528
- }
11529
- return {
11530
- 'firmware': frame[2],
11531
- 'fsr': frame_data.fsr,
11532
- 'boot_up_time': frame[17] + " sec",
11533
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
11534
- 'auto_check_interval': frame_data.auto_check_interval,
11535
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
11536
- 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
11537
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
11538
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
11539
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
11540
- 'hardware_id': frame.slice(37, 40),
11541
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
11542
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
11543
- 'machine_values': {
11544
- 'firmware': frame[2],
11545
- 'fsr': frame[16],
11546
- 'boot_up_time': frame[17],
11547
- 'adc_pin_reading': frame.slice(18, 20),
11548
- 'auto_check_interval': frame.slice(20, 22),
11549
- 'auto_check_percentage': frame.slice(22, 24),
11550
- 'always_on': frame[24],
11551
- 'calibration_one': frame.slice(25, 29),
11552
- 'calibration_two':frame.slice(29, 33),
11553
- 'calibration_three':frame.slice(33, 37),
11554
- 'hardware_id': frame.slice(37, 40),
11555
- 'report_rate': frame.slice(40, 44),
11556
- 'tx_life_counter': frame.slice(44, 48)
11557
- }
11558
- }
11559
- }else if(frame[2]>12){
11560
- return {
11561
- 'firmware': frame[2],
11562
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
11563
- 'fsr':frame_data.fsr,
11564
- 'boot_up_time': frame[17],
11565
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
11566
- 'machine_values': {
11567
- 'firmware': frame[2],
11568
- 'report_rate': frame.slice(12, 16),
11569
- 'fsr':frame[16],
11570
- 'boot_up_time': frame[17],
11571
- 'adc_pin_reading': frame.slice(18, 20),
11572
- 'frame': frame
11573
- }
11574
- }
11575
- }else{
11576
- return {
11577
- 'firmware': frame[2],
11578
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
11579
- 'fsr':frame_data.fsr,
11580
- 'boot_up_time': frame[17],
11581
- 'machine_values': {
11582
- 'firmware': frame[2],
11583
- 'report_rate': frame.slice(12, 16),
11584
- 'fsr':frame[16],
11585
- 'boot_up_time': frame[17],
11586
- 'frame': frame
11587
- }
10326
+ }
10327
+ }
10328
+ },
10329
+ '121':{
10330
+ name: 'Wireless Wood Moisture Sensor',
10331
+ parse: (d) => {
10332
+ return {
10333
+ wood_type: d[0],
10334
+ temperature: signInt(d.slice(1, 3).reduce(msbLsb), 16) / 100,
10335
+ humidity: d.slice(3, 5).reduce(msbLsb) / 100,
10336
+ wood_moisture: d.slice(5, 7).reduce(msbLsb) / 100,
10337
+ wood_resistance: (d.slice(7, 15)).reduce(msbLsb) / 100
10338
+ };
10339
+ },
10340
+ 'parse_fly': (frame) => {
10341
+ return {
10342
+ 'hardware_id': frame.slice(12, 15),
10343
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
10344
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
10345
+ 'machine_values': {
10346
+ 'hardware_id': frame.slice(12, 15),
10347
+ 'sample_rate': frame.slice(15, 19),
10348
+ 'tx_life_counter': frame.slice(19, 23)
11588
10349
  }
11589
10350
  }
11590
10351
  }
@@ -14943,178 +13704,6 @@ function sensor_types(parent){
14943
13704
  }
14944
13705
  }
14945
13706
  },
14946
- '539': {
14947
- name: 'RS485 Modbus Wireless Converter',
14948
- parse: (d) => {
14949
- return {
14950
- subdevice_type: d[0],
14951
- number_of_registers: d[1],
14952
- status_24_31: d[2],
14953
- status_16_23: d[3],
14954
- status_8_15: d[4],
14955
- status_0_7: d[5],
14956
- // TODO we can automatically determine how many registers are here based on the number_of_registers and create data objects appropriately
14957
- // r1: d.slice(2,4),
14958
- // r2: d.slice(4,6),
14959
- // r3: d.slice(6,8),
14960
- // r4: d.slice(8,10),
14961
- data: d.slice(6)
14962
- };
14963
- },
14964
- },
14965
- '540': {
14966
- name: 'Wireless Ultrasonic Flow Meter FD-Q32C',
14967
- parse: (d) => {
14968
- return {
14969
- raw_adc: d.slice(0, 2).reduce(msbLsb),
14970
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
14971
- flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
14972
- };
14973
- },
14974
- 'parse_fly': (frame) => {
14975
- let firmware = frame[2];
14976
- if(firmware > 13){ // firmware 14 and above
14977
- let frame_data = {};
14978
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
14979
- if(!auto_check_interval){
14980
- frame_data.auto_check_interval = 'Disabled';
14981
- }else{
14982
- frame_data.auto_check_interval = auto_check_interval + " sec";
14983
- }
14984
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
14985
- switch(frame[16]){
14986
- case 0:
14987
- frame_data.fsr = "+-6.114 V";
14988
- break;
14989
- case 1:
14990
- frame_data.fsr = "+-4.096 V";
14991
- break;
14992
- case 2:
14993
- frame_data.fsr = "+-2.048 V";
14994
- break;
14995
- case 3:
14996
- frame_data.fsr = "+-1.024 V";
14997
- break;
14998
- case 4:
14999
- frame_data.fsr = "+-0.512 V";
15000
- break;
15001
- case 5:
15002
- frame_data.fsr = "+-0.256 V";
15003
- break;
15004
- }
15005
- return {
15006
- 'firmware': frame[2],
15007
- 'fsr': frame_data.fsr,
15008
- 'boot_up_time': frame[17] + " sec",
15009
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15010
- 'auto_check_interval': frame_data.auto_check_interval,
15011
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15012
- 'always_on': frame_data.always_on,
15013
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15014
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15015
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15016
- 'hardware_id': frame.slice(37, 40),
15017
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
15018
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
15019
- 'machine_values': {
15020
- 'firmware': frame[2],
15021
- 'fsr': frame[16],
15022
- 'boot_up_time': frame[17],
15023
- 'adc_pin_reading': frame.slice(18, 20),
15024
- 'auto_check_interval': frame.slice(20, 22),
15025
- 'auto_check_percentage': frame.slice(22, 24),
15026
- 'always_on': frame[24],
15027
- 'calibration_one': frame.slice(25, 29),
15028
- 'calibration_two':frame.slice(29, 33),
15029
- 'calibration_three':frame.slice(33, 37),
15030
- 'hardware_id': frame.slice(37, 40),
15031
- 'report_rate': frame.slice(40, 44),
15032
- 'tx_life_counter': frame.slice(44, 48)
15033
- }
15034
- }
15035
- }
15036
- }
15037
- },
15038
- '541': {
15039
- name: 'Custom Inline Flow Sensor',
15040
- parse: (d) => {
15041
- return {
15042
- adc1: signInt(d.slice(0, 2).reduce(msbLsb), 16),
15043
- adc2: signInt(d.slice(2, 4).reduce(msbLsb), 16),
15044
- mA1: signInt(d.slice(4, 6).reduce(msbLsb), 16)/100,
15045
- mA2: signInt(d.slice(6, 8).reduce(msbLsb), 16)/100,
15046
- flow_1: signInt(d.slice(8, 12).reduce(msbLsb), 32)/100,
15047
- flow_2:signInt(d.slice(12, 16).reduce(msbLsb), 32)/100
15048
- };
15049
- },
15050
- 'parse_fly': (frame) => {
15051
- let firmware = frame[2];
15052
- if(firmware > 13){ // firmware 14 and above
15053
- let frame_data = {};
15054
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15055
- if(!auto_check_interval){
15056
- frame_data.auto_check_interval = 'Disabled';
15057
- }else{
15058
- frame_data.auto_check_interval = auto_check_interval + " sec";
15059
- }
15060
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
15061
- switch(frame[16]){
15062
- case 0:
15063
- frame_data.fsr = "+-6.114 V";
15064
- break;
15065
- case 1:
15066
- frame_data.fsr = "+-4.096 V";
15067
- break;
15068
- case 2:
15069
- frame_data.fsr = "+-2.048 V";
15070
- break;
15071
- case 3:
15072
- frame_data.fsr = "+-1.024 V";
15073
- break;
15074
- case 4:
15075
- frame_data.fsr = "+-0.512 V";
15076
- break;
15077
- case 5:
15078
- frame_data.fsr = "+-0.256 V";
15079
- break;
15080
- }
15081
- return {
15082
- 'firmware': frame[2],
15083
- 'fsr': frame_data.fsr,
15084
- 'boot_up_time': frame[17] + " sec",
15085
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15086
- 'auto_check_interval': frame_data.auto_check_interval,
15087
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15088
- 'always_on': frame_data.always_on,
15089
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15090
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15091
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15092
- 'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
15093
- 'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
15094
- 'hardware_id': frame.slice(41, 44),
15095
- 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
15096
- 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
15097
- 'machine_values': {
15098
- 'firmware': frame[2],
15099
- 'fsr': frame[16],
15100
- 'boot_up_time': frame[17],
15101
- 'adc_pin_reading': frame.slice(18, 20),
15102
- 'auto_check_interval': frame.slice(20, 22),
15103
- 'auto_check_percentage': frame.slice(22, 24),
15104
- 'always_on': frame[24],
15105
- 'calibration_one': frame.slice(25, 29),
15106
- 'calibration_two':frame.slice(29, 33),
15107
- 'calibration_three':frame.slice(33, 37),
15108
- 'min_flow_rate':frame.slice(37, 39),
15109
- 'max_flow_rate':frame.slice(39, 41),
15110
- 'hardware_id': frame.slice(41, 44),
15111
- 'report_rate': frame.slice(44, 48),
15112
- 'tx_life_counter': frame.slice(48, 52)
15113
- }
15114
- }
15115
- }
15116
- }
15117
- },
15118
13707
  '542': {
15119
13708
  name: 'Custom LWGY Flow Sensor',
15120
13709
  parse: (d) => {
@@ -15616,167 +14205,6 @@ function sensor_types(parent){
15616
14205
  }
15617
14206
  }
15618
14207
  },
15619
- '545': {
15620
- name: 'Fox Thermal Flow Sensor',
15621
- parse: (payload, parsed, mac) => {
15622
- let sensor_status = '';
15623
- const error_message = [];
15624
- if(payload[8] & 1){
15625
- error_message.push('pwr_up');
15626
- }
15627
- if(payload[8] & 2){
15628
- error_message.push('flw_hi_lim');
15629
- }
15630
- if(payload[8] & 4){
15631
- error_message.push('flw_lo_lim');
15632
- }
15633
- if(payload[8] & 8){
15634
- error_message.push('tmp_hi_lim');
15635
- }
15636
- if(payload[8] & 16){
15637
- error_message.push('tmp_lo_lim');
15638
- }
15639
- if(payload[8] & 32){
15640
- error_message.push('sensor_oor');
15641
- }
15642
- if(payload[8] & 64){
15643
- error_message.push('gas_mix_err');
15644
- }
15645
- if(payload[8] & 128){
15646
- error_message.push('inc_set');
15647
- }
15648
- if(error_message.length === 0){
15649
- sensor_status = 'ready';
15650
- } else {
15651
- sensor_status = error_message.join(', ');
15652
- }
15653
-
15654
- const calv_value = payload.slice(9, 11).reduce(msbLsb) / 100;
15655
- let cal_val = '';
15656
- if(calv_value < 0.80){
15657
- cal_val = 'pass';
15658
- } else if(calv_value <= 1.0){
15659
- cal_val = 'warning';
15660
- } else {
15661
- cal_val = 'fail';
15662
- }
15663
-
15664
- return {
15665
- sensor_status: sensor_status,
15666
- calcv_value: payload.slice(9, 11).reduce(msbLsb) / 100,
15667
- calcv_status: cal_val,
15668
- flow: payload.slice(11, 15).reduce(msbLsb)/100,
15669
- ghv: payload.slice(15, 19).reduce(msbLsb)/100,
15670
- total_flow: payload.slice(19, 27).reduce(msbLsb)/100,
15671
- temperature: payload.slice(27,29).reduce(msbLsb)/100,
15672
- density: payload.slice(29, 31).reduce(msbLsb)/100
15673
- };
15674
- },
15675
- 'parse_fly': (frame) => {
15676
- let frame_data = {};
15677
- switch(frame[12]){
15678
- case 0:
15679
- frame_data.flow_unit = 'scf_m';
15680
- break;
15681
- case 1:
15682
- frame_data.flow_unit = 'scf_h';
15683
- break;
15684
- case 2:
15685
- frame_data.flow_unit = 'nm3_h';
15686
- break;
15687
- case 3:
15688
- frame_data.flow_unit = 'nm3_m';
15689
- break;
15690
- case 4:
15691
- frame_data.flow_unit = 'kg_h';
15692
- break;
15693
- case 5:
15694
- frame_data.flow_unit = 'kg_m';
15695
- break;
15696
- case 6:
15697
- frame_data.flow_unit = 'kg_s';
15698
- break;
15699
- case 7:
15700
- frame_data.flow_unit = 'lbs_h';
15701
- break;
15702
- case 8:
15703
- frame_data.flow_unit = 'lbs_m';
15704
- break;
15705
- case 9:
15706
- frame_data.flow_unit = 'lbs_s';
15707
- break;
15708
- case 10:
15709
- frame_data.flow_unit = 'nlp_h';
15710
- break;
15711
- case 11:
15712
- frame_data.flow_unit = 'nlp_m';
15713
- break;
15714
- case 12:
15715
- frame_data.flow_unit = 'mmscf_d';
15716
- break;
15717
- case 13:
15718
- frame_data.flow_unit = 'lbs_d';
15719
- break;
15720
- case 14:
15721
- frame_data.flow_unit = 'slp_m';
15722
- break;
15723
- case 15:
15724
- frame_data.flow_unit = 'nlp_s';
15725
- break;
15726
- case 16:
15727
- frame_data.flow_unit = 'mscf_d';
15728
- break;
15729
- case 17:
15730
- frame_data.flow_unit = 'sm3_h';
15731
- break;
15732
- case 18:
15733
- frame_data.flow_unit = 'mt_h';
15734
- break;
15735
- case 19:
15736
- frame_data.flow_unit = 'nm3_d';
15737
- break;
15738
- case 20:
15739
- frame_data.flow_unit = 'mmscf_m';
15740
- break;
15741
- case 21:
15742
- frame_data.flow_unit = 'scf_d';
15743
- break;
15744
- case 22:
15745
- frame_data.flow_unit = 'mcf_d';
15746
- break;
15747
- case 23:
15748
- frame_data.flow_unit = 'sm3_m';
15749
- break;
15750
- case 24:
15751
- frame_data.flow_unit = 'sm3_d';
15752
- break;
15753
- }
15754
- switch(frame[13]){
15755
- case 0:
15756
- frame_data.temperature_unit = 'F';
15757
- break;
15758
- case 1:
15759
- frame_data.temperature_unit = 'C';
15760
- break;
15761
- }
15762
- return {
15763
- 'firmware': frame[2],
15764
- 'flow_unit': frame_data.flow_unit,
15765
- 'temperature_unit': frame_data.temperature_unit,
15766
- 'hardware_id': frame.slice(14, 17),
15767
- 'report_rate': frame.slice(17, 21).reduce(msbLsb),
15768
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
15769
- 'machine_values': {
15770
- 'firmware': frame[2],
15771
- 'flow_unit': frame[12],
15772
- 'temperature_unit': frame[13],
15773
- 'hardware_id': frame.slice(14, 17),
15774
- 'report_rate': frame.slice(17, 21),
15775
- 'tx_life_counter': frame.slice(21, 25)
15776
- }
15777
- }
15778
- }
15779
- },
15780
14208
  '1010': {
15781
14209
  name: 'RS232 Wireless Converter',
15782
14210
  parse: (d) => {