@ncd-io/node-red-enterprise-sensors 0.1.6 → 0.1.8

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.
@@ -62,7 +62,7 @@ module.exports = class WirelessSensor{
62
62
  var new_mode = is_new;
63
63
  var mode = (type == 'power_up') ? data.mode : ((type == 'sensor_data') ? 'RUN' : ((type == 'config_ack') ? 'ACK' : 'PGM'));
64
64
  // #OTF
65
- var otf_devices = [80,81,82,84,89,101,102,519,520];
65
+ var otf_devices = [78,79,80,81,82,84,89,91,101,102,519,520,521];
66
66
  var device_type = msbLsb(frame.data[6], frame.data[7]);
67
67
  // var device_type = frame.data[7];
68
68
 
@@ -214,7 +214,7 @@ module.exports = class WirelessSensor{
214
214
  };
215
215
 
216
216
  // #OTF
217
- var otf_devices = [80,81,82,84,89,101,102,519,520];
217
+ var otf_devices = [78,79,80,81,82,84,89,91,101,102,519,520,521];
218
218
  if(otf_devices.includes(parsed.sensor_type)){
219
219
  // If the message says FLY and there is not FLY timer in progress.
220
220
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -225,6 +225,9 @@ module.exports = class WirelessSensor{
225
225
 
226
226
  // Sensor type 515 has a unique OTF that is indicated by a reserve byte value with MSb of 1
227
227
  if(parsed.sensor_type == 515){
228
+ // MSb of reserve byte indicates sub-unit/ct firmware.
229
+ parsed.ct_firmware = payload[7] >> 4;
230
+
228
231
  // If first bit in reserve is 1 AND current bank equals total banks
229
232
  if(payload[7] & 1 && payload[8] == payload[9]){
230
233
  this._emitter.emit('set_destination_address'+frame.mac, frame.mac);
@@ -722,22 +725,6 @@ module.exports = class WirelessSensor{
722
725
  var packet = [244, 3, 0, 0, 0, scale];
723
726
  return this.config_send(sensor_mac, packet);
724
727
  }
725
- config_set_impact_accel(sensor_mac, range){
726
- var packet = [244, 1, 0, 0, 0, range];
727
- return this.config_send(sensor_mac, packet);
728
- }
729
- config_set_impact_data_rate(sensor_mac, rate){
730
- var packet = [244, 2, 0, 0, 0, rate];
731
- return this.config_send(sensor_mac, packet);
732
- }
733
- config_set_impact_threshold(sensor_mac, threshold){
734
- var packet = [244, 3, 0, 0, 0, threshold];
735
- return this.config_send(sensor_mac, packet);
736
- }
737
- config_set_impact_duration(sensor_mac, duration){
738
- var packet = [244, 4, 0, 0, 0, duration];
739
- return this.config_send(sensor_mac, packet);
740
- }
741
728
  config_set_filtering(sensor_mac, enable){
742
729
  var packet = [244, 2, 0, 0, 0, enable];
743
730
  return this.config_send(sensor_mac, packet);
@@ -763,6 +750,53 @@ module.exports = class WirelessSensor{
763
750
  return this.config_send(sensor_mac, packet);
764
751
  }
765
752
 
753
+ config_set_acceleration_range_24(sensor_mac, value){
754
+ console.log('config_set_acceleration_range_24');
755
+ var packet = [244, 1, 0, 0, 0, value];
756
+ console.log(packet);
757
+ return this.config_send(sensor_mac, packet);
758
+ }
759
+ config_set_data_rate_24(sensor_mac, value){
760
+ console.log('config_set_data_rate_24');
761
+ var packet = [244, 2, 0, 0, 0, value];
762
+ console.log(packet);
763
+ return this.config_send(sensor_mac, packet);
764
+ }
765
+ config_set_threshold_24(sensor_mac, value){
766
+ console.log('config_set_threshold_24');
767
+ var packet = [244, 3, 0, 0, 0, value];
768
+ console.log(packet);
769
+ return this.config_send(sensor_mac, packet);
770
+ }
771
+ config_set_duration_24(sensor_mac, value){
772
+ console.log('config_set_duration_24');
773
+ var packet = [244, 4, 0, 0, 0, value];
774
+ console.log(packet);
775
+ return this.config_send(sensor_mac, packet);
776
+ }
777
+ config_set_interrupt_24(sensor_mac, value){
778
+ console.log('config_set_interrupt_24');
779
+ var packet = [244, 9, 0, 0, 0, value];
780
+ console.log(packet);
781
+ return this.config_send(sensor_mac, packet);
782
+ }
783
+ // config_set_impact_accel(sensor_mac, range){
784
+ // var packet = [244, 1, 0, 0, 0, range];
785
+ // return this.config_send(sensor_mac, packet);
786
+ // }
787
+ // config_set_impact_data_rate(sensor_mac, rate){
788
+ // var packet = [244, 2, 0, 0, 0, rate];
789
+ // return this.config_send(sensor_mac, packet);
790
+ // }
791
+ // config_set_impact_threshold(sensor_mac, threshold){
792
+ // var packet = [244, 3, 0, 0, 0, threshold];
793
+ // return this.config_send(sensor_mac, packet);
794
+ // }
795
+ // config_set_impact_duration(sensor_mac, duration){
796
+ // var packet = [244, 4, 0, 0, 0, duration];
797
+ // return this.config_send(sensor_mac, packet);
798
+ // }
799
+
766
800
  config_set_sensor_forced_calibration(sensor_mac, value){
767
801
  var packet = [244, 31, 0, 0, 0];
768
802
  var cal_val = int2Bytes(value, 2);
@@ -993,6 +1027,13 @@ module.exports = class WirelessSensor{
993
1027
  console.log(packet);
994
1028
  return this.config_send(sensor_mac, packet);
995
1029
  }
1030
+ config_set_sensor_boot_time_78(sensor_mac, value){
1031
+ console.log('config_set_sensor_boot_time_78');
1032
+ var packet = [244, 78, 0, 0, 0];
1033
+ packet.push(...value);
1034
+ console.log(packet);
1035
+ return this.config_send(sensor_mac, packet);
1036
+ }
996
1037
  config_set_payload_length_80(sensor_mac, value){
997
1038
  console.log('config_set_payload_length_80');
998
1039
  var packet = [244, 79, 0, 0, 80, 68, value];
@@ -2214,6 +2255,29 @@ function sensor_types(parent){
2214
2255
  };
2215
2256
  }
2216
2257
  },
2258
+ '78': {
2259
+ name: 'Oil Particulate Counter Sensor',
2260
+ parse: (d) => {
2261
+ return {
2262
+
2263
+ ferro_particles_lt_50_um: d.slice(0, 2).reduce(msbLsb),
2264
+ ferro_particles_50_100_um: d.slice(2, 4).reduce(msbLsb),
2265
+ ferro_particles_100_200_um: d.slice(4, 6).reduce(msbLsb),
2266
+ ferro_particles_200_400_um: d.slice(6, 8).reduce(msbLsb),
2267
+ ferro_particles_400_800_um: d.slice(8, 10).reduce(msbLsb),
2268
+ ferro_particles_gt_800_um: d.slice(10, 12).reduce(msbLsb),
2269
+ ferro_particles_total: d.slice(12, 14).reduce(msbLsb),
2270
+ non_ferro_particles_150_200_um: d.slice(14, 16).reduce(msbLsb),
2271
+ non_ferro_particles_200_400_um: d.slice(16, 18).reduce(msbLsb),
2272
+ non_ferro_particles_400_800_um: d.slice(18, 20).reduce(msbLsb),
2273
+ non_ferro_particles_800_1600_um: d.slice(20, 22).reduce(msbLsb),
2274
+ non_ferro_particles_gt_1600_um: d.slice(22, 24).reduce(msbLsb),
2275
+ non_ferro_particles_total: d.slice(24, 26).reduce(msbLsb),
2276
+ ferro_particles_total_24h: d.slice(26, 28).reduce(msbLsb),
2277
+ non_ferro_particles_total_24h: d.slice(28, 30).reduce(msbLsb)
2278
+ };
2279
+ }
2280
+ },
2217
2281
  '79': {
2218
2282
  name: 'Oil Analysis Sensor',
2219
2283
  parse: (d) => {
@@ -2248,93 +2312,148 @@ function sensor_types(parent){
2248
2312
  var current_packet = payload[16];
2249
2313
  var sdata_start = 17;
2250
2314
 
2251
-
2252
-
2253
-
2254
- if(globalDevices.hasOwnProperty(deviceAddr)){
2255
- // 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
2256
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
2257
- console.log('-----');
2258
- console.log('bad packet breakdown deleting stream');
2259
- console.log(current_packet);
2260
- console.log(expected_packets);
2261
- console.log(current_packet in globalDevices[deviceAddr].data);
2262
- console.log(current_packet == 1);
2263
- console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
2264
- if(this.hasOwnProperty('failure_no')){
2265
- this.failure_no = this.failure_no + 1;
2266
- }
2267
- else{
2268
- this.failure_no = 1;
2269
- }
2270
- if(this.hasOwnProperty('failure_no')){
2271
- console.log('####falure no');
2272
- console.log(this.failure_no);
2273
- }
2274
- // console.log(globalDevices[deviceAddr].data);
2275
- delete globalDevices[deviceAddr];
2276
- if(current_packet != 1){
2277
- return;
2278
- } else{
2279
-
2280
- var mode = payload[8];
2281
- var odr = payload[9];
2282
- var en_axis = payload[10] & 7;
2283
- var fsr = payload[10] >> 5;
2284
- var device_temp = msbLsb(payload[13], payload[14])/100;
2285
-
2286
-
2287
- switch(odr){
2288
- case 6:
2289
- odr = 50;
2290
- break;
2291
- case 7:
2292
- odr = 100;
2293
- break;
2294
- case 8:
2295
- odr = 200;
2296
- break;
2297
- case 9:
2298
- odr = 400;
2299
- break;
2300
- case 10:
2301
- odr = 800;
2302
- break;
2303
- case 11:
2304
- odr = 1600;
2305
- break;
2306
- case 12:
2307
- odr = 3200;
2308
- break;
2309
- case 13:
2310
- odr = 6400;
2311
- break;
2312
- case 14:
2313
- odr = 12800;
2314
- break;
2315
- case 15:
2316
- odr = 25600;
2317
- break;
2318
- default:
2319
- odr = 0;
2315
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
2316
+ if(expected_packets != 1){
2317
+ // 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
2318
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
2319
+ console.log('-----');
2320
+ console.log('bad packet breakdown deleting stream');
2321
+ console.log(current_packet);
2322
+ console.log(expected_packets);
2323
+ console.log(current_packet in globalDevices[deviceAddr].data);
2324
+ console.log(current_packet == 1);
2325
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
2326
+ if(this.hasOwnProperty('failure_no')){
2327
+ this.failure_no = this.failure_no + 1;
2328
+ }
2329
+ else{
2330
+ this.failure_no = 1;
2320
2331
  }
2332
+ if(this.hasOwnProperty('failure_no')){
2333
+ console.log('####falure no');
2334
+ console.log(this.failure_no);
2335
+ }
2336
+ // console.log(globalDevices[deviceAddr].data);
2337
+ delete globalDevices[deviceAddr];
2338
+ if(current_packet != 1){
2339
+ return;
2340
+ } else{
2341
+
2342
+ var mode = payload[8];
2343
+ var odr = payload[9];
2344
+ var en_axis = payload[10] & 7;
2345
+ var fsr = payload[10] >> 5;
2346
+ var device_temp = msbLsb(payload[13], payload[14])/100;
2347
+
2348
+
2349
+ switch(odr){
2350
+ case 6:
2351
+ odr = 50;
2352
+ break;
2353
+ case 7:
2354
+ odr = 100;
2355
+ break;
2356
+ case 8:
2357
+ odr = 200;
2358
+ break;
2359
+ case 9:
2360
+ odr = 400;
2361
+ break;
2362
+ case 10:
2363
+ odr = 800;
2364
+ break;
2365
+ case 11:
2366
+ odr = 1600;
2367
+ break;
2368
+ case 12:
2369
+ odr = 3200;
2370
+ break;
2371
+ case 13:
2372
+ odr = 6400;
2373
+ break;
2374
+ case 14:
2375
+ odr = 12800;
2376
+ break;
2377
+ case 15:
2378
+ odr = 25600;
2379
+ break;
2380
+ default:
2381
+ odr = 0;
2382
+ }
2321
2383
 
2322
- globalDevices[deviceAddr] = {
2323
- // stream_size: expected_packets,
2324
- data: {},
2325
- odr: odr,
2326
- mo: mode,
2327
- en_axis: en_axis,
2328
- fsr: fsr,
2329
- hour: hour,
2330
- minute: minute,
2331
- device_temp: device_temp,
2384
+ globalDevices[deviceAddr] = {
2385
+ // stream_size: expected_packets,
2386
+ data: {},
2387
+ odr: odr,
2388
+ mo: mode,
2389
+ en_axis: en_axis,
2390
+ fsr: fsr,
2391
+ hour: hour,
2392
+ minute: minute,
2393
+ device_temp: device_temp,
2394
+ }
2395
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2396
+ return;
2332
2397
  }
2398
+ }
2399
+ else{
2333
2400
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2334
- return;
2335
2401
  }
2336
2402
  }
2337
2403
  else{
2404
+ var mode = payload[8];
2405
+ var odr = payload[9];
2406
+ var en_axis = payload[10] & 7;
2407
+ var fsr = payload[10] >> 5;
2408
+ var device_temp = msbLsb(payload[13], payload[14])/100;
2409
+
2410
+
2411
+ switch(odr){
2412
+ case 6:
2413
+ odr = 50;
2414
+ break;
2415
+ case 7:
2416
+ odr = 100;
2417
+ break;
2418
+ case 8:
2419
+ odr = 200;
2420
+ break;
2421
+ case 9:
2422
+ odr = 400;
2423
+ break;
2424
+ case 10:
2425
+ odr = 800;
2426
+ break;
2427
+ case 11:
2428
+ odr = 1600;
2429
+ break;
2430
+ case 12:
2431
+ odr = 3200;
2432
+ break;
2433
+ case 13:
2434
+ odr = 6400;
2435
+ break;
2436
+ case 14:
2437
+ odr = 12800;
2438
+ break;
2439
+ case 15:
2440
+ odr = 25600;
2441
+ break;
2442
+ default:
2443
+ odr = 0;
2444
+ }
2445
+
2446
+ globalDevices[deviceAddr] = {
2447
+ // stream_size: expected_packets,
2448
+ data: {},
2449
+ odr: odr,
2450
+ mo: mode,
2451
+ en_axis: en_axis,
2452
+ fsr: fsr,
2453
+ hour: hour,
2454
+ minute: minute,
2455
+ device_temp: device_temp,
2456
+ }
2338
2457
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2339
2458
  }
2340
2459
 
@@ -2809,93 +2928,148 @@ function sensor_types(parent){
2809
2928
  var current_packet = payload[16];
2810
2929
  var sdata_start = 17;
2811
2930
 
2812
- if(globalDevices.hasOwnProperty(deviceAddr)){
2813
- // 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
2814
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
2815
- console.log('-----');
2816
- console.log('bad packet breakdown deleting stream');
2817
- console.log(current_packet);
2818
- console.log(expected_packets);
2819
- console.log(current_packet in globalDevices[deviceAddr].data);
2820
- console.log(current_packet == 1);
2821
- console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
2822
- if(this.hasOwnProperty('failure_no')){
2823
- this.failure_no = this.failure_no + 1;
2824
- }
2825
- else{
2826
- this.failure_no = 1;
2827
- }
2828
- if(this.hasOwnProperty('failure_no')){
2829
- console.log('####falure no');
2830
- console.log(this.failure_no);
2831
- }
2832
- // console.log(globalDevices[deviceAddr].data);
2833
- delete globalDevices[deviceAddr];
2834
- if(current_packet != 1){
2835
- return;
2836
- } else{
2837
-
2838
- var mode = payload[8];
2839
- var odr = payload[9];
2840
- var en_axis = payload[10] & 7;
2841
- var fsr = payload[10] >> 5;
2842
- var device_temp = msbLsb(payload[13], payload[14])/100;
2843
-
2844
-
2845
- switch(odr){
2846
- case 6:
2847
- odr = 50;
2848
- break;
2849
- case 7:
2850
- odr = 100;
2851
- break;
2852
- case 8:
2853
- odr = 200;
2854
- break;
2855
- case 9:
2856
- odr = 400;
2857
- break;
2858
- case 10:
2859
- odr = 800;
2860
- break;
2861
- case 11:
2862
- odr = 1600;
2863
- break;
2864
- case 12:
2865
- odr = 3200;
2866
- break;
2867
- case 13:
2868
- odr = 6400;
2869
- break;
2870
- case 14:
2871
- odr = 12800;
2872
- break;
2873
- case 15:
2874
- odr = 25600;
2875
- break;
2876
- default:
2877
- odr = 0;
2931
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
2932
+ if(expected_packets != 1){
2933
+ // 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
2934
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
2935
+ console.log('-----');
2936
+ console.log('bad packet breakdown deleting stream');
2937
+ console.log(current_packet);
2938
+ console.log(expected_packets);
2939
+ console.log(current_packet in globalDevices[deviceAddr].data);
2940
+ console.log(current_packet == 1);
2941
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
2942
+ if(this.hasOwnProperty('failure_no')){
2943
+ this.failure_no = this.failure_no + 1;
2878
2944
  }
2945
+ else{
2946
+ this.failure_no = 1;
2947
+ }
2948
+ if(this.hasOwnProperty('failure_no')){
2949
+ console.log('####falure no');
2950
+ console.log(this.failure_no);
2951
+ }
2952
+ // console.log(globalDevices[deviceAddr].data);
2953
+ delete globalDevices[deviceAddr];
2954
+ if(current_packet != 1){
2955
+ return;
2956
+ } else{
2957
+ var mode = payload[8];
2958
+ var odr = payload[9];
2959
+ var en_axis = payload[10] & 7;
2960
+ var fsr = payload[10] >> 5;
2961
+ var device_temp = msbLsb(payload[13], payload[14])/100;
2962
+
2963
+ switch(odr){
2964
+ case 6:
2965
+ odr = 50;
2966
+ break;
2967
+ case 7:
2968
+ odr = 100;
2969
+ break;
2970
+ case 8:
2971
+ odr = 200;
2972
+ break;
2973
+ case 9:
2974
+ odr = 400;
2975
+ break;
2976
+ case 10:
2977
+ odr = 800;
2978
+ break;
2979
+ case 11:
2980
+ odr = 1600;
2981
+ break;
2982
+ case 12:
2983
+ odr = 3200;
2984
+ break;
2985
+ case 13:
2986
+ odr = 6400;
2987
+ break;
2988
+ case 14:
2989
+ odr = 12800;
2990
+ break;
2991
+ case 15:
2992
+ odr = 25600;
2993
+ break;
2994
+ default:
2995
+ odr = 0;
2996
+ }
2879
2997
 
2880
- globalDevices[deviceAddr] = {
2881
- // stream_size: expected_packets,
2882
- data: {},
2883
- odr: odr,
2884
- mo: mode,
2885
- en_axis: en_axis,
2886
- fsr: fsr,
2887
- hour: hour,
2888
- minute: minute,
2889
- device_temp: device_temp,
2998
+ globalDevices[deviceAddr] = {
2999
+ // stream_size: expected_packets,
3000
+ data: {},
3001
+ odr: odr,
3002
+ mo: mode,
3003
+ en_axis: en_axis,
3004
+ fsr: fsr,
3005
+ hour: hour,
3006
+ minute: minute,
3007
+ device_temp: device_temp,
3008
+ }
3009
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3010
+ return;
2890
3011
  }
3012
+ }
3013
+ else{
2891
3014
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2892
- return;
2893
3015
  }
2894
3016
  }
2895
3017
  else{
3018
+ var mode = payload[8];
3019
+ var odr = payload[9];
3020
+ var en_axis = payload[10] & 7;
3021
+ var fsr = payload[10] >> 5;
3022
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3023
+
3024
+
3025
+ switch(odr){
3026
+ case 6:
3027
+ odr = 50;
3028
+ break;
3029
+ case 7:
3030
+ odr = 100;
3031
+ break;
3032
+ case 8:
3033
+ odr = 200;
3034
+ break;
3035
+ case 9:
3036
+ odr = 400;
3037
+ break;
3038
+ case 10:
3039
+ odr = 800;
3040
+ break;
3041
+ case 11:
3042
+ odr = 1600;
3043
+ break;
3044
+ case 12:
3045
+ odr = 3200;
3046
+ break;
3047
+ case 13:
3048
+ odr = 6400;
3049
+ break;
3050
+ case 14:
3051
+ odr = 12800;
3052
+ break;
3053
+ case 15:
3054
+ odr = 25600;
3055
+ break;
3056
+ default:
3057
+ odr = 0;
3058
+ }
3059
+
3060
+ globalDevices[deviceAddr] = {
3061
+ // stream_size: expected_packets,
3062
+ data: {},
3063
+ odr: odr,
3064
+ mo: mode,
3065
+ en_axis: en_axis,
3066
+ fsr: fsr,
3067
+ hour: hour,
3068
+ minute: minute,
3069
+ device_temp: device_temp,
3070
+ }
2896
3071
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
2897
3072
  }
2898
-
2899
3073
  if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
2900
3074
  var raw_data = new Array();
2901
3075
 
@@ -3026,7 +3200,6 @@ function sensor_types(parent){
3026
3200
  return;
3027
3201
  }
3028
3202
  }else{
3029
-
3030
3203
  var mode = payload[8];
3031
3204
  var odr = payload[9];
3032
3205
  var en_axis = payload[10] & 7;
@@ -3554,93 +3727,150 @@ function sensor_types(parent){
3554
3727
  var current_packet = payload[16];
3555
3728
  var sdata_start = 17;
3556
3729
 
3557
- if(globalDevices.hasOwnProperty(deviceAddr)){
3558
- // 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
3559
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
3560
- console.log('-----');
3561
- console.log('bad packet breakdown deleting stream');
3562
- console.log(current_packet);
3563
- console.log(expected_packets);
3564
- console.log(current_packet in globalDevices[deviceAddr].data);
3565
- console.log(current_packet == 1);
3566
- console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
3567
- if(this.hasOwnProperty('failure_no')){
3568
- this.failure_no = this.failure_no + 1;
3569
- }
3570
- else{
3571
- this.failure_no = 1;
3572
- }
3573
- if(this.hasOwnProperty('failure_no')){
3574
- console.log('####falure no');
3575
- console.log(this.failure_no);
3576
- }
3577
- // console.log(globalDevices[deviceAddr].data);
3578
- delete globalDevices[deviceAddr];
3579
- if(current_packet != 1){
3580
- return;
3581
- } else{
3582
-
3583
- var mode = payload[8];
3584
- var odr = payload[9];
3585
- var en_axis = payload[10] & 7;
3586
- var fsr = payload[10] >> 5;
3587
- var device_temp = msbLsb(payload[13], payload[14])/100;
3588
-
3589
-
3590
- switch(odr){
3591
- case 6:
3592
- odr = 50;
3593
- break;
3594
- case 7:
3595
- odr = 100;
3596
- break;
3597
- case 8:
3598
- odr = 200;
3599
- break;
3600
- case 9:
3601
- odr = 400;
3602
- break;
3603
- case 10:
3604
- odr = 800;
3605
- break;
3606
- case 11:
3607
- odr = 1600;
3608
- break;
3609
- case 12:
3610
- odr = 3200;
3611
- break;
3612
- case 13:
3613
- odr = 6400;
3614
- break;
3615
- case 14:
3616
- odr = 12800;
3617
- break;
3618
- case 15:
3619
- odr = 25600;
3620
- break;
3621
- default:
3622
- odr = 0;
3730
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
3731
+ if(expected_packets != 1){
3732
+ // 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
3733
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
3734
+ console.log('-----');
3735
+ console.log('bad packet breakdown deleting stream');
3736
+ console.log(current_packet);
3737
+ console.log(expected_packets);
3738
+ console.log(current_packet in globalDevices[deviceAddr].data);
3739
+ console.log(current_packet == 1);
3740
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
3741
+ if(this.hasOwnProperty('failure_no')){
3742
+ this.failure_no = this.failure_no + 1;
3623
3743
  }
3744
+ else{
3745
+ this.failure_no = 1;
3746
+ }
3747
+ if(this.hasOwnProperty('failure_no')){
3748
+ console.log('####falure no');
3749
+ console.log(this.failure_no);
3750
+ }
3751
+ // console.log(globalDevices[deviceAddr].data);
3752
+ delete globalDevices[deviceAddr];
3753
+ if(current_packet != 1){
3754
+ return;
3755
+ } else{
3756
+
3757
+ var mode = payload[8];
3758
+ var odr = payload[9];
3759
+ var en_axis = payload[10] & 7;
3760
+ var fsr = payload[10] >> 5;
3761
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3762
+
3763
+
3764
+ switch(odr){
3765
+ case 6:
3766
+ odr = 50;
3767
+ break;
3768
+ case 7:
3769
+ odr = 100;
3770
+ break;
3771
+ case 8:
3772
+ odr = 200;
3773
+ break;
3774
+ case 9:
3775
+ odr = 400;
3776
+ break;
3777
+ case 10:
3778
+ odr = 800;
3779
+ break;
3780
+ case 11:
3781
+ odr = 1600;
3782
+ break;
3783
+ case 12:
3784
+ odr = 3200;
3785
+ break;
3786
+ case 13:
3787
+ odr = 6400;
3788
+ break;
3789
+ case 14:
3790
+ odr = 12800;
3791
+ break;
3792
+ case 15:
3793
+ odr = 25600;
3794
+ break;
3795
+ default:
3796
+ odr = 0;
3797
+ }
3624
3798
 
3625
- globalDevices[deviceAddr] = {
3626
- // stream_size: expected_packets,
3627
- data: {},
3628
- odr: odr,
3629
- mo: mode,
3630
- en_axis: en_axis,
3631
- fsr: fsr,
3632
- hour: hour,
3633
- minute: minute,
3634
- device_temp: device_temp,
3799
+ globalDevices[deviceAddr] = {
3800
+ // stream_size: expected_packets,
3801
+ data: {},
3802
+ odr: odr,
3803
+ mo: mode,
3804
+ en_axis: en_axis,
3805
+ fsr: fsr,
3806
+ hour: hour,
3807
+ minute: minute,
3808
+ device_temp: device_temp,
3809
+ }
3810
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3811
+ return;
3635
3812
  }
3813
+ }
3814
+ else{
3636
3815
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3637
- return;
3638
3816
  }
3639
3817
  }
3640
3818
  else{
3819
+ var mode = payload[8];
3820
+ var odr = payload[9];
3821
+ var en_axis = payload[10] & 7;
3822
+ var fsr = payload[10] >> 5;
3823
+ var device_temp = msbLsb(payload[13], payload[14])/100;
3824
+
3825
+
3826
+ switch(odr){
3827
+ case 6:
3828
+ odr = 50;
3829
+ break;
3830
+ case 7:
3831
+ odr = 100;
3832
+ break;
3833
+ case 8:
3834
+ odr = 200;
3835
+ break;
3836
+ case 9:
3837
+ odr = 400;
3838
+ break;
3839
+ case 10:
3840
+ odr = 800;
3841
+ break;
3842
+ case 11:
3843
+ odr = 1600;
3844
+ break;
3845
+ case 12:
3846
+ odr = 3200;
3847
+ break;
3848
+ case 13:
3849
+ odr = 6400;
3850
+ break;
3851
+ case 14:
3852
+ odr = 12800;
3853
+ break;
3854
+ case 15:
3855
+ odr = 25600;
3856
+ break;
3857
+ default:
3858
+ odr = 0;
3859
+ }
3860
+
3861
+ globalDevices[deviceAddr] = {
3862
+ // stream_size: expected_packets,
3863
+ data: {},
3864
+ odr: odr,
3865
+ mo: mode,
3866
+ en_axis: en_axis,
3867
+ fsr: fsr,
3868
+ hour: hour,
3869
+ minute: minute,
3870
+ device_temp: device_temp,
3871
+ }
3641
3872
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
3642
3873
  }
3643
-
3644
3874
  if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
3645
3875
  var raw_data = new Array();
3646
3876
  for(const packet in globalDevices[deviceAddr].data){
@@ -4113,96 +4343,150 @@ function sensor_types(parent){
4113
4343
  var current_packet = payload[16];
4114
4344
  var sdata_start = 17;
4115
4345
 
4116
-
4117
-
4118
-
4119
- if(globalDevices.hasOwnProperty(deviceAddr)){
4120
- // 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
4121
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
4122
- console.log('-----');
4123
- console.log('bad packet breakdown deleting stream');
4124
- console.log(current_packet);
4125
- console.log(expected_packets);
4126
- console.log(current_packet in globalDevices[deviceAddr].data);
4127
- console.log(current_packet == 1);
4128
- console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
4129
- if(this.hasOwnProperty('failure_no')){
4130
- this.failure_no = this.failure_no + 1;
4131
- }
4132
- else{
4133
- this.failure_no = 1;
4134
- }
4135
- if(this.hasOwnProperty('failure_no')){
4136
- console.log('####falure no');
4137
- console.log(this.failure_no);
4138
- }
4139
- // console.log(globalDevices[deviceAddr].data);
4140
- delete globalDevices[deviceAddr];
4141
- if(current_packet != 1){
4142
- return;
4143
- } else{
4144
-
4145
- var mode = payload[8];
4146
- var odr = payload[9];
4147
- var en_axis = payload[10] & 7;
4148
- var fsr = payload[10] >> 5;
4149
- var device_temp = msbLsb(payload[13], payload[14])/100;
4150
-
4151
-
4152
- switch(odr){
4153
- case 6:
4154
- odr = 50;
4155
- break;
4156
- case 7:
4157
- odr = 100;
4158
- break;
4159
- case 8:
4160
- odr = 200;
4161
- break;
4162
- case 9:
4163
- odr = 400;
4164
- break;
4165
- case 10:
4166
- odr = 800;
4167
- break;
4168
- case 11:
4169
- odr = 1600;
4170
- break;
4171
- case 12:
4172
- odr = 3200;
4173
- break;
4174
- case 13:
4175
- odr = 6400;
4176
- break;
4177
- case 14:
4178
- odr = 12800;
4179
- break;
4180
- case 15:
4181
- odr = 25600;
4182
- break;
4183
- default:
4184
- odr = 0;
4346
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
4347
+ if(expected_packets != 1){
4348
+ // 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
4349
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
4350
+ console.log('-----');
4351
+ console.log('bad packet breakdown deleting stream');
4352
+ console.log(current_packet);
4353
+ console.log(expected_packets);
4354
+ console.log(current_packet in globalDevices[deviceAddr].data);
4355
+ console.log(current_packet == 1);
4356
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
4357
+ if(this.hasOwnProperty('failure_no')){
4358
+ this.failure_no = this.failure_no + 1;
4185
4359
  }
4360
+ else{
4361
+ this.failure_no = 1;
4362
+ }
4363
+ if(this.hasOwnProperty('failure_no')){
4364
+ console.log('####falure no');
4365
+ console.log(this.failure_no);
4366
+ }
4367
+ // console.log(globalDevices[deviceAddr].data);
4368
+ delete globalDevices[deviceAddr];
4369
+ if(current_packet != 1){
4370
+ return;
4371
+ } else{
4372
+
4373
+ var mode = payload[8];
4374
+ var odr = payload[9];
4375
+ var en_axis = payload[10] & 7;
4376
+ var fsr = payload[10] >> 5;
4377
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4378
+
4379
+
4380
+ switch(odr){
4381
+ case 6:
4382
+ odr = 50;
4383
+ break;
4384
+ case 7:
4385
+ odr = 100;
4386
+ break;
4387
+ case 8:
4388
+ odr = 200;
4389
+ break;
4390
+ case 9:
4391
+ odr = 400;
4392
+ break;
4393
+ case 10:
4394
+ odr = 800;
4395
+ break;
4396
+ case 11:
4397
+ odr = 1600;
4398
+ break;
4399
+ case 12:
4400
+ odr = 3200;
4401
+ break;
4402
+ case 13:
4403
+ odr = 6400;
4404
+ break;
4405
+ case 14:
4406
+ odr = 12800;
4407
+ break;
4408
+ case 15:
4409
+ odr = 25600;
4410
+ break;
4411
+ default:
4412
+ odr = 0;
4413
+ }
4186
4414
 
4187
- globalDevices[deviceAddr] = {
4188
- // stream_size: expected_packets,
4189
- data: {},
4190
- odr: odr,
4191
- mo: mode,
4192
- en_axis: en_axis,
4193
- fsr: fsr,
4194
- hour: hour,
4195
- minute: minute,
4196
- device_temp: device_temp,
4415
+ globalDevices[deviceAddr] = {
4416
+ // stream_size: expected_packets,
4417
+ data: {},
4418
+ odr: odr,
4419
+ mo: mode,
4420
+ en_axis: en_axis,
4421
+ fsr: fsr,
4422
+ hour: hour,
4423
+ minute: minute,
4424
+ device_temp: device_temp,
4425
+ }
4426
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4427
+ return;
4197
4428
  }
4429
+ }
4430
+ else{
4198
4431
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4199
- return;
4200
4432
  }
4201
4433
  }
4202
4434
  else{
4435
+ var mode = payload[8];
4436
+ var odr = payload[9];
4437
+ var en_axis = payload[10] & 7;
4438
+ var fsr = payload[10] >> 5;
4439
+ var device_temp = msbLsb(payload[13], payload[14])/100;
4440
+
4441
+
4442
+ switch(odr){
4443
+ case 6:
4444
+ odr = 50;
4445
+ break;
4446
+ case 7:
4447
+ odr = 100;
4448
+ break;
4449
+ case 8:
4450
+ odr = 200;
4451
+ break;
4452
+ case 9:
4453
+ odr = 400;
4454
+ break;
4455
+ case 10:
4456
+ odr = 800;
4457
+ break;
4458
+ case 11:
4459
+ odr = 1600;
4460
+ break;
4461
+ case 12:
4462
+ odr = 3200;
4463
+ break;
4464
+ case 13:
4465
+ odr = 6400;
4466
+ break;
4467
+ case 14:
4468
+ odr = 12800;
4469
+ break;
4470
+ case 15:
4471
+ odr = 25600;
4472
+ break;
4473
+ default:
4474
+ odr = 0;
4475
+ }
4476
+
4477
+ globalDevices[deviceAddr] = {
4478
+ // stream_size: expected_packets,
4479
+ data: {},
4480
+ odr: odr,
4481
+ mo: mode,
4482
+ en_axis: en_axis,
4483
+ fsr: fsr,
4484
+ hour: hour,
4485
+ minute: minute,
4486
+ device_temp: device_temp,
4487
+ }
4203
4488
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
4204
4489
  }
4205
-
4206
4490
  if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
4207
4491
  var raw_data = new Array();
4208
4492
  for(const packet in globalDevices[deviceAddr].data){
@@ -4651,6 +4935,16 @@ function sensor_types(parent){
4651
4935
  }
4652
4936
  }
4653
4937
  },
4938
+ '88': {
4939
+ name: '1 Channel Ultrasound Vibration Sensor',
4940
+ parse: (d) => {
4941
+ return {
4942
+ raw_adc: d.slice(0, 2).reduce(msbLsb),
4943
+ ma: d.slice(2, 4).reduce(msbLsb) / 100,
4944
+ db: d.slice(4, 6).reduce(msbLsb) / 100
4945
+ };
4946
+ }
4947
+ },
4654
4948
  '89': {
4655
4949
  name: '2 Channel Ultrasound Vibration Sensor',
4656
4950
  parse: (d) => {
@@ -4664,6 +4958,14 @@ function sensor_types(parent){
4664
4958
  };
4665
4959
  }
4666
4960
  },
4961
+ '91': {
4962
+ name: 'Wireless Air Velocity Sensor HVAC',
4963
+ parse: (d) => {
4964
+ return {
4965
+ velocity_mps: signInt(msbLsb(d[0], d[1]), 16) / 1000
4966
+ };
4967
+ }
4968
+ },
4667
4969
  '92': {
4668
4970
  name: 'Sound Sensor',
4669
4971
  parse: (d) => {
@@ -4822,7 +5124,7 @@ function sensor_types(parent){
4822
5124
  // 0x01 (Success + OTF) ,
4823
5125
  // 0x02 (Error + no OTF),
4824
5126
  // 0x03 (Error + OTF)
4825
- if(d[7]>1){
5127
+ if(d[7] & 15 > 1){
4826
5128
  console.log('!-----!');
4827
5129
  console.log('515 Error Detected');
4828
5130
  console.log(d[7]);
@@ -4947,100 +5249,158 @@ function sensor_types(parent){
4947
5249
  var current_packet = payload[20];
4948
5250
  var sdata_start = 21;
4949
5251
 
4950
-
4951
-
4952
-
4953
- if(globalDevices.hasOwnProperty(deviceAddr)){
4954
- // 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
4955
- if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
4956
- console.log('-----');
4957
- console.log('bad packet breakdown deleting stream');
4958
- console.log(current_packet);
4959
- console.log(expected_packets);
4960
- console.log(current_packet in globalDevices[deviceAddr].data);
4961
- console.log(current_packet == 1);
4962
- console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
4963
- if(this.hasOwnProperty('failure_no')){
4964
- this.failure_no = this.failure_no + 1;
4965
- }
4966
- else{
4967
- this.failure_no = 1;
4968
- }
4969
- if(this.hasOwnProperty('failure_no')){
4970
- console.log('####falure no');
4971
- console.log(this.failure_no);
4972
- }
4973
- // console.log(globalDevices[deviceAddr].data);
4974
- delete globalDevices[deviceAddr];
4975
- if(current_packet != 1){
4976
- return;
4977
- } else{
4978
-
4979
- var mode = payload[8];
4980
- var odr = payload[9];
4981
- var en_axis = payload[10] & 7;
4982
- var fsr = payload[10] >> 5;
4983
- var device_temp = signInt(msbLsb(payload[13], payload[14]))/100;
4984
- var adc_1_raw = msbLsb(payload[15], payload[16]);
4985
- var adc_2_raw = msbLsb(payload[17], payload[18]);
4986
-
4987
-
4988
- switch(odr){
4989
- case 6:
4990
- odr = 50;
4991
- break;
4992
- case 7:
4993
- odr = 100;
4994
- break;
4995
- case 8:
4996
- odr = 200;
4997
- break;
4998
- case 9:
4999
- odr = 400;
5000
- break;
5001
- case 10:
5002
- odr = 800;
5003
- break;
5004
- case 11:
5005
- odr = 1600;
5006
- break;
5007
- case 12:
5008
- odr = 3200;
5009
- break;
5010
- case 13:
5011
- odr = 6400;
5012
- break;
5013
- case 14:
5014
- odr = 12800;
5015
- break;
5016
- case 15:
5017
- odr = 25600;
5018
- break;
5019
- default:
5020
- odr = 0;
5252
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
5253
+ if(expected_packets != 1){
5254
+ // 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
5255
+ if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
5256
+ console.log('-----');
5257
+ console.log('bad packet breakdown deleting stream');
5258
+ console.log(current_packet);
5259
+ console.log(expected_packets);
5260
+ console.log(current_packet in globalDevices[deviceAddr].data);
5261
+ console.log(current_packet == 1);
5262
+ console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
5263
+ if(this.hasOwnProperty('failure_no')){
5264
+ this.failure_no = this.failure_no + 1;
5265
+ }
5266
+ else{
5267
+ this.failure_no = 1;
5268
+ }
5269
+ if(this.hasOwnProperty('failure_no')){
5270
+ console.log('####falure no');
5271
+ console.log(this.failure_no);
5021
5272
  }
5273
+ // console.log(globalDevices[deviceAddr].data);
5274
+ delete globalDevices[deviceAddr];
5275
+ if(current_packet != 1){
5276
+ return;
5277
+ } else{
5278
+
5279
+ var mode = payload[8];
5280
+ var odr = payload[9];
5281
+ var en_axis = payload[10] & 7;
5282
+ var fsr = payload[10] >> 5;
5283
+ var device_temp = signInt(msbLsb(payload[13], payload[14]))/100;
5284
+ var adc_1_raw = msbLsb(payload[15], payload[16]);
5285
+ var adc_2_raw = msbLsb(payload[17], payload[18]);
5286
+
5287
+
5288
+ switch(odr){
5289
+ case 6:
5290
+ odr = 50;
5291
+ break;
5292
+ case 7:
5293
+ odr = 100;
5294
+ break;
5295
+ case 8:
5296
+ odr = 200;
5297
+ break;
5298
+ case 9:
5299
+ odr = 400;
5300
+ break;
5301
+ case 10:
5302
+ odr = 800;
5303
+ break;
5304
+ case 11:
5305
+ odr = 1600;
5306
+ break;
5307
+ case 12:
5308
+ odr = 3200;
5309
+ break;
5310
+ case 13:
5311
+ odr = 6400;
5312
+ break;
5313
+ case 14:
5314
+ odr = 12800;
5315
+ break;
5316
+ case 15:
5317
+ odr = 25600;
5318
+ break;
5319
+ default:
5320
+ odr = 0;
5321
+ }
5022
5322
 
5023
- globalDevices[deviceAddr] = {
5024
- // stream_size: expected_packets,
5025
- data: {},
5026
- odr: odr,
5027
- mo: mode,
5028
- en_axis: en_axis,
5029
- fsr: fsr,
5030
- hour: hour,
5031
- minute: minute,
5032
- adc_1_raw: adc_1_raw,
5033
- adc_2_raw: adc_2_raw,
5034
- device_temp: device_temp,
5323
+ globalDevices[deviceAddr] = {
5324
+ // stream_size: expected_packets,
5325
+ data: {},
5326
+ odr: odr,
5327
+ mo: mode,
5328
+ en_axis: en_axis,
5329
+ fsr: fsr,
5330
+ hour: hour,
5331
+ minute: minute,
5332
+ adc_1_raw: adc_1_raw,
5333
+ adc_2_raw: adc_2_raw,
5334
+ device_temp: device_temp,
5335
+ }
5336
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5337
+ return;
5035
5338
  }
5339
+ }
5340
+ else{
5036
5341
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5037
- return;
5038
5342
  }
5039
5343
  }
5040
5344
  else{
5345
+ var mode = payload[8];
5346
+ var odr = payload[9];
5347
+ var en_axis = payload[10] & 7;
5348
+ var fsr = payload[10] >> 5;
5349
+ var device_temp = signInt(msbLsb(payload[13], payload[14]))/100;
5350
+ var adc_1_raw = msbLsb(payload[15], payload[16]);
5351
+ var adc_2_raw = msbLsb(payload[17], payload[18]);
5352
+
5353
+
5354
+ switch(odr){
5355
+ case 6:
5356
+ odr = 50;
5357
+ break;
5358
+ case 7:
5359
+ odr = 100;
5360
+ break;
5361
+ case 8:
5362
+ odr = 200;
5363
+ break;
5364
+ case 9:
5365
+ odr = 400;
5366
+ break;
5367
+ case 10:
5368
+ odr = 800;
5369
+ break;
5370
+ case 11:
5371
+ odr = 1600;
5372
+ break;
5373
+ case 12:
5374
+ odr = 3200;
5375
+ break;
5376
+ case 13:
5377
+ odr = 6400;
5378
+ break;
5379
+ case 14:
5380
+ odr = 12800;
5381
+ break;
5382
+ case 15:
5383
+ odr = 25600;
5384
+ break;
5385
+ default:
5386
+ odr = 0;
5387
+ }
5388
+
5389
+ globalDevices[deviceAddr] = {
5390
+ // stream_size: expected_packets,
5391
+ data: {},
5392
+ odr: odr,
5393
+ mo: mode,
5394
+ en_axis: en_axis,
5395
+ fsr: fsr,
5396
+ hour: hour,
5397
+ minute: minute,
5398
+ adc_1_raw: adc_1_raw,
5399
+ adc_2_raw: adc_2_raw,
5400
+ device_temp: device_temp,
5401
+ }
5041
5402
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
5042
5403
  }
5043
-
5044
5404
  if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
5045
5405
  var raw_data = new Array();
5046
5406
  for(const packet in globalDevices[deviceAddr].data){
@@ -5529,6 +5889,16 @@ function sensor_types(parent){
5529
5889
  }
5530
5890
  }
5531
5891
  },
5892
+ '521': {
5893
+ name: 'Type 520 - 6 Channel Current Temperature and Humidity',
5894
+ parse: (payload, parsed) => {
5895
+ return {
5896
+ lux_1: payload.slice(0, 2).reduce(msbLsb)/100,
5897
+ lux_2: payload.slice(2, 4).reduce(msbLsb)/100,
5898
+ lux_3: payload.slice(4, 6).reduce(msbLsb)/100
5899
+ }
5900
+ }
5901
+ },
5532
5902
  '10000': {
5533
5903
  name: '4-Relay',
5534
5904
  parse: (d) => {