@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.
- package/lib/WirelessGateway.js +141 -1699
- package/lib/sensors/107.js +452 -0
- package/lib/sensors/111.js +19 -2
- package/lib/sensors/12.js +405 -0
- package/lib/sensors/122.js +461 -0
- package/lib/sensors/125.js +1 -1
- package/lib/sensors/126.js +1 -1
- package/lib/sensors/128.js +1 -1
- package/lib/sensors/15.js +439 -0
- package/lib/sensors/23.js +404 -0
- package/lib/sensors/39.js +324 -0
- package/lib/sensors/4.js +403 -0
- package/lib/sensors/45.js +438 -0
- package/lib/sensors/48.js +438 -0
- package/lib/sensors/52.js +508 -0
- package/lib/sensors/539.js +931 -0
- package/lib/sensors/54.js +380 -0
- package/lib/sensors/540.js +439 -0
- package/lib/sensors/541.js +476 -0
- package/lib/sensors/545.js +478 -0
- package/lib/sensors/55.js +419 -0
- package/lib/sensors/554.js +1 -1
- package/lib/sensors/56.js +442 -0
- package/lib/sensors/75.js +469 -0
- package/lib/sensors/88.js +456 -0
- package/lib/sensors/89.js +459 -0
- package/lib/sensors/90.js +404 -0
- package/lib/sensors/95.js +438 -0
- package/lib/sensors/96.js +438 -0
- package/package.json +1 -1
- package/wireless.html +97 -12
- package/wireless.js +59 -13
package/lib/WirelessGateway.js
CHANGED
|
@@ -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
|
-
'
|
|
4916
|
-
name: '
|
|
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
|
-
'
|
|
5215
|
-
name: '
|
|
5216
|
-
parse: (
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
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
|
-
'
|
|
5291
|
-
name: '
|
|
5292
|
-
parse: (
|
|
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
|
-
|
|
5330
|
-
|
|
5331
|
-
|
|
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
|
-
|
|
5336
|
-
|
|
5337
|
-
|
|
4831
|
+
}
|
|
4832
|
+
},
|
|
4833
|
+
|
|
4834
|
+
'61': {
|
|
4835
|
+
name: 'pH and Temperature Sensor',
|
|
4836
|
+
parse: (d) => {
|
|
5338
4837
|
return {
|
|
5339
|
-
|
|
5340
|
-
|
|
5341
|
-
|
|
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
|
-
'
|
|
5365
|
-
name: '
|
|
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
|
-
|
|
5371
|
-
|
|
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
|
-
'
|
|
8543
|
-
'
|
|
8544
|
-
'
|
|
8545
|
-
'
|
|
8546
|
-
'
|
|
8547
|
-
'
|
|
8548
|
-
'
|
|
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
|
-
'
|
|
8574
|
-
name: '
|
|
7527
|
+
'90': {
|
|
7528
|
+
name: 'DC Current Sensor',
|
|
8575
7529
|
parse: (d) => {
|
|
8576
7530
|
return {
|
|
8577
|
-
|
|
8578
|
-
|
|
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
|
-
'
|
|
8622
|
-
'
|
|
8623
|
-
'
|
|
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
|
-
'
|
|
7584
|
+
'auto_check_threshold': frame.slice(22, 24),
|
|
8633
7585
|
'always_on': frame[24],
|
|
8634
7586
|
'calibration_one': frame.slice(25, 29),
|
|
8635
|
-
'
|
|
8636
|
-
'
|
|
8637
|
-
'
|
|
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) => {
|