@ncd-io/node-red-enterprise-sensors 1.0.0 → 1.0.1

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.
@@ -142,7 +142,7 @@ module.exports = class WirelessSensor{
142
142
  }
143
143
  }
144
144
  // #OTF
145
- var otf_devices = [23,26,39,45,48,52,76,78,79,80,81,82,84,88,89,90,91,101,102,107,108,180,181,519,520,521,531,535,537];
145
+ var otf_devices = [23,26,39,45,48,52,76,78,79,80,81,82,84,88,89,90,91,101,102,105,107,108,110,111,112,114,180,181,519,520,521,531,535,537,540];
146
146
  var device_type = msbLsb(frame.data[6], frame.data[7]);
147
147
  // var device_type = frame.data[7];
148
148
 
@@ -1332,6 +1332,40 @@ module.exports = class WirelessSensor{
1332
1332
  console.log(packet);
1333
1333
  return this.config_send(sensor_mac, packet);
1334
1334
  }
1335
+ config_set_auto_raw_interval_110(sensor_mac, value){
1336
+ console.log('config_set_raw_interval_110');
1337
+ var packet = [244, 79, 0, 0, 80, 76, value];
1338
+ console.log(packet);
1339
+ return this.config_send(sensor_mac, packet);
1340
+ }
1341
+ config_set_auto_raw_destination_110(sensor_mac, value){
1342
+ console.log('config_set_auto_raw_destination_110');
1343
+ var packet = [244, 79, 0, 0, 80, 72];
1344
+ let value_dest = int2Bytes((value), 4);
1345
+ packet.push(...value_dest);
1346
+ console.log(packet);
1347
+ return this.config_send(sensor_mac, packet);
1348
+ }
1349
+ config_set_clear_probe_uptimers_110(sensor_mac, value){
1350
+ console.log('config_set_clear_probe_uptimers_110');
1351
+ var packet = [244, 79, 0, 0, 80, value];
1352
+ console.log(packet);
1353
+ return this.config_send(sensor_mac, packet);
1354
+ }
1355
+ config_set_smart_interval_110(sensor_mac, value){
1356
+ console.log('config_set_smart_interval_110');
1357
+ var packet = [244, 79, 0, 0, 101, 76, value];
1358
+ console.log(packet);
1359
+ return this.config_send(sensor_mac, packet);
1360
+ }
1361
+ config_set_smart_threshold_110(sensor_mac, value){
1362
+ console.log('config_set_smart_threshold_110');
1363
+ var packet = [244, 79, 0, 0, 101];
1364
+ let value_th = int2Bytes((value), 2);
1365
+ packet.push(...value_th);
1366
+ console.log(packet);
1367
+ return this.config_send(sensor_mac, packet);
1368
+ }
1335
1369
  config_get_delay(sensor_mac){
1336
1370
  return new Promise((fulfill, reject) => {
1337
1371
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -2506,7 +2540,7 @@ function sensor_types(parent){
2506
2540
  name: 'ORP and Temperature Sensor',
2507
2541
  parse: (d) => {
2508
2542
  return {
2509
- ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
2543
+ ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16),
2510
2544
  Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100
2511
2545
  };
2512
2546
  }
@@ -2515,7 +2549,7 @@ function sensor_types(parent){
2515
2549
  name: 'ORP, pH and Temperature Sensor',
2516
2550
  parse: (d) => {
2517
2551
  return {
2518
- ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
2552
+ ORP: signInt(d.slice(0, 2).reduce(msbLsb), 16),
2519
2553
  Temp: signInt(d.slice(2, 4).reduce(msbLsb),16) / 100,
2520
2554
  pH: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
2521
2555
  Temp: signInt(d.slice(6, 8).reduce(msbLsb),16) / 100
@@ -2623,96 +2657,2867 @@ function sensor_types(parent){
2623
2657
  };
2624
2658
  }
2625
2659
  },
2626
- '76': {
2627
- name: 'Wireless CO Sensor',
2660
+ '76': {
2661
+ name: 'Wireless CO Sensor',
2662
+ parse: (d) => {
2663
+ return {
2664
+ humidity: msbLsb(d[0], d[1])/100,
2665
+ temperature: signInt((msbLsb(d[2], d[3])), 16)/100,
2666
+ co_ppm: msbLsb(d[4], d[5])
2667
+ };
2668
+ }
2669
+ },
2670
+ '77': {
2671
+ name: '3 Channel SDI-12 Wireelss',
2672
+ parse: (d) => {
2673
+ return {
2674
+ Temperature_1: signInt(d.slice(0, 2).reduce(msbLsb), 16)/100,
2675
+ Soil_Moisture_1: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
2676
+ Bulk_EC_1: signInt(d.slice(4, 6).reduce(msbLsb), 16),
2677
+ Pore_EC_1: signInt(d.slice(6, 8).reduce(msbLsb), 16),
2678
+ Permittivity_1: signInt(d.slice(8, 10).reduce(msbLsb), 16)/100,
2679
+ Temperature_2: signInt(d.slice(10, 12).reduce(msbLsb), 16)/100,
2680
+ Soil_Moisture_2: signInt(d.slice(12, 14).reduce(msbLsb), 16)/100,
2681
+ Bulk_EC_2: signInt(d.slice(14, 16).reduce(msbLsb), 16),
2682
+ Pore_EC_2: signInt(d.slice(16, 18).reduce(msbLsb), 16),
2683
+ Permittivity_2: signInt(d.slice(18, 20).reduce(msbLsb), 16)/100,
2684
+ Temperature_3: signInt(d.slice(20, 22).reduce(msbLsb), 16)/100,
2685
+ Soil_Moisture_3: signInt(d.slice(22, 24).reduce(msbLsb), 16)/100,
2686
+ Bulk_EC_3: signInt(d.slice(24, 26).reduce(msbLsb), 16),
2687
+ Pore_EC_3: signInt(d.slice(26, 28).reduce(msbLsb), 16),
2688
+ Permittivity_3: signInt(d.slice(28, 30).reduce(msbLsb), 16)/100
2689
+ };
2690
+ }
2691
+ },
2692
+ '78': {
2693
+ name: 'Oil Particulate Counter Sensor',
2694
+ parse: (d, original_payload) => {
2695
+ if(original_payload[1] <= 3){
2696
+ return {
2697
+ ferro_particles_30_50_um: d.slice(0, 4).reduce(msbLsb)/100,
2698
+ ferro_particles_50_100_um: d.slice(4, 8).reduce(msbLsb)/100,
2699
+ ferro_particles_100_200_um: d.slice(8, 12).reduce(msbLsb)/100,
2700
+ ferro_particles_200_400_um: d.slice(12, 16).reduce(msbLsb)/100,
2701
+ ferro_particles_400_800_um: d.slice(16, 20).reduce(msbLsb)/100,
2702
+ ferro_particles_gt_800_um: d.slice(20, 24).reduce(msbLsb)/100,
2703
+ ferro_particles_total: d.slice(24, 28).reduce(msbLsb)/100,
2704
+ non_ferro_particles_120_200_um: d.slice(28, 32).reduce(msbLsb)/100,
2705
+ non_ferro_particles_200_400_um: d.slice(32, 36).reduce(msbLsb)/100,
2706
+ non_ferro_particles_400_800_um: d.slice(36, 40).reduce(msbLsb)/100
2707
+ };
2708
+ }else{
2709
+ return {
2710
+ ferro_particles_30_50_um: d.slice(0, 4).reduce(msbLsb)/100,
2711
+ ferro_particles_50_100_um: d.slice(4, 8).reduce(msbLsb)/100,
2712
+ ferro_particles_100_200_um: d.slice(8, 12).reduce(msbLsb)/100,
2713
+ ferro_particles_200_400_um: d.slice(12, 16).reduce(msbLsb)/100,
2714
+ ferro_particles_400_800_um: d.slice(16, 20).reduce(msbLsb)/100,
2715
+ ferro_particles_gt_800_um: d.slice(20, 24).reduce(msbLsb)/100,
2716
+ ferro_particles_total: d.slice(24, 28).reduce(msbLsb)/100,
2717
+ non_ferro_particles_120_200_um: d.slice(28, 32).reduce(msbLsb)/100,
2718
+ non_ferro_particles_200_400_um: d.slice(32, 36).reduce(msbLsb)/100,
2719
+ non_ferro_particles_400_800_um: d.slice(36, 40).reduce(msbLsb)/100,
2720
+ non_ferro_particles_800_1600_um: d.slice(40, 44).reduce(msbLsb)/100,
2721
+ non_ferro_particles_gt_1600_um: d.slice(44, 48).reduce(msbLsb)/100,
2722
+ non_ferro_particles_total: d.slice(48, 52).reduce(msbLsb)/100,
2723
+ ferro_particles_total_24h: d.slice(52, 56).reduce(msbLsb)/100,
2724
+ non_ferro_particles_total_24h: d.slice(56, 60).reduce(msbLsb)/100,
2725
+ ferro_concentration: d.slice(60, 64).reduce(msbLsb)/100,
2726
+ non_ferro_concentration: d.slice(64, 68).reduce(msbLsb)/100,
2727
+ flow: d.slice(68, 72).reduce(msbLsb)/100,
2728
+ };
2729
+ }
2730
+ }
2731
+ },
2732
+ '79': {
2733
+ name: 'Oil Analysis Sensor',
2734
+ parse: (d) => {
2735
+ return {
2736
+ dynamic_viscosity: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
2737
+ density: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
2738
+ dialectric_constant: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100,
2739
+ temperature: signInt(d.slice(12, 16).reduce(msbLsb), 32) / 100,
2740
+ saturability: signInt(d.slice(16, 20).reduce(msbLsb), 32) / 100,
2741
+ moisture_content: signInt(d.slice(20, 24).reduce(msbLsb), 32) / 100,
2742
+ water_content: signInt(d.slice(24, 28).reduce(msbLsb), 32) / 100,
2743
+ kinematic_viscosity_40c: signInt(d.slice(28, 32).reduce(msbLsb), 32) / 100,
2744
+ kinematic_viscosity_100c: signInt(d.slice(32, 36).reduce(msbLsb), 32) / 100
2745
+ };
2746
+ }
2747
+ },
2748
+ '80': {
2749
+ name: 'One Channel Vibration Plus',
2750
+ parse: (payload, parsed, mac) => {
2751
+ if(payload[7] >> 1 != 0){
2752
+ console.log('Error found');
2753
+ parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
2754
+ return parsed;
2755
+ }
2756
+
2757
+ if(payload[8] === 1){
2758
+ var deviceAddr = mac;
2759
+ var firmware = payload[1];
2760
+ var hour = payload[11];
2761
+ var minute = payload[12];
2762
+ var expected_packets = payload[15];
2763
+ var current_packet = payload[16];
2764
+ var sdata_start = 17;
2765
+
2766
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
2767
+ if(expected_packets != 1){
2768
+ // if a packet is already stored with the same packet ID, or if packet ID is 1, or if current packet ID is not one more than last packet ID
2769
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
2770
+ console.log('-----');
2771
+ console.log('bad packet breakdown deleting stream');
2772
+ console.log(current_packet);
2773
+ console.log(expected_packets);
2774
+ console.log(current_packet in globalDevices[deviceAddr].data);
2775
+ console.log(current_packet == 1);
2776
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
2777
+ if(this.hasOwnProperty('failure_no')){
2778
+ this.failure_no = this.failure_no + 1;
2779
+ }
2780
+ else{
2781
+ this.failure_no = 1;
2782
+ }
2783
+ if(this.hasOwnProperty('failure_no')){
2784
+ console.log('####falure no');
2785
+ console.log(this.failure_no);
2786
+ }
2787
+ // console.log(globalDevices[deviceAddr].data);
2788
+ delete globalDevices[deviceAddr];
2789
+ if(current_packet != 1){
2790
+ return;
2791
+ } else{
2792
+
2793
+ var mode = payload[8];
2794
+ var odr = payload[9];
2795
+ var en_axis = payload[10] & 7;
2796
+ var fsr = payload[10] >> 5;
2797
+ var device_temp = msbLsb(payload[13], payload[14])/100;
2798
+
2799
+
2800
+ switch(odr){
2801
+ case 6:
2802
+ odr = 50;
2803
+ break;
2804
+ case 7:
2805
+ odr = 100;
2806
+ break;
2807
+ case 8:
2808
+ odr = 200;
2809
+ break;
2810
+ case 9:
2811
+ odr = 400;
2812
+ break;
2813
+ case 10:
2814
+ odr = 800;
2815
+ break;
2816
+ case 11:
2817
+ odr = 1600;
2818
+ break;
2819
+ case 12:
2820
+ odr = 3200;
2821
+ break;
2822
+ case 13:
2823
+ odr = 6400;
2824
+ break;
2825
+ case 14:
2826
+ odr = 12800;
2827
+ break;
2828
+ case 15:
2829
+ odr = 25600;
2830
+ break;
2831
+ default:
2832
+ odr = 0;
2833
+ }
2834
+
2835
+ globalDevices[deviceAddr] = {
2836
+ // stream_size: expected_packets,
2837
+ data: {},
2838
+ odr: odr,
2839
+ mo: mode,
2840
+ en_axis: en_axis,
2841
+ fsr: fsr,
2842
+ hour: hour,
2843
+ minute: minute,
2844
+ device_temp: device_temp,
2845
+ }
2846
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2847
+ return;
2848
+ }
2849
+ }
2850
+ else{
2851
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2852
+ }
2853
+ }
2854
+ else{
2855
+ var mode = payload[8];
2856
+ var odr = payload[9];
2857
+ var en_axis = payload[10] & 7;
2858
+ var fsr = payload[10] >> 5;
2859
+ var device_temp = msbLsb(payload[13], payload[14])/100;
2860
+
2861
+
2862
+ switch(odr){
2863
+ case 6:
2864
+ odr = 50;
2865
+ break;
2866
+ case 7:
2867
+ odr = 100;
2868
+ break;
2869
+ case 8:
2870
+ odr = 200;
2871
+ break;
2872
+ case 9:
2873
+ odr = 400;
2874
+ break;
2875
+ case 10:
2876
+ odr = 800;
2877
+ break;
2878
+ case 11:
2879
+ odr = 1600;
2880
+ break;
2881
+ case 12:
2882
+ odr = 3200;
2883
+ break;
2884
+ case 13:
2885
+ odr = 6400;
2886
+ break;
2887
+ case 14:
2888
+ odr = 12800;
2889
+ break;
2890
+ case 15:
2891
+ odr = 25600;
2892
+ break;
2893
+ default:
2894
+ odr = 0;
2895
+ }
2896
+
2897
+ globalDevices[deviceAddr] = {
2898
+ // stream_size: expected_packets,
2899
+ data: {},
2900
+ odr: odr,
2901
+ mo: mode,
2902
+ en_axis: en_axis,
2903
+ fsr: fsr,
2904
+ hour: hour,
2905
+ minute: minute,
2906
+ device_temp: device_temp,
2907
+ }
2908
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2909
+ }
2910
+
2911
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
2912
+ var raw_data = new Array();
2913
+ for(const packet in globalDevices[deviceAddr].data){
2914
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
2915
+ }
2916
+ var label = 0;
2917
+
2918
+ var fft = new Array();
2919
+ var fft_concat = {};
2920
+
2921
+ var en_axis_data = {};
2922
+ switch (globalDevices[deviceAddr].en_axis){
2923
+ case 1:
2924
+ en_axis_data.x_offset = 0;
2925
+ en_axis_data.increment = 2;
2926
+ break;
2927
+ case 2:
2928
+ en_axis_data.y_offset = 0;
2929
+ en_axis_data.increment = 2;
2930
+ break;
2931
+ case 3:
2932
+ en_axis_data.x_offset = 0;
2933
+ en_axis_data.y_offset = 2;
2934
+ en_axis_data.increment = 4;
2935
+ break;
2936
+ case 4:
2937
+ en_axis_data.z_offset = 0;
2938
+ en_axis_data.increment = 2;
2939
+ break;
2940
+ case 5:
2941
+ en_axis_data.x_offset = 0;
2942
+ en_axis_data.z_offset = 2;
2943
+ en_axis_data.increment = 4;
2944
+ break;
2945
+ case 6:
2946
+ en_axis_data.y_offset = 0;
2947
+ en_axis_data.z_offset = 2;
2948
+ en_axis_data.increment = 4;
2949
+ break;
2950
+ case 7:
2951
+ en_axis_data.x_offset = 0;
2952
+ en_axis_data.y_offset = 2;
2953
+ en_axis_data.z_offset = 4;
2954
+ en_axis_data.increment = 6;
2955
+ break;
2956
+ default:
2957
+ en_axis_data.increment = 0;
2958
+ }
2959
+
2960
+ var fsr_mult = .00006;
2961
+ var fsr_text = "";
2962
+ switch(globalDevices[deviceAddr].fsr){
2963
+ case 0:
2964
+ fsr_mult = 0.00006;
2965
+ break;
2966
+ case 1:
2967
+ fsr_mult = 0.00012;
2968
+ break;
2969
+ case 2:
2970
+ fsr_mult = 0.00024;
2971
+ break;
2972
+ case 3:
2973
+ fsr_mult = 0.00049;
2974
+ break;
2975
+ }
2976
+ switch(globalDevices[deviceAddr].fsr){
2977
+ case 0:
2978
+ fsr_text = "2g";
2979
+ break;
2980
+ case 1:
2981
+ fsr_text = "4g";
2982
+ break;
2983
+ case 2:
2984
+ fsr_text = "8g";
2985
+ break;
2986
+ case 3:
2987
+ fsr_text = "16g";
2988
+ break;
2989
+ }
2990
+
2991
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
2992
+ label++;
2993
+
2994
+ fft_concat[label] = {};
2995
+
2996
+ if('x_offset' in en_axis_data){
2997
+ fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
2998
+ }
2999
+ if('y_offset' in en_axis_data){
3000
+ fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
3001
+ }
3002
+ if('z_offset' in en_axis_data){
3003
+ fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
3004
+ }
3005
+ }
3006
+ var fft_concat_obj = {
3007
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
3008
+ mac_address: deviceAddr,
3009
+ en_axis: globalDevices[deviceAddr].en_axis,
3010
+ fsr: fsr_text,
3011
+ odr: globalDevices[deviceAddr].odr,
3012
+ device_temp: globalDevices[deviceAddr].device_temp,
3013
+ data: fft_concat
3014
+ };
3015
+ sensor_data = fft_concat_obj;
3016
+ delete globalDevices[deviceAddr];
3017
+ if(this.hasOwnProperty('failure_no')){
3018
+ console.log('####falure no');
3019
+ console.log(this.failure_no);
3020
+ }
3021
+
3022
+ return sensor_data;
3023
+ }
3024
+ else{
3025
+ return;
3026
+ }
3027
+ }else{
3028
+
3029
+ var mode = payload[8];
3030
+ var odr = payload[9];
3031
+ var en_axis = payload[10] & 7;
3032
+ var fsr = payload[10] >> 5;
3033
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3034
+
3035
+
3036
+ switch(odr){
3037
+ case 6:
3038
+ odr = 50;
3039
+ break;
3040
+ case 7:
3041
+ odr = 100;
3042
+ break;
3043
+ case 8:
3044
+ odr = 200;
3045
+ break;
3046
+ case 9:
3047
+ odr = 400;
3048
+ break;
3049
+ case 10:
3050
+ odr = 800;
3051
+ break;
3052
+ case 11:
3053
+ odr = 1600;
3054
+ break;
3055
+ case 12:
3056
+ odr = 3200;
3057
+ break;
3058
+ case 13:
3059
+ odr = 6400;
3060
+ break;
3061
+ case 14:
3062
+ odr = 12800;
3063
+ break;
3064
+ case 15:
3065
+ odr = 25600;
3066
+ break;
3067
+ default:
3068
+ odr = 0;
3069
+ }
3070
+
3071
+ globalDevices[deviceAddr] = {
3072
+ // stream_size: expected_packets,
3073
+ data: {},
3074
+ odr: odr,
3075
+ mo: mode,
3076
+ en_axis: en_axis,
3077
+ fsr: fsr,
3078
+ hour: hour,
3079
+ minute: minute,
3080
+ device_temp: device_temp,
3081
+ }
3082
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3083
+ return;
3084
+ }
3085
+ }
3086
+ else if(payload[8] === 0 || payload[8] === 2){
3087
+ // mode byte most significant bit will indicate fft data.
3088
+ // console.log(d);
3089
+ var odr;
3090
+ switch(payload[9]){
3091
+ case 6:
3092
+ odr = "50Hz"
3093
+ break;
3094
+ case 7:
3095
+ odr = "100Hz";
3096
+ break;
3097
+ case 8:
3098
+ odr = "200Hz";
3099
+ break;
3100
+ case 9:
3101
+ odr = "400Hz";
3102
+ break;
3103
+ case 10:
3104
+ odr = "800Hz";
3105
+ break;
3106
+ case 11:
3107
+ odr = "1600Hz";
3108
+ break;
3109
+ case 12:
3110
+ odr = "3200Hz";
3111
+ break;
3112
+ case 13:
3113
+ odr = "6400Hz";
3114
+ break;
3115
+ case 14:
3116
+ odr = "12800Hz";
3117
+ break;
3118
+ case 15:
3119
+ odr = "25600Hz";
3120
+ break;
3121
+ }
3122
+ return {
3123
+ mode: payload[8],
3124
+
3125
+ odr: odr,
3126
+ temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
3127
+
3128
+ x_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
3129
+ x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
3130
+ x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
3131
+ x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
3132
+ x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
3133
+ x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
3134
+ x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
3135
+
3136
+ y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
3137
+ y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
3138
+ y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
3139
+ y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
3140
+ y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
3141
+ y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
3142
+ y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
3143
+
3144
+ z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
3145
+ z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
3146
+ z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
3147
+ z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
3148
+ z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
3149
+ z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
3150
+ z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
3151
+ };
3152
+ }
3153
+ // else{
3154
+ // parsed.data = {'error': 'Vibration mode error'}
3155
+ // return parsed;
3156
+ // }
3157
+ },
3158
+ 'parse_fly': (frame) => {
3159
+ let frame_data = {};
3160
+ switch(frame[16]){
3161
+ case 0:
3162
+ frame_data.mode = "Processed";
3163
+ break;
3164
+ case 1:
3165
+ frame_data.mode = "Raw";
3166
+ break;
3167
+ case 2:
3168
+ frame_data.mode = "Processed + Raw on demand";
3169
+ break;
3170
+ }
3171
+ switch(frame[17]){
3172
+ case 6:
3173
+ frame_data.odr_1 = 50;
3174
+ break;
3175
+ case 7:
3176
+ frame_data.odr_1 = 100;
3177
+ break;
3178
+ case 8:
3179
+ frame_data.odr_1 = 200;
3180
+ break;
3181
+ case 9:
3182
+ frame_data.odr_1 = 400;
3183
+ break;
3184
+ case 10:
3185
+ frame_data.odr_1 = 800;
3186
+ break;
3187
+ case 11:
3188
+ frame_data.odr_1 = 1600;
3189
+ break;
3190
+ case 12:
3191
+ frame_data.odr_1 = 3200;
3192
+ break;
3193
+ case 13:
3194
+ frame_data.odr_1 = 6400;
3195
+ break;
3196
+ case 14:
3197
+ frame_data.odr_1 = 12800;
3198
+ break;
3199
+ case 15:
3200
+ frame_data.odr_1 = 25600;
3201
+ break;
3202
+ }
3203
+ frame_data.sampling_duration_1 = frame[19]*50 + "ms";
3204
+ switch(frame[21]){
3205
+ case 0:
3206
+ frame_data.filter_status = "Disabled";
3207
+ break;
3208
+ case 1:
3209
+ frame_data.filter_status = "Enabled";
3210
+ break;
3211
+ }
3212
+ switch(frame[22]){
3213
+ case 0:
3214
+ frame_data.lpf_coeff_1 = 4;
3215
+ break;
3216
+ case 1:
3217
+ frame_data.lpf_coeff_1 = 8;
3218
+ break;
3219
+ case 2:
3220
+ frame_data.lpf_coeff_1 = 16;
3221
+ break;
3222
+ case 2:
3223
+ frame_data.lpf_coeff_1 = 32;
3224
+ break;
3225
+ case 4:
3226
+ frame_data.lpf_coeff_1 = 64;
3227
+ break;
3228
+ case 5:
3229
+ frame_data.lpf_coeff_1 = 128;
3230
+ break;
3231
+ case 6:
3232
+ frame_data.lpf_coeff_1 = 256;
3233
+ break;
3234
+ case 7:
3235
+ frame_data.lpf_coeff_1 = 512;
3236
+ break;
3237
+ case 8:
3238
+ frame_data.lpf_coeff_1 = 1024;
3239
+ break;
3240
+ case 9:
3241
+ frame_data.lpf_coeff_1 = 2048;
3242
+ break;
3243
+ }
3244
+ frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
3245
+ switch(frame[24]){
3246
+ case 0:
3247
+ frame_data.hpf_coeff_1 = 4;
3248
+ break;
3249
+ case 1:
3250
+ frame_data.hpf_coeff_1 = 8;
3251
+ break;
3252
+ case 2:
3253
+ frame_data.hpf_coeff_1 = 16;
3254
+ break;
3255
+ case 2:
3256
+ frame_data.hpf_coeff_1 = 32;
3257
+ break;
3258
+ case 4:
3259
+ frame_data.hpf_coeff_1 = 64;
3260
+ break;
3261
+ case 5:
3262
+ frame_data.hpf_coeff_1 = 128;
3263
+ break;
3264
+ case 6:
3265
+ frame_data.hpf_coeff_1 = 256;
3266
+ break;
3267
+ case 7:
3268
+ frame_data.hpf_coeff_1 = 512;
3269
+ break;
3270
+ case 8:
3271
+ frame_data.hpf_coeff_1 = 1024;
3272
+ break;
3273
+ case 9:
3274
+ frame_data.hpf_coeff_1 = 2048;
3275
+ break;
3276
+ }
3277
+ frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
3278
+ switch(frame[26]){
3279
+ case 0:
3280
+ frame_data.sampling_interval = "5 Minutes";
3281
+ break;
3282
+ case 1:
3283
+ frame_data.sampling_interval = "10 Minutes";
3284
+ break;
3285
+ case 2:
3286
+ frame_data.sampling_interval = "15 Minutes";
3287
+ break;
3288
+ case 2:
3289
+ frame_data.sampling_interval = "20 Minutes";
3290
+ break;
3291
+ case 4:
3292
+ frame_data.sampling_interval = "30 Minutes";
3293
+ break;
3294
+ case 5:
3295
+ frame_data.sampling_interval = "60 Minutes";
3296
+ break;
3297
+ case 6:
3298
+ frame_data.sampling_interval = "120 Minutes";
3299
+ break;
3300
+ case 7:
3301
+ frame_data.sampling_interval = "180 Minutes";
3302
+ break;
3303
+ case 8:
3304
+ frame_data.sampling_interval = "1 Minute";
3305
+ break;
3306
+ }
3307
+ frame_data.on_request_timeout = frame[27] + " Seconds";
3308
+ frame_data.deadband = frame[28] + "mg";
3309
+
3310
+ switch(frame[29]){
3311
+ case 0:
3312
+ frame_data.payload_length = "50 Bytes";
3313
+ break;
3314
+ case 1:
3315
+ frame_data.payload_length = "100 Bytes";
3316
+ break;
3317
+ case 2:
3318
+ frame_data.payload_length = "150 Bytes";
3319
+ break;
3320
+ case 3:
3321
+ frame_data.payload_length = "180 Bytes";
3322
+ break;
3323
+ }
3324
+
3325
+ return {
3326
+ 'firmware': frame[2],
3327
+ 'destination_address': toMac(frame.slice(12, 16)),
3328
+ 'mode': frame_data.mode,
3329
+ 'odr_1': frame_data.odr_1+'Hz',
3330
+ 'sampling_duration_1': frame_data.sampling_duration_1,
3331
+ 'sampling_duration_2': frame_data.sampling_duration_2,
3332
+ 'filter_status': frame_data.filter_status,
3333
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
3334
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
3335
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
3336
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
3337
+ 'sampling_interval': frame_data.sampling_interval,
3338
+ 'on_request_timeout': frame_data.on_request_timeout,
3339
+ 'deadband': frame_data.deadband,
3340
+ 'payload_length': frame_data.payload_length,
3341
+ 'machine_values': {
3342
+ 'firmware': frame[2],
3343
+ 'destination_address': toMac(frame.slice(12, 16), false),
3344
+ 'mode': frame[16],
3345
+ 'odr_1': frame[17],
3346
+ 'sampling_duration_1': frame[19],
3347
+ 'sampling_duration_2': frame[20],
3348
+ 'filter_status': frame[21],
3349
+ 'lpf_coeff_1': frame[22],
3350
+ 'hpf_coeff_1': frame[24],
3351
+ 'sampling_interval': frame[26],
3352
+ 'on_request_timeout': frame[27],
3353
+ 'deadband': frame[28],
3354
+ 'payload_length': frame[29]
3355
+ }
3356
+ }
3357
+ }
3358
+ },
3359
+ '81': {
3360
+ name: 'Two Channel Vibration Plus',
3361
+ parse: (payload, parsed, mac) => {
3362
+ parsed.data = {};
3363
+ if(payload[7] & 2){
3364
+ parsed.data['probe_1_error'] = true;
3365
+ }
3366
+ if(payload[7] & 4){
3367
+ parsed.data['probe_2_error'] = true;
3368
+ }
3369
+ if(payload[7] & 2 && payload[7] & 4){
3370
+ return parsed;
3371
+ }
3372
+
3373
+ if(payload[8] === 1){
3374
+ var deviceAddr = mac;
3375
+ var firmware = payload[1];
3376
+ var hour = payload[11];
3377
+ var minute = payload[12];
3378
+ var expected_packets = payload[15];
3379
+ var current_packet = payload[16];
3380
+ var sdata_start = 17;
3381
+
3382
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
3383
+ if(expected_packets != 1){
3384
+ // if a packet is already stored with the same packet ID, or if packet ID is 1, or if current packet ID is not one more than last packet ID
3385
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
3386
+ console.log('-----');
3387
+ console.log('bad packet breakdown deleting stream');
3388
+ console.log(current_packet);
3389
+ console.log(expected_packets);
3390
+ console.log(current_packet in globalDevices[deviceAddr].data);
3391
+ console.log(current_packet == 1);
3392
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
3393
+ if(this.hasOwnProperty('failure_no')){
3394
+ this.failure_no = this.failure_no + 1;
3395
+ }
3396
+ else{
3397
+ this.failure_no = 1;
3398
+ }
3399
+ if(this.hasOwnProperty('failure_no')){
3400
+ console.log('####falure no');
3401
+ console.log(this.failure_no);
3402
+ }
3403
+ // console.log(globalDevices[deviceAddr].data);
3404
+ delete globalDevices[deviceAddr];
3405
+ if(current_packet != 1){
3406
+ return;
3407
+ } else{
3408
+ var mode = payload[8];
3409
+ var odr = payload[9];
3410
+ var en_axis = payload[10] & 7;
3411
+ var fsr = payload[10] >> 5;
3412
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3413
+
3414
+ switch(odr){
3415
+ case 6:
3416
+ odr = 50;
3417
+ break;
3418
+ case 7:
3419
+ odr = 100;
3420
+ break;
3421
+ case 8:
3422
+ odr = 200;
3423
+ break;
3424
+ case 9:
3425
+ odr = 400;
3426
+ break;
3427
+ case 10:
3428
+ odr = 800;
3429
+ break;
3430
+ case 11:
3431
+ odr = 1600;
3432
+ break;
3433
+ case 12:
3434
+ odr = 3200;
3435
+ break;
3436
+ case 13:
3437
+ odr = 6400;
3438
+ break;
3439
+ case 14:
3440
+ odr = 12800;
3441
+ break;
3442
+ case 15:
3443
+ odr = 25600;
3444
+ break;
3445
+ default:
3446
+ odr = 0;
3447
+ }
3448
+
3449
+ globalDevices[deviceAddr] = {
3450
+ // stream_size: expected_packets,
3451
+ data: {},
3452
+ odr: odr,
3453
+ mo: mode,
3454
+ en_axis: en_axis,
3455
+ fsr: fsr,
3456
+ hour: hour,
3457
+ minute: minute,
3458
+ device_temp: device_temp,
3459
+ }
3460
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3461
+ return;
3462
+ }
3463
+ }
3464
+ else{
3465
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3466
+ }
3467
+ }
3468
+ else{
3469
+ var mode = payload[8];
3470
+ var odr = payload[9];
3471
+ var en_axis = payload[10] & 7;
3472
+ var fsr = payload[10] >> 5;
3473
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3474
+
3475
+
3476
+ switch(odr){
3477
+ case 6:
3478
+ odr = 50;
3479
+ break;
3480
+ case 7:
3481
+ odr = 100;
3482
+ break;
3483
+ case 8:
3484
+ odr = 200;
3485
+ break;
3486
+ case 9:
3487
+ odr = 400;
3488
+ break;
3489
+ case 10:
3490
+ odr = 800;
3491
+ break;
3492
+ case 11:
3493
+ odr = 1600;
3494
+ break;
3495
+ case 12:
3496
+ odr = 3200;
3497
+ break;
3498
+ case 13:
3499
+ odr = 6400;
3500
+ break;
3501
+ case 14:
3502
+ odr = 12800;
3503
+ break;
3504
+ case 15:
3505
+ odr = 25600;
3506
+ break;
3507
+ default:
3508
+ odr = 0;
3509
+ }
3510
+
3511
+ globalDevices[deviceAddr] = {
3512
+ // stream_size: expected_packets,
3513
+ data: {},
3514
+ odr: odr,
3515
+ mo: mode,
3516
+ en_axis: en_axis,
3517
+ fsr: fsr,
3518
+ hour: hour,
3519
+ minute: minute,
3520
+ device_temp: device_temp,
3521
+ }
3522
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3523
+ }
3524
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
3525
+ var raw_data = new Array();
3526
+
3527
+ for(const packet in globalDevices[deviceAddr].data){
3528
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
3529
+ }
3530
+ var label = 0;
3531
+
3532
+ var fft = new Array();
3533
+ var fft_concat = {};
3534
+
3535
+ var en_axis_data = {};
3536
+ switch (globalDevices[deviceAddr].en_axis){
3537
+ case 1:
3538
+ en_axis_data.x_offset = 0;
3539
+ en_axis_data.increment = 2;
3540
+ break;
3541
+ case 2:
3542
+ en_axis_data.y_offset = 0;
3543
+ en_axis_data.increment = 2;
3544
+ break;
3545
+ case 3:
3546
+ en_axis_data.x_offset = 0;
3547
+ en_axis_data.y_offset = 2;
3548
+ en_axis_data.increment = 4;
3549
+ break;
3550
+ case 4:
3551
+ en_axis_data.z_offset = 0;
3552
+ en_axis_data.increment = 2;
3553
+ break;
3554
+ case 5:
3555
+ en_axis_data.x_offset = 0;
3556
+ en_axis_data.z_offset = 2;
3557
+ en_axis_data.increment = 4;
3558
+ break;
3559
+ case 6:
3560
+ en_axis_data.y_offset = 0;
3561
+ en_axis_data.z_offset = 2;
3562
+ en_axis_data.increment = 4;
3563
+ break;
3564
+ case 7:
3565
+ en_axis_data.x_offset = 0;
3566
+ en_axis_data.y_offset = 2;
3567
+ en_axis_data.z_offset = 4;
3568
+ en_axis_data.increment = 6;
3569
+ break;
3570
+ default:
3571
+ en_axis_data.increment = 0;
3572
+ }
3573
+
3574
+ var fsr_mult = .00006;
3575
+ var fsr_text = "";
3576
+ switch(globalDevices[deviceAddr].fsr){
3577
+ case 0:
3578
+ fsr_mult = 0.00006;
3579
+ break;
3580
+ case 1:
3581
+ fsr_mult = 0.00012;
3582
+ break;
3583
+ case 2:
3584
+ fsr_mult = 0.00024;
3585
+ break;
3586
+ case 3:
3587
+ fsr_mult = 0.00049;
3588
+ break;
3589
+ }
3590
+ switch(globalDevices[deviceAddr].fsr){
3591
+ case 0:
3592
+ fsr_text = "2g";
3593
+ break;
3594
+ case 1:
3595
+ fsr_text = "4g";
3596
+ break;
3597
+ case 2:
3598
+ fsr_text = "8g";
3599
+ break;
3600
+ case 3:
3601
+ fsr_text = "16g";
3602
+ break;
3603
+ }
3604
+
3605
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
3606
+ label++;
3607
+
3608
+ fft_concat[label] = {};
3609
+
3610
+ if('x_offset' in en_axis_data){
3611
+ fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
3612
+ }
3613
+ if('y_offset' in en_axis_data){
3614
+ fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
3615
+ }
3616
+ if('z_offset' in en_axis_data){
3617
+ fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
3618
+ }
3619
+ }
3620
+
3621
+ // If 4th bit is 1 the packet is from the second probe, if 0 from the first
3622
+ var probe = '';
3623
+ if(payload[7] & 8){
3624
+ probe = '2';
3625
+ }
3626
+ else{
3627
+ probe = '1';
3628
+ }
3629
+
3630
+ var fft_concat_obj = {
3631
+ probe: probe,
3632
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
3633
+ probe: probe,
3634
+ mac_address: deviceAddr,
3635
+ en_axis: globalDevices[deviceAddr].en_axis,
3636
+ fsr: fsr_text,
3637
+ odr: globalDevices[deviceAddr].odr,
3638
+ device_temp: globalDevices[deviceAddr].device_temp,
3639
+ data: fft_concat
3640
+ };
3641
+ sensor_data = fft_concat_obj;
3642
+ delete globalDevices[deviceAddr];
3643
+ if(this.hasOwnProperty('failure_no')){
3644
+ console.log('####falure no');
3645
+ console.log(this.failure_no);
3646
+ }
3647
+
3648
+ return sensor_data;
3649
+ }
3650
+ else{
3651
+ return;
3652
+ }
3653
+ }else{
3654
+ var mode = payload[8];
3655
+ var odr = payload[9];
3656
+ var en_axis = payload[10] & 7;
3657
+ var fsr = payload[10] >> 5;
3658
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3659
+
3660
+
3661
+ switch(odr){
3662
+ case 6:
3663
+ odr = 50;
3664
+ break;
3665
+ case 7:
3666
+ odr = 100;
3667
+ break;
3668
+ case 8:
3669
+ odr = 200;
3670
+ break;
3671
+ case 9:
3672
+ odr = 400;
3673
+ break;
3674
+ case 10:
3675
+ odr = 800;
3676
+ break;
3677
+ case 11:
3678
+ odr = 1600;
3679
+ break;
3680
+ case 12:
3681
+ odr = 3200;
3682
+ break;
3683
+ case 13:
3684
+ odr = 6400;
3685
+ break;
3686
+ case 14:
3687
+ odr = 12800;
3688
+ break;
3689
+ case 15:
3690
+ odr = 25600;
3691
+ break;
3692
+ default:
3693
+ odr = 0;
3694
+ }
3695
+
3696
+ globalDevices[deviceAddr] = {
3697
+ // stream_size: expected_packets,
3698
+ data: {},
3699
+ odr: odr,
3700
+ mo: mode,
3701
+ en_axis: en_axis,
3702
+ fsr: fsr,
3703
+ hour: hour,
3704
+ minute: minute,
3705
+ device_temp: device_temp,
3706
+ }
3707
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3708
+ return;
3709
+ }
3710
+ }
3711
+ else if(payload[8] === 0 || payload[8] === 2){
3712
+ // mode byte most significant bit will indicate fft data.
3713
+ // console.log(d);
3714
+ var odr1;
3715
+ switch(payload[9]){
3716
+ case 6:
3717
+ odr1 = "50Hz"
3718
+ break;
3719
+ case 7:
3720
+ odr1 = "100Hz";
3721
+ break;
3722
+ case 8:
3723
+ odr1 = "200Hz";
3724
+ break;
3725
+ case 9:
3726
+ odr1 = "400Hz";
3727
+ break;
3728
+ case 10:
3729
+ odr1 = "800Hz";
3730
+ break;
3731
+ case 11:
3732
+ odr1 = "1600Hz";
3733
+ break;
3734
+ case 12:
3735
+ odr1 = "3200Hz";
3736
+ break;
3737
+ case 13:
3738
+ odr1 = "6400Hz";
3739
+ break;
3740
+ case 14:
3741
+ odr1 = "12800Hz";
3742
+ break;
3743
+ case 15:
3744
+ odr1 = "25600Hz";
3745
+ break;
3746
+ }
3747
+ var odr2;
3748
+ switch(payload[54]){
3749
+ case 6:
3750
+ odr2 = "50Hz"
3751
+ break;
3752
+ case 7:
3753
+ odr2 = "100Hz";
3754
+ break;
3755
+ case 8:
3756
+ odr2 = "200Hz";
3757
+ break;
3758
+ case 9:
3759
+ odr2 = "400Hz";
3760
+ break;
3761
+ case 10:
3762
+ odr2 = "800Hz";
3763
+ break;
3764
+ case 11:
3765
+ odr2 = "1600Hz";
3766
+ break;
3767
+ case 12:
3768
+ odr2 = "3200Hz";
3769
+ break;
3770
+ case 13:
3771
+ odr2 = "6400Hz";
3772
+ break;
3773
+ case 14:
3774
+ odr2 = "12800Hz";
3775
+ break;
3776
+ case 15:
3777
+ odr2 = "25600Hz";
3778
+ break;
3779
+ }
3780
+
3781
+ // If 4th bit is 1 the packet is from the second probe, if 0 from the first
3782
+ // var probe = '';
3783
+ // if(payload[7] & 8){
3784
+ // probe = '2';
3785
+ // }
3786
+ // else{
3787
+ // probe = '1';
3788
+ // }
3789
+
3790
+ return {
3791
+ mode: payload[8],
3792
+
3793
+ s1_odr: odr1,
3794
+ s1_temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
3795
+
3796
+ x1_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
3797
+ x1_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
3798
+ x1_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
3799
+ x1_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
3800
+ x1_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
3801
+ x1_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
3802
+ x1_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
3803
+
3804
+ y1_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
3805
+ y1_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
3806
+ y1_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
3807
+ y1_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
3808
+ y1_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
3809
+ y1_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
3810
+ y1_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
3811
+
3812
+ z1_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
3813
+ z1_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
3814
+ z1_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
3815
+ z1_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
3816
+ z1_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
3817
+ z1_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
3818
+ z1_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
3819
+
3820
+ s2_odr: odr2,
3821
+ s2_temperature: signInt(payload.slice(55, 57).reduce(msbLsb), 16) / 100,
3822
+
3823
+ x2_rms_ACC_G: payload.slice(57, 59).reduce(msbLsb)/1000,
3824
+ x2_max_ACC_G: payload.slice(59, 61).reduce(msbLsb)/1000,
3825
+ x2_velocity_mm_sec: payload.slice(61, 63).reduce(msbLsb) / 100,
3826
+ x2_displacement_mm: payload.slice(63, 65).reduce(msbLsb) / 100,
3827
+ x2_peak_one_Hz: payload.slice(65, 67).reduce(msbLsb),
3828
+ x2_peak_two_Hz: payload.slice(67, 69).reduce(msbLsb),
3829
+ x2_peak_three_Hz: payload.slice(69, 71).reduce(msbLsb),
3830
+
3831
+ y2_rms_ACC_G: payload.slice(71, 73).reduce(msbLsb)/1000,
3832
+ y2_max_ACC_G: payload.slice(73, 75).reduce(msbLsb)/1000,
3833
+ y2_velocity_mm_sec: payload.slice(75, 77).reduce(msbLsb) / 100,
3834
+ y2_displacement_mm: payload.slice(77, 79).reduce(msbLsb) / 100,
3835
+ y2_peak_one_Hz: payload.slice(79, 81).reduce(msbLsb),
3836
+ y2_peak_two_Hz: payload.slice(81, 83).reduce(msbLsb),
3837
+ y2_peak_three_Hz: payload.slice(83, 85).reduce(msbLsb),
3838
+
3839
+ z2_rms_ACC_G: payload.slice(85, 87).reduce(msbLsb)/1000,
3840
+ z2_max_ACC_G: payload.slice(87, 89).reduce(msbLsb)/1000,
3841
+ z2_velocity_mm_sec: payload.slice(89, 91).reduce(msbLsb) / 100,
3842
+ z2_displacement_mm: payload.slice(91, 93).reduce(msbLsb) / 100,
3843
+ z2_peak_one_Hz: payload.slice(93, 95).reduce(msbLsb),
3844
+ z2_peak_two_Hz: payload.slice(95, 97).reduce(msbLsb),
3845
+ z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb)
3846
+ };
3847
+ }
3848
+ // else{
3849
+ // parsed.data = {'error': 'Vibration mode error'}
3850
+ // return parsed;
3851
+ // }
3852
+ },
3853
+ 'parse_fly': (frame) => {
3854
+ let frame_data = {};
3855
+ switch(frame[16]){
3856
+ case 0:
3857
+ frame_data.mode = "Processed";
3858
+ break;
3859
+ case 1:
3860
+ frame_data.mode = "Raw";
3861
+ break;
3862
+ case 2:
3863
+ frame_data.mode = "Processed + Raw on demand";
3864
+ break;
3865
+ }
3866
+ switch(frame[17]){
3867
+ case 6:
3868
+ frame_data.odr_1 = 50;
3869
+ break;
3870
+ case 7:
3871
+ frame_data.odr_1 = 100;
3872
+ break;
3873
+ case 8:
3874
+ frame_data.odr_1 = 200;
3875
+ break;
3876
+ case 9:
3877
+ frame_data.odr_1 = 400;
3878
+ break;
3879
+ case 10:
3880
+ frame_data.odr_1 = 800;
3881
+ break;
3882
+ case 11:
3883
+ frame_data.odr_1 = 1600;
3884
+ break;
3885
+ case 12:
3886
+ frame_data.odr_1 = 3200;
3887
+ break;
3888
+ case 13:
3889
+ frame_data.odr_1 = 6400;
3890
+ break;
3891
+ case 14:
3892
+ frame_data.odr_1 = 12800;
3893
+ break;
3894
+ case 15:
3895
+ frame_data.odr_1 = 25600;
3896
+ break;
3897
+ }
3898
+ switch(frame[18]){
3899
+ case 6:
3900
+ frame_data.odr_2 = 50;
3901
+ break;
3902
+ case 7:
3903
+ frame_data.odr_2 = 100;
3904
+ break;
3905
+ case 8:
3906
+ frame_data.odr_2 = 200;
3907
+ break;
3908
+ case 9:
3909
+ frame_data.odr_2 = 400;
3910
+ break;
3911
+ case 10:
3912
+ frame_data.odr_2 = 800;
3913
+ break;
3914
+ case 11:
3915
+ frame_data.odr_2 = 1600;
3916
+ break;
3917
+ case 12:
3918
+ frame_data.odr_2 = 3200;
3919
+ break;
3920
+ case 13:
3921
+ frame_data.odr_2 = 6400;
3922
+ break;
3923
+ case 14:
3924
+ frame_data.odr_2 = 12800;
3925
+ break;
3926
+ case 15:
3927
+ frame_data.odr_2 = 25600;
3928
+ break;
3929
+ }
3930
+ frame_data.sampling_duration_1 = frame[19]*50 + "ms";
3931
+ frame_data.sampling_duration_2 = frame[20]*50 + "ms";
3932
+ switch(frame[21]){
3933
+ case 0:
3934
+ frame_data.filter_status = "Disabled";
3935
+ break;
3936
+ case 1:
3937
+ frame_data.filter_status = "Enabled";
3938
+ break;
3939
+ }
3940
+ switch(frame[22]){
3941
+ case 0:
3942
+ frame_data.lpf_coeff_1 = 4;
3943
+ break;
3944
+ case 1:
3945
+ frame_data.lpf_coeff_1 = 8;
3946
+ break;
3947
+ case 2:
3948
+ frame_data.lpf_coeff_1 = 16;
3949
+ break;
3950
+ case 2:
3951
+ frame_data.lpf_coeff_1 = 32;
3952
+ break;
3953
+ case 4:
3954
+ frame_data.lpf_coeff_1 = 64;
3955
+ break;
3956
+ case 5:
3957
+ frame_data.lpf_coeff_1 = 128;
3958
+ break;
3959
+ case 6:
3960
+ frame_data.lpf_coeff_1 = 256;
3961
+ break;
3962
+ case 7:
3963
+ frame_data.lpf_coeff_1 = 512;
3964
+ break;
3965
+ case 8:
3966
+ frame_data.lpf_coeff_1 = 1024;
3967
+ break;
3968
+ case 9:
3969
+ frame_data.lpf_coeff_1 = 2048;
3970
+ break;
3971
+ }
3972
+ frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
3973
+ switch(frame[23]){
3974
+ case 0:
3975
+ frame_data.lpf_coeff_2 = 4;
3976
+ break;
3977
+ case 1:
3978
+ frame_data.lpf_coeff_2 = 8;
3979
+ break;
3980
+ case 2:
3981
+ frame_data.lpf_coeff_2 = 16;
3982
+ break;
3983
+ case 2:
3984
+ frame_data.lpf_coeff_2 = 32;
3985
+ break;
3986
+ case 4:
3987
+ frame_data.lpf_coeff_2 = 64;
3988
+ break;
3989
+ case 5:
3990
+ frame_data.lpf_coeff_2 = 128;
3991
+ break;
3992
+ case 6:
3993
+ frame_data.lpf_coeff_2 = 256;
3994
+ break;
3995
+ case 7:
3996
+ frame_data.lpf_coeff_2 = 512;
3997
+ break;
3998
+ case 8:
3999
+ frame_data.lpf_coeff_2 = 1024;
4000
+ break;
4001
+ case 9:
4002
+ frame_data.lpf_coeff_2 = 2048;
4003
+ break;
4004
+ }
4005
+ frame_data.lpf_freq_2 = frame_data.odr_2 / frame_data.lpf_coeff_2;
4006
+ switch(frame[24]){
4007
+ case 0:
4008
+ frame_data.hpf_coeff_1 = 4;
4009
+ break;
4010
+ case 1:
4011
+ frame_data.hpf_coeff_1 = 8;
4012
+ break;
4013
+ case 2:
4014
+ frame_data.hpf_coeff_1 = 16;
4015
+ break;
4016
+ case 2:
4017
+ frame_data.hpf_coeff_1 = 32;
4018
+ break;
4019
+ case 4:
4020
+ frame_data.hpf_coeff_1 = 64;
4021
+ break;
4022
+ case 5:
4023
+ frame_data.hpf_coeff_1 = 128;
4024
+ break;
4025
+ case 6:
4026
+ frame_data.hpf_coeff_1 = 256;
4027
+ break;
4028
+ case 7:
4029
+ frame_data.hpf_coeff_1 = 512;
4030
+ break;
4031
+ case 8:
4032
+ frame_data.hpf_coeff_1 = 1024;
4033
+ break;
4034
+ case 9:
4035
+ frame_data.hpf_coeff_1 = 2048;
4036
+ break;
4037
+ }
4038
+ frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
4039
+ switch(frame[25]){
4040
+ case 0:
4041
+ frame_data.hpf_coeff_2 = 4;
4042
+ break;
4043
+ case 1:
4044
+ frame_data.hpf_coeff_2 = 8;
4045
+ break;
4046
+ case 2:
4047
+ frame_data.hpf_coeff_2 = 16;
4048
+ break;
4049
+ case 2:
4050
+ frame_data.hpf_coeff_2 = 32;
4051
+ break;
4052
+ case 4:
4053
+ frame_data.hpf_coeff_2 = 64;
4054
+ break;
4055
+ case 5:
4056
+ frame_data.hpf_coeff_2 = 128;
4057
+ break;
4058
+ case 6:
4059
+ frame_data.hpf_coeff_2 = 256;
4060
+ break;
4061
+ case 7:
4062
+ frame_data.hpf_coeff_2 = 512;
4063
+ break;
4064
+ case 8:
4065
+ frame_data.hpf_coeff_2 = 1024;
4066
+ break;
4067
+ case 9:
4068
+ frame_data.hpf_coeff_2 = 2048;
4069
+ break;
4070
+ }
4071
+ frame_data.hpf_freq_2 = frame_data.odr_2 / frame_data.hpf_coeff_2;
4072
+ switch(frame[26]){
4073
+ case 0:
4074
+ frame_data.sampling_interval = "5 Minutes";
4075
+ break;
4076
+ case 1:
4077
+ frame_data.sampling_interval = "10 Minutes";
4078
+ break;
4079
+ case 2:
4080
+ frame_data.sampling_interval = "15 Minutes";
4081
+ break;
4082
+ case 2:
4083
+ frame_data.sampling_interval = "20 Minutes";
4084
+ break;
4085
+ case 4:
4086
+ frame_data.sampling_interval = "30 Minutes";
4087
+ break;
4088
+ case 5:
4089
+ frame_data.sampling_interval = "60 Minutes";
4090
+ break;
4091
+ case 6:
4092
+ frame_data.sampling_interval = "120 Minutes";
4093
+ break;
4094
+ case 7:
4095
+ frame_data.sampling_interval = "180 Minutes";
4096
+ break;
4097
+ case 8:
4098
+ frame_data.sampling_interval = "1 Minute";
4099
+ break;
4100
+ }
4101
+ frame_data.on_request_timeout = frame[27] + " Seconds";
4102
+ frame_data.deadband = frame[28] + "mg";
4103
+
4104
+ switch(frame[29]){
4105
+ case 0:
4106
+ frame_data.payload_length = "50 Bytes";
4107
+ break;
4108
+ case 1:
4109
+ frame_data.payload_length = "100 Bytes";
4110
+ break;
4111
+ case 2:
4112
+ frame_data.payload_length = "150 Bytes";
4113
+ break;
4114
+ case 3:
4115
+ frame_data.payload_length = "180 Bytes";
4116
+ break;
4117
+ }
4118
+
4119
+ return {
4120
+ 'firmware': frame[2],
4121
+ 'destination_address': toMac(frame.slice(12, 16)),
4122
+ 'mode': frame_data.mode,
4123
+ 'odr_1': frame_data.odr_1+'Hz',
4124
+ 'odr_2': frame_data.odr_2+'Hz',
4125
+ 'sampling_duration_1': frame_data.sampling_duration_1,
4126
+ 'sampling_duration_2': frame_data.sampling_duration_2,
4127
+ 'filter_status': frame_data.filter_status,
4128
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
4129
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
4130
+ 'lpf_coeff_2': frame_data.lpf_coeff_2,
4131
+ 'lpf_freq_2': frame_data.lpf_freq_2+'Hz',
4132
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
4133
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
4134
+ 'hpf_coeff_2': frame_data.hpf_coeff_2,
4135
+ 'hpf_freq_2': frame_data.hpf_freq_2+'Hz',
4136
+ 'sampling_interval': frame_data.sampling_interval,
4137
+ 'on_request_timeout': frame_data.on_request_timeout,
4138
+ 'deadband': frame_data.deadband,
4139
+ 'payload_length': frame_data.payload_length,
4140
+ 'machine_values': {
4141
+ 'firmware': frame[2],
4142
+ 'destination_address': toMac(frame.slice(12, 16), false),
4143
+ 'mode': frame[16],
4144
+ 'odr_1': frame[17],
4145
+ 'odr_2': frame[18],
4146
+ 'sampling_duration_1': frame[19],
4147
+ 'sampling_duration_2': frame[20],
4148
+ 'filter_status': frame[21],
4149
+ 'lpf_coeff_1': frame[22],
4150
+ 'lpf_coeff_2': frame[23],
4151
+ 'hpf_coeff_1': frame[24],
4152
+ 'hpf_coeff_2': frame[25],
4153
+ 'sampling_interval': frame[26],
4154
+ 'on_request_timeout': frame[27],
4155
+ 'deadband': frame[28],
4156
+ 'payload_length': frame[29]
4157
+ }
4158
+ }
4159
+ }
4160
+ },
4161
+
4162
+ '82': {
4163
+ name: 'Condition Based/Predictive Maintenance Sensor',
4164
+ parse: (payload, parsed, mac) => {
4165
+ if(payload[7] >> 1 != 0){
4166
+ console.log('Error found');
4167
+ console.log(payload[7]);
4168
+ parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
4169
+ return parsed;
4170
+ }
4171
+
4172
+ if(payload[8] === 1){
4173
+ var deviceAddr = mac;
4174
+ var firmware = payload[1];
4175
+ var hour = payload[11];
4176
+ var minute = payload[12];
4177
+ var expected_packets = payload[15];
4178
+ var current_packet = payload[16];
4179
+ var sdata_start = 17;
4180
+
4181
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
4182
+ if(expected_packets != 1){
4183
+ // if a packet is already stored with the same packet ID, or if packet ID is 1, or if current packet ID is not one more than last packet ID
4184
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
4185
+ console.log('-----');
4186
+ console.log('bad packet breakdown deleting stream');
4187
+ console.log(current_packet);
4188
+ console.log(expected_packets);
4189
+ console.log(current_packet in globalDevices[deviceAddr].data);
4190
+ console.log(current_packet == 1);
4191
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
4192
+ if(this.hasOwnProperty('failure_no')){
4193
+ this.failure_no = this.failure_no + 1;
4194
+ }
4195
+ else{
4196
+ this.failure_no = 1;
4197
+ }
4198
+ if(this.hasOwnProperty('failure_no')){
4199
+ console.log('####falure no');
4200
+ console.log(this.failure_no);
4201
+ }
4202
+ // console.log(globalDevices[deviceAddr].data);
4203
+ delete globalDevices[deviceAddr];
4204
+ if(current_packet != 1){
4205
+ return;
4206
+ } else{
4207
+
4208
+ var mode = payload[8];
4209
+ var odr = payload[9];
4210
+ var en_axis = payload[10] & 7;
4211
+ var fsr = payload[10] >> 5;
4212
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4213
+
4214
+
4215
+ switch(odr){
4216
+ case 6:
4217
+ odr = 50;
4218
+ break;
4219
+ case 7:
4220
+ odr = 100;
4221
+ break;
4222
+ case 8:
4223
+ odr = 200;
4224
+ break;
4225
+ case 9:
4226
+ odr = 400;
4227
+ break;
4228
+ case 10:
4229
+ odr = 800;
4230
+ break;
4231
+ case 11:
4232
+ odr = 1600;
4233
+ break;
4234
+ case 12:
4235
+ odr = 3200;
4236
+ break;
4237
+ case 13:
4238
+ odr = 6400;
4239
+ break;
4240
+ case 14:
4241
+ odr = 12800;
4242
+ break;
4243
+ case 15:
4244
+ odr = 25600;
4245
+ break;
4246
+ default:
4247
+ odr = 0;
4248
+ }
4249
+
4250
+ globalDevices[deviceAddr] = {
4251
+ // stream_size: expected_packets,
4252
+ data: {},
4253
+ odr: odr,
4254
+ mo: mode,
4255
+ en_axis: en_axis,
4256
+ fsr: fsr,
4257
+ hour: hour,
4258
+ minute: minute,
4259
+ device_temp: device_temp,
4260
+ }
4261
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4262
+ return;
4263
+ }
4264
+ }
4265
+ else{
4266
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4267
+ }
4268
+ }
4269
+ else{
4270
+ var mode = payload[8];
4271
+ var odr = payload[9];
4272
+ var en_axis = payload[10] & 7;
4273
+ var fsr = payload[10] >> 5;
4274
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4275
+
4276
+
4277
+ switch(odr){
4278
+ case 6:
4279
+ odr = 50;
4280
+ break;
4281
+ case 7:
4282
+ odr = 100;
4283
+ break;
4284
+ case 8:
4285
+ odr = 200;
4286
+ break;
4287
+ case 9:
4288
+ odr = 400;
4289
+ break;
4290
+ case 10:
4291
+ odr = 800;
4292
+ break;
4293
+ case 11:
4294
+ odr = 1600;
4295
+ break;
4296
+ case 12:
4297
+ odr = 3200;
4298
+ break;
4299
+ case 13:
4300
+ odr = 6400;
4301
+ break;
4302
+ case 14:
4303
+ odr = 12800;
4304
+ break;
4305
+ case 15:
4306
+ odr = 25600;
4307
+ break;
4308
+ default:
4309
+ odr = 0;
4310
+ }
4311
+
4312
+ globalDevices[deviceAddr] = {
4313
+ // stream_size: expected_packets,
4314
+ data: {},
4315
+ odr: odr,
4316
+ mo: mode,
4317
+ en_axis: en_axis,
4318
+ fsr: fsr,
4319
+ hour: hour,
4320
+ minute: minute,
4321
+ device_temp: device_temp,
4322
+ }
4323
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4324
+ }
4325
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
4326
+ var raw_data = new Array();
4327
+ for(const packet in globalDevices[deviceAddr].data){
4328
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
4329
+ }
4330
+ var label = 0;
4331
+
4332
+ var fft = new Array();
4333
+ var fft_concat = {};
4334
+
4335
+ var en_axis_data = {};
4336
+ switch (globalDevices[deviceAddr].en_axis){
4337
+ case 1:
4338
+ en_axis_data.x_offset = 0;
4339
+ en_axis_data.increment = 2;
4340
+ break;
4341
+ case 2:
4342
+ en_axis_data.y_offset = 0;
4343
+ en_axis_data.increment = 2;
4344
+ break;
4345
+ case 3:
4346
+ en_axis_data.x_offset = 0;
4347
+ en_axis_data.y_offset = 2;
4348
+ en_axis_data.increment = 4;
4349
+ break;
4350
+ case 4:
4351
+ en_axis_data.z_offset = 0;
4352
+ en_axis_data.increment = 2;
4353
+ break;
4354
+ case 5:
4355
+ en_axis_data.x_offset = 0;
4356
+ en_axis_data.z_offset = 2;
4357
+ en_axis_data.increment = 4;
4358
+ break;
4359
+ case 6:
4360
+ en_axis_data.y_offset = 0;
4361
+ en_axis_data.z_offset = 2;
4362
+ en_axis_data.increment = 4;
4363
+ break;
4364
+ case 7:
4365
+ en_axis_data.x_offset = 0;
4366
+ en_axis_data.y_offset = 2;
4367
+ en_axis_data.z_offset = 4;
4368
+ en_axis_data.increment = 6;
4369
+ break;
4370
+ default:
4371
+ en_axis_data.increment = 0;
4372
+ }
4373
+
4374
+ var fsr_mult = .00006;
4375
+ var fsr_text = "";
4376
+ switch(globalDevices[deviceAddr].fsr){
4377
+ case 0:
4378
+ fsr_mult = 0.00006;
4379
+ break;
4380
+ case 1:
4381
+ fsr_mult = 0.00012;
4382
+ break;
4383
+ case 2:
4384
+ fsr_mult = 0.00024;
4385
+ break;
4386
+ case 3:
4387
+ fsr_mult = 0.00049;
4388
+ break;
4389
+ }
4390
+ switch(globalDevices[deviceAddr].fsr){
4391
+ case 0:
4392
+ fsr_text = "2g";
4393
+ break;
4394
+ case 1:
4395
+ fsr_text = "4g";
4396
+ break;
4397
+ case 2:
4398
+ fsr_text = "8g";
4399
+ break;
4400
+ case 3:
4401
+ fsr_text = "16g";
4402
+ break;
4403
+ }
4404
+
4405
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
4406
+ label++;
4407
+
4408
+ fft_concat[label] = {};
4409
+
4410
+ if('x_offset' in en_axis_data){
4411
+ fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
4412
+ }
4413
+ if('y_offset' in en_axis_data){
4414
+ fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
4415
+ }
4416
+ if('z_offset' in en_axis_data){
4417
+ fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
4418
+ }
4419
+ }
4420
+ var fft_concat_obj = {
4421
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
4422
+ mac_address: deviceAddr,
4423
+ en_axis: globalDevices[deviceAddr].en_axis,
4424
+ fsr: fsr_text,
4425
+ odr: globalDevices[deviceAddr].odr,
4426
+ device_temp: globalDevices[deviceAddr].device_temp,
4427
+ data: fft_concat
4428
+ };
4429
+ // console.log(globalDevices[deviceAddr].data);
4430
+ // console.log(raw_data);
4431
+ sensor_data = fft_concat_obj;
4432
+ // parsed.raw_packets = globalDevices[deviceAddr].data;
4433
+ // parsed.raw_data = raw_data;
4434
+ delete globalDevices[deviceAddr];
4435
+ if(this.hasOwnProperty('failure_no')){
4436
+ console.log('####falure no');
4437
+ console.log(this.failure_no);
4438
+ }
4439
+
4440
+ return sensor_data;
4441
+ }
4442
+ else{
4443
+ return;
4444
+ }
4445
+ }else{
4446
+
4447
+ var mode = payload[8];
4448
+ var odr = payload[9];
4449
+ var en_axis = payload[10] & 7;
4450
+ var fsr = payload[10] >> 5;
4451
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4452
+
4453
+
4454
+ switch(odr){
4455
+ case 6:
4456
+ odr = 50;
4457
+ break;
4458
+ case 7:
4459
+ odr = 100;
4460
+ break;
4461
+ case 8:
4462
+ odr = 200;
4463
+ break;
4464
+ case 9:
4465
+ odr = 400;
4466
+ break;
4467
+ case 10:
4468
+ odr = 800;
4469
+ break;
4470
+ case 11:
4471
+ odr = 1600;
4472
+ break;
4473
+ case 12:
4474
+ odr = 3200;
4475
+ break;
4476
+ case 13:
4477
+ odr = 6400;
4478
+ break;
4479
+ case 14:
4480
+ odr = 12800;
4481
+ break;
4482
+ case 15:
4483
+ odr = 25600;
4484
+ break;
4485
+ default:
4486
+ odr = 0;
4487
+ }
4488
+
4489
+ globalDevices[deviceAddr] = {
4490
+ // stream_size: expected_packets,
4491
+ data: {},
4492
+ odr: odr,
4493
+ mo: mode,
4494
+ en_axis: en_axis,
4495
+ fsr: fsr,
4496
+ hour: hour,
4497
+ minute: minute,
4498
+ device_temp: device_temp,
4499
+ }
4500
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4501
+ return;
4502
+ }
4503
+ }
4504
+ else if(payload[8] === 0 || payload[8] === 2){
4505
+ // mode byte most significant bit will indicate fft data.
4506
+ // console.log(d);
4507
+ var odr;
4508
+ switch(payload[9]){
4509
+ case 6:
4510
+ odr = "50Hz"
4511
+ break;
4512
+ case 7:
4513
+ odr = "100Hz";
4514
+ break;
4515
+ case 8:
4516
+ odr = "200Hz";
4517
+ break;
4518
+ case 9:
4519
+ odr = "400Hz";
4520
+ break;
4521
+ case 10:
4522
+ odr = "800Hz";
4523
+ break;
4524
+ case 11:
4525
+ odr = "1600Hz";
4526
+ break;
4527
+ case 12:
4528
+ odr = "3200Hz";
4529
+ break;
4530
+ case 13:
4531
+ odr = "6400Hz";
4532
+ break;
4533
+ case 14:
4534
+ odr = "12800Hz";
4535
+ break;
4536
+ case 15:
4537
+ odr = "25600Hz";
4538
+ break;
4539
+ }
4540
+ return {
4541
+ mode: payload[8],
4542
+
4543
+ odr: odr,
4544
+ temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
4545
+ Ext_temperature: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
4546
+ Current: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 1000,
4547
+ x_rms_ACC_G: payload.slice(20, 22).reduce(msbLsb)/1000,
4548
+ x_max_ACC_G: payload.slice(22, 24).reduce(msbLsb)/1000,
4549
+ x_velocity_mm_sec: payload.slice(24, 26).reduce(msbLsb) / 100,
4550
+ x_displacement_mm: payload.slice(26, 28).reduce(msbLsb) / 100,
4551
+ x_peak_one_Hz: payload.slice(28, 30).reduce(msbLsb),
4552
+ x_peak_two_Hz: payload.slice(30, 32).reduce(msbLsb),
4553
+ x_peak_three_Hz: payload.slice(32, 34).reduce(msbLsb),
4554
+
4555
+ y_rms_ACC_G: payload.slice(34, 36).reduce(msbLsb)/1000,
4556
+ y_max_ACC_G: payload.slice(36, 38).reduce(msbLsb)/1000,
4557
+ y_velocity_mm_sec: payload.slice(38, 40).reduce(msbLsb) / 100,
4558
+ y_displacement_mm: payload.slice(40, 42).reduce(msbLsb) / 100,
4559
+ y_peak_one_Hz: payload.slice(42, 44).reduce(msbLsb),
4560
+ y_peak_two_Hz: payload.slice(44, 46).reduce(msbLsb),
4561
+ y_peak_three_Hz: payload.slice(46, 48).reduce(msbLsb),
4562
+
4563
+ z_rms_ACC_G: payload.slice(48, 50).reduce(msbLsb)/1000,
4564
+ z_max_ACC_G: payload.slice(50, 52).reduce(msbLsb)/1000,
4565
+ z_velocity_mm_sec: payload.slice(52, 54).reduce(msbLsb) / 100,
4566
+ z_displacement_mm: payload.slice(54, 56).reduce(msbLsb) / 100,
4567
+ z_peak_one_Hz: payload.slice(56, 58).reduce(msbLsb),
4568
+ z_peak_two_Hz: payload.slice(58, 60).reduce(msbLsb),
4569
+ z_peak_three_Hz: payload.slice(60, 62).reduce(msbLsb),
4570
+ };
4571
+ }
4572
+ // else{
4573
+ // parsed.data = {'error': 'Vibration mode error'}
4574
+ // return parsed;
4575
+ // }
4576
+ },
4577
+ 'parse_fly': (frame) => {
4578
+ let frame_data = {};
4579
+ switch(frame[16]){
4580
+ case 0:
4581
+ frame_data.mode = "Processed";
4582
+ break;
4583
+ case 1:
4584
+ frame_data.mode = "Raw";
4585
+ break;
4586
+ case 2:
4587
+ frame_data.mode = "Processed + Raw on demand";
4588
+ break;
4589
+ }
4590
+ switch(frame[17]){
4591
+ case 6:
4592
+ frame_data.odr_1 = 50;
4593
+ break;
4594
+ case 7:
4595
+ frame_data.odr_1 = 100;
4596
+ break;
4597
+ case 8:
4598
+ frame_data.odr_1 = 200;
4599
+ break;
4600
+ case 9:
4601
+ frame_data.odr_1 = 400;
4602
+ break;
4603
+ case 10:
4604
+ frame_data.odr_1 = 800;
4605
+ break;
4606
+ case 11:
4607
+ frame_data.odr_1 = 1600;
4608
+ break;
4609
+ case 12:
4610
+ frame_data.odr_1 = 3200;
4611
+ break;
4612
+ case 13:
4613
+ frame_data.odr_1 = 6400;
4614
+ break;
4615
+ case 14:
4616
+ frame_data.odr_1 = 12800;
4617
+ break;
4618
+ case 15:
4619
+ frame_data.odr_1 = 25600;
4620
+ break;
4621
+ }
4622
+ frame_data.sampling_duration_1 = frame[19]*50 + "ms";
4623
+ switch(frame[21]){
4624
+ case 0:
4625
+ frame_data.filter_status = "Disabled";
4626
+ break;
4627
+ case 1:
4628
+ frame_data.filter_status = "Enabled";
4629
+ break;
4630
+ }
4631
+ switch(frame[22]){
4632
+ case 0:
4633
+ frame_data.lpf_coeff_1 = 4;
4634
+ break;
4635
+ case 1:
4636
+ frame_data.lpf_coeff_1 = 8;
4637
+ break;
4638
+ case 2:
4639
+ frame_data.lpf_coeff_1 = 16;
4640
+ break;
4641
+ case 2:
4642
+ frame_data.lpf_coeff_1 = 32;
4643
+ break;
4644
+ case 4:
4645
+ frame_data.lpf_coeff_1 = 64;
4646
+ break;
4647
+ case 5:
4648
+ frame_data.lpf_coeff_1 = 128;
4649
+ break;
4650
+ case 6:
4651
+ frame_data.lpf_coeff_1 = 256;
4652
+ break;
4653
+ case 7:
4654
+ frame_data.lpf_coeff_1 = 512;
4655
+ break;
4656
+ case 8:
4657
+ frame_data.lpf_coeff_1 = 1024;
4658
+ break;
4659
+ case 9:
4660
+ frame_data.lpf_coeff_1 = 2048;
4661
+ break;
4662
+ }
4663
+ frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
4664
+ switch(frame[24]){
4665
+ case 0:
4666
+ frame_data.hpf_coeff_1 = 4;
4667
+ break;
4668
+ case 1:
4669
+ frame_data.hpf_coeff_1 = 8;
4670
+ break;
4671
+ case 2:
4672
+ frame_data.hpf_coeff_1 = 16;
4673
+ break;
4674
+ case 2:
4675
+ frame_data.hpf_coeff_1 = 32;
4676
+ break;
4677
+ case 4:
4678
+ frame_data.hpf_coeff_1 = 64;
4679
+ break;
4680
+ case 5:
4681
+ frame_data.hpf_coeff_1 = 128;
4682
+ break;
4683
+ case 6:
4684
+ frame_data.hpf_coeff_1 = 256;
4685
+ break;
4686
+ case 7:
4687
+ frame_data.hpf_coeff_1 = 512;
4688
+ break;
4689
+ case 8:
4690
+ frame_data.hpf_coeff_1 = 1024;
4691
+ break;
4692
+ case 9:
4693
+ frame_data.hpf_coeff_1 = 2048;
4694
+ break;
4695
+ }
4696
+ frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
4697
+ switch(frame[26]){
4698
+ case 0:
4699
+ frame_data.sampling_interval = "5 Minutes";
4700
+ break;
4701
+ case 1:
4702
+ frame_data.sampling_interval = "10 Minutes";
4703
+ break;
4704
+ case 2:
4705
+ frame_data.sampling_interval = "15 Minutes";
4706
+ break;
4707
+ case 2:
4708
+ frame_data.sampling_interval = "20 Minutes";
4709
+ break;
4710
+ case 4:
4711
+ frame_data.sampling_interval = "30 Minutes";
4712
+ break;
4713
+ case 5:
4714
+ frame_data.sampling_interval = "60 Minutes";
4715
+ break;
4716
+ case 6:
4717
+ frame_data.sampling_interval = "120 Minutes";
4718
+ break;
4719
+ case 7:
4720
+ frame_data.sampling_interval = "180 Minutes";
4721
+ break;
4722
+ case 8:
4723
+ frame_data.sampling_interval = "1 Minute";
4724
+ break;
4725
+ }
4726
+ frame_data.on_request_timeout = frame[27] + " Seconds";
4727
+ frame_data.deadband = frame[28] + "mg";
4728
+
4729
+ switch(frame[29]){
4730
+ case 0:
4731
+ frame_data.payload_length = "50 Bytes";
4732
+ break;
4733
+ case 1:
4734
+ frame_data.payload_length = "100 Bytes";
4735
+ break;
4736
+ case 2:
4737
+ frame_data.payload_length = "150 Bytes";
4738
+ break;
4739
+ case 3:
4740
+ frame_data.payload_length = "180 Bytes";
4741
+ break;
4742
+ }
4743
+
4744
+ return {
4745
+ 'firmware': frame[2],
4746
+ 'destination_address': toMac(frame.slice(12, 16)),
4747
+ 'mode': frame_data.mode,
4748
+ 'odr_1': frame_data.odr_1+'Hz',
4749
+ 'sampling_duration_1': frame_data.sampling_duration_1,
4750
+ 'sampling_duration_2': frame_data.sampling_duration_2,
4751
+ 'filter_status': frame_data.filter_status,
4752
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
4753
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
4754
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
4755
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
4756
+ 'sampling_interval': frame_data.sampling_interval,
4757
+ 'on_request_timeout': frame_data.on_request_timeout,
4758
+ 'deadband': frame_data.deadband,
4759
+ 'payload_length': frame_data.payload_length,
4760
+ 'machine_values': {
4761
+ 'firmware': frame[2],
4762
+ 'destination_address': toMac(frame.slice(12, 16), false),
4763
+ 'mode': frame[16],
4764
+ 'odr_1': frame[17],
4765
+ 'sampling_duration_1': frame[19],
4766
+ 'sampling_duration_2': frame[20],
4767
+ 'filter_status': frame[21],
4768
+ 'lpf_coeff_1': frame[22],
4769
+ 'hpf_coeff_1': frame[24],
4770
+ 'sampling_interval': frame[26],
4771
+ 'on_request_timeout': frame[27],
4772
+ 'deadband': frame[28],
4773
+ 'payload_length': frame[29]
4774
+ }
4775
+ }
4776
+ }
4777
+ },
4778
+
4779
+ '84': {
4780
+ name: 'Type 84 - Standalone Smart Vibration Sensor',
4781
+ parse: (payload, parsed, mac) => {
4782
+ if(payload[7] >> 1 != 0){
4783
+ console.log('Error found');
4784
+ parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
4785
+ return parsed;
4786
+ }
4787
+
4788
+ if(payload[8] === 1){
4789
+ var deviceAddr = mac;
4790
+ var firmware = payload[1];
4791
+ var hour = payload[11];
4792
+ var minute = payload[12];
4793
+ var expected_packets = payload[15];
4794
+ var current_packet = payload[16];
4795
+ var sdata_start = 17;
4796
+
4797
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
4798
+ if(expected_packets != 1){
4799
+ // if a packet is already stored with the same packet ID, or if packet ID is 1, or if current packet ID is not one more than last packet ID
4800
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
4801
+ console.log('-----');
4802
+ console.log('bad packet breakdown deleting stream');
4803
+ console.log(current_packet);
4804
+ console.log(expected_packets);
4805
+ console.log(current_packet in globalDevices[deviceAddr].data);
4806
+ console.log(current_packet == 1);
4807
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
4808
+ if(this.hasOwnProperty('failure_no')){
4809
+ this.failure_no = this.failure_no + 1;
4810
+ }
4811
+ else{
4812
+ this.failure_no = 1;
4813
+ }
4814
+ if(this.hasOwnProperty('failure_no')){
4815
+ console.log('####falure no');
4816
+ console.log(this.failure_no);
4817
+ }
4818
+ // console.log(globalDevices[deviceAddr].data);
4819
+ delete globalDevices[deviceAddr];
4820
+ if(current_packet != 1){
4821
+ return;
4822
+ } else{
4823
+
4824
+ var mode = payload[8];
4825
+ var odr = payload[9];
4826
+ var en_axis = payload[10] & 7;
4827
+ var fsr = payload[10] >> 5;
4828
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4829
+
4830
+
4831
+ switch(odr){
4832
+ case 6:
4833
+ odr = 50;
4834
+ break;
4835
+ case 7:
4836
+ odr = 100;
4837
+ break;
4838
+ case 8:
4839
+ odr = 200;
4840
+ break;
4841
+ case 9:
4842
+ odr = 400;
4843
+ break;
4844
+ case 10:
4845
+ odr = 800;
4846
+ break;
4847
+ case 11:
4848
+ odr = 1600;
4849
+ break;
4850
+ case 12:
4851
+ odr = 3200;
4852
+ break;
4853
+ case 13:
4854
+ odr = 6400;
4855
+ break;
4856
+ case 14:
4857
+ odr = 12800;
4858
+ break;
4859
+ case 15:
4860
+ odr = 25600;
4861
+ break;
4862
+ default:
4863
+ odr = 0;
4864
+ }
4865
+
4866
+ globalDevices[deviceAddr] = {
4867
+ // stream_size: expected_packets,
4868
+ data: {},
4869
+ odr: odr,
4870
+ mo: mode,
4871
+ en_axis: en_axis,
4872
+ fsr: fsr,
4873
+ hour: hour,
4874
+ minute: minute,
4875
+ device_temp: device_temp,
4876
+ }
4877
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4878
+ return;
4879
+ }
4880
+ }
4881
+ else{
4882
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4883
+ }
4884
+ }
4885
+ else{
4886
+ var mode = payload[8];
4887
+ var odr = payload[9];
4888
+ var en_axis = payload[10] & 7;
4889
+ var fsr = payload[10] >> 5;
4890
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4891
+
4892
+
4893
+ switch(odr){
4894
+ case 6:
4895
+ odr = 50;
4896
+ break;
4897
+ case 7:
4898
+ odr = 100;
4899
+ break;
4900
+ case 8:
4901
+ odr = 200;
4902
+ break;
4903
+ case 9:
4904
+ odr = 400;
4905
+ break;
4906
+ case 10:
4907
+ odr = 800;
4908
+ break;
4909
+ case 11:
4910
+ odr = 1600;
4911
+ break;
4912
+ case 12:
4913
+ odr = 3200;
4914
+ break;
4915
+ case 13:
4916
+ odr = 6400;
4917
+ break;
4918
+ case 14:
4919
+ odr = 12800;
4920
+ break;
4921
+ case 15:
4922
+ odr = 25600;
4923
+ break;
4924
+ default:
4925
+ odr = 0;
4926
+ }
4927
+
4928
+ globalDevices[deviceAddr] = {
4929
+ // stream_size: expected_packets,
4930
+ data: {},
4931
+ odr: odr,
4932
+ mo: mode,
4933
+ en_axis: en_axis,
4934
+ fsr: fsr,
4935
+ hour: hour,
4936
+ minute: minute,
4937
+ device_temp: device_temp,
4938
+ }
4939
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4940
+ }
4941
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
4942
+ var raw_data = new Array();
4943
+ for(const packet in globalDevices[deviceAddr].data){
4944
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
4945
+ }
4946
+ var label = 0;
4947
+
4948
+ var fft = new Array();
4949
+ var fft_concat = {};
4950
+
4951
+ var en_axis_data = {};
4952
+ switch (globalDevices[deviceAddr].en_axis){
4953
+ case 1:
4954
+ en_axis_data.x_offset = 0;
4955
+ en_axis_data.increment = 2;
4956
+ break;
4957
+ case 2:
4958
+ en_axis_data.y_offset = 0;
4959
+ en_axis_data.increment = 2;
4960
+ break;
4961
+ case 3:
4962
+ en_axis_data.x_offset = 0;
4963
+ en_axis_data.y_offset = 2;
4964
+ en_axis_data.increment = 4;
4965
+ break;
4966
+ case 4:
4967
+ en_axis_data.z_offset = 0;
4968
+ en_axis_data.increment = 2;
4969
+ break;
4970
+ case 5:
4971
+ en_axis_data.x_offset = 0;
4972
+ en_axis_data.z_offset = 2;
4973
+ en_axis_data.increment = 4;
4974
+ break;
4975
+ case 6:
4976
+ en_axis_data.y_offset = 0;
4977
+ en_axis_data.z_offset = 2;
4978
+ en_axis_data.increment = 4;
4979
+ break;
4980
+ case 7:
4981
+ en_axis_data.x_offset = 0;
4982
+ en_axis_data.y_offset = 2;
4983
+ en_axis_data.z_offset = 4;
4984
+ en_axis_data.increment = 6;
4985
+ break;
4986
+ default:
4987
+ en_axis_data.increment = 0;
4988
+ }
4989
+
4990
+ var fsr_mult = .00006;
4991
+ var fsr_text = "";
4992
+ switch(globalDevices[deviceAddr].fsr){
4993
+ case 0:
4994
+ fsr_mult = 0.00006;
4995
+ break;
4996
+ case 1:
4997
+ fsr_mult = 0.00012;
4998
+ break;
4999
+ case 2:
5000
+ fsr_mult = 0.00024;
5001
+ break;
5002
+ case 3:
5003
+ fsr_mult = 0.00049;
5004
+ break;
5005
+ }
5006
+ switch(globalDevices[deviceAddr].fsr){
5007
+ case 0:
5008
+ fsr_text = "2g";
5009
+ break;
5010
+ case 1:
5011
+ fsr_text = "4g";
5012
+ break;
5013
+ case 2:
5014
+ fsr_text = "8g";
5015
+ break;
5016
+ case 3:
5017
+ fsr_text = "16g";
5018
+ break;
5019
+ }
5020
+
5021
+ for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
5022
+ label++;
5023
+
5024
+ fft_concat[label] = {};
5025
+
5026
+ if('x_offset' in en_axis_data){
5027
+ fft_concat[label].x = parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2));
5028
+ }
5029
+ if('y_offset' in en_axis_data){
5030
+ fft_concat[label].y = parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2));
5031
+ }
5032
+ if('z_offset' in en_axis_data){
5033
+ fft_concat[label].z = parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2));
5034
+ }
5035
+ }
5036
+ var fft_concat_obj = {
5037
+ time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
5038
+ mac_address: deviceAddr,
5039
+ en_axis: globalDevices[deviceAddr].en_axis,
5040
+ fsr: fsr_text,
5041
+ odr: globalDevices[deviceAddr].odr,
5042
+ device_temp: globalDevices[deviceAddr].device_temp,
5043
+ data: fft_concat
5044
+ };
5045
+ sensor_data = fft_concat_obj;
5046
+ delete globalDevices[deviceAddr];
5047
+ if(this.hasOwnProperty('failure_no')){
5048
+ console.log('####falure no');
5049
+ console.log(this.failure_no);
5050
+ }
5051
+
5052
+ return sensor_data;
5053
+ }
5054
+ else{
5055
+ return;
5056
+ }
5057
+ }else{
5058
+
5059
+ var mode = payload[8];
5060
+ var odr = payload[9];
5061
+ var en_axis = payload[10] & 7;
5062
+ var fsr = payload[10] >> 5;
5063
+ var device_temp = msbLsb(payload[13], payload[14])/100;
5064
+
5065
+
5066
+ switch(odr){
5067
+ case 6:
5068
+ odr = 50;
5069
+ break;
5070
+ case 7:
5071
+ odr = 100;
5072
+ break;
5073
+ case 8:
5074
+ odr = 200;
5075
+ break;
5076
+ case 9:
5077
+ odr = 400;
5078
+ break;
5079
+ case 10:
5080
+ odr = 800;
5081
+ break;
5082
+ case 11:
5083
+ odr = 1600;
5084
+ break;
5085
+ case 12:
5086
+ odr = 3200;
5087
+ break;
5088
+ case 13:
5089
+ odr = 6400;
5090
+ break;
5091
+ case 14:
5092
+ odr = 12800;
5093
+ break;
5094
+ case 15:
5095
+ odr = 25600;
5096
+ break;
5097
+ default:
5098
+ odr = 0;
5099
+ }
5100
+
5101
+ globalDevices[deviceAddr] = {
5102
+ // stream_size: expected_packets,
5103
+ data: {},
5104
+ odr: odr,
5105
+ mo: mode,
5106
+ en_axis: en_axis,
5107
+ fsr: fsr,
5108
+ hour: hour,
5109
+ minute: minute,
5110
+ device_temp: device_temp,
5111
+ }
5112
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5113
+ return;
5114
+ }
5115
+ }
5116
+ else if(payload[8] === 0 || payload[8] === 2){
5117
+ // mode byte most significant bit will indicate fft data.
5118
+ // console.log(d);
5119
+ var odr;
5120
+ switch(payload[9]){
5121
+ case 6:
5122
+ odr = "50Hz"
5123
+ break;
5124
+ case 7:
5125
+ odr = "100Hz";
5126
+ break;
5127
+ case 8:
5128
+ odr = "200Hz";
5129
+ break;
5130
+ case 9:
5131
+ odr = "400Hz";
5132
+ break;
5133
+ case 10:
5134
+ odr = "800Hz";
5135
+ break;
5136
+ case 11:
5137
+ odr = "1600Hz";
5138
+ break;
5139
+ case 12:
5140
+ odr = "3200Hz";
5141
+ break;
5142
+ case 13:
5143
+ odr = "6400Hz";
5144
+ break;
5145
+ case 14:
5146
+ odr = "12800Hz";
5147
+ break;
5148
+ case 15:
5149
+ odr = "25600Hz";
5150
+ break;
5151
+ }
5152
+ return {
5153
+ mode: payload[8],
5154
+
5155
+ odr: odr,
5156
+ temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
5157
+
5158
+ x_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
5159
+ x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
5160
+ x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
5161
+ x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
5162
+ x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
5163
+ x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
5164
+ x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
5165
+
5166
+ y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
5167
+ y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
5168
+ y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
5169
+ y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
5170
+ y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
5171
+ y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
5172
+ y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
5173
+
5174
+ z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
5175
+ z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
5176
+ z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
5177
+ z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
5178
+ z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
5179
+ z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
5180
+ z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
5181
+ };
5182
+ }
5183
+ // else{
5184
+ // parsed.data = {'error': 'Vibration mode error'}
5185
+ // return parsed;
5186
+ // }
5187
+ },
5188
+ 'parse_fly': (frame) => {
5189
+ let frame_data = {};
5190
+ switch(frame[16]){
5191
+ case 0:
5192
+ frame_data.mode = "Processed";
5193
+ break;
5194
+ case 1:
5195
+ frame_data.mode = "Raw";
5196
+ break;
5197
+ case 2:
5198
+ frame_data.mode = "Processed + Raw on demand";
5199
+ break;
5200
+ }
5201
+ switch(frame[17]){
5202
+ case 6:
5203
+ frame_data.odr_1 = 50;
5204
+ break;
5205
+ case 7:
5206
+ frame_data.odr_1 = 100;
5207
+ break;
5208
+ case 8:
5209
+ frame_data.odr_1 = 200;
5210
+ break;
5211
+ case 9:
5212
+ frame_data.odr_1 = 400;
5213
+ break;
5214
+ case 10:
5215
+ frame_data.odr_1 = 800;
5216
+ break;
5217
+ case 11:
5218
+ frame_data.odr_1 = 1600;
5219
+ break;
5220
+ case 12:
5221
+ frame_data.odr_1 = 3200;
5222
+ break;
5223
+ case 13:
5224
+ frame_data.odr_1 = 6400;
5225
+ break;
5226
+ case 14:
5227
+ frame_data.odr_1 = 12800;
5228
+ break;
5229
+ case 15:
5230
+ frame_data.odr_1 = 25600;
5231
+ break;
5232
+ }
5233
+ frame_data.sampling_duration_1 = frame[19]*50 + "ms";
5234
+ switch(frame[21]){
5235
+ case 0:
5236
+ frame_data.filter_status = "Disabled";
5237
+ break;
5238
+ case 1:
5239
+ frame_data.filter_status = "Enabled";
5240
+ break;
5241
+ }
5242
+ switch(frame[22]){
5243
+ case 0:
5244
+ frame_data.lpf_coeff_1 = 4;
5245
+ break;
5246
+ case 1:
5247
+ frame_data.lpf_coeff_1 = 8;
5248
+ break;
5249
+ case 2:
5250
+ frame_data.lpf_coeff_1 = 16;
5251
+ break;
5252
+ case 2:
5253
+ frame_data.lpf_coeff_1 = 32;
5254
+ break;
5255
+ case 4:
5256
+ frame_data.lpf_coeff_1 = 64;
5257
+ break;
5258
+ case 5:
5259
+ frame_data.lpf_coeff_1 = 128;
5260
+ break;
5261
+ case 6:
5262
+ frame_data.lpf_coeff_1 = 256;
5263
+ break;
5264
+ case 7:
5265
+ frame_data.lpf_coeff_1 = 512;
5266
+ break;
5267
+ case 8:
5268
+ frame_data.lpf_coeff_1 = 1024;
5269
+ break;
5270
+ case 9:
5271
+ frame_data.lpf_coeff_1 = 2048;
5272
+ break;
5273
+ }
5274
+ frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
5275
+ switch(frame[24]){
5276
+ case 0:
5277
+ frame_data.hpf_coeff_1 = 4;
5278
+ break;
5279
+ case 1:
5280
+ frame_data.hpf_coeff_1 = 8;
5281
+ break;
5282
+ case 2:
5283
+ frame_data.hpf_coeff_1 = 16;
5284
+ break;
5285
+ case 2:
5286
+ frame_data.hpf_coeff_1 = 32;
5287
+ break;
5288
+ case 4:
5289
+ frame_data.hpf_coeff_1 = 64;
5290
+ break;
5291
+ case 5:
5292
+ frame_data.hpf_coeff_1 = 128;
5293
+ break;
5294
+ case 6:
5295
+ frame_data.hpf_coeff_1 = 256;
5296
+ break;
5297
+ case 7:
5298
+ frame_data.hpf_coeff_1 = 512;
5299
+ break;
5300
+ case 8:
5301
+ frame_data.hpf_coeff_1 = 1024;
5302
+ break;
5303
+ case 9:
5304
+ frame_data.hpf_coeff_1 = 2048;
5305
+ break;
5306
+ }
5307
+ frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
5308
+ switch(frame[26]){
5309
+ case 0:
5310
+ frame_data.sampling_interval = "5 Minutes";
5311
+ break;
5312
+ case 1:
5313
+ frame_data.sampling_interval = "10 Minutes";
5314
+ break;
5315
+ case 2:
5316
+ frame_data.sampling_interval = "15 Minutes";
5317
+ break;
5318
+ case 2:
5319
+ frame_data.sampling_interval = "20 Minutes";
5320
+ break;
5321
+ case 4:
5322
+ frame_data.sampling_interval = "30 Minutes";
5323
+ break;
5324
+ case 5:
5325
+ frame_data.sampling_interval = "60 Minutes";
5326
+ break;
5327
+ case 6:
5328
+ frame_data.sampling_interval = "120 Minutes";
5329
+ break;
5330
+ case 7:
5331
+ frame_data.sampling_interval = "180 Minutes";
5332
+ break;
5333
+ case 8:
5334
+ frame_data.sampling_interval = "1 Minute";
5335
+ break;
5336
+ }
5337
+ frame_data.on_request_timeout = frame[27] + " Seconds";
5338
+ frame_data.deadband = frame[28] + "mg";
5339
+
5340
+ switch(frame[29]){
5341
+ case 0:
5342
+ frame_data.payload_length = "50 Bytes";
5343
+ break;
5344
+ case 1:
5345
+ frame_data.payload_length = "100 Bytes";
5346
+ break;
5347
+ case 2:
5348
+ frame_data.payload_length = "150 Bytes";
5349
+ break;
5350
+ case 3:
5351
+ frame_data.payload_length = "180 Bytes";
5352
+ break;
5353
+ }
5354
+
5355
+ return {
5356
+ 'firmware': frame[2],
5357
+ 'destination_address': toMac(frame.slice(12, 16)),
5358
+ 'mode': frame_data.mode,
5359
+ 'odr_1': frame_data.odr_1+'Hz',
5360
+ 'sampling_duration_1': frame_data.sampling_duration_1,
5361
+ 'sampling_duration_2': frame_data.sampling_duration_2,
5362
+ 'filter_status': frame_data.filter_status,
5363
+ 'lpf_coeff_1': frame_data.lpf_coeff_1,
5364
+ 'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
5365
+ 'hpf_coeff_1': frame_data.hpf_coeff_1,
5366
+ 'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
5367
+ 'sampling_interval': frame_data.sampling_interval,
5368
+ 'on_request_timeout': frame_data.on_request_timeout,
5369
+ 'deadband': frame_data.deadband,
5370
+ 'payload_length': frame_data.payload_length,
5371
+ 'machine_values': {
5372
+ 'firmware': frame[2],
5373
+ 'destination_address': toMac(frame.slice(12, 16), false),
5374
+ 'mode': frame[16],
5375
+ 'odr_1': frame[17],
5376
+ 'sampling_duration_1': frame[19],
5377
+ 'sampling_duration_2': frame[20],
5378
+ 'filter_status': frame[21],
5379
+ 'lpf_coeff_1': frame[22],
5380
+ 'hpf_coeff_1': frame[24],
5381
+ 'sampling_interval': frame[26],
5382
+ 'on_request_timeout': frame[27],
5383
+ 'deadband': frame[28],
5384
+ 'payload_length': frame[29]
5385
+ }
5386
+ }
5387
+ }
5388
+ },
5389
+ '88': {
5390
+ name: '1 Channel Ultrasound Vibration Sensor',
5391
+ parse: (d) => {
5392
+ return {
5393
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
5394
+ ma: d.slice(2, 4).reduce(msbLsb) / 100,
5395
+ db: d.slice(4, 6).reduce(msbLsb) / 100
5396
+ };
5397
+ }
5398
+ },
5399
+ '89': {
5400
+ name: '2 Channel Ultrasound Vibration Sensor',
5401
+ parse: (d) => {
5402
+ return {
5403
+ c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
5404
+ c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
5405
+ c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
5406
+ c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
5407
+ c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
5408
+ c2_db: d.slice(10, 12).reduce(msbLsb) / 100
5409
+ };
5410
+ }
5411
+ },
5412
+ '90': {
5413
+ name: 'DC Current Sensor',
5414
+ parse: (d) => {
5415
+ return {
5416
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
5417
+ amps: d.slice(2, 6).reduce(msbLsb) / 10,
5418
+ };
5419
+ }
5420
+ },
5421
+ '91': {
5422
+ name: 'Wireless Air Velocity Sensor HVAC',
5423
+ parse: (d) => {
5424
+ return {
5425
+ velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
5426
+ };
5427
+ }
5428
+ },
5429
+ '92': {
5430
+ name: 'Sound Sensor',
5431
+ parse: (d) => {
5432
+ return {
5433
+ sound: signInt(d[3], 8)/100
5434
+ };
5435
+ }
5436
+ },
5437
+ '95': {
5438
+ name: '16-Bit 1-Channel 0-24VDC Receiver',
5439
+ parse: (d) => {
5440
+ return {
5441
+ adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5442
+ vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
5443
+ };
5444
+ }
5445
+ },
5446
+ '96': {
5447
+ name: '16-Bit 1-Channel 0-48VDC Receiver',
5448
+ parse: (d) => {
5449
+ return {
5450
+ adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5451
+ vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
5452
+ };
5453
+ }
5454
+ },
5455
+ '101':{
5456
+ name: 'Pro Vibration',
5457
+ parse: (d, full)=>{
5458
+ return{
5459
+ mode: full[7] == 1? "raw" : "normal"
5460
+ };
5461
+ }
5462
+ },
5463
+ '105': {
5464
+ name: '1 Auto Luber With Ultrasound Vibration Sensor',
2628
5465
  parse: (d) => {
2629
5466
  return {
2630
- humidity: msbLsb(d[0], d[1])/100,
2631
- temperature: signInt((msbLsb(d[2], d[3])), 16)/100,
2632
- co_ppm: msbLsb(d[4], d[5])
5467
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
5468
+ ma: d.slice(2, 4).reduce(msbLsb) / 100,
5469
+ db: d.slice(4, 6).reduce(msbLsb) / 100
2633
5470
  };
2634
5471
  }
2635
5472
  },
2636
- '77': {
2637
- name: '3 Channel SDI-12 Wireelss',
5473
+ '107': {
5474
+ name: '16-Bit 4-Channel 4-20mA',
2638
5475
  parse: (d) => {
5476
+ var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5477
+ var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5478
+ var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
5479
+ var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
5480
+ var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
5481
+ var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
5482
+ var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
5483
+ var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
2639
5484
  return {
2640
- Temperature_1: signInt(d.slice(0, 2).reduce(msbLsb), 16)/100,
2641
- Soil_Moisture_1: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100,
2642
- Bulk_EC_1: signInt(d.slice(4, 6).reduce(msbLsb), 16),
2643
- Pore_EC_1: signInt(d.slice(6, 8).reduce(msbLsb), 16),
2644
- Permittivity_1: signInt(d.slice(8, 10).reduce(msbLsb), 16)/100,
2645
- Temperature_2: signInt(d.slice(10, 12).reduce(msbLsb), 16)/100,
2646
- Soil_Moisture_2: signInt(d.slice(12, 14).reduce(msbLsb), 16)/100,
2647
- Bulk_EC_2: signInt(d.slice(14, 16).reduce(msbLsb), 16),
2648
- Pore_EC_2: signInt(d.slice(16, 18).reduce(msbLsb), 16),
2649
- Permittivity_2: signInt(d.slice(18, 20).reduce(msbLsb), 16)/100,
2650
- Temperature_3: signInt(d.slice(20, 22).reduce(msbLsb), 16)/100,
2651
- Soil_Moisture_3: signInt(d.slice(22, 24).reduce(msbLsb), 16)/100,
2652
- Bulk_EC_3: signInt(d.slice(24, 26).reduce(msbLsb), 16),
2653
- Pore_EC_3: signInt(d.slice(26, 28).reduce(msbLsb), 16),
2654
- Permittivity_3: signInt(d.slice(28, 30).reduce(msbLsb), 16)/100
5485
+ adc1: adc1,
5486
+ adc2: adc2,
5487
+ adc3: adc3,
5488
+ adc4: adc4,
5489
+ ma1: ma1,
5490
+ ma2: ma2,
5491
+ ma3: ma3,
5492
+ ma4: ma4
2655
5493
  };
2656
5494
  }
2657
5495
  },
2658
- '78': {
2659
- name: 'Oil Particulate Counter Sensor',
2660
- parse: (d, original_payload) => {
2661
- if(original_payload[1] <= 3){
2662
- return {
2663
- ferro_particles_30_50_um: d.slice(0, 4).reduce(msbLsb)/100,
2664
- ferro_particles_50_100_um: d.slice(4, 8).reduce(msbLsb)/100,
2665
- ferro_particles_100_200_um: d.slice(8, 12).reduce(msbLsb)/100,
2666
- ferro_particles_200_400_um: d.slice(12, 16).reduce(msbLsb)/100,
2667
- ferro_particles_400_800_um: d.slice(16, 20).reduce(msbLsb)/100,
2668
- ferro_particles_gt_800_um: d.slice(20, 24).reduce(msbLsb)/100,
2669
- ferro_particles_total: d.slice(24, 28).reduce(msbLsb)/100,
2670
- non_ferro_particles_120_200_um: d.slice(28, 32).reduce(msbLsb)/100,
2671
- non_ferro_particles_200_400_um: d.slice(32, 36).reduce(msbLsb)/100,
2672
- non_ferro_particles_400_800_um: d.slice(36, 40).reduce(msbLsb)/100
2673
- };
2674
- }else{
2675
- return {
2676
- ferro_particles_30_50_um: d.slice(0, 4).reduce(msbLsb)/100,
2677
- ferro_particles_50_100_um: d.slice(4, 8).reduce(msbLsb)/100,
2678
- ferro_particles_100_200_um: d.slice(8, 12).reduce(msbLsb)/100,
2679
- ferro_particles_200_400_um: d.slice(12, 16).reduce(msbLsb)/100,
2680
- ferro_particles_400_800_um: d.slice(16, 20).reduce(msbLsb)/100,
2681
- ferro_particles_gt_800_um: d.slice(20, 24).reduce(msbLsb)/100,
2682
- ferro_particles_total: d.slice(24, 28).reduce(msbLsb)/100,
2683
- non_ferro_particles_120_200_um: d.slice(28, 32).reduce(msbLsb)/100,
2684
- non_ferro_particles_200_400_um: d.slice(32, 36).reduce(msbLsb)/100,
2685
- non_ferro_particles_400_800_um: d.slice(36, 40).reduce(msbLsb)/100,
2686
- non_ferro_particles_800_1600_um: d.slice(40, 44).reduce(msbLsb)/100,
2687
- non_ferro_particles_gt_1600_um: d.slice(44, 48).reduce(msbLsb)/100,
2688
- non_ferro_particles_total: d.slice(48, 52).reduce(msbLsb)/100,
2689
- ferro_particles_total_24h: d.slice(52, 56).reduce(msbLsb)/100,
2690
- non_ferro_particles_total_24h: d.slice(56, 60).reduce(msbLsb)/100,
2691
- ferro_concentration: d.slice(60, 64).reduce(msbLsb)/100,
2692
- non_ferro_concentration: d.slice(64, 68).reduce(msbLsb)/100,
2693
- flow: d.slice(68, 72).reduce(msbLsb)/100,
2694
- };
5496
+ '108': {
5497
+ name: 'Machine Uptime Monitoring Sensor',
5498
+ parse: (d, payload) => {
5499
+ if(payload[7] & 2 != 0){
5500
+ console.log('Error found');
5501
+ // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
5502
+ let error = {error: 'Error found, Acclerometer Probe may be unattached'};
5503
+ return error;
2695
5504
  }
2696
- }
2697
- },
2698
- '79': {
2699
- name: 'Oil Analysis Sensor',
2700
- parse: (d) => {
2701
5505
  return {
2702
- dynamic_viscosity: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
2703
- density: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
2704
- dialectric_constant: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100,
2705
- temperature: signInt(d.slice(12, 16).reduce(msbLsb), 32) / 100,
2706
- saturability: signInt(d.slice(16, 20).reduce(msbLsb), 32) / 100,
2707
- moisture_content: signInt(d.slice(20, 24).reduce(msbLsb), 32) / 100,
2708
- water_content: signInt(d.slice(24, 28).reduce(msbLsb), 32) / 100,
2709
- kinematic_viscosity_40c: signInt(d.slice(28, 32).reduce(msbLsb), 32) / 100,
2710
- kinematic_viscosity_100c: signInt(d.slice(32, 36).reduce(msbLsb), 32) / 100
5506
+ digital_input_1_counter: d.slice(0, 4).reduce(msbLsb),
5507
+ digital_input_1_uptime: d.slice(4, 8).reduce(msbLsb),
5508
+ digital_input_2_counter: d.slice(8, 12).reduce(msbLsb),
5509
+ digital_input_2_uptime: d.slice(12, 16).reduce(msbLsb),
5510
+ digital_input_3_counter: d.slice(16, 20).reduce(msbLsb),
5511
+ digital_input_3_uptime: d.slice(20, 24).reduce(msbLsb),
5512
+ accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
5513
+ accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
5514
+ magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
5515
+ magnetometer_uptime: d.slice(36, 40).reduce(msbLsb)
2711
5516
  };
2712
5517
  }
2713
5518
  },
2714
- '80': {
2715
- name: 'One Channel Vibration Plus',
5519
+ '110': {
5520
+ name: 'One Channel Vibration Plus v4',
2716
5521
  parse: (payload, parsed, mac) => {
2717
5522
  if(payload[7] >> 1 != 0){
2718
5523
  console.log('Error found');
@@ -3322,8 +6127,8 @@ function sensor_types(parent){
3322
6127
  }
3323
6128
  }
3324
6129
  },
3325
- '81': {
3326
- name: 'Two Channel Vibration Plus',
6130
+ '111': {
6131
+ name: 'Two Channel Vibration Plus v4',
3327
6132
  parse: (payload, parsed, mac) => {
3328
6133
  parsed.data = {};
3329
6134
  if(payload[7] & 2){
@@ -4124,8 +6929,8 @@ function sensor_types(parent){
4124
6929
  }
4125
6930
  }
4126
6931
  },
4127
- '82': {
4128
- name: 'Condition Based/Predictive Maintenance Sensor',
6932
+ '112': {
6933
+ name: 'Condition Based/Predictive Maintenance Sensor v4',
4129
6934
  parse: (payload, parsed, mac) => {
4130
6935
  if(payload[7] >> 1 != 0){
4131
6936
  console.log('Error found');
@@ -4740,9 +7545,8 @@ function sensor_types(parent){
4740
7545
  }
4741
7546
  }
4742
7547
  },
4743
-
4744
- '84': {
4745
- name: 'Type 84 - Standalone Smart Vibration Sensor',
7548
+ '114': {
7549
+ name: 'Standalone Smart Vibration Sensor v4',
4746
7550
  parse: (payload, parsed, mac) => {
4747
7551
  if(payload[7] >> 1 != 0){
4748
7552
  console.log('Error found');
@@ -5351,124 +8155,17 @@ function sensor_types(parent){
5351
8155
  }
5352
8156
  }
5353
8157
  },
5354
- '88': {
5355
- name: '1 Channel Ultrasound Vibration Sensor',
5356
- parse: (d) => {
5357
- return {
5358
- raw_adc: d.slice(0, 2).reduce(msbLsb),
5359
- ma: d.slice(2, 4).reduce(msbLsb) / 100,
5360
- db: d.slice(4, 6).reduce(msbLsb) / 100
5361
- };
5362
- }
5363
- },
5364
- '89': {
5365
- name: '2 Channel Ultrasound Vibration Sensor',
5366
- parse: (d) => {
5367
- return {
5368
- c1_raw_adc: d.slice(0, 2).reduce(msbLsb),
5369
- c1_ma: d.slice(2, 4).reduce(msbLsb) / 100,
5370
- c1_db: d.slice(4, 6).reduce(msbLsb) / 100,
5371
- c2_raw_adc: d.slice(6, 8).reduce(msbLsb),
5372
- c2_ma: d.slice(8, 10).reduce(msbLsb) / 100,
5373
- c2_db: d.slice(10, 12).reduce(msbLsb) / 100
5374
- };
5375
- }
5376
- },
5377
- '90': {
5378
- name: 'DC Current Sensor',
5379
- parse: (d) => {
5380
- return {
5381
- raw_adc: d.slice(0, 2).reduce(msbLsb),
5382
- amps: d.slice(2, 6).reduce(msbLsb) / 10,
5383
- };
5384
- }
5385
- },
5386
- '91': {
5387
- name: 'Wireless Air Velocity Sensor HVAC',
5388
- parse: (d) => {
5389
- return {
5390
- velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
5391
- };
5392
- }
5393
- },
5394
- '92': {
5395
- name: 'Sound Sensor',
5396
- parse: (d) => {
5397
- return {
5398
- sound: signInt(d[3], 8)/100
5399
- };
5400
- }
5401
- },
5402
- '95': {
5403
- name: '16-Bit 1-Channel 0-24VDC Receiver',
5404
- parse: (d) => {
5405
- return {
5406
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5407
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
5408
- };
5409
- }
5410
- },
5411
- '96': {
5412
- name: '16-Bit 1-Channel 0-48VDC Receiver',
5413
- parse: (d) => {
5414
- return {
5415
- adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
5416
- vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
5417
- };
5418
- }
5419
- },
5420
- '101':{
5421
- name: 'Pro Vibration',
5422
- parse: (d, full)=>{
5423
- return{
5424
- mode: full[7] == 1? "raw" : "normal"
5425
- };
5426
- }
5427
- },
5428
- '107': {
5429
- name: '16-Bit 4-Channel 4-20mA',
5430
- parse: (d) => {
5431
- var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
5432
- var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
5433
- var adc3 = signInt(d.slice(4, 6).reduce(msbLsb));
5434
- var adc4 = signInt(d.slice(6, 8).reduce(msbLsb));
5435
- var ma1 = (signInt(d.slice(8, 10).reduce(msbLsb)))/100.0;
5436
- var ma2 = (signInt(d.slice(10, 12).reduce(msbLsb)))/100.0;
5437
- var ma3 = (signInt(d.slice(12, 14).reduce(msbLsb)))/100.0;
5438
- var ma4 = (signInt(d.slice(14, 16).reduce(msbLsb)))/100.0;
5439
- return {
5440
- adc1: adc1,
5441
- adc2: adc2,
5442
- adc3: adc3,
5443
- adc4: adc4,
5444
- ma1: ma1,
5445
- ma2: ma2,
5446
- ma3: ma3,
5447
- ma4: ma4
5448
- };
8158
+
8159
+ '180': {
8160
+ name: 'C1D2 One Channel Vibration Plus',
8161
+ parse: (payload, parsed, mac) => {
8162
+ return parent.sensor_types[80].parse(payload, parsed, mac);
5449
8163
  }
5450
8164
  },
5451
- '108': {
5452
- name: 'Machine Uptime Monitoring Sensor',
5453
- parse: (d, payload) => {
5454
- if(payload[7] & 2 != 0){
5455
- console.log('Error found');
5456
- // parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
5457
- let error = {error: 'Error found, Acclerometer Probe may be unattached'};
5458
- return error;
5459
- }
5460
- return {
5461
- digital_input_1_counter: d.slice(0, 4).reduce(msbLsb),
5462
- digital_input_1_uptime: d.slice(4, 8).reduce(msbLsb),
5463
- digital_input_2_counter: d.slice(8, 12).reduce(msbLsb),
5464
- digital_input_2_uptime: d.slice(12, 16).reduce(msbLsb),
5465
- digital_input_3_counter: d.slice(16, 20).reduce(msbLsb),
5466
- digital_input_3_uptime: d.slice(20, 24).reduce(msbLsb),
5467
- accelerometer_counter: d.slice(24, 28).reduce(msbLsb),
5468
- accelerometer_uptime: d.slice(28, 32).reduce(msbLsb),
5469
- magnetometer_counter: d.slice(32, 36).reduce(msbLsb),
5470
- magnetometer_uptime: d.slice(36, 40).reduce(msbLsb)
5471
- };
8165
+ '181': {
8166
+ name: 'C1D2 Two Channel Vibration Plus',
8167
+ parse: (payload, parsed, mac) => {
8168
+ return parent.sensor_types[81].parse(payload, parsed, mac);
5472
8169
  }
5473
8170
  },
5474
8171
  '180': {
@@ -6394,13 +9091,13 @@ function sensor_types(parent){
6394
9091
  name: 'Type 521 - 3 Channel Light Sensor',
6395
9092
  parse: (payload, parsed) => {
6396
9093
  return {
6397
- lux_1: payload.slice(0, 2).reduce(msbLsb)/100,
9094
+ lux_1: payload.slice(0, 2).reduce(msbLsb),
6398
9095
  temp_1: payload.slice(2, 4).reduce(msbLsb)/100,
6399
9096
  ext_temp_1: payload.slice(4, 6).reduce(msbLsb)/100,
6400
- lux_2: payload.slice(6, 8).reduce(msbLsb)/100,
9097
+ lux_2: payload.slice(6, 8).reduce(msbLsb),
6401
9098
  temp_2: payload.slice(8, 10).reduce(msbLsb)/100,
6402
9099
  ext_temp_2: payload.slice(10, 12).reduce(msbLsb)/100,
6403
- lux_3: payload.slice(12, 14).reduce(msbLsb)/100,
9100
+ lux_3: payload.slice(12, 14).reduce(msbLsb),
6404
9101
  temp_3: payload.slice(14, 16).reduce(msbLsb)/100,
6405
9102
  ext_temp_3: payload.slice(16, 18).reduce(msbLsb)/100
6406
9103
  }
@@ -7077,6 +9774,16 @@ function sensor_types(parent){
7077
9774
  };
7078
9775
  },
7079
9776
  },
9777
+ '540': {
9778
+ name: 'Wireless Ultrasonic Flow Meter FD-Q32C',
9779
+ parse: (d) => {
9780
+ return {
9781
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
9782
+ ma: d.slice(2, 4).reduce(msbLsb) / 100,
9783
+ flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
9784
+ };
9785
+ }
9786
+ },
7080
9787
  '10000': {
7081
9788
  name: '4-Relay',
7082
9789
  parse: (d) => {