@ncd-io/node-red-enterprise-sensors 2.0.1 → 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) => {
@@ -4009,7 +4035,21 @@ function sensor_types(parent){
4009
4035
  var types = {
4010
4036
  '2': {
4011
4037
  name: '2 Channel Push Notification',
4012
- parse: (d) => {
4038
+ parse: (d, payload) => {
4039
+ let firmware = payload[1];
4040
+ if(firmware > 5){
4041
+ let report_type_byte = (payload[7] >> 5) & 1;
4042
+ let report_type = "";
4043
+ switch(report_type_byte){
4044
+ case 0: report_type = 'Regular'; break;
4045
+ case 1: report_type = 'Interrupt'; break;
4046
+ }
4047
+ return{
4048
+ report_type: report_type,
4049
+ input_1: d[0],
4050
+ input_2: d[1]
4051
+ }
4052
+ }
4013
4053
  return {
4014
4054
  input_1: d[0],
4015
4055
  input_2: d[1]
@@ -4025,14 +4065,6 @@ function sensor_types(parent){
4025
4065
  };
4026
4066
  }
4027
4067
  },
4028
- '4': {
4029
- name: 'Thermocouple',
4030
- parse: (d) => {
4031
- return {
4032
- temperature: signInt(d.slice(0, 4).reduce(msbLsb), 32)/100,
4033
- };
4034
- }
4035
- },
4036
4068
  '5': {
4037
4069
  name: 'Gyro/Magneto/Temperature',
4038
4070
  parse: (d) => {
@@ -4112,16 +4144,6 @@ function sensor_types(parent){
4112
4144
  };
4113
4145
  }
4114
4146
  },
4115
- '12': {
4116
- name: '3-Channel Thermocouple',
4117
- parse: (d) => {
4118
- return {
4119
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4120
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4121
- channel_3: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100
4122
- };
4123
- }
4124
- },
4125
4147
  '13': {
4126
4148
  name: 'Current Monitor',
4127
4149
  parse: (d) => {
@@ -4140,79 +4162,6 @@ function sensor_types(parent){
4140
4162
  };
4141
4163
  }
4142
4164
  },
4143
- '15': {
4144
- name: '10-Bit 1-Channel ADC',
4145
- parse: (d) => {
4146
- var adc = d.slice(0, 2).reduce(msbLsb);
4147
- return {
4148
- adc: adc,
4149
- voltage: adc * 0.00322265625
4150
- };
4151
- },
4152
- 'parse_fly': (frame) => {
4153
- let firmware = frame[2];
4154
- if(firmware > 13){ // firmware 14 and above
4155
- let frame_data = {};
4156
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4157
- if(!auto_check_interval){
4158
- frame_data.auto_check_interval = 'Disabled';
4159
- }else{
4160
- frame_data.auto_check_interval = auto_check_interval + " sec";
4161
- }
4162
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4163
- switch(frame[16]){
4164
- case 0:
4165
- frame_data.fsr = "+-6.114 V";
4166
- break;
4167
- case 1:
4168
- frame_data.fsr = "+-4.096 V";
4169
- break;
4170
- case 2:
4171
- frame_data.fsr = "+-2.048 V";
4172
- break;
4173
- case 3:
4174
- frame_data.fsr = "+-1.024 V";
4175
- break;
4176
- case 4:
4177
- frame_data.fsr = "+-0.512 V";
4178
- break;
4179
- case 5:
4180
- frame_data.fsr = "+-0.256 V";
4181
- break;
4182
- }
4183
- return {
4184
- 'firmware': frame[2],
4185
- 'fsr': frame_data.fsr,
4186
- 'boot_up_time': frame[17] + " sec",
4187
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4188
- 'auto_check_interval': frame_data.auto_check_interval,
4189
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4190
- 'always_on': frame_data.always_on,
4191
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4192
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4193
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4194
- 'hardware_id': frame.slice(37, 40),
4195
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4196
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4197
- 'machine_values': {
4198
- 'firmware': frame[2],
4199
- 'fsr': frame[16],
4200
- 'boot_up_time': frame[17],
4201
- 'adc_pin_reading': frame.slice(18, 20),
4202
- 'auto_check_interval': frame.slice(20, 22),
4203
- 'auto_check_percentage': frame.slice(22, 24),
4204
- 'always_on': frame[24],
4205
- 'calibration_one': frame.slice(25, 29),
4206
- 'calibration_two':frame.slice(29, 33),
4207
- 'calibration_three':frame.slice(33, 37),
4208
- 'hardware_id': frame.slice(37, 40),
4209
- 'report_rate': frame.slice(40, 44),
4210
- 'tx_life_counter': frame.slice(44, 48)
4211
- }
4212
- }
4213
- }
4214
- }
4215
- },
4216
4165
  '16': {
4217
4166
  name: 'Soil Moisture Sensor',
4218
4167
  parse: (d, payload) => {
@@ -4490,15 +4439,6 @@ function sensor_types(parent){
4490
4439
  };
4491
4440
  }
4492
4441
  },
4493
- '23': {
4494
- name: '2-Channel Thermocouple',
4495
- parse: (d) => {
4496
- return {
4497
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4498
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4499
- };
4500
- }
4501
- },
4502
4442
  '24': {
4503
4443
  name: 'Activity Detection',
4504
4444
  parse: (d) => {
@@ -4703,67 +4643,6 @@ function sensor_types(parent){
4703
4643
  };
4704
4644
  }
4705
4645
  },
4706
- '39': {
4707
- name: 'RTD Temperature Sensor',
4708
- parse: (payload, parsed, mac) => {
4709
- if(parsed.firmware > 5){
4710
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
4711
- let fault_status = '';
4712
- if (reserved === 0) {
4713
- fault_status = 'data_valid';
4714
- } else if (reserved === 15) {
4715
- fault_status = 'data_invalid';
4716
- } else {
4717
- const faultTypeBits = reserved & 0b00111100;
4718
- switch (faultTypeBits) {
4719
- case 32:
4720
- fault_status = 'ref_in_vbias';
4721
- break;
4722
- case 16:
4723
- fault_status = 'ref_in_force_close';
4724
- break;
4725
- case 8:
4726
- fault_status = 'rtd_in_force_open';
4727
- break;
4728
- case 4:
4729
- fault_status = 'over_under_voltage';
4730
- break;
4731
- }
4732
- }
4733
- return {
4734
- fault_status: fault_status,
4735
- temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4736
- };
4737
- } else {
4738
- return {
4739
- temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4740
- };
4741
- }
4742
- },
4743
- 'parse_fly': (frame) => {
4744
- let firmware = frame[2];
4745
- if(firmware > 5){
4746
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
4747
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4748
- return {
4749
- 'firmware': frame[2],
4750
- 'sensor_interface': interface_types[frame[12]],
4751
- 'sensor_type': rtd_types[frame[13]],
4752
- 'hardware_id': frame.slice(14, 17),
4753
- 'report_rate': frame.slice(17, 21).reduce(msbLsb) + " sec",
4754
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
4755
- 'machine_values': {
4756
- 'firmware': frame[2],
4757
- 'sensor_interface': frame[12],
4758
- 'sensor_type': frame[13],
4759
- 'hardware_id': frame.slice(14, 17),
4760
- 'report_rate': frame.slice(17, 21),
4761
- 'tx_life_counter': frame.slice(21, 25)
4762
- }
4763
- }
4764
- }
4765
- }
4766
- },
4767
4646
  '40': {
4768
4647
  name: 'Vibration w/Time Domain (partial support)',
4769
4648
  parse: (d, full) => {
@@ -4823,78 +4702,6 @@ function sensor_types(parent){
4823
4702
  };
4824
4703
  }
4825
4704
  },
4826
- '45': {
4827
- name: '16-Bit 1-Channel Passive 4-20mA Current Receiver',
4828
- parse: (d) => {
4829
- return {
4830
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4831
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
4832
- };
4833
- },
4834
- 'parse_fly': (frame) => {
4835
- let firmware = frame[2];
4836
- if(firmware > 13){ // firmware 14 and above
4837
- let frame_data = {};
4838
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4839
- if(!auto_check_interval){
4840
- frame_data.auto_check_interval = 'Disabled';
4841
- }else{
4842
- frame_data.auto_check_interval = auto_check_interval + " sec";
4843
- }
4844
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4845
- switch(frame[16]){
4846
- case 0:
4847
- frame_data.fsr = "+-6.114 V";
4848
- break;
4849
- case 1:
4850
- frame_data.fsr = "+-4.096 V";
4851
- break;
4852
- case 2:
4853
- frame_data.fsr = "+-2.048 V";
4854
- break;
4855
- case 3:
4856
- frame_data.fsr = "+-1.024 V";
4857
- break;
4858
- case 4:
4859
- frame_data.fsr = "+-0.512 V";
4860
- break;
4861
- case 5:
4862
- frame_data.fsr = "+-0.256 V";
4863
- break;
4864
- }
4865
- return {
4866
- 'firmware': frame[2],
4867
- 'fsr': frame_data.fsr,
4868
- 'boot_up_time': frame[17] + " sec",
4869
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4870
- 'auto_check_interval': frame_data.auto_check_interval,
4871
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4872
- 'always_on': frame_data.always_on,
4873
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4874
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4875
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4876
- 'hardware_id': frame.slice(37, 40),
4877
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4878
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4879
- 'machine_values': {
4880
- 'firmware': frame[2],
4881
- 'fsr': frame[16],
4882
- 'boot_up_time': frame[17],
4883
- 'adc_pin_reading': frame.slice(18, 20),
4884
- 'auto_check_interval': frame.slice(20, 22),
4885
- 'auto_check_percentage': frame.slice(22, 24),
4886
- 'always_on': frame[24],
4887
- 'calibration_one': frame.slice(25, 29),
4888
- 'calibration_two':frame.slice(29, 33),
4889
- 'calibration_three':frame.slice(33, 37),
4890
- 'hardware_id': frame.slice(37, 40),
4891
- 'report_rate': frame.slice(40, 44),
4892
- 'tx_life_counter': frame.slice(44, 48)
4893
- }
4894
- }
4895
- }
4896
- }
4897
- },
4898
4705
  '46': {
4899
4706
  name: 'Motion Detection Sensor',
4900
4707
  parse: (d) => {
@@ -4912,80 +4719,8 @@ function sensor_types(parent){
4912
4719
  };
4913
4720
  }
4914
4721
  },
4915
- '48': {
4916
- name: '16-Bit 1-Channel Active 4-20mA Current Loop Receiver',
4917
- parse: (d) => {
4918
- return {
4919
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4920
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
4921
- };
4922
- },
4923
- 'parse_fly': (frame) => {
4924
- let firmware = frame[2];
4925
- if(firmware > 13){ // firmware 14 and above
4926
- let frame_data = {};
4927
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4928
- if(!auto_check_interval){
4929
- frame_data.auto_check_interval = 'Disabled';
4930
- }else{
4931
- frame_data.auto_check_interval = auto_check_interval + " sec";
4932
- }
4933
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4934
- switch(frame[16]){
4935
- case 0:
4936
- frame_data.fsr = "+-6.114 V";
4937
- break;
4938
- case 1:
4939
- frame_data.fsr = "+-4.096 V";
4940
- break;
4941
- case 2:
4942
- frame_data.fsr = "+-2.048 V";
4943
- break;
4944
- case 3:
4945
- frame_data.fsr = "+-1.024 V";
4946
- break;
4947
- case 4:
4948
- frame_data.fsr = "+-0.512 V";
4949
- break;
4950
- case 5:
4951
- frame_data.fsr = "+-0.256 V";
4952
- break;
4953
- }
4954
- return {
4955
- 'firmware': frame[2],
4956
- 'fsr': frame_data.fsr,
4957
- 'boot_up_time': frame[17] + " sec",
4958
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4959
- 'auto_check_interval': frame_data.auto_check_interval,
4960
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4961
- 'always_on': frame_data.always_on,
4962
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4963
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4964
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4965
- 'hardware_id': frame.slice(37, 40),
4966
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4967
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4968
- 'machine_values': {
4969
- 'firmware': frame[2],
4970
- 'fsr': frame[16],
4971
- 'boot_up_time': frame[17],
4972
- 'adc_pin_reading': frame.slice(18, 20),
4973
- 'auto_check_interval': frame.slice(20, 22),
4974
- 'auto_check_percentage': frame.slice(22, 24),
4975
- 'always_on': frame[24],
4976
- 'calibration_one': frame.slice(25, 29),
4977
- 'calibration_two':frame.slice(29, 33),
4978
- 'calibration_three':frame.slice(33, 37),
4979
- 'hardware_id': frame.slice(37, 40),
4980
- 'report_rate': frame.slice(40, 44),
4981
- 'tx_life_counter': frame.slice(44, 48)
4982
- }
4983
- }
4984
- }
4985
- }
4986
- },
4987
- '49': {
4988
- name: '6-Channel Thermocouple',
4722
+ '49': {
4723
+ name: '6-Channel Thermocouple',
4989
4724
  parse: (d) => {
4990
4725
  return {
4991
4726
  channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
@@ -5047,149 +4782,6 @@ function sensor_types(parent){
5047
4782
  };
5048
4783
  }
5049
4784
  },
5050
- '52': {
5051
- name: '16-Bit 2-Channel 4-20mA',
5052
- parse: (d) => {
5053
- // This parser may be outdated if a customer has an issue check with Engineering
5054
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5055
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5056
- return {
5057
- adc1: adc1,
5058
- adc2: adc2,
5059
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
5060
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
5061
- };
5062
- },
5063
- 'parse_fly': (frame) => {
5064
- let firmware = frame[2];
5065
- let frame_data = {};
5066
- switch(frame[16]){
5067
- case 0:
5068
- frame_data.fsr = "+-6.114 V";
5069
- break;
5070
- case 1:
5071
- frame_data.fsr = "+-4.096 V";
5072
- break;
5073
- case 2:
5074
- frame_data.fsr = "+-2.048 V";
5075
- break;
5076
- case 3:
5077
- frame_data.fsr = "+-1.024 V";
5078
- break;
5079
- case 4:
5080
- frame_data.fsr = "+-0.512 V";
5081
- break;
5082
- case 5:
5083
- frame_data.fsr = "+-0.256 V";
5084
- break;
5085
- }
5086
- if(firmware > 18){ // firmware 14 and above
5087
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5088
- if(!auto_check_interval){
5089
- frame_data.auto_check_interval = 'Disabled';
5090
- }else{
5091
- frame_data.auto_check_interval = auto_check_interval + " sec";
5092
- }
5093
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5094
- return {
5095
- 'firmware': frame[2],
5096
- 'fsr': frame_data.fsr,
5097
- 'boot_up_time': frame[17] + " sec",
5098
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5099
- 'auto_check_interval': frame_data.auto_check_interval,
5100
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5101
- 'always_on': frame_data.always_on,
5102
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5103
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5104
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5105
- 'hardware_id': frame.slice(37, 40),
5106
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5107
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5108
- 'machine_values': {
5109
- 'firmware': frame[2],
5110
- 'fsr': frame[16],
5111
- 'boot_up_time': frame[17],
5112
- 'adc_pin_reading': frame.slice(18, 20),
5113
- 'auto_check_interval': frame.slice(20, 22),
5114
- 'auto_check_percentage': frame.slice(22, 24),
5115
- 'always_on': frame[24],
5116
- 'calibration_one': frame.slice(25, 29),
5117
- 'calibration_two':frame.slice(29, 33),
5118
- 'calibration_three':frame.slice(33, 37),
5119
- 'hardware_id': frame.slice(37, 40),
5120
- 'report_rate': frame.slice(40, 44),
5121
- 'tx_life_counter': frame.slice(44, 48)
5122
- }
5123
- }
5124
- }else if(firmware > 13){ // firmware 14 and above
5125
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5126
- if(!auto_check_interval){
5127
- frame_data.auto_check_interval = 'Disabled';
5128
- }else{
5129
- frame_data.auto_check_interval = auto_check_interval + " sec";
5130
- }
5131
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5132
- return {
5133
- 'firmware': frame[2],
5134
- 'fsr': frame_data.fsr,
5135
- 'boot_up_time': frame[17] + " sec",
5136
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5137
- 'auto_check_interval': frame_data.auto_check_interval,
5138
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5139
- 'always_on': frame_data.always_on,
5140
- 'hardware_id': frame.slice(25, 28),
5141
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
5142
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
5143
- 'machine_values': {
5144
- 'firmware': frame[2],
5145
- 'fsr': frame[16],
5146
- 'boot_up_time': frame[17],
5147
- 'adc_pin_reading': frame.slice(18, 20),
5148
- 'auto_check_interval': frame.slice(20, 22),
5149
- 'auto_check_percentage': frame.slice(22, 24),
5150
- 'always_on': frame[24],
5151
- 'calibration_one': frame.slice(25, 29),
5152
- 'calibration_two':frame.slice(29, 33),
5153
- 'calibration_three':frame.slice(33, 37),
5154
- 'hardware_id': frame.slice(37, 40),
5155
- 'report_rate': frame.slice(40, 44),
5156
- 'tx_life_counter': frame.slice(44, 48)
5157
- }
5158
- }
5159
- }
5160
- else if(firmware > 12){
5161
- return {
5162
- 'firmware': frame[2],
5163
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
5164
- 'fsr':frame_data.fsr,
5165
- 'boot_up_time': frame[17],
5166
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5167
- 'machine_values': {
5168
- 'firmware': frame[2],
5169
- 'report_rate': frame.slice(12, 16),
5170
- 'fsr':frame[16],
5171
- 'boot_up_time': frame[17],
5172
- 'adc_pin_reading': frame.slice(18, 20),
5173
- 'frame': frame
5174
- }
5175
- }
5176
- }else{
5177
- return {
5178
- 'firmware': frame[2],
5179
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
5180
- 'fsr':frame_data.fsr,
5181
- 'boot_up_time': frame[17],
5182
- 'machine_values': {
5183
- 'firmware': frame[2],
5184
- 'report_rate': frame.slice(12, 16),
5185
- 'fsr':frame[16],
5186
- 'boot_up_time': frame[17],
5187
- 'frame': frame
5188
- }
5189
- }
5190
- }
5191
- }
5192
- },
5193
4785
  '53': {
5194
4786
  'name': 'Air Quality CO2 and Particulate Matter Sensor',
5195
4787
  parse: (d) => {
@@ -5211,275 +4803,49 @@ function sensor_types(parent){
5211
4803
  };
5212
4804
  }
5213
4805
  },
5214
- '54': {
5215
- name: '2-Channel RTD Temperature Sensor',
5216
- parse: (payload, parsed, mac) => {
5217
- if(parsed.firmware > 5){
5218
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
5219
- let fault_status = '';
5220
- if (reserved === 0) {
5221
- fault_status = 'data_valid';
5222
- } else if (reserved === 15) {
5223
- fault_status = 'data_invalid';
5224
- } else {
5225
- const fault_bits = (reserved >> 2) & 0b00001111;
5226
- switch (fault_bits) {
5227
- case 8:
5228
- fault_status = 'ref_in_vbias';
5229
- break;
5230
- case 4:
5231
- fault_status = 'ref_in_force_close';
5232
- break;
5233
- case 2:
5234
- fault_status = 'rtd_in_force_open';
5235
- break;
5236
- case 1:
5237
- fault_status = 'over_under_voltage';
5238
- break;
5239
- }
5240
- const channel_bits = reserved & 0b00000011;
5241
- switch (channel_bits) {
5242
- case 1:
5243
- fault_status = fault_status + '_ch1';
5244
- break;
5245
- case 2:
5246
- fault_status = fault_status + '_ch2';
5247
- break;
5248
- }
5249
- }
5250
- return {
5251
- fault_status: fault_status,
5252
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5253
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
5254
- };
5255
- } else {
5256
- return {
5257
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5258
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
5259
- };
5260
- }
5261
- },
5262
- 'parse_fly': (frame) => {
5263
- let firmware = frame[2];
5264
- if(firmware > 5){
5265
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
5266
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
5267
- return {
5268
- 'firmware': frame[2],
5269
- 'sensor_interface_ch1': interface_types[frame[12]],
5270
- 'sensor_type_ch1': rtd_types[frame[13]],
5271
- 'sensor_interface_ch2': interface_types[frame[14]],
5272
- 'sensor_type_ch2': rtd_types[frame[15]],
5273
- 'hardware_id': frame.slice(16, 19),
5274
- 'report_rate': frame.slice(19, 23).reduce(msbLsb) + " sec",
5275
- 'tx_life_counter': frame.slice(23, 27).reduce(msbLsb),
5276
- 'machine_values': {
5277
- 'firmware': frame[2],
5278
- 'sensor_interface_ch1': frame[12],
5279
- 'sensor_type_ch1': frame[13],
5280
- 'sensor_interface_ch2': frame[14],
5281
- 'sensor_type_ch2': frame[15],
5282
- 'hardware_id': frame.slice(16, 19),
5283
- 'report_rate': frame.slice(19, 23),
5284
- 'tx_life_counter': frame.slice(23, 27)
5285
- }
5286
- }
5287
- }
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
+ };
5288
4821
  }
5289
4822
  },
5290
- '55': {
5291
- name: '3-Channel RTD Temperature Sensor',
5292
- parse: (payload, parsed, mac) => {
5293
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
5294
- let fault_status = '';
5295
- if (reserved === 0) {
5296
- fault_status = 'data_valid';
5297
- } else if (reserved === 15) {
5298
- fault_status = 'data_invalid';
5299
- } else {
5300
- const fault_bits = (reserved >> 2) & 0b00001111;
5301
- switch (fault_bits) {
5302
- case 8:
5303
- fault_status = 'ref_in_vbias';
5304
- break;
5305
- case 4:
5306
- fault_status = 'ref_in_force_close';
5307
- break;
5308
- case 2:
5309
- fault_status = 'rtd_in_force_open';
5310
- break;
5311
- case 1:
5312
- fault_status = 'over_under_voltage';
5313
- break;
5314
- }
5315
- const channel_bits = reserved & 0b00000011;
5316
- switch (channel_bits) {
5317
- case 1:
5318
- fault_status = fault_status + '_ch1';
5319
- break;
5320
- case 2:
5321
- fault_status = fault_status + '_ch2';
5322
- break;
5323
- case 3:
5324
- fault_status = fault_status + '_ch3';
5325
- break;
5326
- }
5327
- }
4823
+ '60': {
4824
+ name: 'Air Velocity and Precision Pressure & Temperature Sensor',
4825
+ parse: (d) => {
5328
4826
  return {
5329
- fault_status: fault_status,
5330
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5331
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
5332
- 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
5333
4830
  };
5334
- },
5335
- 'parse_fly': (frame) => {
5336
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
5337
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4831
+ }
4832
+ },
4833
+
4834
+ '61': {
4835
+ name: 'pH and Temperature Sensor',
4836
+ parse: (d) => {
5338
4837
  return {
5339
- 'firmware': frame[2],
5340
- 'sensor_interface_ch1': interface_types[frame[12]],
5341
- 'sensor_type_ch1': rtd_types[frame[13]],
5342
- 'sensor_interface_ch2': interface_types[frame[14]],
5343
- 'sensor_type_ch2': rtd_types[frame[15]],
5344
- 'sensor_interface_ch3': interface_types[frame[16]],
5345
- 'sensor_type_ch3': rtd_types[frame[17]],
5346
- 'hardware_id': frame.slice(18, 21),
5347
- 'report_rate': frame.slice(21, 25).reduce(msbLsb) + " sec",
5348
- 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
5349
- 'machine_values': {
5350
- 'firmware': frame[2],
5351
- 'sensor_interface_ch1': frame[12],
5352
- 'sensor_type_ch1': frame[13],
5353
- 'sensor_interface_ch2': frame[14],
5354
- 'sensor_type_ch2': frame[15],
5355
- 'sensor_interface_ch3': frame[16],
5356
- 'sensor_type_ch3': frame[17],
5357
- 'hardware_id': frame.slice(18, 21),
5358
- 'report_rate': frame.slice(21, 25),
5359
- 'tx_life_counter': frame.slice(25, 29)
5360
- }
5361
- }
4838
+ pH: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
4839
+ Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
4840
+ };
5362
4841
  }
5363
4842
  },
5364
- '56': {
5365
- name: '2 Channel 0-10VDC Receiver',
4843
+ '62': {
4844
+ name: 'ORP and Temperature Sensor',
5366
4845
  parse: (d) => {
5367
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5368
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5369
4846
  return {
5370
- adc1: adc1,
5371
- adc2: adc2,
5372
- VDC1: parseFloat((adc1 * 0.00034122).toFixed(2)),
5373
- VDC2: parseFloat((adc2 * 0.00034122).toFixed(2))
5374
- };
5375
- },
5376
- 'parse_fly': (frame) => {
5377
- let firmware = frame[2];
5378
- if(firmware > 13){ // firmware 14 and above
5379
- let frame_data = {};
5380
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5381
- if(!auto_check_interval){
5382
- frame_data.auto_check_interval = 'Disabled';
5383
- }else{
5384
- frame_data.auto_check_interval = auto_check_interval + " sec";
5385
- }
5386
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5387
- switch(frame[16]){
5388
- case 0:
5389
- frame_data.fsr = "+-6.114 V";
5390
- break;
5391
- case 1:
5392
- frame_data.fsr = "+-4.096 V";
5393
- break;
5394
- case 2:
5395
- frame_data.fsr = "+-2.048 V";
5396
- break;
5397
- case 3:
5398
- frame_data.fsr = "+-1.024 V";
5399
- break;
5400
- case 4:
5401
- frame_data.fsr = "+-0.512 V";
5402
- break;
5403
- case 5:
5404
- frame_data.fsr = "+-0.256 V";
5405
- break;
5406
- }
5407
- return {
5408
- 'firmware': frame[2],
5409
- 'fsr': frame_data.fsr,
5410
- 'boot_up_time': frame[17] + " sec",
5411
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5412
- 'auto_check_interval': frame_data.auto_check_interval,
5413
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5414
- 'always_on': frame_data.always_on,
5415
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5416
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5417
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5418
- 'hardware_id': frame.slice(37, 40),
5419
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5420
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5421
- 'machine_values': {
5422
- 'firmware': frame[2],
5423
- 'fsr': frame[16],
5424
- 'boot_up_time': frame[17],
5425
- 'adc_pin_reading': frame.slice(18, 20),
5426
- 'auto_check_interval': frame.slice(20, 22),
5427
- 'auto_check_percentage': frame.slice(22, 24),
5428
- 'always_on': frame[24],
5429
- 'calibration_one': frame.slice(25, 29),
5430
- 'calibration_two':frame.slice(29, 33),
5431
- 'calibration_three':frame.slice(33, 37),
5432
- 'hardware_id': frame.slice(37, 40),
5433
- 'report_rate': frame.slice(40, 44),
5434
- 'tx_life_counter': frame.slice(44, 48)
5435
- }
5436
- }
5437
- }
5438
- }
5439
- },
5440
- '58': {
5441
- name: 'Tank Level v3',
5442
- parse: (d) => {
5443
- return {
5444
- filtered_range: d.slice(0, 2).reduce(msbLsb),
5445
- long_range_algorithm: d.slice(2, 4).reduce(msbLsb),
5446
- second_chance: d.slice(4, 6).reduce(msbLsb),
5447
- second_reading: d.slice(6, 8).reduce(msbLsb),
5448
- compare_reading: d.slice(8, 10).reduce(msbLsb),
5449
- short_range_algorithm: d.slice(10, 12).reduce(msbLsb),
5450
- trusted_reading: d.slice(12, 14).reduce(msbLsb),
5451
- final_filter: d.slice(14, 16).reduce(msbLsb),
5452
- raw_final: d.slice(16, 18).reduce(msbLsb),
5453
- final_index: d.slice(18, 20).reduce(msbLsb),
5454
- };
5455
- }
5456
- },
5457
- '60': {
5458
- name: 'Air Velocity and Precision Pressure & Temperature Sensor',
5459
- parse: (d) => {
5460
- return {
5461
- pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 1000,
5462
- temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
5463
- Air_Velocity: signInt(d.slice(6, 8).reduce(msbLsb), 16) / 1000
5464
- };
5465
- }
5466
- },
5467
-
5468
- '61': {
5469
- name: 'pH and Temperature Sensor',
5470
- parse: (d) => {
5471
- return {
5472
- pH: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
5473
- Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
5474
- };
5475
- }
5476
- },
5477
- '62': {
5478
- name: 'ORP and Temperature Sensor',
5479
- parse: (d) => {
5480
- return {
5481
- ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5482
- 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
5483
4849
  };
5484
4850
  }
5485
4851
  },
@@ -5660,79 +5026,6 @@ function sensor_types(parent){
5660
5026
  }
5661
5027
  }
5662
5028
  },
5663
- '75': {
5664
- name: 'Siemens Air Velocity Probe',
5665
- parse: (d) => {
5666
- return {
5667
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5668
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
5669
- Velocity: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100
5670
- };
5671
- },
5672
- 'parse_fly': (frame) => {
5673
- let firmware = frame[2];
5674
- if(firmware > 13){ // firmware 14 and above
5675
- let frame_data = {};
5676
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5677
- if(!auto_check_interval){
5678
- frame_data.auto_check_interval = 'Disabled';
5679
- }else{
5680
- frame_data.auto_check_interval = auto_check_interval + " sec";
5681
- }
5682
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5683
- switch(frame[16]){
5684
- case 0:
5685
- frame_data.fsr = "+-6.114 V";
5686
- break;
5687
- case 1:
5688
- frame_data.fsr = "+-4.096 V";
5689
- break;
5690
- case 2:
5691
- frame_data.fsr = "+-2.048 V";
5692
- break;
5693
- case 3:
5694
- frame_data.fsr = "+-1.024 V";
5695
- break;
5696
- case 4:
5697
- frame_data.fsr = "+-0.512 V";
5698
- break;
5699
- case 5:
5700
- frame_data.fsr = "+-0.256 V";
5701
- break;
5702
- }
5703
- return {
5704
- 'firmware': frame[2],
5705
- 'fsr': frame_data.fsr,
5706
- 'boot_up_time': frame[17] + " sec",
5707
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5708
- 'auto_check_interval': frame_data.auto_check_interval,
5709
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5710
- 'always_on': frame_data.always_on,
5711
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5712
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5713
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5714
- 'hardware_id': frame.slice(37, 40),
5715
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5716
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5717
- 'machine_values': {
5718
- 'firmware': frame[2],
5719
- 'fsr': frame[16],
5720
- 'boot_up_time': frame[17],
5721
- 'adc_pin_reading': frame.slice(18, 20),
5722
- 'auto_check_interval': frame.slice(20, 22),
5723
- 'auto_check_percentage': frame.slice(22, 24),
5724
- 'always_on': frame[24],
5725
- 'calibration_one': frame.slice(25, 29),
5726
- 'calibration_two':frame.slice(29, 33),
5727
- 'calibration_three':frame.slice(33, 37),
5728
- 'hardware_id': frame.slice(37, 40),
5729
- 'report_rate': frame.slice(40, 44),
5730
- 'tx_life_counter': frame.slice(44, 48)
5731
- }
5732
- }
5733
- }
5734
- }
5735
- },
5736
5029
  '76': {
5737
5030
  name: 'Wireless CO Sensor',
5738
5031
  parse: (d) => {
@@ -8213,369 +7506,30 @@ function sensor_types(parent){
8213
7506
  'firmware': frame[2],
8214
7507
  'sampling_rate': frame[16] + 'Hz',
8215
7508
  'current_calibration': (frame.slice(17, 21).reduce(msbLsb)) * 10,
8216
- 'deadband': frame.slice(21, 23).reduce(msbLsb) + 'mA',
8217
- 'max_supported_ct': frame.slice(23, 27).reduce(msbLsb),
8218
- 'hardware_id': frame.slice(27, 30),
8219
- 'report_rate': frame.slice(30, 34).reduce(msbLsb) + "sec",
8220
- 'tx_life_counter': frame.slice(34, 38).reduce(msbLsb),
8221
- 'machine_values': {
8222
- 'firmware': frame[2],
8223
- 'sampling_rate': frame[16],
8224
- 'current_calibration': frame.slice(17, 21),
8225
- 'deadband': frame.slice(21, 23),
8226
- 'max_supported_ct': frame.slice(23, 27),
8227
- 'hardware_id': frame.slice(27, 30),
8228
- 'report_rate': frame.slice(30, 34),
8229
- 'tx_life_counter': frame.slice(34, 38)
8230
- }
8231
- }
8232
- }
8233
- },
8234
- '88': {
8235
- name: '1 Channel Ultrasound Vibration Sensor',
8236
- parse: (d) => {
8237
- return {
8238
- raw_adc: d.slice(0, 2).reduce(msbLsb),
8239
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
8240
- db: d.slice(4, 6).reduce(msbLsb) / 100
8241
- };
8242
- },
8243
- 'parse_fly': (frame) => {
8244
- let firmware = frame[2];
8245
- let frame_data = {};
8246
- switch(frame[16]){
8247
- case 0:
8248
- frame_data.fsr = "+-6.114 V";
8249
- break;
8250
- case 1:
8251
- frame_data.fsr = "+-4.096 V";
8252
- break;
8253
- case 2:
8254
- frame_data.fsr = "+-2.048 V";
8255
- break;
8256
- case 3:
8257
- frame_data.fsr = "+-1.024 V";
8258
- break;
8259
- case 4:
8260
- frame_data.fsr = "+-0.512 V";
8261
- break;
8262
- case 5:
8263
- frame_data.fsr = "+-0.256 V";
8264
- break;
8265
- }
8266
- if(firmware > 13){ // firmware 14 and above
8267
- let frame_data = {};
8268
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8269
- if(!auto_check_interval){
8270
- frame_data.auto_check_interval = 'Disabled';
8271
- }else{
8272
- frame_data.auto_check_interval = auto_check_interval + " sec";
8273
- }
8274
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8275
- return {
8276
- 'firmware': frame[2],
8277
- 'fsr': frame_data.fsr,
8278
- 'boot_up_time': frame[17] + " sec",
8279
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8280
- 'auto_check_interval': frame_data.auto_check_interval,
8281
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8282
- 'always_on': frame_data.always_on,
8283
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8284
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8285
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8286
- 'hardware_id': frame.slice(37, 40),
8287
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8288
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8289
- 'machine_values': {
8290
- 'firmware': frame[2],
8291
- 'fsr': frame[16],
8292
- 'boot_up_time': frame[17],
8293
- 'adc_pin_reading': frame.slice(18, 20),
8294
- 'auto_check_interval': frame.slice(20, 22),
8295
- 'auto_check_percentage': frame.slice(22, 24),
8296
- 'always_on': frame[24],
8297
- 'calibration_one': frame.slice(25, 29),
8298
- 'calibration_two':frame.slice(29, 33),
8299
- 'calibration_three':frame.slice(33, 37),
8300
- 'hardware_id': frame.slice(37, 40),
8301
- 'report_rate': frame.slice(40, 44),
8302
- 'tx_life_counter': frame.slice(44, 48)
8303
- }
8304
- }
8305
- }else{
8306
- return {
8307
- 'firmware': frame[2],
8308
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
8309
- 'fsr':frame_data.fsr,
8310
- 'boot_up_time': frame[17],
8311
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8312
- 'machine_values': {
8313
- 'firmware': frame[2],
8314
- 'report_rate': frame.slice(12, 16),
8315
- 'fsr':frame[16],
8316
- 'boot_up_time': frame[17],
8317
- // 'adc_pin_reading': frame.slice(18, 20),
8318
- 'frame': frame
8319
- }
8320
- }
8321
- }
8322
- }
8323
- },
8324
- '89': {
8325
- name: '2 Channel Ultrasound Vibration Sensor',
8326
- parse: (d) => {
8327
- return {
8328
- c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
8329
- c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
8330
- c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
8331
- c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
8332
- c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
8333
- c2_db: d.slice(10, 12).reduce(msbLsb) / 100
8334
- };
8335
- },
8336
- 'parse_fly': (frame) => {
8337
- let firmware = frame[2];
8338
- let frame_data = {};
8339
- switch(frame[16]){
8340
- case 0:
8341
- frame_data.fsr = "+-6.114 V";
8342
- break;
8343
- case 1:
8344
- frame_data.fsr = "+-4.096 V";
8345
- break;
8346
- case 2:
8347
- frame_data.fsr = "+-2.048 V";
8348
- break;
8349
- case 3:
8350
- frame_data.fsr = "+-1.024 V";
8351
- break;
8352
- case 4:
8353
- frame_data.fsr = "+-0.512 V";
8354
- break;
8355
- case 5:
8356
- frame_data.fsr = "+-0.256 V";
8357
- break;
8358
- }
8359
- if(firmware > 13){ // firmware 14 and above
8360
- let frame_data = {};
8361
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8362
- if(!auto_check_interval){
8363
- frame_data.auto_check_interval = 'Disabled';
8364
- }else{
8365
- frame_data.auto_check_interval = auto_check_interval + " sec";
8366
- }
8367
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8368
- return {
8369
- 'firmware': frame[2],
8370
- 'fsr': frame_data.fsr,
8371
- 'boot_up_time': frame[17] + " sec",
8372
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8373
- 'auto_check_interval': frame_data.auto_check_interval,
8374
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8375
- 'always_on': frame_data.always_on,
8376
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8377
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8378
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8379
- 'hardware_id': frame.slice(37, 40),
8380
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8381
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8382
- 'machine_values': {
8383
- 'firmware': frame[2],
8384
- 'fsr': frame[16],
8385
- 'boot_up_time': frame[17],
8386
- 'adc_pin_reading': frame.slice(18, 20),
8387
- 'auto_check_interval': frame.slice(20, 22),
8388
- 'auto_check_percentage': frame.slice(22, 24),
8389
- 'always_on': frame[24],
8390
- 'calibration_one': frame.slice(25, 29),
8391
- 'calibration_two':frame.slice(29, 33),
8392
- 'calibration_three':frame.slice(33, 37),
8393
- 'hardware_id': frame.slice(37, 40),
8394
- 'report_rate': frame.slice(40, 44),
8395
- 'tx_life_counter': frame.slice(44, 48)
8396
- }
8397
- }
8398
- }else{
8399
- return {
8400
- 'firmware': frame[2],
8401
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
8402
- 'fsr':frame_data.fsr,
8403
- 'boot_up_time': frame[17],
8404
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8405
- 'machine_values': {
8406
- 'firmware': frame[2],
8407
- 'report_rate': frame.slice(12, 16),
8408
- 'fsr':frame[16],
8409
- 'boot_up_time': frame[17],
8410
- // 'adc_pin_reading': frame.slice(18, 20),
8411
- 'frame': frame
8412
- }
8413
- }
8414
- }
8415
- }
8416
- },
8417
- '90': {
8418
- name: 'DC Current Sensor',
8419
- parse: (d) => {
8420
- return {
8421
- raw_adc: d.slice(0, 2).reduce(msbLsb),
8422
- amps: d.slice(2, 6).reduce(msbLsb) / 10,
8423
- };
8424
- },
8425
- 'parse_fly': (frame) => {
8426
- let firmware = frame[2];
8427
- if(firmware > 13){ // firmware 14 and above
8428
- let frame_data = {};
8429
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8430
- if(!auto_check_interval){
8431
- frame_data.auto_check_interval = 'Disabled';
8432
- }else{
8433
- frame_data.auto_check_interval = auto_check_interval + " sec";
8434
- }
8435
- frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
8436
- switch(frame[16]){
8437
- case 0:
8438
- frame_data.fsr = "+-6.114 V";
8439
- break;
8440
- case 1:
8441
- frame_data.fsr = "+-4.096 V";
8442
- break;
8443
- case 2:
8444
- frame_data.fsr = "+-2.048 V";
8445
- break;
8446
- case 3:
8447
- frame_data.fsr = "+-1.024 V";
8448
- break;
8449
- case 4:
8450
- frame_data.fsr = "+-0.512 V";
8451
- break;
8452
- case 5:
8453
- frame_data.fsr = "+-0.256 V";
8454
- break;
8455
- }
8456
- return {
8457
- 'firmware': frame[2],
8458
- 'fsr': frame_data.fsr,
8459
- 'boot_up_time': frame[17] + " sec",
8460
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8461
- 'auto_check_interval': frame_data.auto_check_interval,
8462
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8463
- 'always_on': frame_data.always_on,
8464
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8465
- 'hardware_id': frame.slice(29, 32),
8466
- 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
8467
- 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
8468
- 'machine_values': {
8469
- 'firmware': frame[2],
8470
- 'fsr': frame[16],
8471
- 'boot_up_time': frame[17],
8472
- 'adc_pin_reading': frame.slice(18, 20),
8473
- 'auto_check_interval': frame.slice(20, 22),
8474
- 'auto_check_threshold': frame.slice(22, 24),
8475
- 'always_on': frame[24],
8476
- 'calibration_one': frame.slice(25, 29),
8477
- 'hardware_id': frame.slice(29, 32),
8478
- 'report_rate': frame.slice(32, 36),
8479
- 'tx_life_counter': frame.slice(36, 40)
8480
- }
8481
- }
8482
- }
8483
- }
8484
- },
8485
- '91': {
8486
- name: 'Wireless Air Velocity Sensor HVAC',
8487
- parse: (d) => {
8488
- return {
8489
- velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
8490
- };
8491
- }
8492
- },
8493
- '92': {
8494
- name: 'Sound Sensor',
8495
- parse: (d) => {
8496
- return {
8497
- sound: signInt(d[3], 8)/100
8498
- };
8499
- }
8500
- },
8501
- '95': {
8502
- name: '16-Bit 1-Channel 0-24VDC Receiver',
8503
- parse: (d) => {
8504
- return {
8505
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
8506
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
8507
- };
8508
- },
8509
- 'parse_fly': (frame) => {
8510
- let firmware = frame[2];
8511
- if(firmware > 13){ // firmware 14 and above
8512
- let frame_data = {};
8513
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8514
- if(!auto_check_interval){
8515
- frame_data.auto_check_interval = 'Disabled';
8516
- }else{
8517
- frame_data.auto_check_interval = auto_check_interval + " sec";
8518
- }
8519
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8520
- switch(frame[16]){
8521
- case 0:
8522
- frame_data.fsr = "+-6.114 V";
8523
- break;
8524
- case 1:
8525
- frame_data.fsr = "+-4.096 V";
8526
- break;
8527
- case 2:
8528
- frame_data.fsr = "+-2.048 V";
8529
- break;
8530
- case 3:
8531
- frame_data.fsr = "+-1.024 V";
8532
- break;
8533
- case 4:
8534
- frame_data.fsr = "+-0.512 V";
8535
- break;
8536
- case 5:
8537
- frame_data.fsr = "+-0.256 V";
8538
- break;
8539
- }
8540
- 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': {
8541
7515
  'firmware': frame[2],
8542
- 'fsr': frame_data.fsr,
8543
- 'boot_up_time': frame[17] + " sec",
8544
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8545
- 'auto_check_interval': frame_data.auto_check_interval,
8546
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8547
- 'always_on': frame_data.always_on,
8548
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8549
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8550
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8551
- 'hardware_id': frame.slice(37, 40),
8552
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8553
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8554
- 'machine_values': {
8555
- 'firmware': frame[2],
8556
- 'fsr': frame[16],
8557
- 'boot_up_time': frame[17],
8558
- 'adc_pin_reading': frame.slice(18, 20),
8559
- 'auto_check_interval': frame.slice(20, 22),
8560
- 'auto_check_percentage': frame.slice(22, 24),
8561
- 'always_on': frame[24],
8562
- 'calibration_one': frame.slice(25, 29),
8563
- 'calibration_two':frame.slice(29, 33),
8564
- 'calibration_three':frame.slice(33, 37),
8565
- 'hardware_id': frame.slice(37, 40),
8566
- 'report_rate': frame.slice(40, 44),
8567
- 'tx_life_counter': frame.slice(44, 48)
8568
- }
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)
8569
7523
  }
8570
7524
  }
8571
7525
  }
8572
7526
  },
8573
- '96': {
8574
- name: '16-Bit 1-Channel 0-48VDC Receiver',
7527
+ '90': {
7528
+ name: 'DC Current Sensor',
8575
7529
  parse: (d) => {
8576
7530
  return {
8577
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
8578
- 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,
8579
7533
  };
8580
7534
  },
8581
7535
  'parse_fly': (frame) => {
@@ -8588,7 +7542,7 @@ function sensor_types(parent){
8588
7542
  }else{
8589
7543
  frame_data.auto_check_interval = auto_check_interval + " sec";
8590
7544
  }
8591
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
7545
+ frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
8592
7546
  switch(frame[16]){
8593
7547
  case 0:
8594
7548
  frame_data.fsr = "+-6.114 V";
@@ -8618,30 +7572,42 @@ function sensor_types(parent){
8618
7572
  'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8619
7573
  'always_on': frame_data.always_on,
8620
7574
  'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8621
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8622
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8623
- 'hardware_id': frame.slice(37, 40),
8624
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8625
- '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),
8626
7578
  'machine_values': {
8627
7579
  'firmware': frame[2],
8628
7580
  'fsr': frame[16],
8629
7581
  'boot_up_time': frame[17],
8630
7582
  'adc_pin_reading': frame.slice(18, 20),
8631
7583
  'auto_check_interval': frame.slice(20, 22),
8632
- 'auto_check_percentage': frame.slice(22, 24),
7584
+ 'auto_check_threshold': frame.slice(22, 24),
8633
7585
  'always_on': frame[24],
8634
7586
  'calibration_one': frame.slice(25, 29),
8635
- 'calibration_two':frame.slice(29, 33),
8636
- 'calibration_three':frame.slice(33, 37),
8637
- 'hardware_id': frame.slice(37, 40),
8638
- 'report_rate': frame.slice(40, 44),
8639
- '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)
8640
7590
  }
8641
7591
  }
8642
7592
  }
8643
7593
  }
8644
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
+ },
8645
7611
  '97': {
8646
7612
  name: 'One channel Dynamic Ultrasound vibration Sensor',
8647
7613
  parse: (payload, parsed, mac) => {
@@ -9245,92 +8211,6 @@ function sensor_types(parent){
9245
8211
  }
9246
8212
  }
9247
8213
  },
9248
- '107': {
9249
- name: '16-Bit 4-Channel 4-20mA',
9250
- parse: (d) => {
9251
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
9252
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
9253
- var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
9254
- var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
9255
- var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
9256
- var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
9257
- var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
9258
- var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
9259
- return {
9260
- adc1: adc1,
9261
- adc2: adc2,
9262
- adc3: adc3,
9263
- adc4: adc4,
9264
- ma1: ma1,
9265
- ma2: ma2,
9266
- ma3: ma3,
9267
- ma4: ma4
9268
- };
9269
- },
9270
- 'parse_fly': (frame) => {
9271
- let firmware = frame[2];
9272
- if(firmware > 13){ // firmware 14 and above
9273
- let frame_data = {};
9274
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
9275
- if(!auto_check_interval){
9276
- frame_data.auto_check_interval = 'Disabled';
9277
- }else{
9278
- frame_data.auto_check_interval = auto_check_interval + " sec";
9279
- }
9280
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
9281
- switch(frame[16]){
9282
- case 0:
9283
- frame_data.fsr = "+-6.114 V";
9284
- break;
9285
- case 1:
9286
- frame_data.fsr = "+-4.096 V";
9287
- break;
9288
- case 2:
9289
- frame_data.fsr = "+-2.048 V";
9290
- break;
9291
- case 3:
9292
- frame_data.fsr = "+-1.024 V";
9293
- break;
9294
- case 4:
9295
- frame_data.fsr = "+-0.512 V";
9296
- break;
9297
- case 5:
9298
- frame_data.fsr = "+-0.256 V";
9299
- break;
9300
- }
9301
- return {
9302
- 'firmware': frame[2],
9303
- 'fsr': frame_data.fsr,
9304
- 'boot_up_time': frame[17] + " sec",
9305
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
9306
- 'auto_check_interval': frame_data.auto_check_interval,
9307
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
9308
- 'always_on': frame_data.always_on,
9309
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
9310
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
9311
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
9312
- 'hardware_id': frame.slice(37, 40),
9313
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
9314
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
9315
- 'machine_values': {
9316
- 'firmware': frame[2],
9317
- 'fsr': frame[16],
9318
- 'boot_up_time': frame[17],
9319
- 'adc_pin_reading': frame.slice(18, 20),
9320
- 'auto_check_interval': frame.slice(20, 22),
9321
- 'auto_check_percentage': frame.slice(22, 24),
9322
- 'always_on': frame[24],
9323
- 'calibration_one': frame.slice(25, 29),
9324
- 'calibration_two':frame.slice(29, 33),
9325
- 'calibration_three':frame.slice(33, 37),
9326
- 'hardware_id': frame.slice(37, 40),
9327
- 'report_rate': frame.slice(40, 44),
9328
- 'tx_life_counter': frame.slice(44, 48)
9329
- }
9330
- }
9331
- }
9332
- }
9333
- },
9334
8214
  '108': {
9335
8215
  name: 'Machine Uptime Monitoring Sensor',
9336
8216
  parse: (d, payload) => {
@@ -11443,134 +10323,29 @@ function sensor_types(parent){
11443
10323
  'sample_rate': frame.slice(17, 21).reduce(msbLsb),
11444
10324
  'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
11445
10325
  }
11446
- }
11447
- }
11448
- },
11449
- '121':{
11450
- name: 'Wireless Wood Moisture Sensor',
11451
- parse: (d) => {
11452
- return {
11453
- wood_type: d[0],
11454
- temperature: signInt(d.slice(1, 3).reduce(msbLsb), 16) / 100,
11455
- humidity: d.slice(3, 5).reduce(msbLsb) / 100,
11456
- wood_moisture: d.slice(5, 7).reduce(msbLsb) / 100,
11457
- wood_resistance: (d.slice(7, 15)).reduce(msbLsb) / 100
11458
- };
11459
- },
11460
- 'parse_fly': (frame) => {
11461
- return {
11462
- 'hardware_id': frame.slice(12, 15),
11463
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
11464
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
11465
- 'machine_values': {
11466
- 'hardware_id': frame.slice(12, 15),
11467
- 'sample_rate': frame.slice(15, 19),
11468
- 'tx_life_counter': frame.slice(19, 23)
11469
- }
11470
- }
11471
- }
11472
- },
11473
- '122': {
11474
- name: 'Wireless 4-20mA Current Splitter',
11475
- parse: (d) => {
11476
- // This parser may be outdated if a customer has an issue check with Engineering
11477
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
11478
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
11479
- return {
11480
- adc1: adc1,
11481
- adc2: adc2,
11482
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
11483
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
11484
- };
11485
- },
11486
- 'parse_fly': (frame) => {
11487
- let frame_data = {};
11488
- switch(frame[16]){
11489
- case 0:
11490
- frame_data.fsr = "+-6.114 V";
11491
- break;
11492
- case 1:
11493
- frame_data.fsr = "+-4.096 V";
11494
- break;
11495
- case 2:
11496
- frame_data.fsr = "+-2.048 V";
11497
- break;
11498
- case 3:
11499
- frame_data.fsr = "+-1.024 V";
11500
- break;
11501
- case 4:
11502
- frame_data.fsr = "+-0.512 V";
11503
- break;
11504
- case 5:
11505
- frame_data.fsr = "+-0.256 V";
11506
- break;
11507
- }
11508
- if(frame[2]>13){ // firmware 14 and above
11509
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
11510
- if(!auto_check_interval){
11511
- frame_data.auto_check_interval = 'Disabled';
11512
- }else{
11513
- frame_data.auto_check_interval = auto_check_interval + " sec";
11514
- }
11515
- return {
11516
- 'firmware': frame[2],
11517
- 'fsr': frame_data.fsr,
11518
- 'boot_up_time': frame[17] + " sec",
11519
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
11520
- 'auto_check_interval': frame_data.auto_check_interval,
11521
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
11522
- 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
11523
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
11524
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
11525
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
11526
- 'hardware_id': frame.slice(37, 40),
11527
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
11528
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
11529
- 'machine_values': {
11530
- 'firmware': frame[2],
11531
- 'fsr': frame[16],
11532
- 'boot_up_time': frame[17],
11533
- 'adc_pin_reading': frame.slice(18, 20),
11534
- 'auto_check_interval': frame.slice(20, 22),
11535
- 'auto_check_percentage': frame.slice(22, 24),
11536
- 'always_on': frame[24],
11537
- 'calibration_one': frame.slice(25, 29),
11538
- 'calibration_two':frame.slice(29, 33),
11539
- 'calibration_three':frame.slice(33, 37),
11540
- 'hardware_id': frame.slice(37, 40),
11541
- 'report_rate': frame.slice(40, 44),
11542
- 'tx_life_counter': frame.slice(44, 48)
11543
- }
11544
- }
11545
- }else if(frame[2]>12){
11546
- return {
11547
- 'firmware': frame[2],
11548
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
11549
- 'fsr':frame_data.fsr,
11550
- 'boot_up_time': frame[17],
11551
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
11552
- 'machine_values': {
11553
- 'firmware': frame[2],
11554
- 'report_rate': frame.slice(12, 16),
11555
- 'fsr':frame[16],
11556
- 'boot_up_time': frame[17],
11557
- 'adc_pin_reading': frame.slice(18, 20),
11558
- 'frame': frame
11559
- }
11560
- }
11561
- }else{
11562
- return {
11563
- 'firmware': frame[2],
11564
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
11565
- 'fsr':frame_data.fsr,
11566
- 'boot_up_time': frame[17],
11567
- 'machine_values': {
11568
- 'firmware': frame[2],
11569
- 'report_rate': frame.slice(12, 16),
11570
- 'fsr':frame[16],
11571
- 'boot_up_time': frame[17],
11572
- 'frame': frame
11573
- }
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)
11574
10349
  }
11575
10350
  }
11576
10351
  }
@@ -14929,178 +13704,6 @@ function sensor_types(parent){
14929
13704
  }
14930
13705
  }
14931
13706
  },
14932
- '539': {
14933
- name: 'RS485 Modbus Wireless Converter',
14934
- parse: (d) => {
14935
- return {
14936
- subdevice_type: d[0],
14937
- number_of_registers: d[1],
14938
- status_24_31: d[2],
14939
- status_16_23: d[3],
14940
- status_8_15: d[4],
14941
- status_0_7: d[5],
14942
- // TODO we can automatically determine how many registers are here based on the number_of_registers and create data objects appropriately
14943
- // r1: d.slice(2,4),
14944
- // r2: d.slice(4,6),
14945
- // r3: d.slice(6,8),
14946
- // r4: d.slice(8,10),
14947
- data: d.slice(6)
14948
- };
14949
- },
14950
- },
14951
- '540': {
14952
- name: 'Wireless Ultrasonic Flow Meter FD-Q32C',
14953
- parse: (d) => {
14954
- return {
14955
- raw_adc: d.slice(0, 2).reduce(msbLsb),
14956
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
14957
- flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
14958
- };
14959
- },
14960
- 'parse_fly': (frame) => {
14961
- let firmware = frame[2];
14962
- if(firmware > 13){ // firmware 14 and above
14963
- let frame_data = {};
14964
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
14965
- if(!auto_check_interval){
14966
- frame_data.auto_check_interval = 'Disabled';
14967
- }else{
14968
- frame_data.auto_check_interval = auto_check_interval + " sec";
14969
- }
14970
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
14971
- switch(frame[16]){
14972
- case 0:
14973
- frame_data.fsr = "+-6.114 V";
14974
- break;
14975
- case 1:
14976
- frame_data.fsr = "+-4.096 V";
14977
- break;
14978
- case 2:
14979
- frame_data.fsr = "+-2.048 V";
14980
- break;
14981
- case 3:
14982
- frame_data.fsr = "+-1.024 V";
14983
- break;
14984
- case 4:
14985
- frame_data.fsr = "+-0.512 V";
14986
- break;
14987
- case 5:
14988
- frame_data.fsr = "+-0.256 V";
14989
- break;
14990
- }
14991
- return {
14992
- 'firmware': frame[2],
14993
- 'fsr': frame_data.fsr,
14994
- 'boot_up_time': frame[17] + " sec",
14995
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
14996
- 'auto_check_interval': frame_data.auto_check_interval,
14997
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
14998
- 'always_on': frame_data.always_on,
14999
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15000
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15001
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15002
- 'hardware_id': frame.slice(37, 40),
15003
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
15004
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
15005
- 'machine_values': {
15006
- 'firmware': frame[2],
15007
- 'fsr': frame[16],
15008
- 'boot_up_time': frame[17],
15009
- 'adc_pin_reading': frame.slice(18, 20),
15010
- 'auto_check_interval': frame.slice(20, 22),
15011
- 'auto_check_percentage': frame.slice(22, 24),
15012
- 'always_on': frame[24],
15013
- 'calibration_one': frame.slice(25, 29),
15014
- 'calibration_two':frame.slice(29, 33),
15015
- 'calibration_three':frame.slice(33, 37),
15016
- 'hardware_id': frame.slice(37, 40),
15017
- 'report_rate': frame.slice(40, 44),
15018
- 'tx_life_counter': frame.slice(44, 48)
15019
- }
15020
- }
15021
- }
15022
- }
15023
- },
15024
- '541': {
15025
- name: 'Custom Inline Flow Sensor',
15026
- parse: (d) => {
15027
- return {
15028
- adc1: signInt(d.slice(0, 2).reduce(msbLsb), 16),
15029
- adc2: signInt(d.slice(2, 4).reduce(msbLsb), 16),
15030
- mA1: signInt(d.slice(4, 6).reduce(msbLsb), 16)/100,
15031
- mA2: signInt(d.slice(6, 8).reduce(msbLsb), 16)/100,
15032
- flow_1: signInt(d.slice(8, 12).reduce(msbLsb), 32)/100,
15033
- flow_2:signInt(d.slice(12, 16).reduce(msbLsb), 32)/100
15034
- };
15035
- },
15036
- 'parse_fly': (frame) => {
15037
- let firmware = frame[2];
15038
- if(firmware > 13){ // firmware 14 and above
15039
- let frame_data = {};
15040
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15041
- if(!auto_check_interval){
15042
- frame_data.auto_check_interval = 'Disabled';
15043
- }else{
15044
- frame_data.auto_check_interval = auto_check_interval + " sec";
15045
- }
15046
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
15047
- switch(frame[16]){
15048
- case 0:
15049
- frame_data.fsr = "+-6.114 V";
15050
- break;
15051
- case 1:
15052
- frame_data.fsr = "+-4.096 V";
15053
- break;
15054
- case 2:
15055
- frame_data.fsr = "+-2.048 V";
15056
- break;
15057
- case 3:
15058
- frame_data.fsr = "+-1.024 V";
15059
- break;
15060
- case 4:
15061
- frame_data.fsr = "+-0.512 V";
15062
- break;
15063
- case 5:
15064
- frame_data.fsr = "+-0.256 V";
15065
- break;
15066
- }
15067
- return {
15068
- 'firmware': frame[2],
15069
- 'fsr': frame_data.fsr,
15070
- 'boot_up_time': frame[17] + " sec",
15071
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15072
- 'auto_check_interval': frame_data.auto_check_interval,
15073
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15074
- 'always_on': frame_data.always_on,
15075
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15076
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15077
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15078
- 'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
15079
- 'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
15080
- 'hardware_id': frame.slice(41, 44),
15081
- 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
15082
- 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
15083
- 'machine_values': {
15084
- 'firmware': frame[2],
15085
- 'fsr': frame[16],
15086
- 'boot_up_time': frame[17],
15087
- 'adc_pin_reading': frame.slice(18, 20),
15088
- 'auto_check_interval': frame.slice(20, 22),
15089
- 'auto_check_percentage': frame.slice(22, 24),
15090
- 'always_on': frame[24],
15091
- 'calibration_one': frame.slice(25, 29),
15092
- 'calibration_two':frame.slice(29, 33),
15093
- 'calibration_three':frame.slice(33, 37),
15094
- 'min_flow_rate':frame.slice(37, 39),
15095
- 'max_flow_rate':frame.slice(39, 41),
15096
- 'hardware_id': frame.slice(41, 44),
15097
- 'report_rate': frame.slice(44, 48),
15098
- 'tx_life_counter': frame.slice(48, 52)
15099
- }
15100
- }
15101
- }
15102
- }
15103
- },
15104
13707
  '542': {
15105
13708
  name: 'Custom LWGY Flow Sensor',
15106
13709
  parse: (d) => {
@@ -15602,167 +14205,6 @@ function sensor_types(parent){
15602
14205
  }
15603
14206
  }
15604
14207
  },
15605
- '545': {
15606
- name: 'Fox Thermal Flow Sensor',
15607
- parse: (payload, parsed, mac) => {
15608
- let sensor_status = '';
15609
- const error_message = [];
15610
- if(payload[8] & 1){
15611
- error_message.push('pwr_up');
15612
- }
15613
- if(payload[8] & 2){
15614
- error_message.push('flw_hi_lim');
15615
- }
15616
- if(payload[8] & 4){
15617
- error_message.push('flw_lo_lim');
15618
- }
15619
- if(payload[8] & 8){
15620
- error_message.push('tmp_hi_lim');
15621
- }
15622
- if(payload[8] & 16){
15623
- error_message.push('tmp_lo_lim');
15624
- }
15625
- if(payload[8] & 32){
15626
- error_message.push('sensor_oor');
15627
- }
15628
- if(payload[8] & 64){
15629
- error_message.push('gas_mix_err');
15630
- }
15631
- if(payload[8] & 128){
15632
- error_message.push('inc_set');
15633
- }
15634
- if(error_message.length === 0){
15635
- sensor_status = 'ready';
15636
- } else {
15637
- sensor_status = error_message.join(', ');
15638
- }
15639
-
15640
- const calv_value = payload.slice(9, 11).reduce(msbLsb) / 100;
15641
- let cal_val = '';
15642
- if(calv_value < 0.80){
15643
- cal_val = 'pass';
15644
- } else if(calv_value <= 1.0){
15645
- cal_val = 'warning';
15646
- } else {
15647
- cal_val = 'fail';
15648
- }
15649
-
15650
- return {
15651
- sensor_status: sensor_status,
15652
- calcv_value: payload.slice(9, 11).reduce(msbLsb) / 100,
15653
- calcv_status: cal_val,
15654
- flow: payload.slice(11, 15).reduce(msbLsb)/100,
15655
- ghv: payload.slice(15, 19).reduce(msbLsb)/100,
15656
- total_flow: payload.slice(19, 27).reduce(msbLsb)/100,
15657
- temperature: payload.slice(27,29).reduce(msbLsb)/100,
15658
- density: payload.slice(29, 31).reduce(msbLsb)/100
15659
- };
15660
- },
15661
- 'parse_fly': (frame) => {
15662
- let frame_data = {};
15663
- switch(frame[12]){
15664
- case 0:
15665
- frame_data.flow_unit = 'scf_m';
15666
- break;
15667
- case 1:
15668
- frame_data.flow_unit = 'scf_h';
15669
- break;
15670
- case 2:
15671
- frame_data.flow_unit = 'nm3_h';
15672
- break;
15673
- case 3:
15674
- frame_data.flow_unit = 'nm3_m';
15675
- break;
15676
- case 4:
15677
- frame_data.flow_unit = 'kg_h';
15678
- break;
15679
- case 5:
15680
- frame_data.flow_unit = 'kg_m';
15681
- break;
15682
- case 6:
15683
- frame_data.flow_unit = 'kg_s';
15684
- break;
15685
- case 7:
15686
- frame_data.flow_unit = 'lbs_h';
15687
- break;
15688
- case 8:
15689
- frame_data.flow_unit = 'lbs_m';
15690
- break;
15691
- case 9:
15692
- frame_data.flow_unit = 'lbs_s';
15693
- break;
15694
- case 10:
15695
- frame_data.flow_unit = 'nlp_h';
15696
- break;
15697
- case 11:
15698
- frame_data.flow_unit = 'nlp_m';
15699
- break;
15700
- case 12:
15701
- frame_data.flow_unit = 'mmscf_d';
15702
- break;
15703
- case 13:
15704
- frame_data.flow_unit = 'lbs_d';
15705
- break;
15706
- case 14:
15707
- frame_data.flow_unit = 'slp_m';
15708
- break;
15709
- case 15:
15710
- frame_data.flow_unit = 'nlp_s';
15711
- break;
15712
- case 16:
15713
- frame_data.flow_unit = 'mscf_d';
15714
- break;
15715
- case 17:
15716
- frame_data.flow_unit = 'sm3_h';
15717
- break;
15718
- case 18:
15719
- frame_data.flow_unit = 'mt_h';
15720
- break;
15721
- case 19:
15722
- frame_data.flow_unit = 'nm3_d';
15723
- break;
15724
- case 20:
15725
- frame_data.flow_unit = 'mmscf_m';
15726
- break;
15727
- case 21:
15728
- frame_data.flow_unit = 'scf_d';
15729
- break;
15730
- case 22:
15731
- frame_data.flow_unit = 'mcf_d';
15732
- break;
15733
- case 23:
15734
- frame_data.flow_unit = 'sm3_m';
15735
- break;
15736
- case 24:
15737
- frame_data.flow_unit = 'sm3_d';
15738
- break;
15739
- }
15740
- switch(frame[13]){
15741
- case 0:
15742
- frame_data.temperature_unit = 'F';
15743
- break;
15744
- case 1:
15745
- frame_data.temperature_unit = 'C';
15746
- break;
15747
- }
15748
- return {
15749
- 'firmware': frame[2],
15750
- 'flow_unit': frame_data.flow_unit,
15751
- 'temperature_unit': frame_data.temperature_unit,
15752
- 'hardware_id': frame.slice(14, 17),
15753
- 'report_rate': frame.slice(17, 21).reduce(msbLsb),
15754
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
15755
- 'machine_values': {
15756
- 'firmware': frame[2],
15757
- 'flow_unit': frame[12],
15758
- 'temperature_unit': frame[13],
15759
- 'hardware_id': frame.slice(14, 17),
15760
- 'report_rate': frame.slice(17, 21),
15761
- 'tx_life_counter': frame.slice(21, 25)
15762
- }
15763
- }
15764
- }
15765
- },
15766
14208
  '1010': {
15767
14209
  name: 'RS232 Wireless Converter',
15768
14210
  parse: (d) => {