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

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.
@@ -1063,6 +1063,9 @@ module.exports = class WirelessSensor{
1063
1063
  if(value.html_id){
1064
1064
  html_map[value.html_id] = key;
1065
1065
  }
1066
+ // else{
1067
+ // html_map[key] = key;
1068
+ // }
1066
1069
  }
1067
1070
  const response = {};
1068
1071
  for (let [key, value] of Object.entries(configs)) {
@@ -1072,6 +1075,8 @@ module.exports = class WirelessSensor{
1072
1075
  let active_key = '';
1073
1076
  if(is_node_id_or_delay){
1074
1077
  active_key = 'node_id_delay_active';
1078
+ }else if(Object.hasOwn(html_map, key) && Object.hasOwn(config_map[html_map[key]], 'html_active_id')){
1079
+ active_key = config_map[html_map[key]].html_active_id;
1075
1080
  }else{
1076
1081
  active_key = key+'_active';
1077
1082
  }
@@ -1615,18 +1620,18 @@ module.exports = class WirelessSensor{
1615
1620
  delete this.fly_101_in_progress;
1616
1621
  return this.config_send(sensor_mac, packet);
1617
1622
  }
1618
- config_set_roll_threshold_47(sensor_mac, threshold){
1619
- console.log('config_set_roll_threshold_47');
1620
- var packet = [244, 1, 0, 0, 47, 0, threshold];
1621
- console.log(packet);
1622
- return this.config_send(sensor_mac, packet);
1623
- }
1624
- config_set_pitch_threshold_47(sensor_mac, threshold){
1625
- console.log('config_set_pitch_threshold_47');
1626
- var packet = [244, 3, 0, 0, 47, 0, threshold];
1627
- console.log(packet);
1628
- return this.config_send(sensor_mac, packet);
1629
- }
1623
+ // config_set_roll_threshold_47(sensor_mac, threshold){
1624
+ // console.log('config_set_roll_threshold_47');
1625
+ // var packet = [244, 1, 0, 0, 47, 0, threshold];
1626
+ // console.log(packet);
1627
+ // return this.config_send(sensor_mac, packet);
1628
+ // }
1629
+ // config_set_pitch_threshold_47(sensor_mac, threshold){
1630
+ // console.log('config_set_pitch_threshold_47');
1631
+ // var packet = [244, 3, 0, 0, 47, 0, threshold];
1632
+ // console.log(packet);
1633
+ // return this.config_send(sensor_mac, packet);
1634
+ // }
1630
1635
  config_set_accelerometer_threshold_108(sensor_mac, value){
1631
1636
  console.log('config_set_accelerometer_threshold_108');
1632
1637
  var packet = [244, 32, 0, 0, 0, value];
@@ -1943,21 +1948,21 @@ module.exports = class WirelessSensor{
1943
1948
  console.log(packet);
1944
1949
  return this.config_send(sensor_mac, packet);
1945
1950
  }
1946
- config_set_number_of_regs_to_rd_539(sensor_mac, value){
1947
- console.log('config_set_number_of_regs_to_rd_539');
1948
- var packet = [244, 51, 0, 0, 23, value];
1949
- console.log(packet);
1950
- return this.config_send(sensor_mac, packet);
1951
- }
1952
- config_set_reg_539(sensor_mac, value, register){
1953
- console.log('config_set_reg_539');
1954
- // var packet = [244, 51, 0, 0, 23, ]
1955
- var packet = [244, 30 + register, 0, 0, 23];
1956
- let value_reg = int2Bytes((value), 2);
1957
- packet.push(...value_reg);
1958
- console.log(packet);
1959
- return this.config_send(sensor_mac, packet);
1960
- }
1951
+ // config_set_number_of_regs_to_rd_539(sensor_mac, value){
1952
+ // console.log('config_set_number_of_regs_to_rd_539');
1953
+ // var packet = [244, 51, 0, 0, 23, value];
1954
+ // console.log(packet);
1955
+ // return this.config_send(sensor_mac, packet);
1956
+ // }
1957
+ // config_set_reg_539(sensor_mac, value, register){
1958
+ // console.log('config_set_reg_539');
1959
+ // // var packet = [244, 51, 0, 0, 23, ]
1960
+ // var packet = [244, 30 + register, 0, 0, 23];
1961
+ // let value_reg = int2Bytes((value), 2);
1962
+ // packet.push(...value_reg);
1963
+ // console.log(packet);
1964
+ // return this.config_send(sensor_mac, packet);
1965
+ // }
1961
1966
  config_set_all_register_data_539(sensor_mac, number_of_registers, registers){
1962
1967
  console.log('config_set_all_registers_539');
1963
1968
  // registers is an arbitrary number of 16 bit integers
@@ -2736,23 +2741,23 @@ module.exports = class WirelessSensor{
2736
2741
  console.log(packet);
2737
2742
  return this.config_send(sensor_mac, packet);
2738
2743
  }
2739
- config_set_oxygen_rate_536(sensor_mac, value){
2740
- console.log('config_set_oxygen_rate_536');
2741
- var packet = [244, 32, 0, 0, 0, value];
2742
- console.log(packet);
2743
- return this.config_send(sensor_mac, packet);
2744
- }
2745
- config_set_oxygen_timeout_536(sensor_mac, value){
2746
- console.log('config_set_oxygen_timeout_536');
2747
- var packet = [244, 37, 0, 0, 0];
2748
- let value_ = int2Bytes(value, 2);
2749
- packet.push(...value_);
2750
- console.log(packet);
2751
- return this.config_send(sensor_mac, packet);
2752
- }
2744
+ // config_set_oxygen_rate_536(sensor_mac, value){
2745
+ // console.log('config_set_oxygen_rate_536');
2746
+ // var packet = [244, 32, 0, 0, 0, value];
2747
+ // console.log(packet);
2748
+ // return this.config_send(sensor_mac, packet);
2749
+ // }
2750
+ // config_set_oxygen_timeout_536(sensor_mac, value){
2751
+ // console.log('config_set_oxygen_timeout_536');
2752
+ // var packet = [244, 37, 0, 0, 0];
2753
+ // let value_ = int2Bytes(value, 2);
2754
+ // packet.push(...value_);
2755
+ // console.log(packet);
2756
+ // return this.config_send(sensor_mac, packet);
2757
+ // }
2753
2758
  config_set_oxygen_max_threshold_s1_536(sensor_mac, value){
2754
2759
  console.log('config_set_oxygen_max_threshold_s1_536');
2755
- value = value * 100;
2760
+ //value = value * 100;
2756
2761
  var packet = [244, 34, 0, 0, 0, 1];
2757
2762
  let value_ = int2Bytes(value, 2);
2758
2763
  packet.push(...value_);
@@ -2761,7 +2766,7 @@ module.exports = class WirelessSensor{
2761
2766
  }
2762
2767
  config_set_oxygen_max_threshold_s2_536(sensor_mac, value){
2763
2768
  console.log('config_set_oxygen_max_threshold_s2_536');
2764
- value = value * 100;
2769
+ //value = value * 100;
2765
2770
  var packet = [244, 34, 0, 0, 0, 2];
2766
2771
  let value_ = int2Bytes(value, 2);
2767
2772
  packet.push(...value_);
@@ -2769,7 +2774,7 @@ module.exports = class WirelessSensor{
2769
2774
  return this.config_send(sensor_mac, packet);
2770
2775
  }
2771
2776
  config_set_oxygen_max_threshold_s3_536(sensor_mac, value){
2772
- value = value * 100;
2777
+ //value = value * 100;
2773
2778
  console.log('config_set_oxygen_max_threshold_s3_536');
2774
2779
  var packet = [244, 34, 0, 0, 0, 3];
2775
2780
  let value_ = int2Bytes(value, 2);
@@ -2778,7 +2783,7 @@ module.exports = class WirelessSensor{
2778
2783
  return this.config_send(sensor_mac, packet);
2779
2784
  }
2780
2785
  config_set_oxygen_max_threshold_s4_536(sensor_mac, value){
2781
- value = value * 100;
2786
+ //value = value * 100;
2782
2787
  console.log('config_set_oxygen_max_threshold_s4_536');
2783
2788
  var packet = [244, 34, 0, 0, 0, 4];
2784
2789
  let value_ = int2Bytes(value, 2);
@@ -2788,7 +2793,7 @@ module.exports = class WirelessSensor{
2788
2793
  }
2789
2794
  config_set_oxygen_min_threshold_s1_536(sensor_mac, value){
2790
2795
  console.log('config_set_oxygen_min_threshold_s1_536');
2791
- value = value * 100;
2796
+ //value = value * 100;
2792
2797
  var packet = [244, 39, 0, 0, 0, 1];
2793
2798
  let value_ = int2Bytes(value, 2);
2794
2799
  packet.push(...value_);
@@ -2797,7 +2802,7 @@ module.exports = class WirelessSensor{
2797
2802
  }
2798
2803
  config_set_oxygen_min_threshold_s2_536(sensor_mac, value){
2799
2804
  console.log('config_set_oxygen_min_threshold_s2_536');
2800
- value = value * 100;
2805
+ //value = value * 100;
2801
2806
  var packet = [244, 39, 0, 0, 0, 2];
2802
2807
  let value_ = int2Bytes(value, 2);
2803
2808
  packet.push(...value_);
@@ -2805,7 +2810,7 @@ module.exports = class WirelessSensor{
2805
2810
  return this.config_send(sensor_mac, packet);
2806
2811
  }
2807
2812
  config_set_oxygen_min_threshold_s3_536(sensor_mac, value){
2808
- value = value * 100;
2813
+ //value = value * 100;
2809
2814
  console.log('config_set_oxygen_min_threshold_s3_536');
2810
2815
  var packet = [244, 39, 0, 0, 0, 3];
2811
2816
  let value_ = int2Bytes(value, 2);
@@ -2814,7 +2819,7 @@ module.exports = class WirelessSensor{
2814
2819
  return this.config_send(sensor_mac, packet);
2815
2820
  }
2816
2821
  config_set_oxygen_min_threshold_s4_536(sensor_mac, value){
2817
- value = value * 100;
2822
+ //value = value * 100;
2818
2823
  console.log('config_set_oxygen_min_threshold_s4_536');
2819
2824
  var packet = [244, 39, 0, 0, 0, 4];
2820
2825
  let value_ = int2Bytes(value, 2);
@@ -3040,6 +3045,126 @@ module.exports = class WirelessSensor{
3040
3045
  console.log(packet);
3041
3046
  return this.config_send(sensor_mac, packet);
3042
3047
  }
3048
+ config_set_reset_total_545(sensor_mac){
3049
+ console.log('config_set_reset_total_545');
3050
+ var packet = [244, 36, 0, 0, 0];
3051
+ console.log(packet);
3052
+ return this.config_send(sensor_mac, packet);
3053
+ }
3054
+ config_set_cal_validation_545(sensor_mac){
3055
+ console.log('config_set_cal_validation_545');
3056
+ var packet = [244, 39, 0, 0, 0];
3057
+ console.log(packet);
3058
+ return this.config_send(sensor_mac, packet);
3059
+ }
3060
+ config_set_boot_time_4(sensor_mac, value){
3061
+ console.log('config_set_boot_time_4');
3062
+ var packet = [244, 97, 0, 0, 23];
3063
+ let value_ = int2Bytes(value, 2);
3064
+ packet.push(...value_);
3065
+ console.log(packet);
3066
+ return this.config_send(sensor_mac, packet);
3067
+ }
3068
+ config_set_operation_mode_4(sensor_mac, value){
3069
+ console.log('config_set_operation_mode_4');
3070
+ var packet = [244, 93, 0, 0, 23, value];
3071
+ console.log(packet);
3072
+ return this.config_send(sensor_mac, packet);
3073
+ }
3074
+ config_set_lube_on_time_1_105(sensor_mac, value){
3075
+ console.log('config_set_lube_on_time_1_105');
3076
+ var packet = [244, 87, 0, 0, 88, 1, value];
3077
+ console.log(packet);
3078
+ return this.config_send(sensor_mac, packet);
3079
+ }
3080
+ config_set_lube_on_time_2_105(sensor_mac, value){
3081
+ console.log('config_set_lube_on_time_2_105');
3082
+ var packet = [244, 87, 0, 0, 88, 2, value];
3083
+ console.log(packet);
3084
+ return this.config_send(sensor_mac, packet);
3085
+ }
3086
+ config_set_faulty_level_105(sensor_mac, value){
3087
+ console.log('config_set_faulty_level_105');
3088
+ var packet = [244, 83, 0, 0, 88, value];
3089
+ console.log(packet);
3090
+ return this.config_send(sensor_mac, packet);
3091
+ }
3092
+ config_set_friction_level_105(sensor_mac, value){
3093
+ console.log('config_set_friction_level_105');
3094
+ var packet = [244, 85, 0, 0, 88, value];
3095
+ console.log(packet);
3096
+ return this.config_send(sensor_mac, packet);
3097
+ }
3098
+ config_set_vibration_mode_115(sensor_mac, value){
3099
+ console.log('config_set_vibration_mode_115');
3100
+ var packet = [244, 32, 0, 0, 0, value];
3101
+ console.log(packet);
3102
+ return this.config_send(sensor_mac, packet);
3103
+ }
3104
+ config_set_offset_mode_115(sensor_mac, value){
3105
+ console.log('config_set_offset_mode_115');
3106
+ var packet = [244, 34, 0, 0, 0, value];
3107
+ console.log(packet);
3108
+ return this.config_send(sensor_mac, packet);
3109
+ }
3110
+ config_set_flow_sensor_baud_rate_536(sensor_mac, value){
3111
+ console.log('config_set_flow_sensor_baud_rate_536');
3112
+ var packet = [244, 55, 0, 0, 0];
3113
+ let baudrate = int2Bytes((value), 4);
3114
+ packet.push(...baudrate);
3115
+ console.log(packet);
3116
+ return this.config_send(sensor_mac, packet);
3117
+ }
3118
+ config_set_oxygen_sensor_baud_rate_536(sensor_mac, value){
3119
+ console.log('config_set_oxygen_sensor_baud_rate_536');
3120
+ var packet = [244, 61, 0, 0, 0];
3121
+ let baudrate = int2Bytes((value), 4);
3122
+ packet.push(...baudrate);
3123
+ console.log(packet);
3124
+ return this.config_send(sensor_mac, packet);
3125
+ }
3126
+ config_set_flow_sensor_parity_bits_536(sensor_mac, value){
3127
+ console.log('config_set_flow_sensor_parity_bits_536');
3128
+ var packet = [244, 57, 0, 0, 0, value];
3129
+ console.log(packet);
3130
+ return this.config_send(sensor_mac, packet);
3131
+ }
3132
+ config_set_oxygen_sensor_parity_bits_536(sensor_mac, value){
3133
+ console.log('config_set_oxygen_sensor_parity_bits_536');
3134
+ var packet = [244, 63, 0, 0, 0, value];
3135
+ console.log(packet);
3136
+ return this.config_send(sensor_mac, packet);
3137
+ }
3138
+ config_set_flow_sensor_stop_bits_536(sensor_mac, value){
3139
+ console.log('config_set_flow_sensor_stop_bits_536');
3140
+ var packet = [244, 59, 0, 0, 0, value];
3141
+ console.log(packet);
3142
+ return this.config_send(sensor_mac, packet);
3143
+ }
3144
+ config_set_oxygen_sensor_stop_bits_536(sensor_mac, value){
3145
+ console.log('config_set_oxygen_sensor_stop_bits_536');
3146
+ var packet = [244, 65, 0, 0, 0, value];
3147
+ console.log(packet);
3148
+ return this.config_send(sensor_mac, packet);
3149
+ }
3150
+ config_set_tilt_mode_47(sensor_mac, value){
3151
+ console.log('config_set_tilt_mode_47');
3152
+ var packet = [244, 34, 0, 0 ,0, value];
3153
+ console.log(packet);
3154
+ return this.config_send(sensor_mac, packet);
3155
+ }
3156
+ config_set_tilt_angle_47(sensor_mac, value){
3157
+ console.log('config_set_tilt_angle_47');
3158
+ var packet = [244, 32, 0, 0, 0, value];
3159
+ console.log(packet);
3160
+ return this.config_send(sensor_mac, packet);
3161
+ }
3162
+ config_set_tilt_timer_47(sensor_mac, value){
3163
+ console.log('config_set_tilt_timer_47');
3164
+ var packet = [244, 36, 0, 0, 0, value];
3165
+ console.log(packet);
3166
+ return this.config_send(sensor_mac, packet);
3167
+ }
3043
3168
  config_get_delay(sensor_mac){
3044
3169
  return new Promise((fulfill, reject) => {
3045
3170
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -4039,14 +4164,6 @@ function sensor_types(parent){
4039
4164
  };
4040
4165
  }
4041
4166
  },
4042
- '4': {
4043
- name: 'Thermocouple',
4044
- parse: (d) => {
4045
- return {
4046
- temperature: signInt(d.slice(0, 4).reduce(msbLsb), 32)/100,
4047
- };
4048
- }
4049
- },
4050
4167
  '5': {
4051
4168
  name: 'Gyro/Magneto/Temperature',
4052
4169
  parse: (d) => {
@@ -4126,16 +4243,6 @@ function sensor_types(parent){
4126
4243
  };
4127
4244
  }
4128
4245
  },
4129
- '12': {
4130
- name: '3-Channel Thermocouple',
4131
- parse: (d) => {
4132
- return {
4133
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4134
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4135
- channel_3: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100
4136
- };
4137
- }
4138
- },
4139
4246
  '13': {
4140
4247
  name: 'Current Monitor',
4141
4248
  parse: (d) => {
@@ -4154,79 +4261,6 @@ function sensor_types(parent){
4154
4261
  };
4155
4262
  }
4156
4263
  },
4157
- '15': {
4158
- name: '10-Bit 1-Channel ADC',
4159
- parse: (d) => {
4160
- var adc = d.slice(0, 2).reduce(msbLsb);
4161
- return {
4162
- adc: adc,
4163
- voltage: adc * 0.00322265625
4164
- };
4165
- },
4166
- 'parse_fly': (frame) => {
4167
- let firmware = frame[2];
4168
- if(firmware > 13){ // firmware 14 and above
4169
- let frame_data = {};
4170
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4171
- if(!auto_check_interval){
4172
- frame_data.auto_check_interval = 'Disabled';
4173
- }else{
4174
- frame_data.auto_check_interval = auto_check_interval + " sec";
4175
- }
4176
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4177
- switch(frame[16]){
4178
- case 0:
4179
- frame_data.fsr = "+-6.114 V";
4180
- break;
4181
- case 1:
4182
- frame_data.fsr = "+-4.096 V";
4183
- break;
4184
- case 2:
4185
- frame_data.fsr = "+-2.048 V";
4186
- break;
4187
- case 3:
4188
- frame_data.fsr = "+-1.024 V";
4189
- break;
4190
- case 4:
4191
- frame_data.fsr = "+-0.512 V";
4192
- break;
4193
- case 5:
4194
- frame_data.fsr = "+-0.256 V";
4195
- break;
4196
- }
4197
- return {
4198
- 'firmware': frame[2],
4199
- 'fsr': frame_data.fsr,
4200
- 'boot_up_time': frame[17] + " sec",
4201
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4202
- 'auto_check_interval': frame_data.auto_check_interval,
4203
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4204
- 'always_on': frame_data.always_on,
4205
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4206
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4207
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4208
- 'hardware_id': frame.slice(37, 40),
4209
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4210
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4211
- 'machine_values': {
4212
- 'firmware': frame[2],
4213
- 'fsr': frame[16],
4214
- 'boot_up_time': frame[17],
4215
- 'adc_pin_reading': frame.slice(18, 20),
4216
- 'auto_check_interval': frame.slice(20, 22),
4217
- 'auto_check_percentage': frame.slice(22, 24),
4218
- 'always_on': frame[24],
4219
- 'calibration_one': frame.slice(25, 29),
4220
- 'calibration_two':frame.slice(29, 33),
4221
- 'calibration_three':frame.slice(33, 37),
4222
- 'hardware_id': frame.slice(37, 40),
4223
- 'report_rate': frame.slice(40, 44),
4224
- 'tx_life_counter': frame.slice(44, 48)
4225
- }
4226
- }
4227
- }
4228
- }
4229
- },
4230
4264
  '16': {
4231
4265
  name: 'Soil Moisture Sensor',
4232
4266
  parse: (d, payload) => {
@@ -4294,265 +4328,54 @@ function sensor_types(parent){
4294
4328
  };
4295
4329
  }
4296
4330
  },
4297
- '21': {
4298
- name: 'Differential Bidirectional Pressure Sensor',
4299
- parse: (payload, parsed, mac) => {
4300
- let pressure, temperature, raw_adc;
4301
-
4302
- if (parsed.firmware <= 12) {
4303
- pressure = signInt(payload.slice(8, 10).reduce(msbLsb), 16) / 100;
4304
- temperature = signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100;
4305
- // raw_adc not present in firmware ≤ 12
4306
- return {
4307
- pressure,
4308
- temperature
4309
- };
4310
- } else {
4311
- pressure = signInt(payload.slice(8, 10).reduce(msbLsb), 16) / 1000;
4312
- temperature = signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100;
4313
- raw_adc = signInt(payload.slice(12, 14).reduce(msbLsb), 16);
4314
- return {
4315
- pressure,
4316
- temperature,
4317
- raw_adc
4318
- };
4319
- }
4320
- },
4321
- 'parse_fly': (frame) => {
4322
- let sensor_type = '';
4323
- switch(frame[13]){
4324
- case 0:
4325
- sensor_type = 'AMS5812';
4326
- break;
4327
- case 1:
4328
- sensor_type = 'AMS5915';
4329
- break;
4330
- }
4331
- let sensor_range = '';
4332
- if(frame[13]){ // if sensor type is 5915
4333
- switch(frame[12]){
4334
- case 0:
4335
- sensor_range = '0005_D';
4336
- break;
4337
- case 1:
4338
- sensor_range = '0010_D';
4339
- break;
4340
- case 2:
4341
- sensor_range = '0002_D_B';
4342
- break;
4343
- case 3:
4344
- sensor_range = '0005_D_B';
4345
- break;
4346
- case 4:
4347
- sensor_range = '0010_D_B';
4348
- break;
4349
- case 5:
4350
- sensor_range = '0020_D';
4351
- break;
4352
- case 6:
4353
- sensor_range = '0035_D';
4354
- break;
4355
- case 7:
4356
- sensor_range = '0050_D';
4357
- break;
4358
- case 8:
4359
- sensor_range = '0100_D';
4360
- break;
4361
- case 9:
4362
- sensor_range = '0020_D_B';
4363
- break;
4364
- case 10:
4365
- sensor_range = '0035_D_B';
4366
- break;
4367
- case 11:
4368
- sensor_range = '0050_D_B';
4369
- break;
4370
- case 12:
4371
- sensor_range = '0100_D_B';
4372
- break;
4373
- case 13:
4374
- sensor_range = '0200_D';
4375
- break;
4376
- case 14:
4377
- sensor_range = '0350_D';
4378
- break;
4379
- case 15:
4380
- sensor_range = '0500_D';
4381
- break;
4382
- case 16:
4383
- sensor_range = '1000_D';
4384
- break;
4385
- case 17:
4386
- sensor_range = '2000_D';
4387
- break;
4388
- case 18:
4389
- sensor_range = '4000_D';
4390
- break;
4391
- case 19:
4392
- sensor_range = '7000_D';
4393
- break;
4394
- case 20:
4395
- sensor_range = '10000_D';
4396
- break;
4397
- case 21:
4398
- sensor_range = '0200_D_B';
4399
- break;
4400
- case 22:
4401
- sensor_range = '0350_D_B';
4402
- break;
4403
- case 23:
4404
- sensor_range = '0500_D_B';
4405
- break;
4406
- case 24:
4407
- sensor_range = '1000_D_B';
4408
- break;
4409
- }
4410
- }
4411
- else{ // sensor type is 5812
4412
- switch(frame[12]){
4413
- case 0:
4414
- sensor_range = '0000_D';
4415
- break;
4416
- case 1:
4417
- sensor_range = '0001_D';
4418
- break;
4419
- case 2:
4420
- sensor_range = '0000_D_B';
4421
- break;
4422
- case 3:
4423
- sensor_range = '0001_D_B';
4424
- break;
4425
- case 4:
4426
- sensor_range = '0003_D';
4427
- break;
4428
- case 5:
4429
- sensor_range = '0008_D';
4430
- break;
4431
- case 6:
4432
- sensor_range = '0015_D';
4433
- break;
4434
- case 7:
4435
- sensor_range = '0003_D_B';
4436
- break;
4437
- case 8:
4438
- sensor_range = '0008_D_B';
4439
- break;
4440
- case 9:
4441
- sensor_range = '0015_D_B';
4442
- break;
4443
- case 10:
4444
- sensor_range = '0030_D';
4445
- break;
4446
- case 11:
4447
- sensor_range = '0050_D';
4448
- break;
4449
- case 12:
4450
- sensor_range = '0150_D';
4451
- break;
4452
- case 13:
4453
- sensor_range = '0300_D';
4454
- break;
4455
- case 14:
4456
- sensor_range = '0600_D';
4457
- break;
4458
- case 15:
4459
- sensor_range = '1000_D';
4460
- break;
4461
- case 16:
4462
- sensor_range = '0030_D_B';
4463
- break;
4464
- case 17:
4465
- sensor_range = '0050_D_B';
4466
- break;
4467
- case 18:
4468
- sensor_range = '0150_D_B';
4469
- break;
4470
- case 19:
4471
- sensor_range = '0150_B';
4472
- break;
4473
- case 20:
4474
- sensor_range = '0150_A';
4475
- break;
4476
- case 21:
4477
- sensor_range = '0300_A';
4478
- break;
4479
- }
4480
- }
4481
- return {
4482
- 'firmware': frame[2],
4483
- 'sensor_range': sensor_range,
4484
- 'sensor_type': sensor_type,
4485
- 'hardware_id': frame.slice(14, 17),
4486
- 'report_rate': frame.slice(17, 21).reduce(msbLsb) + ' sec',
4487
- 'tx_counter': frame.slice(21, 25).reduce(msbLsb),
4488
- 'machine_values': {
4489
- 'firmware': frame[2],
4490
- 'sensor_range': frame[12],
4491
- 'sensor_type': frame[13],
4492
- 'hardware_id': frame.slice(14, 17),
4493
- 'report_rate': frame.slice(17, 21),
4494
- 'tx_counter': frame.slice(21, 25)
4495
- }
4496
- }
4497
- }
4498
- },
4499
- '22': {
4500
- name: 'Voltage Detection Input',
4501
- parse: (d) => {
4502
- return {
4503
- input: d[0]
4504
- };
4505
- }
4506
- },
4507
- '23': {
4508
- name: '2-Channel Thermocouple',
4509
- parse: (d) => {
4510
- return {
4511
- channel_1: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4512
- channel_2: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
4513
- };
4514
- }
4515
- },
4516
- '24': {
4517
- name: 'Activity Detection',
4518
- parse: (d) => {
4519
- return {
4520
- acc_x: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4521
- acc_y: signInt(d.slice(2, 4).reduce(msbLsb), 16),
4522
- acc_z: signInt(d.slice(4, 6).reduce(msbLsb), 16),
4523
- temp_change: signInt(d.slice(6, 8).reduce(msbLsb), 16),
4524
- };
4525
- }
4526
- },
4527
- '25': {
4528
- name: 'Asset Monitor',
4529
- parse: (d) => {
4530
- return {
4531
- acc_x: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4532
- acc_y: signInt(d.slice(2, 4).reduce(msbLsb), 16),
4533
- acc_z: signInt(d.slice(4, 6).reduce(msbLsb), 16),
4534
- temp_change: signInt(d.slice(6, 8).reduce(msbLsb), 16),
4535
- };
4536
- }
4537
- },
4538
- '26': {
4539
- name: 'Pressure & Temperature Sensor (PSI)',
4540
- parse: (d) => {
4541
- return {
4542
- pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4543
- temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100
4544
- };
4545
- }
4546
- },
4547
- '27': {
4548
- name: 'Environmental',
4549
- parse: (d) => {
4550
- return {
4551
- temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
4552
- pressure: d.slice(2, 6).reduce(msbLsb) / 100,
4553
- humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
4554
- gas_resistance: d.slice(10, 14).reduce(msbLsb),
4555
- iaq: d.slice(14, 16).reduce(msbLsb)
4331
+ '22': {
4332
+ name: 'Voltage Detection Input',
4333
+ parse: (d) => {
4334
+ return {
4335
+ input: d[0]
4336
+ };
4337
+ }
4338
+ },
4339
+ '24': {
4340
+ name: 'Activity Detection',
4341
+ parse: (d) => {
4342
+ return {
4343
+ acc_x: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4344
+ acc_y: signInt(d.slice(2, 4).reduce(msbLsb), 16),
4345
+ acc_z: signInt(d.slice(4, 6).reduce(msbLsb), 16),
4346
+ temp_change: signInt(d.slice(6, 8).reduce(msbLsb), 16),
4347
+ };
4348
+ }
4349
+ },
4350
+ '25': {
4351
+ name: 'Asset Monitor',
4352
+ parse: (d) => {
4353
+ return {
4354
+ acc_x: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4355
+ acc_y: signInt(d.slice(2, 4).reduce(msbLsb), 16),
4356
+ acc_z: signInt(d.slice(4, 6).reduce(msbLsb), 16),
4357
+ temp_change: signInt(d.slice(6, 8).reduce(msbLsb), 16),
4358
+ };
4359
+ }
4360
+ },
4361
+ '26': {
4362
+ name: 'Pressure & Temperature Sensor (PSI)',
4363
+ parse: (d) => {
4364
+ return {
4365
+ pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
4366
+ temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100
4367
+ };
4368
+ }
4369
+ },
4370
+ '27': {
4371
+ name: 'Environmental',
4372
+ parse: (d) => {
4373
+ return {
4374
+ temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
4375
+ pressure: d.slice(2, 6).reduce(msbLsb) / 100,
4376
+ humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
4377
+ gas_resistance: d.slice(10, 14).reduce(msbLsb),
4378
+ iaq: d.slice(14, 16).reduce(msbLsb)
4556
4379
 
4557
4380
  };
4558
4381
  }
@@ -4717,67 +4540,6 @@ function sensor_types(parent){
4717
4540
  };
4718
4541
  }
4719
4542
  },
4720
- '39': {
4721
- name: 'RTD Temperature Sensor',
4722
- parse: (payload, parsed, mac) => {
4723
- if(parsed.firmware > 5){
4724
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
4725
- let fault_status = '';
4726
- if (reserved === 0) {
4727
- fault_status = 'data_valid';
4728
- } else if (reserved === 15) {
4729
- fault_status = 'data_invalid';
4730
- } else {
4731
- const faultTypeBits = reserved & 0b00111100;
4732
- switch (faultTypeBits) {
4733
- case 32:
4734
- fault_status = 'ref_in_vbias';
4735
- break;
4736
- case 16:
4737
- fault_status = 'ref_in_force_close';
4738
- break;
4739
- case 8:
4740
- fault_status = 'rtd_in_force_open';
4741
- break;
4742
- case 4:
4743
- fault_status = 'over_under_voltage';
4744
- break;
4745
- }
4746
- }
4747
- return {
4748
- fault_status: fault_status,
4749
- temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4750
- };
4751
- } else {
4752
- return {
4753
- temperature: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100
4754
- };
4755
- }
4756
- },
4757
- 'parse_fly': (frame) => {
4758
- let firmware = frame[2];
4759
- if(firmware > 5){
4760
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
4761
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
4762
- return {
4763
- 'firmware': frame[2],
4764
- 'sensor_interface': interface_types[frame[12]],
4765
- 'sensor_type': rtd_types[frame[13]],
4766
- 'hardware_id': frame.slice(14, 17),
4767
- 'report_rate': frame.slice(17, 21).reduce(msbLsb) + " sec",
4768
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
4769
- 'machine_values': {
4770
- 'firmware': frame[2],
4771
- 'sensor_interface': frame[12],
4772
- 'sensor_type': frame[13],
4773
- 'hardware_id': frame.slice(14, 17),
4774
- 'report_rate': frame.slice(17, 21),
4775
- 'tx_life_counter': frame.slice(21, 25)
4776
- }
4777
- }
4778
- }
4779
- }
4780
- },
4781
4543
  '40': {
4782
4544
  name: 'Vibration w/Time Domain (partial support)',
4783
4545
  parse: (d, full) => {
@@ -4837,80 +4599,8 @@ function sensor_types(parent){
4837
4599
  };
4838
4600
  }
4839
4601
  },
4840
- '45': {
4841
- name: '16-Bit 1-Channel Passive 4-20mA Current Receiver',
4842
- parse: (d) => {
4843
- return {
4844
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4845
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
4846
- };
4847
- },
4848
- 'parse_fly': (frame) => {
4849
- let firmware = frame[2];
4850
- if(firmware > 13){ // firmware 14 and above
4851
- let frame_data = {};
4852
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4853
- if(!auto_check_interval){
4854
- frame_data.auto_check_interval = 'Disabled';
4855
- }else{
4856
- frame_data.auto_check_interval = auto_check_interval + " sec";
4857
- }
4858
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4859
- switch(frame[16]){
4860
- case 0:
4861
- frame_data.fsr = "+-6.114 V";
4862
- break;
4863
- case 1:
4864
- frame_data.fsr = "+-4.096 V";
4865
- break;
4866
- case 2:
4867
- frame_data.fsr = "+-2.048 V";
4868
- break;
4869
- case 3:
4870
- frame_data.fsr = "+-1.024 V";
4871
- break;
4872
- case 4:
4873
- frame_data.fsr = "+-0.512 V";
4874
- break;
4875
- case 5:
4876
- frame_data.fsr = "+-0.256 V";
4877
- break;
4878
- }
4879
- return {
4880
- 'firmware': frame[2],
4881
- 'fsr': frame_data.fsr,
4882
- 'boot_up_time': frame[17] + " sec",
4883
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4884
- 'auto_check_interval': frame_data.auto_check_interval,
4885
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4886
- 'always_on': frame_data.always_on,
4887
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4888
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4889
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4890
- 'hardware_id': frame.slice(37, 40),
4891
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4892
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4893
- 'machine_values': {
4894
- 'firmware': frame[2],
4895
- 'fsr': frame[16],
4896
- 'boot_up_time': frame[17],
4897
- 'adc_pin_reading': frame.slice(18, 20),
4898
- 'auto_check_interval': frame.slice(20, 22),
4899
- 'auto_check_percentage': frame.slice(22, 24),
4900
- 'always_on': frame[24],
4901
- 'calibration_one': frame.slice(25, 29),
4902
- 'calibration_two':frame.slice(29, 33),
4903
- 'calibration_three':frame.slice(33, 37),
4904
- 'hardware_id': frame.slice(37, 40),
4905
- 'report_rate': frame.slice(40, 44),
4906
- 'tx_life_counter': frame.slice(44, 48)
4907
- }
4908
- }
4909
- }
4910
- }
4911
- },
4912
- '46': {
4913
- name: 'Motion Detection Sensor',
4602
+ '46': {
4603
+ name: 'Motion Detection Sensor',
4914
4604
  parse: (d) => {
4915
4605
  return {
4916
4606
  input_1: d[0]
@@ -4926,78 +4616,6 @@ function sensor_types(parent){
4926
4616
  };
4927
4617
  }
4928
4618
  },
4929
- '48': {
4930
- name: '16-Bit 1-Channel Active 4-20mA Current Loop Receiver',
4931
- parse: (d) => {
4932
- return {
4933
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
4934
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
4935
- };
4936
- },
4937
- 'parse_fly': (frame) => {
4938
- let firmware = frame[2];
4939
- if(firmware > 13){ // firmware 14 and above
4940
- let frame_data = {};
4941
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
4942
- if(!auto_check_interval){
4943
- frame_data.auto_check_interval = 'Disabled';
4944
- }else{
4945
- frame_data.auto_check_interval = auto_check_interval + " sec";
4946
- }
4947
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
4948
- switch(frame[16]){
4949
- case 0:
4950
- frame_data.fsr = "+-6.114 V";
4951
- break;
4952
- case 1:
4953
- frame_data.fsr = "+-4.096 V";
4954
- break;
4955
- case 2:
4956
- frame_data.fsr = "+-2.048 V";
4957
- break;
4958
- case 3:
4959
- frame_data.fsr = "+-1.024 V";
4960
- break;
4961
- case 4:
4962
- frame_data.fsr = "+-0.512 V";
4963
- break;
4964
- case 5:
4965
- frame_data.fsr = "+-0.256 V";
4966
- break;
4967
- }
4968
- return {
4969
- 'firmware': frame[2],
4970
- 'fsr': frame_data.fsr,
4971
- 'boot_up_time': frame[17] + " sec",
4972
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
4973
- 'auto_check_interval': frame_data.auto_check_interval,
4974
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
4975
- 'always_on': frame_data.always_on,
4976
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
4977
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
4978
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
4979
- 'hardware_id': frame.slice(37, 40),
4980
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
4981
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
4982
- 'machine_values': {
4983
- 'firmware': frame[2],
4984
- 'fsr': frame[16],
4985
- 'boot_up_time': frame[17],
4986
- 'adc_pin_reading': frame.slice(18, 20),
4987
- 'auto_check_interval': frame.slice(20, 22),
4988
- 'auto_check_percentage': frame.slice(22, 24),
4989
- 'always_on': frame[24],
4990
- 'calibration_one': frame.slice(25, 29),
4991
- 'calibration_two':frame.slice(29, 33),
4992
- 'calibration_three':frame.slice(33, 37),
4993
- 'hardware_id': frame.slice(37, 40),
4994
- 'report_rate': frame.slice(40, 44),
4995
- 'tx_life_counter': frame.slice(44, 48)
4996
- }
4997
- }
4998
- }
4999
- }
5000
- },
5001
4619
  '49': {
5002
4620
  name: '6-Channel Thermocouple',
5003
4621
  parse: (d) => {
@@ -5061,149 +4679,6 @@ function sensor_types(parent){
5061
4679
  };
5062
4680
  }
5063
4681
  },
5064
- '52': {
5065
- name: '16-Bit 2-Channel 4-20mA',
5066
- parse: (d) => {
5067
- // This parser may be outdated if a customer has an issue check with Engineering
5068
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5069
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5070
- return {
5071
- adc1: adc1,
5072
- adc2: adc2,
5073
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
5074
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
5075
- };
5076
- },
5077
- 'parse_fly': (frame) => {
5078
- let firmware = frame[2];
5079
- let frame_data = {};
5080
- switch(frame[16]){
5081
- case 0:
5082
- frame_data.fsr = "+-6.114 V";
5083
- break;
5084
- case 1:
5085
- frame_data.fsr = "+-4.096 V";
5086
- break;
5087
- case 2:
5088
- frame_data.fsr = "+-2.048 V";
5089
- break;
5090
- case 3:
5091
- frame_data.fsr = "+-1.024 V";
5092
- break;
5093
- case 4:
5094
- frame_data.fsr = "+-0.512 V";
5095
- break;
5096
- case 5:
5097
- frame_data.fsr = "+-0.256 V";
5098
- break;
5099
- }
5100
- if(firmware > 18){ // firmware 14 and above
5101
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5102
- if(!auto_check_interval){
5103
- frame_data.auto_check_interval = 'Disabled';
5104
- }else{
5105
- frame_data.auto_check_interval = auto_check_interval + " sec";
5106
- }
5107
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5108
- return {
5109
- 'firmware': frame[2],
5110
- 'fsr': frame_data.fsr,
5111
- 'boot_up_time': frame[17] + " sec",
5112
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5113
- 'auto_check_interval': frame_data.auto_check_interval,
5114
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5115
- 'always_on': frame_data.always_on,
5116
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5117
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5118
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5119
- 'hardware_id': frame.slice(37, 40),
5120
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5121
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5122
- 'machine_values': {
5123
- 'firmware': frame[2],
5124
- 'fsr': frame[16],
5125
- 'boot_up_time': frame[17],
5126
- 'adc_pin_reading': frame.slice(18, 20),
5127
- 'auto_check_interval': frame.slice(20, 22),
5128
- 'auto_check_percentage': frame.slice(22, 24),
5129
- 'always_on': frame[24],
5130
- 'calibration_one': frame.slice(25, 29),
5131
- 'calibration_two':frame.slice(29, 33),
5132
- 'calibration_three':frame.slice(33, 37),
5133
- 'hardware_id': frame.slice(37, 40),
5134
- 'report_rate': frame.slice(40, 44),
5135
- 'tx_life_counter': frame.slice(44, 48)
5136
- }
5137
- }
5138
- }else if(firmware > 13){ // firmware 14 and above
5139
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5140
- if(!auto_check_interval){
5141
- frame_data.auto_check_interval = 'Disabled';
5142
- }else{
5143
- frame_data.auto_check_interval = auto_check_interval + " sec";
5144
- }
5145
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5146
- return {
5147
- 'firmware': frame[2],
5148
- 'fsr': frame_data.fsr,
5149
- 'boot_up_time': frame[17] + " sec",
5150
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5151
- 'auto_check_interval': frame_data.auto_check_interval,
5152
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5153
- 'always_on': frame_data.always_on,
5154
- 'hardware_id': frame.slice(25, 28),
5155
- 'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
5156
- 'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
5157
- 'machine_values': {
5158
- 'firmware': frame[2],
5159
- 'fsr': frame[16],
5160
- 'boot_up_time': frame[17],
5161
- 'adc_pin_reading': frame.slice(18, 20),
5162
- 'auto_check_interval': frame.slice(20, 22),
5163
- 'auto_check_percentage': frame.slice(22, 24),
5164
- 'always_on': frame[24],
5165
- 'calibration_one': frame.slice(25, 29),
5166
- 'calibration_two':frame.slice(29, 33),
5167
- 'calibration_three':frame.slice(33, 37),
5168
- 'hardware_id': frame.slice(37, 40),
5169
- 'report_rate': frame.slice(40, 44),
5170
- 'tx_life_counter': frame.slice(44, 48)
5171
- }
5172
- }
5173
- }
5174
- else if(firmware > 12){
5175
- return {
5176
- 'firmware': frame[2],
5177
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
5178
- 'fsr':frame_data.fsr,
5179
- 'boot_up_time': frame[17],
5180
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5181
- 'machine_values': {
5182
- 'firmware': frame[2],
5183
- 'report_rate': frame.slice(12, 16),
5184
- 'fsr':frame[16],
5185
- 'boot_up_time': frame[17],
5186
- 'adc_pin_reading': frame.slice(18, 20),
5187
- 'frame': frame
5188
- }
5189
- }
5190
- }else{
5191
- return {
5192
- 'firmware': frame[2],
5193
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
5194
- 'fsr':frame_data.fsr,
5195
- 'boot_up_time': frame[17],
5196
- 'machine_values': {
5197
- 'firmware': frame[2],
5198
- 'report_rate': frame.slice(12, 16),
5199
- 'fsr':frame[16],
5200
- 'boot_up_time': frame[17],
5201
- 'frame': frame
5202
- }
5203
- }
5204
- }
5205
- }
5206
- },
5207
4682
  '53': {
5208
4683
  'name': 'Air Quality CO2 and Particulate Matter Sensor',
5209
4684
  parse: (d) => {
@@ -5225,256 +4700,30 @@ function sensor_types(parent){
5225
4700
  };
5226
4701
  }
5227
4702
  },
5228
- '54': {
5229
- name: '2-Channel RTD Temperature Sensor',
5230
- parse: (payload, parsed, mac) => {
5231
- if(parsed.firmware > 5){
5232
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
5233
- let fault_status = '';
5234
- if (reserved === 0) {
5235
- fault_status = 'data_valid';
5236
- } else if (reserved === 15) {
5237
- fault_status = 'data_invalid';
5238
- } else {
5239
- const fault_bits = (reserved >> 2) & 0b00001111;
5240
- switch (fault_bits) {
5241
- case 8:
5242
- fault_status = 'ref_in_vbias';
5243
- break;
5244
- case 4:
5245
- fault_status = 'ref_in_force_close';
5246
- break;
5247
- case 2:
5248
- fault_status = 'rtd_in_force_open';
5249
- break;
5250
- case 1:
5251
- fault_status = 'over_under_voltage';
5252
- break;
5253
- }
5254
- const channel_bits = reserved & 0b00000011;
5255
- switch (channel_bits) {
5256
- case 1:
5257
- fault_status = fault_status + '_ch1';
5258
- break;
5259
- case 2:
5260
- fault_status = fault_status + '_ch2';
5261
- break;
5262
- }
5263
- }
5264
- return {
5265
- fault_status: fault_status,
5266
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5267
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
5268
- };
5269
- } else {
5270
- return {
5271
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5272
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100
5273
- };
5274
- }
5275
- },
5276
- 'parse_fly': (frame) => {
5277
- let firmware = frame[2];
5278
- if(firmware > 5){
5279
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
5280
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
5281
- return {
5282
- 'firmware': frame[2],
5283
- 'sensor_interface_ch1': interface_types[frame[12]],
5284
- 'sensor_type_ch1': rtd_types[frame[13]],
5285
- 'sensor_interface_ch2': interface_types[frame[14]],
5286
- 'sensor_type_ch2': rtd_types[frame[15]],
5287
- 'hardware_id': frame.slice(16, 19),
5288
- 'report_rate': frame.slice(19, 23).reduce(msbLsb) + " sec",
5289
- 'tx_life_counter': frame.slice(23, 27).reduce(msbLsb),
5290
- 'machine_values': {
5291
- 'firmware': frame[2],
5292
- 'sensor_interface_ch1': frame[12],
5293
- 'sensor_type_ch1': frame[13],
5294
- 'sensor_interface_ch2': frame[14],
5295
- 'sensor_type_ch2': frame[15],
5296
- 'hardware_id': frame.slice(16, 19),
5297
- 'report_rate': frame.slice(19, 23),
5298
- 'tx_life_counter': frame.slice(23, 27)
5299
- }
5300
- }
5301
- }
4703
+ '58': {
4704
+ name: 'Tank Level v3',
4705
+ parse: (d) => {
4706
+ return {
4707
+ filtered_range: d.slice(0, 2).reduce(msbLsb),
4708
+ long_range_algorithm: d.slice(2, 4).reduce(msbLsb),
4709
+ second_chance: d.slice(4, 6).reduce(msbLsb),
4710
+ second_reading: d.slice(6, 8).reduce(msbLsb),
4711
+ compare_reading: d.slice(8, 10).reduce(msbLsb),
4712
+ short_range_algorithm: d.slice(10, 12).reduce(msbLsb),
4713
+ trusted_reading: d.slice(12, 14).reduce(msbLsb),
4714
+ final_filter: d.slice(14, 16).reduce(msbLsb),
4715
+ raw_final: d.slice(16, 18).reduce(msbLsb),
4716
+ final_index: d.slice(18, 20).reduce(msbLsb),
4717
+ };
5302
4718
  }
5303
4719
  },
5304
- '55': {
5305
- name: '3-Channel RTD Temperature Sensor',
5306
- parse: (payload, parsed, mac) => {
5307
- let reserved = payload[7] >> 1; // Fault status (1-bit left shifted)
5308
- let fault_status = '';
5309
- if (reserved === 0) {
5310
- fault_status = 'data_valid';
5311
- } else if (reserved === 15) {
5312
- fault_status = 'data_invalid';
5313
- } else {
5314
- const fault_bits = (reserved >> 2) & 0b00001111;
5315
- switch (fault_bits) {
5316
- case 8:
5317
- fault_status = 'ref_in_vbias';
5318
- break;
5319
- case 4:
5320
- fault_status = 'ref_in_force_close';
5321
- break;
5322
- case 2:
5323
- fault_status = 'rtd_in_force_open';
5324
- break;
5325
- case 1:
5326
- fault_status = 'over_under_voltage';
5327
- break;
5328
- }
5329
- const channel_bits = reserved & 0b00000011;
5330
- switch (channel_bits) {
5331
- case 1:
5332
- fault_status = fault_status + '_ch1';
5333
- break;
5334
- case 2:
5335
- fault_status = fault_status + '_ch2';
5336
- break;
5337
- case 3:
5338
- fault_status = fault_status + '_ch3';
5339
- break;
5340
- }
5341
- }
4720
+ '60': {
4721
+ name: 'Air Velocity and Precision Pressure & Temperature Sensor',
4722
+ parse: (d) => {
5342
4723
  return {
5343
- fault_status: fault_status,
5344
- temperature_1: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
5345
- temperature_2: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
5346
- temperature_3: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 100
5347
- };
5348
- },
5349
- 'parse_fly': (frame) => {
5350
- const interface_types = ["rtd_2_wire", "rtd_3_wire", "rtd_4_wire"];
5351
- const rtd_types = ["rtd_pt_100", "rtd_pt_1000"];
5352
- return {
5353
- 'firmware': frame[2],
5354
- 'sensor_interface_ch1': interface_types[frame[12]],
5355
- 'sensor_type_ch1': rtd_types[frame[13]],
5356
- 'sensor_interface_ch2': interface_types[frame[14]],
5357
- 'sensor_type_ch2': rtd_types[frame[15]],
5358
- 'sensor_interface_ch3': interface_types[frame[16]],
5359
- 'sensor_type_ch3': rtd_types[frame[17]],
5360
- 'hardware_id': frame.slice(18, 21),
5361
- 'report_rate': frame.slice(21, 25).reduce(msbLsb) + " sec",
5362
- 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
5363
- 'machine_values': {
5364
- 'firmware': frame[2],
5365
- 'sensor_interface_ch1': frame[12],
5366
- 'sensor_type_ch1': frame[13],
5367
- 'sensor_interface_ch2': frame[14],
5368
- 'sensor_type_ch2': frame[15],
5369
- 'sensor_interface_ch3': frame[16],
5370
- 'sensor_type_ch3': frame[17],
5371
- 'hardware_id': frame.slice(18, 21),
5372
- 'report_rate': frame.slice(21, 25),
5373
- 'tx_life_counter': frame.slice(25, 29)
5374
- }
5375
- }
5376
- }
5377
- },
5378
- '56': {
5379
- name: '2 Channel 0-10VDC Receiver',
5380
- parse: (d) => {
5381
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5382
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5383
- return {
5384
- adc1: adc1,
5385
- adc2: adc2,
5386
- VDC1: parseFloat((adc1 * 0.00034122).toFixed(2)),
5387
- VDC2: parseFloat((adc2 * 0.00034122).toFixed(2))
5388
- };
5389
- },
5390
- 'parse_fly': (frame) => {
5391
- let firmware = frame[2];
5392
- if(firmware > 13){ // firmware 14 and above
5393
- let frame_data = {};
5394
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5395
- if(!auto_check_interval){
5396
- frame_data.auto_check_interval = 'Disabled';
5397
- }else{
5398
- frame_data.auto_check_interval = auto_check_interval + " sec";
5399
- }
5400
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5401
- switch(frame[16]){
5402
- case 0:
5403
- frame_data.fsr = "+-6.114 V";
5404
- break;
5405
- case 1:
5406
- frame_data.fsr = "+-4.096 V";
5407
- break;
5408
- case 2:
5409
- frame_data.fsr = "+-2.048 V";
5410
- break;
5411
- case 3:
5412
- frame_data.fsr = "+-1.024 V";
5413
- break;
5414
- case 4:
5415
- frame_data.fsr = "+-0.512 V";
5416
- break;
5417
- case 5:
5418
- frame_data.fsr = "+-0.256 V";
5419
- break;
5420
- }
5421
- return {
5422
- 'firmware': frame[2],
5423
- 'fsr': frame_data.fsr,
5424
- 'boot_up_time': frame[17] + " sec",
5425
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5426
- 'auto_check_interval': frame_data.auto_check_interval,
5427
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5428
- 'always_on': frame_data.always_on,
5429
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5430
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5431
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5432
- 'hardware_id': frame.slice(37, 40),
5433
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5434
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5435
- 'machine_values': {
5436
- 'firmware': frame[2],
5437
- 'fsr': frame[16],
5438
- 'boot_up_time': frame[17],
5439
- 'adc_pin_reading': frame.slice(18, 20),
5440
- 'auto_check_interval': frame.slice(20, 22),
5441
- 'auto_check_percentage': frame.slice(22, 24),
5442
- 'always_on': frame[24],
5443
- 'calibration_one': frame.slice(25, 29),
5444
- 'calibration_two':frame.slice(29, 33),
5445
- 'calibration_three':frame.slice(33, 37),
5446
- 'hardware_id': frame.slice(37, 40),
5447
- 'report_rate': frame.slice(40, 44),
5448
- 'tx_life_counter': frame.slice(44, 48)
5449
- }
5450
- }
5451
- }
5452
- }
5453
- },
5454
- '58': {
5455
- name: 'Tank Level v3',
5456
- parse: (d) => {
5457
- return {
5458
- filtered_range: d.slice(0, 2).reduce(msbLsb),
5459
- long_range_algorithm: d.slice(2, 4).reduce(msbLsb),
5460
- second_chance: d.slice(4, 6).reduce(msbLsb),
5461
- second_reading: d.slice(6, 8).reduce(msbLsb),
5462
- compare_reading: d.slice(8, 10).reduce(msbLsb),
5463
- short_range_algorithm: d.slice(10, 12).reduce(msbLsb),
5464
- trusted_reading: d.slice(12, 14).reduce(msbLsb),
5465
- final_filter: d.slice(14, 16).reduce(msbLsb),
5466
- raw_final: d.slice(16, 18).reduce(msbLsb),
5467
- final_index: d.slice(18, 20).reduce(msbLsb),
5468
- };
5469
- }
5470
- },
5471
- '60': {
5472
- name: 'Air Velocity and Precision Pressure & Temperature Sensor',
5473
- parse: (d) => {
5474
- return {
5475
- pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 1000,
5476
- temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
5477
- Air_Velocity: signInt(d.slice(6, 8).reduce(msbLsb), 16) / 1000
4724
+ pressure: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 1000,
4725
+ temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
4726
+ Air_Velocity: signInt(d.slice(6, 8).reduce(msbLsb), 16) / 1000
5478
4727
  };
5479
4728
  }
5480
4729
  },
@@ -5674,79 +4923,6 @@ function sensor_types(parent){
5674
4923
  }
5675
4924
  }
5676
4925
  },
5677
- '75': {
5678
- name: 'Siemens Air Velocity Probe',
5679
- parse: (d) => {
5680
- return {
5681
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5682
- mA: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
5683
- Velocity: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100
5684
- };
5685
- },
5686
- 'parse_fly': (frame) => {
5687
- let firmware = frame[2];
5688
- if(firmware > 13){ // firmware 14 and above
5689
- let frame_data = {};
5690
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
5691
- if(!auto_check_interval){
5692
- frame_data.auto_check_interval = 'Disabled';
5693
- }else{
5694
- frame_data.auto_check_interval = auto_check_interval + " sec";
5695
- }
5696
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
5697
- switch(frame[16]){
5698
- case 0:
5699
- frame_data.fsr = "+-6.114 V";
5700
- break;
5701
- case 1:
5702
- frame_data.fsr = "+-4.096 V";
5703
- break;
5704
- case 2:
5705
- frame_data.fsr = "+-2.048 V";
5706
- break;
5707
- case 3:
5708
- frame_data.fsr = "+-1.024 V";
5709
- break;
5710
- case 4:
5711
- frame_data.fsr = "+-0.512 V";
5712
- break;
5713
- case 5:
5714
- frame_data.fsr = "+-0.256 V";
5715
- break;
5716
- }
5717
- return {
5718
- 'firmware': frame[2],
5719
- 'fsr': frame_data.fsr,
5720
- 'boot_up_time': frame[17] + " sec",
5721
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
5722
- 'auto_check_interval': frame_data.auto_check_interval,
5723
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
5724
- 'always_on': frame_data.always_on,
5725
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
5726
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
5727
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
5728
- 'hardware_id': frame.slice(37, 40),
5729
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
5730
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
5731
- 'machine_values': {
5732
- 'firmware': frame[2],
5733
- 'fsr': frame[16],
5734
- 'boot_up_time': frame[17],
5735
- 'adc_pin_reading': frame.slice(18, 20),
5736
- 'auto_check_interval': frame.slice(20, 22),
5737
- 'auto_check_percentage': frame.slice(22, 24),
5738
- 'always_on': frame[24],
5739
- 'calibration_one': frame.slice(25, 29),
5740
- 'calibration_two':frame.slice(29, 33),
5741
- 'calibration_three':frame.slice(33, 37),
5742
- 'hardware_id': frame.slice(37, 40),
5743
- 'report_rate': frame.slice(40, 44),
5744
- 'tx_life_counter': frame.slice(44, 48)
5745
- }
5746
- }
5747
- }
5748
- }
5749
- },
5750
4926
  '76': {
5751
4927
  name: 'Wireless CO Sensor',
5752
4928
  parse: (d) => {
@@ -8245,38 +7421,16 @@ function sensor_types(parent){
8245
7421
  }
8246
7422
  }
8247
7423
  },
8248
- '88': {
8249
- name: '1 Channel Ultrasound Vibration Sensor',
7424
+ '90': {
7425
+ name: 'DC Current Sensor',
8250
7426
  parse: (d) => {
8251
7427
  return {
8252
7428
  raw_adc: d.slice(0, 2).reduce(msbLsb),
8253
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
8254
- db: d.slice(4, 6).reduce(msbLsb) / 100
7429
+ amps: d.slice(2, 6).reduce(msbLsb) / 10,
8255
7430
  };
8256
7431
  },
8257
7432
  'parse_fly': (frame) => {
8258
7433
  let firmware = frame[2];
8259
- let frame_data = {};
8260
- switch(frame[16]){
8261
- case 0:
8262
- frame_data.fsr = "+-6.114 V";
8263
- break;
8264
- case 1:
8265
- frame_data.fsr = "+-4.096 V";
8266
- break;
8267
- case 2:
8268
- frame_data.fsr = "+-2.048 V";
8269
- break;
8270
- case 3:
8271
- frame_data.fsr = "+-1.024 V";
8272
- break;
8273
- case 4:
8274
- frame_data.fsr = "+-0.512 V";
8275
- break;
8276
- case 5:
8277
- frame_data.fsr = "+-0.256 V";
8278
- break;
8279
- }
8280
7434
  if(firmware > 13){ // firmware 14 and above
8281
7435
  let frame_data = {};
8282
7436
  let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
@@ -8285,7 +7439,27 @@ function sensor_types(parent){
8285
7439
  }else{
8286
7440
  frame_data.auto_check_interval = auto_check_interval + " sec";
8287
7441
  }
8288
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
7442
+ frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
7443
+ switch(frame[16]){
7444
+ case 0:
7445
+ frame_data.fsr = "+-6.114 V";
7446
+ break;
7447
+ case 1:
7448
+ frame_data.fsr = "+-4.096 V";
7449
+ break;
7450
+ case 2:
7451
+ frame_data.fsr = "+-2.048 V";
7452
+ break;
7453
+ case 3:
7454
+ frame_data.fsr = "+-1.024 V";
7455
+ break;
7456
+ case 4:
7457
+ frame_data.fsr = "+-0.512 V";
7458
+ break;
7459
+ case 5:
7460
+ frame_data.fsr = "+-0.256 V";
7461
+ break;
7462
+ }
8289
7463
  return {
8290
7464
  'firmware': frame[2],
8291
7465
  'fsr': frame_data.fsr,
@@ -8295,212 +7469,31 @@ function sensor_types(parent){
8295
7469
  'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8296
7470
  'always_on': frame_data.always_on,
8297
7471
  'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8298
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8299
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8300
- 'hardware_id': frame.slice(37, 40),
8301
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8302
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
7472
+ 'hardware_id': frame.slice(29, 32),
7473
+ 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
7474
+ 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
8303
7475
  'machine_values': {
8304
7476
  'firmware': frame[2],
8305
7477
  'fsr': frame[16],
8306
7478
  'boot_up_time': frame[17],
8307
7479
  'adc_pin_reading': frame.slice(18, 20),
8308
7480
  'auto_check_interval': frame.slice(20, 22),
8309
- 'auto_check_percentage': frame.slice(22, 24),
7481
+ 'auto_check_threshold': frame.slice(22, 24),
8310
7482
  'always_on': frame[24],
8311
7483
  'calibration_one': frame.slice(25, 29),
8312
- 'calibration_two':frame.slice(29, 33),
8313
- 'calibration_three':frame.slice(33, 37),
8314
- 'hardware_id': frame.slice(37, 40),
8315
- 'report_rate': frame.slice(40, 44),
8316
- 'tx_life_counter': frame.slice(44, 48)
8317
- }
8318
- }
8319
- }else{
8320
- return {
8321
- 'firmware': frame[2],
8322
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
8323
- 'fsr':frame_data.fsr,
8324
- 'boot_up_time': frame[17],
8325
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8326
- 'machine_values': {
8327
- 'firmware': frame[2],
8328
- 'report_rate': frame.slice(12, 16),
8329
- 'fsr':frame[16],
8330
- 'boot_up_time': frame[17],
8331
- // 'adc_pin_reading': frame.slice(18, 20),
8332
- 'frame': frame
7484
+ 'hardware_id': frame.slice(29, 32),
7485
+ 'report_rate': frame.slice(32, 36),
7486
+ 'tx_life_counter': frame.slice(36, 40)
8333
7487
  }
8334
7488
  }
8335
7489
  }
8336
7490
  }
8337
7491
  },
8338
- '89': {
8339
- name: '2 Channel Ultrasound Vibration Sensor',
7492
+ '91': {
7493
+ name: 'Wireless Air Velocity Sensor HVAC',
8340
7494
  parse: (d) => {
8341
7495
  return {
8342
- c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
8343
- c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
8344
- c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
8345
- c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
8346
- c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
8347
- c2_db: d.slice(10, 12).reduce(msbLsb) / 100
8348
- };
8349
- },
8350
- 'parse_fly': (frame) => {
8351
- let firmware = frame[2];
8352
- let frame_data = {};
8353
- switch(frame[16]){
8354
- case 0:
8355
- frame_data.fsr = "+-6.114 V";
8356
- break;
8357
- case 1:
8358
- frame_data.fsr = "+-4.096 V";
8359
- break;
8360
- case 2:
8361
- frame_data.fsr = "+-2.048 V";
8362
- break;
8363
- case 3:
8364
- frame_data.fsr = "+-1.024 V";
8365
- break;
8366
- case 4:
8367
- frame_data.fsr = "+-0.512 V";
8368
- break;
8369
- case 5:
8370
- frame_data.fsr = "+-0.256 V";
8371
- break;
8372
- }
8373
- if(firmware > 13){ // firmware 14 and above
8374
- let frame_data = {};
8375
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8376
- if(!auto_check_interval){
8377
- frame_data.auto_check_interval = 'Disabled';
8378
- }else{
8379
- frame_data.auto_check_interval = auto_check_interval + " sec";
8380
- }
8381
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8382
- return {
8383
- 'firmware': frame[2],
8384
- 'fsr': frame_data.fsr,
8385
- 'boot_up_time': frame[17] + " sec",
8386
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8387
- 'auto_check_interval': frame_data.auto_check_interval,
8388
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8389
- 'always_on': frame_data.always_on,
8390
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8391
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8392
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8393
- 'hardware_id': frame.slice(37, 40),
8394
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8395
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8396
- 'machine_values': {
8397
- 'firmware': frame[2],
8398
- 'fsr': frame[16],
8399
- 'boot_up_time': frame[17],
8400
- 'adc_pin_reading': frame.slice(18, 20),
8401
- 'auto_check_interval': frame.slice(20, 22),
8402
- 'auto_check_percentage': frame.slice(22, 24),
8403
- 'always_on': frame[24],
8404
- 'calibration_one': frame.slice(25, 29),
8405
- 'calibration_two':frame.slice(29, 33),
8406
- 'calibration_three':frame.slice(33, 37),
8407
- 'hardware_id': frame.slice(37, 40),
8408
- 'report_rate': frame.slice(40, 44),
8409
- 'tx_life_counter': frame.slice(44, 48)
8410
- }
8411
- }
8412
- }else{
8413
- return {
8414
- 'firmware': frame[2],
8415
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
8416
- 'fsr':frame_data.fsr,
8417
- 'boot_up_time': frame[17],
8418
- // 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8419
- 'machine_values': {
8420
- 'firmware': frame[2],
8421
- 'report_rate': frame.slice(12, 16),
8422
- 'fsr':frame[16],
8423
- 'boot_up_time': frame[17],
8424
- // 'adc_pin_reading': frame.slice(18, 20),
8425
- 'frame': frame
8426
- }
8427
- }
8428
- }
8429
- }
8430
- },
8431
- '90': {
8432
- name: 'DC Current Sensor',
8433
- parse: (d) => {
8434
- return {
8435
- raw_adc: d.slice(0, 2).reduce(msbLsb),
8436
- amps: d.slice(2, 6).reduce(msbLsb) / 10,
8437
- };
8438
- },
8439
- 'parse_fly': (frame) => {
8440
- let firmware = frame[2];
8441
- if(firmware > 13){ // firmware 14 and above
8442
- let frame_data = {};
8443
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8444
- if(!auto_check_interval){
8445
- frame_data.auto_check_interval = 'Disabled';
8446
- }else{
8447
- frame_data.auto_check_interval = auto_check_interval + " sec";
8448
- }
8449
- frame_data.always_on = frame[24] ? "Enabled" : "Disabled";
8450
- switch(frame[16]){
8451
- case 0:
8452
- frame_data.fsr = "+-6.114 V";
8453
- break;
8454
- case 1:
8455
- frame_data.fsr = "+-4.096 V";
8456
- break;
8457
- case 2:
8458
- frame_data.fsr = "+-2.048 V";
8459
- break;
8460
- case 3:
8461
- frame_data.fsr = "+-1.024 V";
8462
- break;
8463
- case 4:
8464
- frame_data.fsr = "+-0.512 V";
8465
- break;
8466
- case 5:
8467
- frame_data.fsr = "+-0.256 V";
8468
- break;
8469
- }
8470
- return {
8471
- 'firmware': frame[2],
8472
- 'fsr': frame_data.fsr,
8473
- 'boot_up_time': frame[17] + " sec",
8474
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8475
- 'auto_check_interval': frame_data.auto_check_interval,
8476
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8477
- 'always_on': frame_data.always_on,
8478
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8479
- 'hardware_id': frame.slice(29, 32),
8480
- 'report_rate': frame.slice(32, 36).reduce(msbLsb) + " sec",
8481
- 'tx_life_counter': frame.slice(36, 40).reduce(msbLsb),
8482
- 'machine_values': {
8483
- 'firmware': frame[2],
8484
- 'fsr': frame[16],
8485
- 'boot_up_time': frame[17],
8486
- 'adc_pin_reading': frame.slice(18, 20),
8487
- 'auto_check_interval': frame.slice(20, 22),
8488
- 'auto_check_threshold': frame.slice(22, 24),
8489
- 'always_on': frame[24],
8490
- 'calibration_one': frame.slice(25, 29),
8491
- 'hardware_id': frame.slice(29, 32),
8492
- 'report_rate': frame.slice(32, 36),
8493
- 'tx_life_counter': frame.slice(36, 40)
8494
- }
8495
- }
8496
- }
8497
- }
8498
- },
8499
- '91': {
8500
- name: 'Wireless Air Velocity Sensor HVAC',
8501
- parse: (d) => {
8502
- return {
8503
- velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
7496
+ velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
8504
7497
  };
8505
7498
  }
8506
7499
  },
@@ -8512,206 +7505,62 @@ function sensor_types(parent){
8512
7505
  };
8513
7506
  }
8514
7507
  },
8515
- '95': {
8516
- name: '16-Bit 1-Channel 0-24VDC Receiver',
8517
- parse: (d) => {
8518
- return {
8519
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
8520
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
8521
- };
8522
- },
8523
- 'parse_fly': (frame) => {
8524
- let firmware = frame[2];
8525
- if(firmware > 13){ // firmware 14 and above
8526
- let frame_data = {};
8527
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8528
- if(!auto_check_interval){
8529
- frame_data.auto_check_interval = 'Disabled';
8530
- }else{
8531
- frame_data.auto_check_interval = auto_check_interval + " sec";
8532
- }
8533
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8534
- switch(frame[16]){
8535
- case 0:
8536
- frame_data.fsr = "+-6.114 V";
8537
- break;
8538
- case 1:
8539
- frame_data.fsr = "+-4.096 V";
8540
- break;
8541
- case 2:
8542
- frame_data.fsr = "+-2.048 V";
8543
- break;
8544
- case 3:
8545
- frame_data.fsr = "+-1.024 V";
8546
- break;
8547
- case 4:
8548
- frame_data.fsr = "+-0.512 V";
8549
- break;
8550
- case 5:
8551
- frame_data.fsr = "+-0.256 V";
8552
- break;
8553
- }
8554
- return {
8555
- 'firmware': frame[2],
8556
- 'fsr': frame_data.fsr,
8557
- 'boot_up_time': frame[17] + " sec",
8558
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8559
- 'auto_check_interval': frame_data.auto_check_interval,
8560
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8561
- 'always_on': frame_data.always_on,
8562
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8563
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8564
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8565
- 'hardware_id': frame.slice(37, 40),
8566
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8567
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8568
- 'machine_values': {
8569
- 'firmware': frame[2],
8570
- 'fsr': frame[16],
8571
- 'boot_up_time': frame[17],
8572
- 'adc_pin_reading': frame.slice(18, 20),
8573
- 'auto_check_interval': frame.slice(20, 22),
8574
- 'auto_check_percentage': frame.slice(22, 24),
8575
- 'always_on': frame[24],
8576
- 'calibration_one': frame.slice(25, 29),
8577
- 'calibration_two':frame.slice(29, 33),
8578
- 'calibration_three':frame.slice(33, 37),
8579
- 'hardware_id': frame.slice(37, 40),
8580
- 'report_rate': frame.slice(40, 44),
8581
- 'tx_life_counter': frame.slice(44, 48)
8582
- }
8583
- }
8584
- }
8585
- }
8586
- },
8587
- '96': {
8588
- name: '16-Bit 1-Channel 0-48VDC Receiver',
8589
- parse: (d) => {
8590
- return {
8591
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
8592
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
8593
- };
8594
- },
8595
- 'parse_fly': (frame) => {
8596
- let firmware = frame[2];
8597
- if(firmware > 13){ // firmware 14 and above
8598
- let frame_data = {};
8599
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
8600
- if(!auto_check_interval){
8601
- frame_data.auto_check_interval = 'Disabled';
8602
- }else{
8603
- frame_data.auto_check_interval = auto_check_interval + " sec";
8604
- }
8605
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
8606
- switch(frame[16]){
8607
- case 0:
8608
- frame_data.fsr = "+-6.114 V";
8609
- break;
8610
- case 1:
8611
- frame_data.fsr = "+-4.096 V";
8612
- break;
8613
- case 2:
8614
- frame_data.fsr = "+-2.048 V";
8615
- break;
8616
- case 3:
8617
- frame_data.fsr = "+-1.024 V";
8618
- break;
8619
- case 4:
8620
- frame_data.fsr = "+-0.512 V";
8621
- break;
8622
- case 5:
8623
- frame_data.fsr = "+-0.256 V";
8624
- break;
8625
- }
8626
- return {
8627
- 'firmware': frame[2],
8628
- 'fsr': frame_data.fsr,
8629
- 'boot_up_time': frame[17] + " sec",
8630
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
8631
- 'auto_check_interval': frame_data.auto_check_interval,
8632
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
8633
- 'always_on': frame_data.always_on,
8634
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
8635
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
8636
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
8637
- 'hardware_id': frame.slice(37, 40),
8638
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
8639
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8640
- 'machine_values': {
8641
- 'firmware': frame[2],
8642
- 'fsr': frame[16],
8643
- 'boot_up_time': frame[17],
8644
- 'adc_pin_reading': frame.slice(18, 20),
8645
- 'auto_check_interval': frame.slice(20, 22),
8646
- 'auto_check_percentage': frame.slice(22, 24),
8647
- 'always_on': frame[24],
8648
- 'calibration_one': frame.slice(25, 29),
8649
- 'calibration_two':frame.slice(29, 33),
8650
- 'calibration_three':frame.slice(33, 37),
8651
- 'hardware_id': frame.slice(37, 40),
8652
- 'report_rate': frame.slice(40, 44),
8653
- 'tx_life_counter': frame.slice(44, 48)
8654
- }
8655
- }
8656
- }
8657
- }
8658
- },
8659
- '97': {
8660
- name: 'One channel Dynamic Ultrasound vibration Sensor',
8661
- parse: (payload, parsed, mac) => {
8662
- if (payload[8] === 1) { // raw
8663
- var mode = payload[8];
8664
- var sampling_frequency = payload.slice(9, 13).reduce(msbLsb);
8665
- var sensor_index = payload[13];
8666
- var gain_db = payload[14];
8667
- var deviceAddr = mac;
8668
- var expected_packets = payload.slice(15, 17).reduce(msbLsb);
8669
- var current_packet = payload.slice(17, 19).reduce(msbLsb);
8670
- var sdata_start = 19;
8671
-
8672
- if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
8673
- // if(expected_packets == 1){
8674
- // this.build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
8675
- // }
8676
-
8677
- // if a packet is already stored with the same packet ID,
8678
- // or if packet ID is 1,
8679
- // or if current packet ID is not one more than last packet ID
8680
- if(current_packet == 1 && expected_packets != 1) {
8681
- if(current_packet in globalDevices[deviceAddr].data || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
8682
- console.log('bad packet breakdown, deleting stream. Current packet:');
8683
- console.log(current_packet);
8684
- console.log('Total Expected Packets:');
8685
- console.log(expected_packets);
8686
- // console.log(current_packet in globalDevices[deviceAddr].data && current_packet == 1 && expected_packets != 1);
8687
- // console.log(current_packet == 1);
8688
- // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
8689
- if(this.hasOwnProperty('failure_no')){
8690
- this.failure_no = this.failure_no + 1;
8691
- }
8692
- else{
8693
- this.failure_no = 1;
8694
- }
8695
- if(this.hasOwnProperty('failure_no')){
8696
- console.log('####falure no');
8697
- console.log(this.failure_no);
8698
- }
8699
- delete globalDevices[deviceAddr];
8700
- if(current_packet != 1){
8701
- return;
8702
- } else{
8703
- if(current_packet != 1){
8704
- console.log('bad packet cleanup');
8705
- return;
8706
- }
8707
- globalDevices[deviceAddr] = {
8708
- // stream_size: expected_packets,
8709
- data: {},
8710
- }
8711
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
8712
- return;
8713
- }
8714
- }
7508
+ '97': {
7509
+ name: 'One channel Dynamic Ultrasound vibration Sensor',
7510
+ parse: (payload, parsed, mac) => {
7511
+ if (payload[8] === 1) { // raw
7512
+ var mode = payload[8];
7513
+ var sampling_frequency = payload.slice(9, 13).reduce(msbLsb);
7514
+ var sensor_index = payload[13];
7515
+ var gain_db = payload[14];
7516
+ var deviceAddr = mac;
7517
+ var expected_packets = payload.slice(15, 17).reduce(msbLsb);
7518
+ var current_packet = payload.slice(17, 19).reduce(msbLsb);
7519
+ var sdata_start = 19;
7520
+
7521
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
7522
+ // if(expected_packets == 1){
7523
+ // this.build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
7524
+ // }
7525
+
7526
+ // if a packet is already stored with the same packet ID,
7527
+ // or if packet ID is 1,
7528
+ // or if current packet ID is not one more than last packet ID
7529
+ if(current_packet == 1 && expected_packets != 1) {
7530
+ if(current_packet in globalDevices[deviceAddr].data || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
7531
+ console.log('bad packet breakdown, deleting stream. Current packet:');
7532
+ console.log(current_packet);
7533
+ console.log('Total Expected Packets:');
7534
+ console.log(expected_packets);
7535
+ // console.log(current_packet in globalDevices[deviceAddr].data && current_packet == 1 && expected_packets != 1);
7536
+ // console.log(current_packet == 1);
7537
+ // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
7538
+ if(this.hasOwnProperty('failure_no')){
7539
+ this.failure_no = this.failure_no + 1;
7540
+ }
7541
+ else{
7542
+ this.failure_no = 1;
7543
+ }
7544
+ if(this.hasOwnProperty('failure_no')){
7545
+ console.log('####falure no');
7546
+ console.log(this.failure_no);
7547
+ }
7548
+ delete globalDevices[deviceAddr];
7549
+ if(current_packet != 1){
7550
+ return;
7551
+ } else{
7552
+ if(current_packet != 1){
7553
+ console.log('bad packet cleanup');
7554
+ return;
7555
+ }
7556
+ globalDevices[deviceAddr] = {
7557
+ // stream_size: expected_packets,
7558
+ data: {},
7559
+ }
7560
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
7561
+ return;
7562
+ }
7563
+ }
8715
7564
  }
8716
7565
  if(expected_packets == 1){
8717
7566
  if(current_packet != 1){
@@ -9110,377 +7959,298 @@ function sensor_types(parent){
9110
7959
  };
9111
7960
  }
9112
7961
  },
9113
- '105': {
9114
- name: '1 Channel Automatic Luber With Ultrasound Vibration Sensor',
9115
- parse: (d) => {
9116
- return {
9117
- raw_adc: d.slice(0, 2).reduce(msbLsb),
9118
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
9119
- db: d.slice(4, 6).reduce(msbLsb) / 100
9120
- };
7962
+ '108': {
7963
+ name: 'Machine Uptime Monitoring Sensor',
7964
+ parse: (d, payload) => {
7965
+ let firmware = payload[1];
7966
+ // if((payload[7] & 2) != 0){
7967
+ // console.log('Error found');
7968
+ // // parsed.data = {error: 'Error found, Accelerometer Probe may be unattached'};
7969
+ // let error = {error: 'Error found, Accelerometer Probe may be unattached'};
7970
+ // return error;
7971
+ // }
7972
+ if(firmware > 4){
7973
+ let report_type = "Regular";
7974
+ switch(d[41]){
7975
+ case 0:
7976
+ report_type = "Regular";
7977
+ break;
7978
+ case 1:
7979
+ report_type = "Shift end";
7980
+ break;
7981
+ case 2:
7982
+ report_type = "Interrupt";
7983
+ break;
7984
+ case 3:
7985
+ report_type = "Threshold";
7986
+ break;
7987
+ }
7988
+ let res = {
7989
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
7990
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
7991
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
7992
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
7993
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
7994
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
7995
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
7996
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
7997
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
7998
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
7999
+ input_di: d[40] & 1 ? 1 : 0,
8000
+ input_ct: d[40] & 2 ? 1 : 0,
8001
+ input_opto: d[40] & 4 ? 1 : 0,
8002
+ input_acc: d[40] & 8 ? 1 : 0,
8003
+ input_mag: d[40] & 16 ? 1 : 0,
8004
+ report_type: report_type,
8005
+ rtc: [
8006
+ String(d[42]).padStart(2, '0'),
8007
+ String(d[43]).padStart(2, '0'),
8008
+ String(d[44]).padStart(2, '0')
8009
+ ].join(':')
8010
+ };
8011
+ if((payload[7] & 2) != 0){
8012
+ res.error = {
8013
+ accelerometer_counter: "Error found, Accelerometer Probe may be unattached",
8014
+ accelerometer_uptime: "Error found, Accelerometer Probe may be unattached",
8015
+ input_acc: "Error found, Accelerometer Probe may be unattached"
8016
+ }
8017
+ // res.accelerometer_counter = "No probe detected";
8018
+ // res.accelerometer_uptime = "No probe detected";
8019
+ // res.input_acc = "No probe detected";
8020
+ };
8021
+ return res;
8022
+ }else{
8023
+ let res = {
8024
+ digital_input_counter: d.slice(0, 4).reduce(msbLsb),
8025
+ digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
8026
+ ct_input_counter: d.slice(8, 12).reduce(msbLsb),
8027
+ ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
8028
+ opto_input_counter: d.slice(16, 20).reduce(msbLsb),
8029
+ opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
8030
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
8031
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
8032
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
8033
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
8034
+ input_di: d[40] & 1 ? 1 : 0,
8035
+ input_ct: d[40] & 2 ? 1 : 0,
8036
+ input_opto: d[40] & 4 ? 1 : 0,
8037
+ input_acc: d[40] & 8 ? 1 : 0,
8038
+ input_mag: d[40] & 16 ? 1 : 0
8039
+ };
8040
+ if((payload[7] & 2) != 0){
8041
+ res.error = {
8042
+ accelerometer_counter: "Error found, Accelerometer Probe may be unattached",
8043
+ accelerometer_uptime: "Error found, Accelerometer Probe may be unattached",
8044
+ input_acc: "Error found, Accelerometer Probe may be unattached"
8045
+ }
8046
+ };
8047
+ return res;
8048
+ }
9121
8049
  },
9122
8050
  'parse_fly': (frame) => {
9123
- let firmware = frame[2];
9124
- if(firmware > 13){ // firmware 14 and above
9125
- let frame_data = {};
9126
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
9127
- if(!auto_check_interval){
9128
- frame_data.auto_check_interval = 'Disabled';
9129
- }else{
9130
- frame_data.auto_check_interval = auto_check_interval + " sec";
8051
+ if(frame[2] > 18){
8052
+ let reset_mode = "Disabled";
8053
+ switch(frame[38]){
8054
+ case 0:
8055
+ reset_mode = "Disabled";
8056
+ break;
8057
+ case 1:
8058
+ reset_mode = "Shift Ends";
8059
+ break;
8060
+ case 2:
8061
+ reset_mode = "Timeout";
8062
+ break;
9131
8063
  }
9132
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
9133
- switch(frame[16]){
8064
+ let acc_odr = "10 Hz";
8065
+ switch(frame[40]){
9134
8066
  case 0:
9135
- frame_data.fsr = "+-6.114 V";
9136
- break;
8067
+ acc_odr = "10 Hz";
8068
+ break;
9137
8069
  case 1:
9138
- frame_data.fsr = "+-4.096 V";
9139
- break;
8070
+ acc_odr = "20 Hz";
8071
+ break;
9140
8072
  case 2:
9141
- frame_data.fsr = "+-2.048 V";
9142
- break;
8073
+ acc_odr = "50 Hz";
8074
+ break;
9143
8075
  case 3:
9144
- frame_data.fsr = "+-1.024 V";
9145
- break;
9146
- case 4:
9147
- frame_data.fsr = "+-0.512 V";
9148
- break;
8076
+ acc_odr = "100 Hz";
8077
+ break;
8078
+ case 4:
8079
+ acc_odr = "200 Hz";
8080
+ break;
9149
8081
  case 5:
9150
- frame_data.fsr = "+-0.256 V";
9151
- break;
9152
- }
9153
- return {
9154
- 'firmware': frame[2],
9155
- 'fsr': frame_data.fsr,
9156
- 'boot_up_time': frame[17] + " sec",
9157
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
9158
- 'auto_check_interval': frame_data.auto_check_interval,
9159
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
9160
- 'always_on': frame_data.always_on,
9161
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
9162
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
9163
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
9164
- 'hardware_id': frame.slice(37, 40),
9165
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
9166
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
9167
- 'machine_values': {
9168
- 'firmware': frame[2],
9169
- 'fsr': frame[16],
9170
- 'boot_up_time': frame[17],
9171
- 'adc_pin_reading': frame.slice(18, 20),
9172
- 'auto_check_interval': frame.slice(20, 22),
9173
- 'auto_check_percentage': frame.slice(22, 24),
9174
- 'always_on': frame[24],
9175
- 'calibration_one': frame.slice(25, 29),
9176
- 'calibration_two':frame.slice(29, 33),
9177
- 'calibration_three':frame.slice(33, 37),
9178
- 'hardware_id': frame.slice(37, 40),
9179
- 'report_rate': frame.slice(40, 44),
9180
- 'tx_life_counter': frame.slice(44, 48)
9181
- }
9182
- }
9183
- }
9184
- }
9185
- },
9186
- '106': {
9187
- name: '2 Channel Automatic Luber With Ultrasound Vibration Sensor',
9188
- parse: (d) => {
9189
- return {
9190
- c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
9191
- c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
9192
- c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
9193
- c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
9194
- c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
9195
- c2_db: d.slice(10, 12).reduce(msbLsb) / 100
9196
- };
9197
- },
9198
- 'parse_fly': (frame) => {
9199
- let firmware = frame[2];
9200
- if(firmware > 13){ // firmware 14 and above
9201
- let frame_data = {};
9202
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
9203
- if(!auto_check_interval){
9204
- frame_data.auto_check_interval = 'Disabled';
9205
- }else{
9206
- frame_data.auto_check_interval = auto_check_interval + " sec";
8082
+ acc_odr = "400 Hz";
8083
+ break;
9207
8084
  }
9208
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
9209
- switch(frame[16]){
8085
+ let rtc_sampling_interval = "5 sec";
8086
+ switch(frame[39]){
9210
8087
  case 0:
9211
- frame_data.fsr = "+-6.114 V";
9212
- break;
8088
+ rtc_sampling_interval = "1 min";
8089
+ break;
9213
8090
  case 1:
9214
- frame_data.fsr = "+-4.096 V";
9215
- break;
8091
+ rtc_sampling_interval = "5 min";
8092
+ break;
9216
8093
  case 2:
9217
- frame_data.fsr = "+-2.048 V";
9218
- break;
8094
+ rtc_sampling_interval = "15 min";
8095
+ break;
9219
8096
  case 3:
9220
- frame_data.fsr = "+-1.024 V";
9221
- break;
8097
+ rtc_sampling_interval = "30 min";
8098
+ break;
9222
8099
  case 4:
9223
- frame_data.fsr = "+-0.512 V";
9224
- break;
8100
+ rtc_sampling_interval = "1 hour";
8101
+ break;
9225
8102
  case 5:
9226
- frame_data.fsr = "+-0.256 V";
9227
- break;
8103
+ rtc_sampling_interval = "2 hours";
8104
+ break;
8105
+ case 6:
8106
+ rtc_sampling_interval = "3 hours";
8107
+ break;
8108
+ case 7:
8109
+ rtc_sampling_interval = "6 hours";
8110
+ break;
8111
+ case 8:
8112
+ rtc_sampling_interval = "12 hours";
8113
+ break;
8114
+ case 9:
8115
+ rtc_sampling_interval = "5 sec";
8116
+ break;
8117
+ case 10:
8118
+ rtc_sampling_interval = "10 sec";
8119
+ break;
8120
+ case 11:
8121
+ rtc_sampling_interval = "15 sec";
8122
+ break;
8123
+ case 12:
8124
+ rtc_sampling_interval = "30 sec";
8125
+ break;
8126
+ }
8127
+ let screen_control = 0;
8128
+ switch(frame[41]){
8129
+ case 0:
8130
+ screen_control = "IO1";
8131
+ break;
8132
+ case 1:
8133
+ screen_control = "IO2";
8134
+ break;
8135
+ case 2:
8136
+ screen_control = "IO3";
8137
+ break;
8138
+ case 3:
8139
+ screen_control = "Accelero";
8140
+ break;
8141
+ case 4:
8142
+ screen_control = "Magneto";
8143
+ break;
9228
8144
  }
9229
8145
  return {
9230
8146
  'firmware': frame[2],
9231
- 'fsr': frame_data.fsr,
9232
- 'boot_up_time': frame[17] + " sec",
9233
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
9234
- 'auto_check_interval': frame_data.auto_check_interval,
9235
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
9236
- 'always_on': frame_data.always_on,
9237
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
9238
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
9239
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
9240
- 'hardware_id': frame.slice(37, 40),
9241
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
9242
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
8147
+ 'accelerometer_threshold': (frame[16]* 32) + " mg",
8148
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + " msec",
8149
+ 'accelero_state': frame[19]? "Enabled": "Disabled",
8150
+ 'input_1_active_edge': frame[20]? "Rising": "Falling",
8151
+ 'input_2_active_edge': frame[21]? "Rising": "Falling",
8152
+ 'input_3_active_edge': frame[22]? "Rising": "Falling",
8153
+ 'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
8154
+ 'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
8155
+ 'Shift_end_1': [
8156
+ String(frame[28]).padStart(2, '0'),
8157
+ String(frame[29]).padStart(2, '0')
8158
+ ].join(':'),
8159
+ 'Shift_end_2': [
8160
+ String(frame[30]).padStart(2, '0'),
8161
+ String(frame[31]).padStart(2, '0')
8162
+ ].join(':'),
8163
+ 'Shift_end_3': [
8164
+ String(frame[32]).padStart(2, '0'),
8165
+ String(frame[33]).padStart(2, '0')
8166
+ ].join(':'),
8167
+ 'Shift_end_4': [
8168
+ String(frame[34]).padStart(2, '0'),
8169
+ String(frame[35]).padStart(2, '0')
8170
+ ].join(':'),
8171
+ 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + " min",
8172
+ 'counter_reset_mode': reset_mode,
8173
+ 'sampling_interval': rtc_sampling_interval,
8174
+ 'acc_odr': acc_odr,
8175
+ 'screen_control': screen_control,
8176
+ 'screen_on_time': frame[42] + ' sec',
8177
+ 'interrupt_timeout': frame.slice(43, 45).reduce(msbLsb) + ' msec',
8178
+ 'hardware_id': frame.slice(45, 48),
8179
+ 'report_rate': frame.slice(48, 52).reduce(msbLsb) + " sec",
8180
+ 'tx_life_counter': frame.slice(52, 56).reduce(msbLsb),
9243
8181
  'machine_values': {
9244
8182
  'firmware': frame[2],
9245
- 'fsr': frame[16],
9246
- 'boot_up_time': frame[17],
9247
- 'adc_pin_reading': frame.slice(18, 20),
9248
- 'auto_check_interval': frame.slice(20, 22),
9249
- 'auto_check_percentage': frame.slice(22, 24),
9250
- 'always_on': frame[24],
9251
- 'calibration_one': frame.slice(25, 29),
9252
- 'calibration_two':frame.slice(29, 33),
9253
- 'calibration_three':frame.slice(33, 37),
9254
- 'hardware_id': frame.slice(37, 40),
9255
- 'report_rate': frame.slice(40, 44),
9256
- 'tx_life_counter': frame.slice(44, 48)
8183
+ 'accelerometer_threshold': frame[16],
8184
+ 'debouncing_timeout': frame.slice(17, 19),
8185
+ 'accelero_state': frame[19],
8186
+ 'input_1_active_edge': frame[20],
8187
+ 'input_2_active_edge': frame[21],
8188
+ 'input_3_active_edge': frame[22],
8189
+ 'counter_threshold': frame.slice(23, 27),
8190
+ 'trasnmit_on_change_status': frame[27],
8191
+ 'Shift_end_1': frame.slice(28, 30),
8192
+ 'Shift_end_2': frame.slice(30, 32),
8193
+ 'Shift_end_3': frame.slice(32, 34),
8194
+ 'Shift_end_4': frame.slice(34, 36),
8195
+ 'reset_timeout': frame.slice(36, 38),
8196
+ 'counter_reset_mode': frame[38],
8197
+ 'sampling_interval': frame[39],
8198
+ 'acc_odr': frame[40],
8199
+ 'screen_control': frame[41],
8200
+ 'screen_on_time': frame[42],
8201
+ 'interrupt_timeout': frame.slice(43, 45),
8202
+ 'hardware_id': frame.slice(45, 48),
8203
+ 'report_rate': frame.slice(48, 52),
8204
+ 'tx_life_counter': frame.slice(52, 56)
9257
8205
  }
9258
8206
  }
9259
- }
9260
- }
9261
- },
9262
- '107': {
9263
- name: '16-Bit 4-Channel 4-20mA',
9264
- parse: (d) => {
9265
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
9266
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
9267
- var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
9268
- var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
9269
- var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
9270
- var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
9271
- var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
9272
- var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
9273
- return {
9274
- adc1: adc1,
9275
- adc2: adc2,
9276
- adc3: adc3,
9277
- adc4: adc4,
9278
- ma1: ma1,
9279
- ma2: ma2,
9280
- ma3: ma3,
9281
- ma4: ma4
9282
- };
9283
- },
9284
- 'parse_fly': (frame) => {
9285
- let firmware = frame[2];
9286
- if(firmware > 13){ // firmware 14 and above
9287
- let frame_data = {};
9288
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
9289
- if(!auto_check_interval){
9290
- frame_data.auto_check_interval = 'Disabled';
9291
- }else{
9292
- frame_data.auto_check_interval = auto_check_interval + " sec";
8207
+ }else if(frame[2] > 13){
8208
+ let reset_mode = "Disabled";
8209
+ switch(frame[38]){
8210
+ case 0:
8211
+ reset_mode = "Disabled";
8212
+ break;
8213
+ case 1:
8214
+ reset_mode = "Shift Ends";
8215
+ break;
8216
+ case 2:
8217
+ reset_mode = "Timeout";
8218
+ break;
9293
8219
  }
9294
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
9295
- switch(frame[16]){
8220
+ let acc_odr = "10Hz";
8221
+ switch(frame[40]){
9296
8222
  case 0:
9297
- frame_data.fsr = "+-6.114 V";
9298
- break;
8223
+ acc_odr = "10Hz";
8224
+ break;
9299
8225
  case 1:
9300
- frame_data.fsr = "+-4.096 V";
9301
- break;
8226
+ acc_odr = "20Hz";
8227
+ break;
9302
8228
  case 2:
9303
- frame_data.fsr = "+-2.048 V";
9304
- break;
8229
+ acc_odr = "50Hz";
8230
+ break;
9305
8231
  case 3:
9306
- frame_data.fsr = "+-1.024 V";
9307
- break;
9308
- case 4:
9309
- frame_data.fsr = "+-0.512 V";
9310
- break;
9311
- case 5:
9312
- frame_data.fsr = "+-0.256 V";
9313
- break;
9314
- }
9315
- return {
9316
- 'firmware': frame[2],
9317
- 'fsr': frame_data.fsr,
9318
- 'boot_up_time': frame[17] + " sec",
9319
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
9320
- 'auto_check_interval': frame_data.auto_check_interval,
9321
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
9322
- 'always_on': frame_data.always_on,
9323
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
9324
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
9325
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
9326
- 'hardware_id': frame.slice(37, 40),
9327
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
9328
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
9329
- 'machine_values': {
9330
- 'firmware': frame[2],
9331
- 'fsr': frame[16],
9332
- 'boot_up_time': frame[17],
9333
- 'adc_pin_reading': frame.slice(18, 20),
9334
- 'auto_check_interval': frame.slice(20, 22),
9335
- 'auto_check_percentage': frame.slice(22, 24),
9336
- 'always_on': frame[24],
9337
- 'calibration_one': frame.slice(25, 29),
9338
- 'calibration_two':frame.slice(29, 33),
9339
- 'calibration_three':frame.slice(33, 37),
9340
- 'hardware_id': frame.slice(37, 40),
9341
- 'report_rate': frame.slice(40, 44),
9342
- 'tx_life_counter': frame.slice(44, 48)
9343
- }
9344
- }
9345
- }
9346
- }
9347
- },
9348
- '108': {
9349
- name: 'Machine Uptime Monitoring Sensor',
9350
- parse: (d, payload) => {
9351
- let firmware = payload[1];
9352
- // if((payload[7] & 2) != 0){
9353
- // console.log('Error found');
9354
- // // parsed.data = {error: 'Error found, Accelerometer Probe may be unattached'};
9355
- // let error = {error: 'Error found, Accelerometer Probe may be unattached'};
9356
- // return error;
9357
- // }
9358
- if(firmware > 4){
9359
- let report_type = "Regular";
9360
- switch(d[41]){
9361
- case 0:
9362
- report_type = "Regular";
9363
- break;
9364
- case 1:
9365
- report_type = "Shift end";
9366
- break;
9367
- case 2:
9368
- report_type = "Interrupt";
9369
- break;
9370
- case 3:
9371
- report_type = "Threshold";
9372
- break;
9373
- }
9374
- let res = {
9375
- digital_input_counter: d.slice(0, 4).reduce(msbLsb),
9376
- digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
9377
- ct_input_counter: d.slice(8, 12).reduce(msbLsb),
9378
- ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
9379
- opto_input_counter: d.slice(16, 20).reduce(msbLsb),
9380
- opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
9381
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
9382
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
9383
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
9384
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
9385
- input_di: d[40] & 1 ? 1 : 0,
9386
- input_ct: d[40] & 2 ? 1 : 0,
9387
- input_opto: d[40] & 4 ? 1 : 0,
9388
- input_acc: d[40] & 8 ? 1 : 0,
9389
- input_mag: d[40] & 16 ? 1 : 0,
9390
- report_type: report_type,
9391
- rtc: [
9392
- String(d[42]).padStart(2, '0'),
9393
- String(d[43]).padStart(2, '0'),
9394
- String(d[44]).padStart(2, '0')
9395
- ].join(':')
9396
- };
9397
- if((payload[7] & 2) != 0){
9398
- res.error = {
9399
- accelerometer_counter: "Error found, Accelerometer Probe may be unattached",
9400
- accelerometer_uptime: "Error found, Accelerometer Probe may be unattached",
9401
- input_acc: "Error found, Accelerometer Probe may be unattached"
9402
- }
9403
- // res.accelerometer_counter = "No probe detected";
9404
- // res.accelerometer_uptime = "No probe detected";
9405
- // res.input_acc = "No probe detected";
9406
- };
9407
- return res;
9408
- }else{
9409
- let res = {
9410
- digital_input_counter: d.slice(0, 4).reduce(msbLsb),
9411
- digital_input_uptime: d.slice(4, 8).reduce(msbLsb),
9412
- ct_input_counter: d.slice(8, 12).reduce(msbLsb),
9413
- ct_input_uptime: d.slice(12, 16).reduce(msbLsb),
9414
- opto_input_counter: d.slice(16, 20).reduce(msbLsb),
9415
- opto_input_uptime: d.slice(20, 24).reduce(msbLsb),
9416
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
9417
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
9418
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
9419
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb),
9420
- input_di: d[40] & 1 ? 1 : 0,
9421
- input_ct: d[40] & 2 ? 1 : 0,
9422
- input_opto: d[40] & 4 ? 1 : 0,
9423
- input_acc: d[40] & 8 ? 1 : 0,
9424
- input_mag: d[40] & 16 ? 1 : 0
9425
- };
9426
- if((payload[7] & 2) != 0){
9427
- res.error = {
9428
- accelerometer_counter: "Error found, Accelerometer Probe may be unattached",
9429
- accelerometer_uptime: "Error found, Accelerometer Probe may be unattached",
9430
- input_acc: "Error found, Accelerometer Probe may be unattached"
9431
- }
9432
- };
9433
- return res;
9434
- }
9435
- },
9436
- 'parse_fly': (frame) => {
9437
- if(frame[2] > 18){
9438
- let reset_mode = "Disabled";
9439
- switch(frame[38]){
9440
- case 0:
9441
- reset_mode = "Disabled";
9442
- break;
9443
- case 1:
9444
- reset_mode = "Shift Ends";
9445
- break;
9446
- case 2:
9447
- reset_mode = "Timeout";
9448
- break;
9449
- }
9450
- let acc_odr = "10 Hz";
9451
- switch(frame[40]){
9452
- case 0:
9453
- acc_odr = "10 Hz";
9454
- break;
9455
- case 1:
9456
- acc_odr = "20 Hz";
9457
- break;
9458
- case 2:
9459
- acc_odr = "50 Hz";
9460
- break;
9461
- case 3:
9462
- acc_odr = "100 Hz";
8232
+ acc_odr = "100Hz";
9463
8233
  break;
9464
8234
  case 4:
9465
- acc_odr = "200 Hz";
8235
+ acc_odr = "200Hz";
9466
8236
  break;
9467
8237
  case 5:
9468
- acc_odr = "400 Hz";
8238
+ acc_odr = "400Hz";
9469
8239
  break;
9470
8240
  }
9471
- let rtc_sampling_interval = "5 sec";
8241
+ let rtc_sampling_interval = "5 seconds";
9472
8242
  switch(frame[39]){
9473
8243
  case 0:
9474
- rtc_sampling_interval = "1 min";
8244
+ rtc_sampling_interval = "1 minute";
9475
8245
  break;
9476
8246
  case 1:
9477
- rtc_sampling_interval = "5 min";
8247
+ rtc_sampling_interval = "5 minutes";
9478
8248
  break;
9479
8249
  case 2:
9480
- rtc_sampling_interval = "15 min";
8250
+ rtc_sampling_interval = "15 minutes";
9481
8251
  break;
9482
8252
  case 3:
9483
- rtc_sampling_interval = "30 min";
8253
+ rtc_sampling_interval = "30 minutes";
9484
8254
  break;
9485
8255
  case 4:
9486
8256
  rtc_sampling_interval = "1 hour";
@@ -9498,40 +8268,22 @@ function sensor_types(parent){
9498
8268
  rtc_sampling_interval = "12 hours";
9499
8269
  break;
9500
8270
  case 9:
9501
- rtc_sampling_interval = "5 sec";
8271
+ rtc_sampling_interval = "5 seconds";
9502
8272
  break;
9503
8273
  case 10:
9504
- rtc_sampling_interval = "10 sec";
8274
+ rtc_sampling_interval = "10 seconds";
9505
8275
  break;
9506
8276
  case 11:
9507
- rtc_sampling_interval = "15 sec";
8277
+ rtc_sampling_interval = "15 seconds";
9508
8278
  break;
9509
8279
  case 12:
9510
- rtc_sampling_interval = "30 sec";
9511
- break;
9512
- }
9513
- let screen_control = 0;
9514
- switch(frame[41]){
9515
- case 0:
9516
- screen_control = "IO1";
9517
- break;
9518
- case 1:
9519
- screen_control = "IO2";
9520
- break;
9521
- case 2:
9522
- screen_control = "IO3";
9523
- break;
9524
- case 3:
9525
- screen_control = "Accelero";
9526
- break;
9527
- case 4:
9528
- screen_control = "Magneto";
8280
+ rtc_sampling_interval = "30 seconds";
9529
8281
  break;
9530
8282
  }
9531
8283
  return {
9532
8284
  'firmware': frame[2],
9533
- 'accelerometer_threshold': (frame[16]* 32) + " mg",
9534
- 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + " msec",
8285
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
8286
+ 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
9535
8287
  'accelero_state': frame[19]? "Enabled": "Disabled",
9536
8288
  'input_1_active_edge': frame[20]? "Rising": "Falling",
9537
8289
  'input_2_active_edge': frame[21]? "Rising": "Falling",
@@ -9554,16 +8306,14 @@ function sensor_types(parent){
9554
8306
  String(frame[34]).padStart(2, '0'),
9555
8307
  String(frame[35]).padStart(2, '0')
9556
8308
  ].join(':'),
9557
- 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + " min",
8309
+ 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
9558
8310
  'counter_reset_mode': reset_mode,
9559
8311
  'sampling_interval': rtc_sampling_interval,
9560
8312
  'acc_odr': acc_odr,
9561
- 'screen_control': screen_control,
9562
- 'screen_on_time': frame[42] + ' sec',
9563
- 'interrupt_timeout': frame.slice(43, 45).reduce(msbLsb) + ' msec',
9564
- 'hardware_id': frame.slice(45, 48),
9565
- 'report_rate': frame.slice(48, 52).reduce(msbLsb) + " sec",
9566
- 'tx_life_counter': frame.slice(52, 56).reduce(msbLsb),
8313
+ 'counter_ignore_timeout': frame.slice(41, 43).reduce(msbLsb) + "sec",
8314
+ 'hardware_id': frame.slice(43, 46),
8315
+ 'report_rate': frame.slice(46, 50).reduce(msbLsb) + "sec",
8316
+ 'tx_life_counter': frame.slice(50, 54).reduce(msbLsb),
9567
8317
  'machine_values': {
9568
8318
  'firmware': frame[2],
9569
8319
  'accelerometer_threshold': frame[16],
@@ -9582,15 +8332,13 @@ function sensor_types(parent){
9582
8332
  'counter_reset_mode': frame[38],
9583
8333
  'sampling_interval': frame[39],
9584
8334
  'acc_odr': frame[40],
9585
- 'screen_control': frame[41],
9586
- 'screen_on_time': frame[42],
9587
- 'interrupt_timeout': frame.slice(43, 45),
9588
- 'hardware_id': frame.slice(45, 48),
9589
- 'report_rate': frame.slice(48, 52),
9590
- 'tx_life_counter': frame.slice(52, 56)
8335
+ 'counter_ignore_timeout': frame.slice(41, 43),
8336
+ 'hardware_id': frame.slice(43, 46),
8337
+ 'report_rate': frame.slice(46, 50),
8338
+ 'tx_life_counter': frame.slice(50, 54)
9591
8339
  }
9592
8340
  }
9593
- }else if(frame[2] > 13){
8341
+ } else if(frame[2] > 9){
9594
8342
  let reset_mode = "Disabled";
9595
8343
  switch(frame[38]){
9596
8344
  case 0:
@@ -9696,10 +8444,9 @@ function sensor_types(parent){
9696
8444
  'counter_reset_mode': reset_mode,
9697
8445
  'sampling_interval': rtc_sampling_interval,
9698
8446
  'acc_odr': acc_odr,
9699
- 'counter_ignore_timeout': frame.slice(41, 43).reduce(msbLsb) + "sec",
9700
- 'hardware_id': frame.slice(43, 46),
9701
- 'report_rate': frame.slice(46, 50).reduce(msbLsb) + "sec",
9702
- 'tx_life_counter': frame.slice(50, 54).reduce(msbLsb),
8447
+ 'hardware_id': frame.slice(41, 44),
8448
+ 'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
8449
+ 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
9703
8450
  'machine_values': {
9704
8451
  'firmware': frame[2],
9705
8452
  'accelerometer_threshold': frame[16],
@@ -9718,15 +8465,14 @@ function sensor_types(parent){
9718
8465
  'counter_reset_mode': frame[38],
9719
8466
  'sampling_interval': frame[39],
9720
8467
  'acc_odr': frame[40],
9721
- 'counter_ignore_timeout': frame.slice(41, 43),
9722
- 'hardware_id': frame.slice(43, 46),
9723
- 'report_rate': frame.slice(46, 50),
9724
- 'tx_life_counter': frame.slice(50, 54)
8468
+ 'hardware_id': frame.slice(41, 44),
8469
+ 'report_rate': frame.slice(44, 48),
8470
+ 'tx_life_counter': frame.slice(48, 52)
9725
8471
  }
9726
8472
  }
9727
- } else if(frame[2] > 9){
8473
+ } else if(frame[2] > 8){
9728
8474
  let reset_mode = "Disabled";
9729
- switch(frame[38]){
8475
+ switch(frame[37]){
9730
8476
  case 0:
9731
8477
  reset_mode = "Disabled";
9732
8478
  break;
@@ -9738,7 +8484,7 @@ function sensor_types(parent){
9738
8484
  break;
9739
8485
  }
9740
8486
  let acc_odr = "10Hz";
9741
- switch(frame[40]){
8487
+ switch(frame[39]){
9742
8488
  case 0:
9743
8489
  acc_odr = "10Hz";
9744
8490
  break;
@@ -9759,139 +8505,7 @@ function sensor_types(parent){
9759
8505
  break;
9760
8506
  }
9761
8507
  let rtc_sampling_interval = "5 seconds";
9762
- switch(frame[39]){
9763
- case 0:
9764
- rtc_sampling_interval = "1 minute";
9765
- break;
9766
- case 1:
9767
- rtc_sampling_interval = "5 minutes";
9768
- break;
9769
- case 2:
9770
- rtc_sampling_interval = "15 minutes";
9771
- break;
9772
- case 3:
9773
- rtc_sampling_interval = "30 minutes";
9774
- break;
9775
- case 4:
9776
- rtc_sampling_interval = "1 hour";
9777
- break;
9778
- case 5:
9779
- rtc_sampling_interval = "2 hours";
9780
- break;
9781
- case 6:
9782
- rtc_sampling_interval = "3 hours";
9783
- break;
9784
- case 7:
9785
- rtc_sampling_interval = "6 hours";
9786
- break;
9787
- case 8:
9788
- rtc_sampling_interval = "12 hours";
9789
- break;
9790
- case 9:
9791
- rtc_sampling_interval = "5 seconds";
9792
- break;
9793
- case 10:
9794
- rtc_sampling_interval = "10 seconds";
9795
- break;
9796
- case 11:
9797
- rtc_sampling_interval = "15 seconds";
9798
- break;
9799
- case 12:
9800
- rtc_sampling_interval = "30 seconds";
9801
- break;
9802
- }
9803
- return {
9804
- 'firmware': frame[2],
9805
- 'accelerometer_threshold': (frame[16]* 32) + "mg",
9806
- 'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
9807
- 'accelero_state': frame[19]? "Enabled": "Disabled",
9808
- 'input_1_active_edge': frame[20]? "Rising": "Falling",
9809
- 'input_2_active_edge': frame[21]? "Rising": "Falling",
9810
- 'input_3_active_edge': frame[22]? "Rising": "Falling",
9811
- 'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
9812
- 'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
9813
- 'Shift_end_1': [
9814
- String(frame[28]).padStart(2, '0'),
9815
- String(frame[29]).padStart(2, '0')
9816
- ].join(':'),
9817
- 'Shift_end_2': [
9818
- String(frame[30]).padStart(2, '0'),
9819
- String(frame[31]).padStart(2, '0')
9820
- ].join(':'),
9821
- 'Shift_end_3': [
9822
- String(frame[32]).padStart(2, '0'),
9823
- String(frame[33]).padStart(2, '0')
9824
- ].join(':'),
9825
- 'Shift_end_4': [
9826
- String(frame[34]).padStart(2, '0'),
9827
- String(frame[35]).padStart(2, '0')
9828
- ].join(':'),
9829
- 'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
9830
- 'counter_reset_mode': reset_mode,
9831
- 'sampling_interval': rtc_sampling_interval,
9832
- 'acc_odr': acc_odr,
9833
- 'hardware_id': frame.slice(41, 44),
9834
- 'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
9835
- 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
9836
- 'machine_values': {
9837
- 'firmware': frame[2],
9838
- 'accelerometer_threshold': frame[16],
9839
- 'debouncing_timeout': frame.slice(17, 19),
9840
- 'accelero_state': frame[19],
9841
- 'input_1_active_edge': frame[20],
9842
- 'input_2_active_edge': frame[21],
9843
- 'input_3_active_edge': frame[22],
9844
- 'counter_threshold': frame.slice(23, 27),
9845
- 'trasnmit_on_change_status': frame[27],
9846
- 'Shift_end_1': frame.slice(28, 30),
9847
- 'Shift_end_2': frame.slice(30, 32),
9848
- 'Shift_end_3': frame.slice(32, 34),
9849
- 'Shift_end_4': frame.slice(34, 36),
9850
- 'reset_timeout': frame.slice(36, 38),
9851
- 'counter_reset_mode': frame[38],
9852
- 'sampling_interval': frame[39],
9853
- 'acc_odr': frame[40],
9854
- 'hardware_id': frame.slice(41, 44),
9855
- 'report_rate': frame.slice(44, 48),
9856
- 'tx_life_counter': frame.slice(48, 52)
9857
- }
9858
- }
9859
- } else if(frame[2] > 8){
9860
- let reset_mode = "Disabled";
9861
- switch(frame[37]){
9862
- case 0:
9863
- reset_mode = "Disabled";
9864
- break;
9865
- case 1:
9866
- reset_mode = "Shift Ends";
9867
- break;
9868
- case 2:
9869
- reset_mode = "Timeout";
9870
- break;
9871
- }
9872
- let acc_odr = "10Hz";
9873
- switch(frame[39]){
9874
- case 0:
9875
- acc_odr = "10Hz";
9876
- break;
9877
- case 1:
9878
- acc_odr = "20Hz";
9879
- break;
9880
- case 2:
9881
- acc_odr = "50Hz";
9882
- break;
9883
- case 3:
9884
- acc_odr = "100Hz";
9885
- break;
9886
- case 4:
9887
- acc_odr = "200Hz";
9888
- break;
9889
- case 5:
9890
- acc_odr = "400Hz";
9891
- break;
9892
- }
9893
- let rtc_sampling_interval = "5 seconds";
9894
- switch(frame[38]){
8508
+ switch(frame[38]){
9895
8509
  case 0:
9896
8510
  rtc_sampling_interval = "1 minute";
9897
8511
  break;
@@ -10031,795 +8645,173 @@ function sensor_types(parent){
10031
8645
  case 1:
10032
8646
  reset_mode = "Shift Ends";
10033
8647
  break;
10034
- case 2:
10035
- reset_mode = "Timeout";
10036
- break;
10037
- }
10038
- let acc_odr = "10Hz";
10039
- switch(frame[39]){
10040
- case 0:
10041
- acc_odr = "10Hz";
10042
- break;
10043
- case 1:
10044
- acc_odr = "20Hz";
10045
- break;
10046
- case 2:
10047
- acc_odr = "50Hz";
10048
- break;
10049
- case 3:
10050
- acc_odr = "100Hz";
10051
- break;
10052
- case 4:
10053
- acc_odr = "200Hz";
10054
- break;
10055
- case 5:
10056
- acc_odr = "400Hz";
10057
- break;
10058
- }
10059
- let rtc_sampling_interval = "5 seconds";
10060
- switch(frame[38]){
10061
- case 0:
10062
- rtc_sampling_interval = "1 minute";
10063
- break;
10064
- case 1:
10065
- rtc_sampling_interval = "5 minutes";
10066
- break;
10067
- case 2:
10068
- rtc_sampling_interval = "15 minutes";
10069
- break;
10070
- case 3:
10071
- rtc_sampling_interval = "30 minutes";
10072
- break;
10073
- case 4:
10074
- rtc_sampling_interval = "1 hour";
10075
- break;
10076
- case 5:
10077
- rtc_sampling_interval = "2 hours";
10078
- break;
10079
- case 6:
10080
- rtc_sampling_interval = "3 hours";
10081
- break;
10082
- case 7:
10083
- rtc_sampling_interval = "6 hours";
10084
- break;
10085
- case 8:
10086
- rtc_sampling_interval = "12 hours";
10087
- break;
10088
- case 9:
10089
- rtc_sampling_interval = "5 seconds";
10090
- break;
10091
- case 10:
10092
- rtc_sampling_interval = "10 seconds";
10093
- break;
10094
- case 11:
10095
- rtc_sampling_interval = "15 seconds";
10096
- break;
10097
- case 12:
10098
- rtc_sampling_interval = "30 seconds";
10099
- break;
10100
- }
10101
- return {
10102
- 'firmware': frame[2],
10103
- 'accelerometer_threshold': (frame[16]* 32) + "mg",
10104
- 'debouncing_timeout': frame[17] + "sec",
10105
- 'accelero_state': frame[18]? "Enabled": "Disabled",
10106
- 'input_1_active_edge': frame[19]? "Rising": "Falling",
10107
- 'input_2_active_edge': frame[20]? "Rising": "Falling",
10108
- 'input_3_active_edge': frame[21]? "Rising": "Falling",
10109
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb) + "sec",
10110
- 'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
10111
- 'Shift_end_1': [
10112
- String(frame[27]).padStart(2, '0'),
10113
- String(frame[28]).padStart(2, '0')
10114
- ].join(':'),
10115
- 'Shift_end_2': [
10116
- String(frame[29]).padStart(2, '0'),
10117
- String(frame[30]).padStart(2, '0')
10118
- ].join(':'),
10119
- 'Shift_end_3': [
10120
- String(frame[31]).padStart(2, '0'),
10121
- String(frame[32]).padStart(2, '0')
10122
- ].join(':'),
10123
- 'Shift_end_4': [
10124
- String(frame[33]).padStart(2, '0'),
10125
- String(frame[34]).padStart(2, '0')
10126
- ].join(':'),
10127
- 'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
10128
- 'counter_reset_mode': reset_mode,
10129
- 'sampling_interval': rtc_sampling_interval,
10130
- 'acc_odr': acc_odr,
10131
- 'hardware_id': frame.slice(40, 43),
10132
- 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
10133
- 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
10134
- 'machine_values': {
10135
- 'firmware': frame[2],
10136
- 'accelerometer_threshold': frame[16],
10137
- 'debouncing_timeout': frame[17],
10138
- 'accelero_state': frame[18],
10139
- 'input_1_active_edge': frame[19],
10140
- 'input_2_active_edge': frame[20],
10141
- 'input_3_active_edge': frame[21],
10142
- 'counter_threshold': frame.slice(22, 26),
10143
- 'trasnmit_on_change_status': frame[26],
10144
- 'Shift_end_1': frame.slice(27, 29),
10145
- 'Shift_end_2': frame.slice(29, 31),
10146
- 'Shift_end_3': frame.slice(31, 33),
10147
- 'Shift_end_4': frame.slice(33, 35),
10148
- 'reset_timeout': frame.slice(35, 37),
10149
- 'counter_reset_mode': frame[37],
10150
- 'sampling_interval': frame[38],
10151
- 'acc_odr': frame[39],
10152
- 'hardware_id': frame.slice(40, 43),
10153
- 'report_rate': frame.slice(43, 47),
10154
- 'tx_life_counter': frame.slice(47, 51)
10155
- }
10156
- }
10157
- } else{
10158
- return {
10159
- 'firmware': frame[2],
10160
- 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
10161
- 'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
10162
- 'debouncing_timeout': frame[17].toString() + "sec.",
10163
- 'accelero_state': frame[18],
10164
- 'digital_inputs_active_edge': frame.slice(19, 22),
10165
- 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
10166
- 'trasnmit_on_change_status': frame[26],
10167
- 'machine_values': {
10168
- 'firmware': frame[2],
10169
- 'report_rate': frame.slice(12, 16),
10170
- 'accelerometer_threshold': frame[16],
10171
- 'debouncing_timeout': frame[17],
10172
- 'accelero_active_state': frame[18],
10173
- 'digital_inputs_active_edge': frame.slice(19, 22),
10174
- 'counter_threshold': frame.slice(22, 26),
10175
- 'trasnmit_on_change_status': frame[26]
10176
- }
10177
- }
10178
- }
10179
- }
10180
- },
10181
- '109': {
10182
- name: 'Wireless Custom Solar Sensor',
10183
- parse: (d) => {
10184
- return {
10185
- illuminance: d.slice(0, 4).reduce(msbLsb),
10186
- total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
10187
- ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
10188
- };
10189
- },
10190
- 'parse_fly': (frame) => {
10191
- return {
10192
- 'firmware': frame[2],
10193
- 'hardware_id': frame.slice(12, 15),
10194
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
10195
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
10196
- 'machine_values': {
10197
- 'firmware': frame[2],
10198
- 'hardware_id': frame.slice(12, 15),
10199
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb),
10200
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb)
10201
- }
10202
- }
10203
- }
10204
- },
10205
- '112': {
10206
- name: 'Condition Based/Predictive Maintenance Sensor v4',
10207
- parse: (payload, parsed, mac) => {
10208
- if(payload[7] & 2){
10209
- console.log('Error found');
10210
- console.log(payload[7]);
10211
- parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
10212
- return parsed;
10213
- }
10214
- let msg_type = (payload[7] & 16)? 'motion' : 'regular';
10215
- if (payload[8] === 1) {
10216
- var deviceAddr = mac;
10217
- // var firmware = payload[1];
10218
- // var hour = payload[12];
10219
- // var minute = payload[13];
10220
- var expected_packets = msbLsb(payload[16], payload[17]);
10221
- var current_packet = msbLsb(payload[18], payload[19]);
10222
- var sdata_start = 20;
10223
-
10224
-
10225
- if (globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1) {
10226
- if (expected_packets != 1) {
10227
- // if current packet is equal to last one (duplicated data). This does not apply to the last package
10228
- if (globalDevices[deviceAddr].last_packet_counter == current_packet) {
10229
- console.log('Duplicated message')
10230
- return;
10231
- }
10232
- // if current packet is equal to 1 or last packet counter is higher thant current packet
10233
- if (current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)) {
10234
- console.log('Recovering bad packet');
10235
- // clear stream object & timeout
10236
- parent.sensor_types[112].utils.clear_globalDevices_stream(deviceAddr);
10237
-
10238
- // init new stream
10239
- parent.sensor_types[112].utils.init_globalDevices_stream(deviceAddr, payload, expected_packets, parsed, msg_type);
10240
-
10241
- globalDevices[deviceAddr].last_packet_counter = current_packet;
10242
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10243
- return;
10244
- } else {
10245
- globalDevices[deviceAddr].last_packet_counter = current_packet;
10246
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10247
- }
10248
- } else {
10249
- // clear stream object & timeout
10250
- parent.sensor_types[112].utils.clear_globalDevices_stream(deviceAddr);
10251
-
10252
- // init new stream
10253
- parent.sensor_types[112].utils.init_globalDevices_stream(deviceAddr, payload, expected_packets, parsed, msg_type);
10254
-
10255
- globalDevices[deviceAddr].last_packet_counter = current_packet;
10256
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10257
- }
10258
- } else {
10259
- // clear stream object & timeout
10260
- parent.sensor_types[112].utils.clear_globalDevices_stream(deviceAddr);
10261
-
10262
- // init new stream
10263
- parent.sensor_types[112].utils.init_globalDevices_stream(deviceAddr, payload, expected_packets, parsed, msg_type);
10264
-
10265
- globalDevices[deviceAddr].last_packet_counter = current_packet;
10266
- globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
10267
- }
10268
- if (current_packet == expected_packets) {
10269
- // concatenate stream
10270
- sensor_data = parent.sensor_types[112].utils.concat_fft_data(deviceAddr, payload[8], msg_type);
10271
- // clear stream object & timeout
10272
- parent.sensor_types[112].utils.clear_globalDevices_stream(deviceAddr);
10273
- return sensor_data;
10274
- } else {
10275
- return;
10276
- }
10277
- }
10278
- else if(payload[8] === 0 || payload[8] === 2 || payload[8] === 3){
10279
- // mode byte most significant bit will indicate fft data.
10280
- // console.log(d);
10281
- var odr;
10282
- switch(payload[9]){
10283
- case 6:
10284
- odr = "50Hz"
10285
- break;
10286
- case 7:
10287
- odr = "100Hz";
10288
- break;
10289
- case 8:
10290
- odr = "200Hz";
10291
- break;
10292
- case 9:
10293
- odr = "400Hz";
10294
- break;
10295
- case 10:
10296
- odr = "800Hz";
10297
- break;
10298
- case 11:
10299
- odr = "1600Hz";
10300
- break;
10301
- case 12:
10302
- odr = "3200Hz";
10303
- break;
10304
- case 13:
10305
- odr = "6400Hz";
10306
- break;
10307
- case 14:
10308
- odr = "12800Hz";
10309
- break;
10310
- case 15:
10311
- odr = "25600Hz";
10312
- break;
10313
- }
10314
- return {
10315
- mode: payload[8],
10316
- msg_type: msg_type,
10317
-
10318
- odr: odr,
10319
- temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
10320
- ext_temperature: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
10321
- current: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 1000,
10322
- x_rms_ACC_G: payload.slice(20, 22).reduce(msbLsb)/1000,
10323
- x_max_ACC_G: payload.slice(22, 24).reduce(msbLsb)/1000,
10324
- x_velocity_mm_sec: payload.slice(24, 26).reduce(msbLsb) / 100,
10325
- x_displacement_mm: payload.slice(26, 28).reduce(msbLsb) / 100,
10326
- x_peak_one_Hz: payload.slice(28, 30).reduce(msbLsb),
10327
- x_peak_two_Hz: payload.slice(30, 32).reduce(msbLsb),
10328
- x_peak_three_Hz: payload.slice(32, 34).reduce(msbLsb),
10329
-
10330
- y_rms_ACC_G: payload.slice(34, 36).reduce(msbLsb)/1000,
10331
- y_max_ACC_G: payload.slice(36, 38).reduce(msbLsb)/1000,
10332
- y_velocity_mm_sec: payload.slice(38, 40).reduce(msbLsb) / 100,
10333
- y_displacement_mm: payload.slice(40, 42).reduce(msbLsb) / 100,
10334
- y_peak_one_Hz: payload.slice(42, 44).reduce(msbLsb),
10335
- y_peak_two_Hz: payload.slice(44, 46).reduce(msbLsb),
10336
- y_peak_three_Hz: payload.slice(46, 48).reduce(msbLsb),
10337
-
10338
- z_rms_ACC_G: payload.slice(48, 50).reduce(msbLsb)/1000,
10339
- z_max_ACC_G: payload.slice(50, 52).reduce(msbLsb)/1000,
10340
- z_velocity_mm_sec: payload.slice(52, 54).reduce(msbLsb) / 100,
10341
- z_displacement_mm: payload.slice(54, 56).reduce(msbLsb) / 100,
10342
- z_peak_one_Hz: payload.slice(56, 58).reduce(msbLsb),
10343
- z_peak_two_Hz: payload.slice(58, 60).reduce(msbLsb),
10344
- z_peak_three_Hz: payload.slice(60, 62).reduce(msbLsb),
10345
- rpm: payload.slice(62, 64).reduce(msbLsb)
10346
- };
10347
- }
10348
- // else{
10349
- // parsed.data = {'error': 'Vibration mode error'}
10350
- // return parsed;
10351
- // }
10352
- },
10353
- 'utils': {
10354
- 'clear_globalDevices_stream': (deviceAddr) => {
10355
- if(Object.hasOwn(globalDevices, deviceAddr)){
10356
- if(Object.hasOwn(globalDevices[deviceAddr], 'packet_stream_timeout')){
10357
- clearTimeout(globalDevices[deviceAddr].packet_stream_timeout);
10358
- }
10359
- delete globalDevices[deviceAddr];
10360
- }
10361
- },
10362
- 'init_globalDevices_stream'(deviceAddr, payload, expected_packets, parsed, msg_type){
10363
- globalDevices[deviceAddr] = {
10364
- data: {},
10365
- odr: msbLsb(payload[9], payload[10]),
10366
- mo: payload[8],
10367
- fsr: payload[11] >> 5,
10368
- hour: payload[12],
10369
- minute: payload[13],
10370
- temperature: msbLsb(payload[14], payload[15]) / 100,
10371
- expected_packets: expected_packets
10372
- }
10373
- globalDevices[deviceAddr].packet_stream_timeout = setTimeout(() => {
10374
- parsed.sensor_data = parent.sensor_types[112].utils.concat_fft_data(deviceAddr, payload[8], msg_type);
10375
- parsed.sensor_data.error = 'Time Series Data Stream Timeout - incomplete data received';
10376
-
10377
- parsed.sensor_name = parent.sensor_types[112].name;
10378
- parsed.type = 'sensor_data';
10379
- parsed.addr = deviceAddr;
10380
- parsed.received = Date.now();
10381
-
10382
- parent._emitter.emit('sensor_data', parsed);
10383
- parent._emitter.emit('sensor_data-112', parsed);
10384
- parent._emitter.emit('sensor_data'+'-'+deviceAddr, parsed);
10385
- }, 60000);
10386
- },
10387
- 'concat_fft_data': (deviceAddr, mode, msg_type) => {
10388
- var raw_data = new Array();
10389
- for(const packet in globalDevices[deviceAddr].data){
10390
- raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
10391
- }
10392
- var label = 0;
10393
-
10394
- var fft_concat = {};
10395
-
10396
- var en_axis_data = {};
10397
- en_axis_data.x_offset = 0;
10398
- en_axis_data.y_offset = 2;
10399
- en_axis_data.z_offset = 4;
10400
- en_axis_data.increment = 6;
10401
- fft_concat = {x: [], y: [], z: []};
10402
-
10403
- var fsr_mult = .00006;
10404
- var fsr_text = "";
10405
-
10406
- switch(globalDevices[deviceAddr].fsr){
10407
- case 0:
10408
- fsr_mult = 0.00006;
10409
- break;
10410
- case 1:
10411
- fsr_mult = 0.00012;
10412
- break;
10413
- case 2:
10414
- fsr_mult = 0.00024;
10415
- break;
10416
- case 3:
10417
- fsr_mult = 0.00049;
10418
- break;
10419
- }
10420
- switch(globalDevices[deviceAddr].fsr){
10421
- case 0:
10422
- fsr_text = "2g";
10423
- break;
10424
- case 1:
10425
- fsr_text = "4g";
10426
- break;
10427
- case 2:
10428
- fsr_text = "8g";
10429
- break;
10430
- case 3:
10431
- fsr_text = "16g";
10432
- break;
10433
- }
10434
-
10435
- for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
10436
- label++;
10437
-
10438
- if('x_offset' in en_axis_data){
10439
- fft_concat.x.push(parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(3)));
10440
- }
10441
- if('y_offset' in en_axis_data){
10442
- fft_concat.y.push(parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(3)));
10443
- }
10444
- if('z_offset' in en_axis_data){
10445
- fft_concat.z.push(parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(3)));
10446
- }
10447
- }
10448
- var fft_concat_obj = {
10449
- mode: mode,
10450
- msg_type: msg_type,
10451
- time_id: [
10452
- String(globalDevices[deviceAddr].hour).padStart(2, '0'),
10453
- String(globalDevices[deviceAddr].minute).padStart(2, '0'),
10454
- ].join(':'),
10455
- mac_address: deviceAddr,
10456
- fsr: fsr_text,
10457
- odr: globalDevices[deviceAddr].odr,
10458
- temperature: globalDevices[deviceAddr].temperature,
10459
- total_samples: label,
10460
- fft_confidence : ((Object.keys(globalDevices[deviceAddr].data).length / globalDevices[deviceAddr].expected_packets) * 100).toFixed(2) + '%',
10461
- data: fft_concat
10462
- };
10463
- return fft_concat_obj;
10464
- }
10465
- },
10466
- 'parse_fly': (frame) => {
10467
- let frame_data = {};
10468
- switch(frame[16]){
10469
- case 0:
10470
- frame_data.mode = "Processed";
10471
- break;
10472
- case 1:
10473
- frame_data.mode = "Raw";
10474
- break;
10475
- case 2:
10476
- frame_data.mode = "Processed + Raw on demand";
10477
- break;
10478
- case 3:
10479
- frame_data.mode = "Smart";
10480
- break;
10481
- }
10482
- switch(frame[17]){
10483
- case 6:
10484
- frame_data.odr_1 = 50;
10485
- break;
10486
- case 7:
10487
- frame_data.odr_1 = 100;
10488
- break;
10489
- case 8:
10490
- frame_data.odr_1 = 200;
10491
- break;
10492
- case 9:
10493
- frame_data.odr_1 = 400;
10494
- break;
10495
- case 10:
10496
- frame_data.odr_1 = 800;
10497
- break;
10498
- case 11:
10499
- frame_data.odr_1 = 1600;
10500
- break;
10501
- case 12:
10502
- frame_data.odr_1 = 3200;
10503
- break;
10504
- case 13:
10505
- frame_data.odr_1 = 6400;
10506
- break;
10507
- case 14:
10508
- frame_data.odr_1 = 12800;
10509
- break;
10510
- case 15:
10511
- frame_data.odr_1 = 25600;
10512
- break;
10513
- }
10514
- frame_data.sampling_duration_1 = frame[18]*50 + "ms";
10515
- switch(frame[19]){
10516
- case 0:
10517
- frame_data.filter_status = "Disabled";
10518
- break;
10519
- case 1:
10520
- frame_data.filter_status = "Enabled";
10521
- break;
10522
- }
10523
- switch(frame[20]){
10524
- case 0:
10525
- frame_data.lpf_coeff_1 = 4;
10526
- break;
10527
- case 1:
10528
- frame_data.lpf_coeff_1 = 8;
10529
- break;
10530
- case 2:
10531
- frame_data.lpf_coeff_1 = 16;
10532
- break;
10533
- case 2:
10534
- frame_data.lpf_coeff_1 = 32;
10535
- break;
10536
- case 4:
10537
- frame_data.lpf_coeff_1 = 64;
10538
- break;
10539
- case 5:
10540
- frame_data.lpf_coeff_1 = 128;
10541
- break;
10542
- case 6:
10543
- frame_data.lpf_coeff_1 = 256;
10544
- break;
10545
- case 7:
10546
- frame_data.lpf_coeff_1 = 512;
10547
- break;
10548
- case 8:
10549
- frame_data.lpf_coeff_1 = 1024;
10550
- break;
10551
- case 9:
10552
- frame_data.lpf_coeff_1 = 2048;
10553
- break;
10554
- }
10555
- frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
10556
- switch(frame[21]){
10557
- case 0:
10558
- frame_data.hpf_coeff_1 = 4;
10559
- break;
10560
- case 1:
10561
- frame_data.hpf_coeff_1 = 8;
10562
- break;
10563
- case 2:
10564
- frame_data.hpf_coeff_1 = 16;
10565
- break;
10566
- case 2:
10567
- frame_data.hpf_coeff_1 = 32;
10568
- break;
10569
- case 4:
10570
- frame_data.hpf_coeff_1 = 64;
10571
- break;
10572
- case 5:
10573
- frame_data.hpf_coeff_1 = 128;
10574
- break;
10575
- case 6:
10576
- frame_data.hpf_coeff_1 = 256;
10577
- break;
10578
- case 7:
10579
- frame_data.hpf_coeff_1 = 512;
10580
- break;
10581
- case 8:
10582
- frame_data.hpf_coeff_1 = 1024;
10583
- break;
10584
- case 9:
10585
- frame_data.hpf_coeff_1 = 2048;
10586
- break;
10587
- }
10588
- frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
10589
- switch(frame[22]){
10590
- case 0:
10591
- frame_data.sampling_interval = "5 Minutes";
10592
- frame_data.sampling_interval_number = 5;
10593
- break;
10594
- case 1:
10595
- frame_data.sampling_interval = "10 Minutes";
10596
- frame_data.sampling_interval_number = 10;
10597
- break;
10598
- case 2:
10599
- frame_data.sampling_interval = "15 Minutes";
10600
- frame_data.sampling_interval_number = 15;
10601
- break;
10602
- case 2:
10603
- frame_data.sampling_interval = "20 Minutes";
10604
- frame_data.sampling_interval_number = 20;
10605
- break;
10606
- case 4:
10607
- frame_data.sampling_interval = "30 Minutes";
10608
- frame_data.sampling_interval_number = 30;
10609
- break;
10610
- case 5:
10611
- frame_data.sampling_interval = "60 Minutes";
10612
- frame_data.sampling_interval_number = 60;
10613
- break;
10614
- case 6:
10615
- frame_data.sampling_interval = "120 Minutes";
10616
- frame_data.sampling_interval_number = 120;
10617
- break;
10618
- case 7:
10619
- frame_data.sampling_interval = "180 Minutes";
10620
- frame_data.sampling_interval_number = 180;
10621
- break;
10622
- case 8:
10623
- frame_data.sampling_interval = "1 Minute";
10624
- frame_data.sampling_interval_number = 1;
10625
- break;
10626
- }
10627
- frame_data.on_request_timeout = frame[23] + " Seconds";
10628
- frame_data.deadband = frame[24] + "mg";
10629
-
10630
- switch(frame[25]){
10631
- case 0:
10632
- frame_data.payload_length = "50 Bytes";
10633
- break;
10634
- case 1:
10635
- frame_data.payload_length = "100 Bytes";
10636
- break;
10637
- case 2:
10638
- frame_data.payload_length = "150 Bytes";
10639
- break;
10640
- case 3:
10641
- frame_data.payload_length = "180 Bytes";
10642
- break;
10643
- }
10644
- switch(frame[26]){
10645
- case 0:
10646
- frame_data.fsr_text = "2g";
10647
- break;
10648
- case 1:
10649
- frame_data.fsr_text = "4g";
10650
- break;
10651
- case 2:
10652
- frame_data.fsr_text = "8g";
10653
- break;
10654
- case 3:
10655
- frame_data.fsr_text = "16g";
10656
- break;
10657
- }
10658
- frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
10659
- frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
10660
- frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
10661
- frame_data.smart_mode_threshold = frame[34] * 50;
10662
- if(frame[2] > 5){ // for Firmware v6 and above
10663
- frame_data.motion_to_delay = frame[41] * 50;
8648
+ case 2:
8649
+ reset_mode = "Timeout";
8650
+ break;
8651
+ }
8652
+ let acc_odr = "10Hz";
8653
+ switch(frame[39]){
8654
+ case 0:
8655
+ acc_odr = "10Hz";
8656
+ break;
8657
+ case 1:
8658
+ acc_odr = "20Hz";
8659
+ break;
8660
+ case 2:
8661
+ acc_odr = "50Hz";
8662
+ break;
8663
+ case 3:
8664
+ acc_odr = "100Hz";
8665
+ break;
8666
+ case 4:
8667
+ acc_odr = "200Hz";
8668
+ break;
8669
+ case 5:
8670
+ acc_odr = "400Hz";
8671
+ break;
8672
+ }
8673
+ let rtc_sampling_interval = "5 seconds";
8674
+ switch(frame[38]){
8675
+ case 0:
8676
+ rtc_sampling_interval = "1 minute";
8677
+ break;
8678
+ case 1:
8679
+ rtc_sampling_interval = "5 minutes";
8680
+ break;
8681
+ case 2:
8682
+ rtc_sampling_interval = "15 minutes";
8683
+ break;
8684
+ case 3:
8685
+ rtc_sampling_interval = "30 minutes";
8686
+ break;
8687
+ case 4:
8688
+ rtc_sampling_interval = "1 hour";
8689
+ break;
8690
+ case 5:
8691
+ rtc_sampling_interval = "2 hours";
8692
+ break;
8693
+ case 6:
8694
+ rtc_sampling_interval = "3 hours";
8695
+ break;
8696
+ case 7:
8697
+ rtc_sampling_interval = "6 hours";
8698
+ break;
8699
+ case 8:
8700
+ rtc_sampling_interval = "12 hours";
8701
+ break;
8702
+ case 9:
8703
+ rtc_sampling_interval = "5 seconds";
8704
+ break;
8705
+ case 10:
8706
+ rtc_sampling_interval = "10 seconds";
8707
+ break;
8708
+ case 11:
8709
+ rtc_sampling_interval = "15 seconds";
8710
+ break;
8711
+ case 12:
8712
+ rtc_sampling_interval = "30 seconds";
8713
+ break;
8714
+ }
10664
8715
  return {
10665
8716
  'firmware': frame[2],
10666
- 'destination_address': toMac(frame.slice(12, 16)),
10667
- 'mode': frame_data.mode,
10668
- 'odr': frame_data.odr_1+'Hz',
10669
- 'sampling_duration': frame_data.sampling_duration_1,
10670
- 'filter_status': frame_data.filter_status,
10671
- 'lpf_coeff': frame_data.lpf_coeff_1,
10672
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
10673
- 'hpf_coeff': frame_data.hpf_coeff_1,
10674
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
10675
- 'sampling_interval': frame_data.sampling_interval,
10676
- 'on_request_timeout': frame_data.on_request_timeout,
10677
- 'deadband': frame_data.deadband,
10678
- 'payload_length': frame_data.payload_length,
10679
- 'fsr': frame_data.fsr_text,
10680
- 'rpm_compute_status': frame_data.rpm_status,
10681
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
10682
- 'auto_raw_interval': frame_data.auto_raw_interval,
10683
- 'smart_mode_skip_count': frame[33],
10684
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
10685
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
10686
- 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
10687
- 'motion_to_sampling_delay': frame_data.motion_to_delay +'msec',
10688
- 'max_num_of_motion_tx_per_interval': frame[42],
10689
- 'hardware_id': frame.slice(43, 46),
10690
- 'reserved': frame.slice(46, 50),
10691
- 'tx_lifetime_counter': frame.slice(50, 54).reduce(msbLsb),
8717
+ 'accelerometer_threshold': (frame[16]* 32) + "mg",
8718
+ 'debouncing_timeout': frame[17] + "sec",
8719
+ 'accelero_state': frame[18]? "Enabled": "Disabled",
8720
+ 'input_1_active_edge': frame[19]? "Rising": "Falling",
8721
+ 'input_2_active_edge': frame[20]? "Rising": "Falling",
8722
+ 'input_3_active_edge': frame[21]? "Rising": "Falling",
8723
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb) + "sec",
8724
+ 'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
8725
+ 'Shift_end_1': [
8726
+ String(frame[27]).padStart(2, '0'),
8727
+ String(frame[28]).padStart(2, '0')
8728
+ ].join(':'),
8729
+ 'Shift_end_2': [
8730
+ String(frame[29]).padStart(2, '0'),
8731
+ String(frame[30]).padStart(2, '0')
8732
+ ].join(':'),
8733
+ 'Shift_end_3': [
8734
+ String(frame[31]).padStart(2, '0'),
8735
+ String(frame[32]).padStart(2, '0')
8736
+ ].join(':'),
8737
+ 'Shift_end_4': [
8738
+ String(frame[33]).padStart(2, '0'),
8739
+ String(frame[34]).padStart(2, '0')
8740
+ ].join(':'),
8741
+ 'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
8742
+ 'counter_reset_mode': reset_mode,
8743
+ 'sampling_interval': rtc_sampling_interval,
8744
+ 'acc_odr': acc_odr,
8745
+ 'hardware_id': frame.slice(40, 43),
8746
+ 'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
8747
+ 'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
10692
8748
  'machine_values': {
10693
8749
  'firmware': frame[2],
10694
- 'destination_address': toMac(frame.slice(12, 16), false),
10695
- 'mode': frame[16],
10696
- 'odr': frame[17],
10697
- 'sampling_duration': frame[18],
10698
- 'filter_status': frame[19],
10699
- 'lpf_coeff': frame[20],
10700
- 'hpf_coeff': frame[21],
10701
- 'sampling_interval': frame[22],
10702
- 'on_request_timeout': frame[23],
10703
- 'deadband': frame[24],
10704
- 'payload_length': frame[25],
10705
- 'fsr': frame[26],
10706
- 'rpm_compute_status': frame[27],
10707
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
10708
- 'auto_raw_interval': frame[32],
10709
- 'smart_mode_skip_count': frame[33],
10710
- 'smart_mode_acc_threshold':frame[34],
10711
- 'uptime_counter': frame.slice(35, 39),
10712
- 'max_tx_raw_samples': frame.slice(39, 41),
10713
- 'motion_to_sampling_delay': frame[41],
10714
- 'max_num_of_motion_tx_per_interval': frame[42],
10715
- 'hardware_id': frame.slice(43, 46),
10716
- 'reserved': frame.slice(46, 50),
10717
- 'tx_lifetime_counter': frame.slice(50, 54)
8750
+ 'accelerometer_threshold': frame[16],
8751
+ 'debouncing_timeout': frame[17],
8752
+ 'accelero_state': frame[18],
8753
+ 'input_1_active_edge': frame[19],
8754
+ 'input_2_active_edge': frame[20],
8755
+ 'input_3_active_edge': frame[21],
8756
+ 'counter_threshold': frame.slice(22, 26),
8757
+ 'trasnmit_on_change_status': frame[26],
8758
+ 'Shift_end_1': frame.slice(27, 29),
8759
+ 'Shift_end_2': frame.slice(29, 31),
8760
+ 'Shift_end_3': frame.slice(31, 33),
8761
+ 'Shift_end_4': frame.slice(33, 35),
8762
+ 'reset_timeout': frame.slice(35, 37),
8763
+ 'counter_reset_mode': frame[37],
8764
+ 'sampling_interval': frame[38],
8765
+ 'acc_odr': frame[39],
8766
+ 'hardware_id': frame.slice(40, 43),
8767
+ 'report_rate': frame.slice(43, 47),
8768
+ 'tx_life_counter': frame.slice(47, 51)
10718
8769
  }
10719
8770
  }
10720
- } else if(frame[2] > 4){ // for Firmware v5 and above
8771
+ } else{
10721
8772
  return {
10722
8773
  'firmware': frame[2],
10723
- 'destination_address': toMac(frame.slice(12, 16)),
10724
- 'mode': frame_data.mode,
10725
- 'odr': frame_data.odr_1+'Hz',
10726
- 'sampling_duration': frame_data.sampling_duration_1,
10727
- 'filter_status': frame_data.filter_status,
10728
- 'lpf_coeff': frame_data.lpf_coeff_1,
10729
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
10730
- 'hpf_coeff': frame_data.hpf_coeff_1,
10731
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
10732
- 'sampling_interval': frame_data.sampling_interval,
10733
- 'on_request_timeout': frame_data.on_request_timeout,
10734
- 'deadband': frame_data.deadband,
10735
- 'payload_length': frame_data.payload_length,
10736
- 'fsr': frame_data.fsr_text,
10737
- 'rpm_compute_status': frame_data.rpm_status,
10738
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
10739
- 'auto_raw_interval': frame_data.auto_raw_interval,
10740
- 'smart_mode_skip_count': frame[33],
10741
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
10742
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
10743
- 'max_tx_raw_samples': frame.slice(39, 41).reduce(msbLsb),
10744
- 'hardware_id': frame.slice(41, 44),
10745
- 'reserved': frame.slice(44, 48),
10746
- 'tx_lifetime_counter': frame.slice(48, 52).reduce(msbLsb),
8774
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
8775
+ 'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
8776
+ 'debouncing_timeout': frame[17].toString() + "sec.",
8777
+ 'accelero_state': frame[18],
8778
+ 'digital_inputs_active_edge': frame.slice(19, 22),
8779
+ 'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
8780
+ 'trasnmit_on_change_status': frame[26],
10747
8781
  'machine_values': {
10748
8782
  'firmware': frame[2],
10749
- 'destination_address': toMac(frame.slice(12, 16), false),
10750
- 'mode': frame[16],
10751
- 'odr': frame[17],
10752
- 'sampling_duration': frame[18],
10753
- 'filter_status': frame[19],
10754
- 'lpf_coeff': frame[20],
10755
- 'hpf_coeff': frame[21],
10756
- 'sampling_interval': frame[22],
10757
- 'on_request_timeout': frame[23],
10758
- 'deadband': frame[24],
10759
- 'payload_length': frame[25],
10760
- 'fsr': frame[26],
10761
- 'rpm_compute_status': frame[27],
10762
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
10763
- 'auto_raw_interval': frame[32],
10764
- 'smart_mode_skip_count': frame[33],
10765
- 'smart_mode_acc_threshold':frame[34],
10766
- 'uptime_counter': frame.slice(35, 39),
10767
- 'max_tx_raw_samples': frame.slice(39, 41),
10768
- 'hardware_id': frame.slice(41, 44),
10769
- 'reserved': frame.slice(44, 48),
10770
- 'tx_lifetime_counter': frame.slice(48, 52)
8783
+ 'report_rate': frame.slice(12, 16),
8784
+ 'accelerometer_threshold': frame[16],
8785
+ 'debouncing_timeout': frame[17],
8786
+ 'accelero_active_state': frame[18],
8787
+ 'digital_inputs_active_edge': frame.slice(19, 22),
8788
+ 'counter_threshold': frame.slice(22, 26),
8789
+ 'trasnmit_on_change_status': frame[26]
10771
8790
  }
10772
8791
  }
10773
- }else{
10774
- return {
8792
+ }
8793
+ }
8794
+ },
8795
+ '109': {
8796
+ name: 'Wireless Custom Solar Sensor',
8797
+ parse: (d) => {
8798
+ return {
8799
+ illuminance: d.slice(0, 4).reduce(msbLsb),
8800
+ total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
8801
+ ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
8802
+ };
8803
+ },
8804
+ 'parse_fly': (frame) => {
8805
+ return {
8806
+ 'firmware': frame[2],
8807
+ 'hardware_id': frame.slice(12, 15),
8808
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
8809
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
8810
+ 'machine_values': {
10775
8811
  'firmware': frame[2],
10776
- 'destination_address': toMac(frame.slice(12, 16)),
10777
- 'mode': frame_data.mode,
10778
- 'odr': frame_data.odr_1+'Hz',
10779
- 'sampling_duration': frame_data.sampling_duration_1,
10780
- 'filter_status': frame_data.filter_status,
10781
- 'lpf_coeff': frame_data.lpf_coeff_1,
10782
- 'lpf_freq': frame_data.lpf_freq_1+'Hz',
10783
- 'hpf_coeff': frame_data.hpf_coeff_1,
10784
- 'hpf_freq': frame_data.hpf_freq_1+'Hz',
10785
- 'sampling_interval': frame_data.sampling_interval,
10786
- 'on_request_timeout': frame_data.on_request_timeout,
10787
- 'deadband': frame_data.deadband,
10788
- 'payload_length': frame_data.payload_length,
10789
- 'fsr': frame_data.fsr_text,
10790
- 'rpm_compute_status': frame_data.rpm_status,
10791
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
10792
- 'auto_raw_interval': frame_data.auto_raw_interval,
10793
- 'smart_mode_skip_count': frame[33],
10794
- 'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
10795
- 'uptime_counter': frame.slice(35, 39).reduce(msbLsb)+'sec',
10796
- 'hardware_id': frame.slice(39, 42),
10797
- 'reserved': frame.slice(42, 46),
10798
- 'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
10799
- 'machine_values': {
10800
- 'firmware': frame[2],
10801
- 'destination_address': toMac(frame.slice(12, 16), false),
10802
- 'mode': frame[16],
10803
- 'odr': frame[17],
10804
- 'sampling_duration': frame[18],
10805
- 'filter_status': frame[19],
10806
- 'lpf_coeff': frame[20],
10807
- 'hpf_coeff': frame[21],
10808
- 'sampling_interval': frame[22],
10809
- 'on_request_timeout': frame[23],
10810
- 'deadband': frame[24],
10811
- 'payload_length': frame[25],
10812
- 'fsr': frame[26],
10813
- 'rpm_compute_status': frame[27],
10814
- 'auto_raw_destination_address': toMac(frame.slice(28 , 32), false),
10815
- 'auto_raw_interval': frame[32],
10816
- 'smart_mode_skip_count': frame[33],
10817
- 'smart_mode_acc_threshold':frame[34],
10818
- 'uptime_counter': frame.slice(35, 39),
10819
- 'hardware_id': frame.slice(39, 42),
10820
- 'reserved': frame.slice(42, 46),
10821
- 'tx_lifetime_counter': frame.slice(46, 50)
10822
- }
8812
+ 'hardware_id': frame.slice(12, 15),
8813
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb),
8814
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb)
10823
8815
  }
10824
8816
  }
10825
8817
  }
@@ -11072,21 +9064,21 @@ function sensor_types(parent){
11072
9064
  '118': {
11073
9065
  name: 'Dual Pressure and Temperature Sensor',
11074
9066
  parse: (payload, parsed, mac) => {
11075
- let res = {};
9067
+ let res = {};
11076
9068
 
11077
9069
  res.pressure_s1 = signInt(payload.slice(8, 12).reduce(msbLsb),32)/100;
11078
9070
  res.temperature_s1 = signInt(payload.slice(12, 14).reduce(msbLsb),16)/100;
11079
- if((payload[7] & 2)){
11080
- res.error_s1 = 'Error: Sensor Probe 1 communication error';
9071
+ if((payload[7] & 2)){
9072
+ res.error_s1 = 'Error: Sensor Probe 1 communication error';
11081
9073
  }
11082
9074
 
11083
9075
  res.pressure_s2 = signInt(payload.slice(14, 18).reduce(msbLsb),32)/100;
11084
9076
  res.temperature_s2 = signInt(payload.slice(18, 20).reduce(msbLsb),16)/100;
11085
- if((payload[7] & 4)){
9077
+ if((payload[7] & 4)){
11086
9078
  res.error_s2 = 'Error: Sensor Probe 2 communication error';
11087
9079
  }
11088
- return res;
11089
- },
9080
+ return res;
9081
+ },
11090
9082
  'parse_fly': (frame) => {
11091
9083
  let psi_1;
11092
9084
  let psi_2;
@@ -11472,119 +9464,14 @@ function sensor_types(parent){
11472
9464
  };
11473
9465
  },
11474
9466
  'parse_fly': (frame) => {
11475
- return {
11476
- 'hardware_id': frame.slice(12, 15),
11477
- 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
11478
- 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
11479
- 'machine_values': {
11480
- 'hardware_id': frame.slice(12, 15),
11481
- 'sample_rate': frame.slice(15, 19),
11482
- 'tx_life_counter': frame.slice(19, 23)
11483
- }
11484
- }
11485
- }
11486
- },
11487
- '122': {
11488
- name: 'Wireless 4-20mA Current Splitter',
11489
- parse: (d) => {
11490
- // This parser may be outdated if a customer has an issue check with Engineering
11491
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
11492
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
11493
- return {
11494
- adc1: adc1,
11495
- adc2: adc2,
11496
- mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
11497
- mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100
11498
- };
11499
- },
11500
- 'parse_fly': (frame) => {
11501
- let frame_data = {};
11502
- switch(frame[16]){
11503
- case 0:
11504
- frame_data.fsr = "+-6.114 V";
11505
- break;
11506
- case 1:
11507
- frame_data.fsr = "+-4.096 V";
11508
- break;
11509
- case 2:
11510
- frame_data.fsr = "+-2.048 V";
11511
- break;
11512
- case 3:
11513
- frame_data.fsr = "+-1.024 V";
11514
- break;
11515
- case 4:
11516
- frame_data.fsr = "+-0.512 V";
11517
- break;
11518
- case 5:
11519
- frame_data.fsr = "+-0.256 V";
11520
- break;
11521
- }
11522
- if(frame[2]>13){ // firmware 14 and above
11523
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
11524
- if(!auto_check_interval){
11525
- frame_data.auto_check_interval = 'Disabled';
11526
- }else{
11527
- frame_data.auto_check_interval = auto_check_interval + " sec";
11528
- }
11529
- return {
11530
- 'firmware': frame[2],
11531
- 'fsr': frame_data.fsr,
11532
- 'boot_up_time': frame[17] + " sec",
11533
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
11534
- 'auto_check_interval': frame_data.auto_check_interval,
11535
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
11536
- 'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
11537
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
11538
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
11539
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
11540
- 'hardware_id': frame.slice(37, 40),
11541
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
11542
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
11543
- 'machine_values': {
11544
- 'firmware': frame[2],
11545
- 'fsr': frame[16],
11546
- 'boot_up_time': frame[17],
11547
- 'adc_pin_reading': frame.slice(18, 20),
11548
- 'auto_check_interval': frame.slice(20, 22),
11549
- 'auto_check_percentage': frame.slice(22, 24),
11550
- 'always_on': frame[24],
11551
- 'calibration_one': frame.slice(25, 29),
11552
- 'calibration_two':frame.slice(29, 33),
11553
- 'calibration_three':frame.slice(33, 37),
11554
- 'hardware_id': frame.slice(37, 40),
11555
- 'report_rate': frame.slice(40, 44),
11556
- 'tx_life_counter': frame.slice(44, 48)
11557
- }
11558
- }
11559
- }else if(frame[2]>12){
11560
- return {
11561
- 'firmware': frame[2],
11562
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
11563
- 'fsr':frame_data.fsr,
11564
- 'boot_up_time': frame[17],
11565
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
11566
- 'machine_values': {
11567
- 'firmware': frame[2],
11568
- 'report_rate': frame.slice(12, 16),
11569
- 'fsr':frame[16],
11570
- 'boot_up_time': frame[17],
11571
- 'adc_pin_reading': frame.slice(18, 20),
11572
- 'frame': frame
11573
- }
11574
- }
11575
- }else{
11576
- return {
11577
- 'firmware': frame[2],
11578
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
11579
- 'fsr':frame_data.fsr,
11580
- 'boot_up_time': frame[17],
11581
- 'machine_values': {
11582
- 'firmware': frame[2],
11583
- 'report_rate': frame.slice(12, 16),
11584
- 'fsr':frame[16],
11585
- 'boot_up_time': frame[17],
11586
- 'frame': frame
11587
- }
9467
+ return {
9468
+ 'hardware_id': frame.slice(12, 15),
9469
+ 'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
9470
+ 'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
9471
+ 'machine_values': {
9472
+ 'hardware_id': frame.slice(12, 15),
9473
+ 'sample_rate': frame.slice(15, 19),
9474
+ 'tx_life_counter': frame.slice(19, 23)
11588
9475
  }
11589
9476
  }
11590
9477
  }
@@ -13660,72 +11547,6 @@ function sensor_types(parent){
13660
11547
  };
13661
11548
  }
13662
11549
  },
13663
- '536': {
13664
- name: 'Wireless Oxygen Flow Meter',
13665
- parse: (payload, parsed) => {
13666
- return {
13667
- error_status: payload[0],
13668
- s1_oxygen_temp: payload.slice(1, 3).reduce(msbLsb)/100,
13669
- s2_oxygen_temp: payload.slice(3, 5).reduce(msbLsb)/100,
13670
- s3_oxygen_temp: payload.slice(5, 7).reduce(msbLsb)/100,
13671
- s4_oxygen_temp: payload.slice(7, 9).reduce(msbLsb)/100,
13672
- s1_saturation_percent: payload.slice(9, 13).reduce(msbLsb)/100,
13673
- s2_saturation_percent: payload.slice(13, 17).reduce(msbLsb)/100,
13674
- s3_saturation_percent: payload.slice(17, 21).reduce(msbLsb)/100,
13675
- s4_saturation_percent: payload.slice(21, 25).reduce(msbLsb)/100,
13676
- s1_oxigen_ppm: payload.slice(25, 29).reduce(msbLsb)/100,
13677
- s2_oxigen_ppm: payload.slice(29, 33).reduce(msbLsb)/100,
13678
- s3_oxigen_ppm: payload.slice(33, 37).reduce(msbLsb)/100,
13679
- s4_oxigen_ppm: payload.slice(37, 41).reduce(msbLsb)/100,
13680
- s1_oxigen_mg_l: payload.slice(41, 45).reduce(msbLsb)/100,
13681
- s2_oxigen_mg_l: payload.slice(45, 49).reduce(msbLsb)/100,
13682
- s3_oxigen_mg_l: payload.slice(49, 53).reduce(msbLsb)/100,
13683
- s4_oxigen_mg_l: payload.slice(53, 57).reduce(msbLsb)/100,
13684
- s1_flow_rate: payload.slice(57, 61).reduce(msbLsb)/100,
13685
- s2_flow_rate: payload.slice(61, 65).reduce(msbLsb)/100,
13686
- s3_flow_rate: payload.slice(65, 69).reduce(msbLsb)/100,
13687
- s4_flow_rate: payload.slice(69, 73).reduce(msbLsb)/100,
13688
- s1_solenoid_status: payload[73],
13689
- s2_solenoid_status: payload[74],
13690
- s3_solenoid_status: payload[75],
13691
- s4_solenoid_status: payload[76]
13692
- }
13693
- },
13694
- 'parse_fly': (frame) => {
13695
- return {
13696
- 'firmware': frame[2],
13697
- 'oxygen_bootup_time': frame[12] + 'sec',
13698
- 'flow_bootup_time': frame[13]+ 'sec',
13699
- 's1_oxygen_addr': frame[14],
13700
- 's2_oxygen_addr': frame[15],
13701
- 's3_oxygen_addr': frame[16],
13702
- 's4_oxygen_addr': frame[17],
13703
- 's1_flow_addr': frame[18],
13704
- 's2_flow_addr': frame[19],
13705
- 's3_flow_addr': frame[20],
13706
- 's4_flow_addr': frame[21],
13707
- 'hardware_id': frame.slice(22, 25),
13708
- 'report_rate': frame.slice(25, 29).reduce(msbLsb) + 'sec',
13709
- 'tx_life_counter': frame.slice(29, 33).reduce(msbLsb),
13710
- 'machine_values': {
13711
- 'firmware': frame[2],
13712
- 'oxygen_bootup_time': frame[12],
13713
- 'flow_bootup_time': frame[13],
13714
- 's1_oxygen_addr': frame[14],
13715
- 's2_oxygen_addr': frame[15],
13716
- 's3_oxygen_addr': frame[16],
13717
- 's4_oxygen_addr': frame[17],
13718
- 's1_flow_addr': frame[18],
13719
- 's2_flow_addr': frame[19],
13720
- 's3_flow_addr': frame[20],
13721
- 's4_flow_addr': frame[21],
13722
- 'hardware_id': frame.slice(22, 25),
13723
- 'report_rate': frame.slice(25, 29),
13724
- 'tx_life_counter': frame.slice(29, 33)
13725
- }
13726
- }
13727
- }
13728
- },
13729
11550
  '537': {
13730
11551
  name: 'Type 537 - Custom Standalone Smart Vibration Sensor',
13731
11552
  parse: (payload, parsed, mac) => {
@@ -14943,178 +12764,6 @@ function sensor_types(parent){
14943
12764
  }
14944
12765
  }
14945
12766
  },
14946
- '539': {
14947
- name: 'RS485 Modbus Wireless Converter',
14948
- parse: (d) => {
14949
- return {
14950
- subdevice_type: d[0],
14951
- number_of_registers: d[1],
14952
- status_24_31: d[2],
14953
- status_16_23: d[3],
14954
- status_8_15: d[4],
14955
- status_0_7: d[5],
14956
- // TODO we can automatically determine how many registers are here based on the number_of_registers and create data objects appropriately
14957
- // r1: d.slice(2,4),
14958
- // r2: d.slice(4,6),
14959
- // r3: d.slice(6,8),
14960
- // r4: d.slice(8,10),
14961
- data: d.slice(6)
14962
- };
14963
- },
14964
- },
14965
- '540': {
14966
- name: 'Wireless Ultrasonic Flow Meter FD-Q32C',
14967
- parse: (d) => {
14968
- return {
14969
- raw_adc: d.slice(0, 2).reduce(msbLsb),
14970
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
14971
- flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
14972
- };
14973
- },
14974
- 'parse_fly': (frame) => {
14975
- let firmware = frame[2];
14976
- if(firmware > 13){ // firmware 14 and above
14977
- let frame_data = {};
14978
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
14979
- if(!auto_check_interval){
14980
- frame_data.auto_check_interval = 'Disabled';
14981
- }else{
14982
- frame_data.auto_check_interval = auto_check_interval + " sec";
14983
- }
14984
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
14985
- switch(frame[16]){
14986
- case 0:
14987
- frame_data.fsr = "+-6.114 V";
14988
- break;
14989
- case 1:
14990
- frame_data.fsr = "+-4.096 V";
14991
- break;
14992
- case 2:
14993
- frame_data.fsr = "+-2.048 V";
14994
- break;
14995
- case 3:
14996
- frame_data.fsr = "+-1.024 V";
14997
- break;
14998
- case 4:
14999
- frame_data.fsr = "+-0.512 V";
15000
- break;
15001
- case 5:
15002
- frame_data.fsr = "+-0.256 V";
15003
- break;
15004
- }
15005
- return {
15006
- 'firmware': frame[2],
15007
- 'fsr': frame_data.fsr,
15008
- 'boot_up_time': frame[17] + " sec",
15009
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15010
- 'auto_check_interval': frame_data.auto_check_interval,
15011
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15012
- 'always_on': frame_data.always_on,
15013
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15014
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15015
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15016
- 'hardware_id': frame.slice(37, 40),
15017
- 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
15018
- 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
15019
- 'machine_values': {
15020
- 'firmware': frame[2],
15021
- 'fsr': frame[16],
15022
- 'boot_up_time': frame[17],
15023
- 'adc_pin_reading': frame.slice(18, 20),
15024
- 'auto_check_interval': frame.slice(20, 22),
15025
- 'auto_check_percentage': frame.slice(22, 24),
15026
- 'always_on': frame[24],
15027
- 'calibration_one': frame.slice(25, 29),
15028
- 'calibration_two':frame.slice(29, 33),
15029
- 'calibration_three':frame.slice(33, 37),
15030
- 'hardware_id': frame.slice(37, 40),
15031
- 'report_rate': frame.slice(40, 44),
15032
- 'tx_life_counter': frame.slice(44, 48)
15033
- }
15034
- }
15035
- }
15036
- }
15037
- },
15038
- '541': {
15039
- name: 'Custom Inline Flow Sensor',
15040
- parse: (d) => {
15041
- return {
15042
- adc1: signInt(d.slice(0, 2).reduce(msbLsb), 16),
15043
- adc2: signInt(d.slice(2, 4).reduce(msbLsb), 16),
15044
- mA1: signInt(d.slice(4, 6).reduce(msbLsb), 16)/100,
15045
- mA2: signInt(d.slice(6, 8).reduce(msbLsb), 16)/100,
15046
- flow_1: signInt(d.slice(8, 12).reduce(msbLsb), 32)/100,
15047
- flow_2:signInt(d.slice(12, 16).reduce(msbLsb), 32)/100
15048
- };
15049
- },
15050
- 'parse_fly': (frame) => {
15051
- let firmware = frame[2];
15052
- if(firmware > 13){ // firmware 14 and above
15053
- let frame_data = {};
15054
- let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
15055
- if(!auto_check_interval){
15056
- frame_data.auto_check_interval = 'Disabled';
15057
- }else{
15058
- frame_data.auto_check_interval = auto_check_interval + " sec";
15059
- }
15060
- frame_data.always_on = frame[24]?"Enabled":"Disabled";
15061
- switch(frame[16]){
15062
- case 0:
15063
- frame_data.fsr = "+-6.114 V";
15064
- break;
15065
- case 1:
15066
- frame_data.fsr = "+-4.096 V";
15067
- break;
15068
- case 2:
15069
- frame_data.fsr = "+-2.048 V";
15070
- break;
15071
- case 3:
15072
- frame_data.fsr = "+-1.024 V";
15073
- break;
15074
- case 4:
15075
- frame_data.fsr = "+-0.512 V";
15076
- break;
15077
- case 5:
15078
- frame_data.fsr = "+-0.256 V";
15079
- break;
15080
- }
15081
- return {
15082
- 'firmware': frame[2],
15083
- 'fsr': frame_data.fsr,
15084
- 'boot_up_time': frame[17] + " sec",
15085
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
15086
- 'auto_check_interval': frame_data.auto_check_interval,
15087
- 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
15088
- 'always_on': frame_data.always_on,
15089
- 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
15090
- 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
15091
- 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
15092
- 'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
15093
- 'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
15094
- 'hardware_id': frame.slice(41, 44),
15095
- 'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
15096
- 'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
15097
- 'machine_values': {
15098
- 'firmware': frame[2],
15099
- 'fsr': frame[16],
15100
- 'boot_up_time': frame[17],
15101
- 'adc_pin_reading': frame.slice(18, 20),
15102
- 'auto_check_interval': frame.slice(20, 22),
15103
- 'auto_check_percentage': frame.slice(22, 24),
15104
- 'always_on': frame[24],
15105
- 'calibration_one': frame.slice(25, 29),
15106
- 'calibration_two':frame.slice(29, 33),
15107
- 'calibration_three':frame.slice(33, 37),
15108
- 'min_flow_rate':frame.slice(37, 39),
15109
- 'max_flow_rate':frame.slice(39, 41),
15110
- 'hardware_id': frame.slice(41, 44),
15111
- 'report_rate': frame.slice(44, 48),
15112
- 'tx_life_counter': frame.slice(48, 52)
15113
- }
15114
- }
15115
- }
15116
- }
15117
- },
15118
12767
  '542': {
15119
12768
  name: 'Custom LWGY Flow Sensor',
15120
12769
  parse: (d) => {
@@ -15616,167 +13265,6 @@ function sensor_types(parent){
15616
13265
  }
15617
13266
  }
15618
13267
  },
15619
- '545': {
15620
- name: 'Fox Thermal Flow Sensor',
15621
- parse: (payload, parsed, mac) => {
15622
- let sensor_status = '';
15623
- const error_message = [];
15624
- if(payload[8] & 1){
15625
- error_message.push('pwr_up');
15626
- }
15627
- if(payload[8] & 2){
15628
- error_message.push('flw_hi_lim');
15629
- }
15630
- if(payload[8] & 4){
15631
- error_message.push('flw_lo_lim');
15632
- }
15633
- if(payload[8] & 8){
15634
- error_message.push('tmp_hi_lim');
15635
- }
15636
- if(payload[8] & 16){
15637
- error_message.push('tmp_lo_lim');
15638
- }
15639
- if(payload[8] & 32){
15640
- error_message.push('sensor_oor');
15641
- }
15642
- if(payload[8] & 64){
15643
- error_message.push('gas_mix_err');
15644
- }
15645
- if(payload[8] & 128){
15646
- error_message.push('inc_set');
15647
- }
15648
- if(error_message.length === 0){
15649
- sensor_status = 'ready';
15650
- } else {
15651
- sensor_status = error_message.join(', ');
15652
- }
15653
-
15654
- const calv_value = payload.slice(9, 11).reduce(msbLsb) / 100;
15655
- let cal_val = '';
15656
- if(calv_value < 0.80){
15657
- cal_val = 'pass';
15658
- } else if(calv_value <= 1.0){
15659
- cal_val = 'warning';
15660
- } else {
15661
- cal_val = 'fail';
15662
- }
15663
-
15664
- return {
15665
- sensor_status: sensor_status,
15666
- calcv_value: payload.slice(9, 11).reduce(msbLsb) / 100,
15667
- calcv_status: cal_val,
15668
- flow: payload.slice(11, 15).reduce(msbLsb)/100,
15669
- ghv: payload.slice(15, 19).reduce(msbLsb)/100,
15670
- total_flow: payload.slice(19, 27).reduce(msbLsb)/100,
15671
- temperature: payload.slice(27,29).reduce(msbLsb)/100,
15672
- density: payload.slice(29, 31).reduce(msbLsb)/100
15673
- };
15674
- },
15675
- 'parse_fly': (frame) => {
15676
- let frame_data = {};
15677
- switch(frame[12]){
15678
- case 0:
15679
- frame_data.flow_unit = 'scf_m';
15680
- break;
15681
- case 1:
15682
- frame_data.flow_unit = 'scf_h';
15683
- break;
15684
- case 2:
15685
- frame_data.flow_unit = 'nm3_h';
15686
- break;
15687
- case 3:
15688
- frame_data.flow_unit = 'nm3_m';
15689
- break;
15690
- case 4:
15691
- frame_data.flow_unit = 'kg_h';
15692
- break;
15693
- case 5:
15694
- frame_data.flow_unit = 'kg_m';
15695
- break;
15696
- case 6:
15697
- frame_data.flow_unit = 'kg_s';
15698
- break;
15699
- case 7:
15700
- frame_data.flow_unit = 'lbs_h';
15701
- break;
15702
- case 8:
15703
- frame_data.flow_unit = 'lbs_m';
15704
- break;
15705
- case 9:
15706
- frame_data.flow_unit = 'lbs_s';
15707
- break;
15708
- case 10:
15709
- frame_data.flow_unit = 'nlp_h';
15710
- break;
15711
- case 11:
15712
- frame_data.flow_unit = 'nlp_m';
15713
- break;
15714
- case 12:
15715
- frame_data.flow_unit = 'mmscf_d';
15716
- break;
15717
- case 13:
15718
- frame_data.flow_unit = 'lbs_d';
15719
- break;
15720
- case 14:
15721
- frame_data.flow_unit = 'slp_m';
15722
- break;
15723
- case 15:
15724
- frame_data.flow_unit = 'nlp_s';
15725
- break;
15726
- case 16:
15727
- frame_data.flow_unit = 'mscf_d';
15728
- break;
15729
- case 17:
15730
- frame_data.flow_unit = 'sm3_h';
15731
- break;
15732
- case 18:
15733
- frame_data.flow_unit = 'mt_h';
15734
- break;
15735
- case 19:
15736
- frame_data.flow_unit = 'nm3_d';
15737
- break;
15738
- case 20:
15739
- frame_data.flow_unit = 'mmscf_m';
15740
- break;
15741
- case 21:
15742
- frame_data.flow_unit = 'scf_d';
15743
- break;
15744
- case 22:
15745
- frame_data.flow_unit = 'mcf_d';
15746
- break;
15747
- case 23:
15748
- frame_data.flow_unit = 'sm3_m';
15749
- break;
15750
- case 24:
15751
- frame_data.flow_unit = 'sm3_d';
15752
- break;
15753
- }
15754
- switch(frame[13]){
15755
- case 0:
15756
- frame_data.temperature_unit = 'F';
15757
- break;
15758
- case 1:
15759
- frame_data.temperature_unit = 'C';
15760
- break;
15761
- }
15762
- return {
15763
- 'firmware': frame[2],
15764
- 'flow_unit': frame_data.flow_unit,
15765
- 'temperature_unit': frame_data.temperature_unit,
15766
- 'hardware_id': frame.slice(14, 17),
15767
- 'report_rate': frame.slice(17, 21).reduce(msbLsb),
15768
- 'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
15769
- 'machine_values': {
15770
- 'firmware': frame[2],
15771
- 'flow_unit': frame[12],
15772
- 'temperature_unit': frame[13],
15773
- 'hardware_id': frame.slice(14, 17),
15774
- 'report_rate': frame.slice(17, 21),
15775
- 'tx_life_counter': frame.slice(21, 25)
15776
- }
15777
- }
15778
- }
15779
- },
15780
13268
  '1010': {
15781
13269
  name: 'RS232 Wireless Converter',
15782
13270
  parse: (d) => {
@@ -15890,22 +13378,22 @@ function int2Bytes(i, l){
15890
13378
  return bytes;
15891
13379
  }
15892
13380
  function msbLsb_to_SignedInt(value, addition) {
15893
- const bigValue = BigInt(value);
15894
- const bigAddition = BigInt(addition);
13381
+ const bigValue = BigInt(value);
13382
+ const bigAddition = BigInt(addition);
15895
13383
 
15896
- let result = (bigValue << 8n) + bigAddition;
13384
+ let result = (bigValue << 8n) + bigAddition;
15897
13385
 
15898
- // Always return the result as an unsigned 64-bit BigInt.
15899
- return BigInt.asIntN(64, result);
13386
+ // Always return the result as an unsigned 64-bit BigInt.
13387
+ return BigInt.asIntN(64, result);
15900
13388
  };
15901
13389
  function msbLsb_to_UnsignedInt(value, addition) {
15902
- const bigValue = BigInt(value);
15903
- const bigAddition = BigInt(addition);
13390
+ const bigValue = BigInt(value);
13391
+ const bigAddition = BigInt(addition);
15904
13392
 
15905
- let result = (bigValue << 8n) + bigAddition;
13393
+ let result = (bigValue << 8n) + bigAddition;
15906
13394
 
15907
- // Always return the result as a signed 64-bit BigInt.
15908
- return BigInt.asUintN(64, result);
13395
+ // Always return the result as a signed 64-bit BigInt.
13396
+ return BigInt.asUintN(64, result);
15909
13397
  };
15910
13398
  // TODO implement this function in future for decimal formatting on BigInt values
15911
13399
  // Untested. Requires multiplication by scale factor to account for decimal value loss before passing in. Might handle that in this function as well.