@ncd-io/node-red-enterprise-sensors 1.4.3 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/WirelessGateway.js +2701 -835
- package/package.json +1 -1
- package/wireless.html +917 -82
- package/wireless.js +219 -4
package/lib/WirelessGateway.js
CHANGED
|
@@ -160,7 +160,7 @@ module.exports = class WirelessSensor{
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
// #OTF
|
|
163
|
-
var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,120,121,122,123,180,181,202,217,211,270,519,520,521,531,535,537,538,539,540,541,1010,1011];
|
|
163
|
+
var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,119,120,121,122,123,124,180,181,202,217,211,270,519,520,521,531,535,536,537,538,539,540,541,542,543,1010,1011];
|
|
164
164
|
var device_type = msbLsb(frame.data[6], frame.data[7]);
|
|
165
165
|
// var device_type = frame.data[7];
|
|
166
166
|
|
|
@@ -235,6 +235,11 @@ module.exports = class WirelessSensor{
|
|
|
235
235
|
}else if(mode === 'ACK'){
|
|
236
236
|
this.sensor_pool[frame.mac].status = data.result;
|
|
237
237
|
if(data.data.length){
|
|
238
|
+
if(data.sensor_type == 110 || data.sensor_type == 111 || data.sensor_type == 112 || data.sensor_type == 114 || data.sensor_type == 543){
|
|
239
|
+
if(data.data[0] == 77 && data.data[1] == 79 && data.data[2] == 70 && data.data[3] == 70 && data.data[4] == 0){
|
|
240
|
+
this.sensor_pool[frame.mac].mode = 'MOFF';
|
|
241
|
+
}
|
|
242
|
+
}
|
|
238
243
|
this.sensor_pool[frame.mac].data = data.data;
|
|
239
244
|
};
|
|
240
245
|
}
|
|
@@ -287,6 +292,9 @@ module.exports = class WirelessSensor{
|
|
|
287
292
|
};
|
|
288
293
|
}
|
|
289
294
|
config_ack(payload){
|
|
295
|
+
if((msbLsb(payload[2], payload[3])) == 28){
|
|
296
|
+
payload[5] = payload[6];
|
|
297
|
+
}
|
|
290
298
|
return {
|
|
291
299
|
nodeId: payload[0],
|
|
292
300
|
counter: payload[1],
|
|
@@ -323,18 +331,37 @@ module.exports = class WirelessSensor{
|
|
|
323
331
|
};
|
|
324
332
|
}
|
|
325
333
|
sensor_data(payload, frame){
|
|
334
|
+
|
|
335
|
+
let sensor_type = msbLsb(payload[5], payload[6]);
|
|
336
|
+
let battery_percent = ((msbLsb(payload[2], payload[3]) * 0.361) - 269.66).toFixed(2);
|
|
337
|
+
let voltage = (msbLsb(payload[2], payload[3]) * 0.00322).toFixed(2);
|
|
338
|
+
|
|
339
|
+
if(sensor_type == 110 || sensor_type == 111 || sensor_type == 112 || sensor_type == 114 || sensor_type == 543){
|
|
340
|
+
const vMin = 2.5;
|
|
341
|
+
const vMax = 3.3;
|
|
342
|
+
|
|
343
|
+
if (voltage >= vMax){
|
|
344
|
+
battery_percent = '100';
|
|
345
|
+
} else if (voltage <= vMin){
|
|
346
|
+
battery_percent = '0';
|
|
347
|
+
} else {
|
|
348
|
+
const scale = 5.0; // tuning factor for steepness
|
|
349
|
+
const percent = 100 * (1 - Math.exp(-scale * (voltage - vMin)));
|
|
350
|
+
battery_percent = (Math.min(100, Math.max(0, percent))).toFixed(2);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
326
353
|
var parsed = {
|
|
327
354
|
nodeId: payload[0],
|
|
328
355
|
firmware: payload[1],
|
|
329
|
-
battery:
|
|
356
|
+
battery: voltage,
|
|
330
357
|
// battery_percent: (msbLsb(payload[2], payload[3]) * 0.537 - 449.9).toFixed(2),
|
|
331
|
-
battery_percent:
|
|
358
|
+
battery_percent: battery_percent,
|
|
332
359
|
counter: payload[4],
|
|
333
|
-
sensor_type:
|
|
360
|
+
sensor_type: sensor_type
|
|
334
361
|
};
|
|
335
362
|
|
|
336
363
|
// #OTF
|
|
337
|
-
var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,120,121,122,123,180,181,202,211,217,270,519,520,521,531,535,537,538,539,540,541,1010,1011];
|
|
364
|
+
var otf_devices = [4,12,21,23,26,32,33,39,44,45,48,52,53,56,58,74,76,78,79,80,81,82,84,88,89,90,91,97,98,101,102,103,105,106,107,108,109,110,111,112,114,117,118,119,120,121,122,123,124,180,181,202,211,217,270,519,520,521,531,535,536,537,538,539,540,541,542,543,1010,1011];
|
|
338
365
|
if(otf_devices.includes(parsed.sensor_type)){
|
|
339
366
|
// If the message says FLY and there is not FLY timer in progress.
|
|
340
367
|
if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
|
|
@@ -756,7 +783,7 @@ module.exports = class WirelessSensor{
|
|
|
756
783
|
data: payload.slice(8)
|
|
757
784
|
};
|
|
758
785
|
// #OTF
|
|
759
|
-
}else if(parsed.sensor_type == 21 || parsed.sensor_type == 33 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 97 || parsed.sensor_type == 98 || parsed.sensor_type == 103 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 117 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538){
|
|
786
|
+
}else if(parsed.sensor_type == 21 || parsed.sensor_type == 33 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 97 || parsed.sensor_type == 98 || parsed.sensor_type == 103 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 117 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 202 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538 || parsed.sensor_type == 543){
|
|
760
787
|
parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
|
|
761
788
|
if(!parsed.sensor_data){
|
|
762
789
|
return;
|
|
@@ -1336,7 +1363,7 @@ module.exports = class WirelessSensor{
|
|
|
1336
1363
|
}
|
|
1337
1364
|
config_set_quality_of_service_108(sensor_mac, value){
|
|
1338
1365
|
console.log('config_set_quality_of_service_108');
|
|
1339
|
-
var packet = [
|
|
1366
|
+
var packet = [247, 52, 0, 0, 0, value];
|
|
1340
1367
|
console.log(packet);
|
|
1341
1368
|
return this.config_send(sensor_mac, packet);
|
|
1342
1369
|
}
|
|
@@ -1711,6 +1738,18 @@ module.exports = class WirelessSensor{
|
|
|
1711
1738
|
console.log(packet);
|
|
1712
1739
|
return this.config_send(sensor_mac, packet);
|
|
1713
1740
|
}
|
|
1741
|
+
config_set_led_accelerometer_threshold_114(sensor_mac, value){
|
|
1742
|
+
console.log('config_set_led_accelerometer_threshold_114');
|
|
1743
|
+
var packet = [244, 79, 0, 0, 0, 62, 1, value];
|
|
1744
|
+
console.log(packet);
|
|
1745
|
+
return this.config_send(sensor_mac, packet);
|
|
1746
|
+
}
|
|
1747
|
+
config_set_led_velocity_threshold_114(sensor_mac, value){
|
|
1748
|
+
console.log('config_set_led_velocity_threshold_114');
|
|
1749
|
+
var packet = [244, 79, 0, 0, 0, 64, 1, value];
|
|
1750
|
+
console.log(packet);
|
|
1751
|
+
return this.config_send(sensor_mac, packet);
|
|
1752
|
+
}
|
|
1714
1753
|
config_set_acceleration_interrupt_threshold_84(sensor_mac, value){
|
|
1715
1754
|
console.log('config_set_acceleration_interrupt_threshold_84');
|
|
1716
1755
|
var packet = [244, 79, 0, 0, 0, 60, value];
|
|
@@ -2244,7 +2283,200 @@ module.exports = class WirelessSensor{
|
|
|
2244
2283
|
console.log(packet);
|
|
2245
2284
|
return this.config_send(sensor_mac, packet);
|
|
2246
2285
|
}
|
|
2247
|
-
|
|
2286
|
+
config_set_volume_flow_unit_124(sensor_mac, value){
|
|
2287
|
+
console.log('config_set_volume_flow_unit_124');
|
|
2288
|
+
var packet = [244, 51, 0, 0, 124, value];
|
|
2289
|
+
console.log(packet);
|
|
2290
|
+
return this.config_send(sensor_mac, packet);
|
|
2291
|
+
}
|
|
2292
|
+
config_set_total_1_flow_unit_124(sensor_mac, value){
|
|
2293
|
+
console.log('config_set_total_1_flow_unit_124');
|
|
2294
|
+
var packet = [244, 52, 0, 0, 124, value];
|
|
2295
|
+
console.log(packet);
|
|
2296
|
+
return this.config_send(sensor_mac, packet);
|
|
2297
|
+
}
|
|
2298
|
+
config_set_total_2_flow_unit_124(sensor_mac, value){
|
|
2299
|
+
console.log('config_set_total_2_flow_unit_124');
|
|
2300
|
+
var packet = [244, 53, 0, 0, 124, value];
|
|
2301
|
+
console.log(packet);
|
|
2302
|
+
return this.config_send(sensor_mac, packet);
|
|
2303
|
+
}
|
|
2304
|
+
config_set_total_3_flow_unit_124(sensor_mac, value){
|
|
2305
|
+
console.log('config_set_total_3_flow_unit_124');
|
|
2306
|
+
var packet = [244, 54, 0, 0, 124, value];
|
|
2307
|
+
console.log(packet);
|
|
2308
|
+
return this.config_send(sensor_mac, packet);
|
|
2309
|
+
}
|
|
2310
|
+
config_set_pressure_unit_124(sensor_mac, value){
|
|
2311
|
+
console.log('config_set_pressure_unit_124');
|
|
2312
|
+
var packet = [244, 55, 0, 0, 124, value];
|
|
2313
|
+
console.log(packet);
|
|
2314
|
+
return this.config_send(sensor_mac, packet);
|
|
2315
|
+
}
|
|
2316
|
+
config_set_total_1_op_mode_124(sensor_mac, value){
|
|
2317
|
+
console.log('config_set_total_1_op_mode_124');
|
|
2318
|
+
var packet = [244, 48, 0, 0, 124, value];
|
|
2319
|
+
console.log(packet);
|
|
2320
|
+
return this.config_send(sensor_mac, packet);
|
|
2321
|
+
}
|
|
2322
|
+
config_set_total_2_op_mode_124(sensor_mac, value){
|
|
2323
|
+
console.log('config_set_total_2_op_mode_124');
|
|
2324
|
+
var packet = [244, 49, 0, 0, 124, value];
|
|
2325
|
+
console.log(packet);
|
|
2326
|
+
return this.config_send(sensor_mac, packet);
|
|
2327
|
+
}
|
|
2328
|
+
config_set_total_3_op_mode_124(sensor_mac, value){
|
|
2329
|
+
console.log('config_set_total_3_op_mode_124');
|
|
2330
|
+
var packet = [244, 50, 0, 0, 124, value];
|
|
2331
|
+
console.log(packet);
|
|
2332
|
+
return this.config_send(sensor_mac, packet);
|
|
2333
|
+
}
|
|
2334
|
+
config_set_conductivity_unit_124(sensor_mac, value){
|
|
2335
|
+
console.log('config_set_conductivity_unit_124');
|
|
2336
|
+
var packet = [244, 56, 0, 0, 124, value];
|
|
2337
|
+
console.log(packet);
|
|
2338
|
+
return this.config_send(sensor_mac, packet);
|
|
2339
|
+
}
|
|
2340
|
+
config_set_reset_all_totalizers_124(sensor_mac, value){
|
|
2341
|
+
console.log('config_set_reset_all_totalizers_124');
|
|
2342
|
+
var packet = [244, 64, 0, 0, 124, 1];
|
|
2343
|
+
console.log(packet);
|
|
2344
|
+
return this.config_send(sensor_mac, packet);
|
|
2345
|
+
}
|
|
2346
|
+
config_set_screen_control_108(sensor_mac, value){
|
|
2347
|
+
console.log('config_set_screen_control_108');
|
|
2348
|
+
var packet = [244, 69, 0, 0, 0, value];
|
|
2349
|
+
console.log(packet);
|
|
2350
|
+
return this.config_send(sensor_mac, packet);
|
|
2351
|
+
}
|
|
2352
|
+
config_set_screen_on_time_108(sensor_mac, value){
|
|
2353
|
+
console.log('config_set_screen_on_time_108');
|
|
2354
|
+
var packet = [244, 67, 0, 0, 0, value];
|
|
2355
|
+
console.log(packet);
|
|
2356
|
+
return this.config_send(sensor_mac, packet);
|
|
2357
|
+
}
|
|
2358
|
+
config_set_oxygen_boot_time_536(sensor_mac, value){
|
|
2359
|
+
console.log('config_set_oxygen_boot_time_536');
|
|
2360
|
+
var packet = [244, 41, 0, 0, 0, value];
|
|
2361
|
+
console.log(packet);
|
|
2362
|
+
return this.config_send(sensor_mac, packet);
|
|
2363
|
+
}
|
|
2364
|
+
config_set_flow_boot_time_536(sensor_mac, value){
|
|
2365
|
+
console.log('config_set_flow_boot_time_536');
|
|
2366
|
+
var packet = [244, 49, 0, 0, 0, value];
|
|
2367
|
+
console.log(packet);
|
|
2368
|
+
return this.config_send(sensor_mac, packet);
|
|
2369
|
+
}
|
|
2370
|
+
config_set_oxygen_dev_addr_536(sensor_mac, id_1, id_2, id_3, id_4){
|
|
2371
|
+
console.log('config_set_oxygen_dev_addr_536');
|
|
2372
|
+
var packet = [244, 51, 0, 0, 0, id_1, id_2, id_3, id_4];
|
|
2373
|
+
console.log(packet);
|
|
2374
|
+
return this.config_send(sensor_mac, packet);
|
|
2375
|
+
}
|
|
2376
|
+
config_set_flow_dev_addr_536(sensor_mac, id_1, id_2, id_3, id_4){
|
|
2377
|
+
console.log('config_set_flow_dev_addr_536');
|
|
2378
|
+
var packet = [244, 53, 0, 0, 0, id_1, id_2, id_3, id_4];
|
|
2379
|
+
console.log(packet);
|
|
2380
|
+
return this.config_send(sensor_mac, packet);
|
|
2381
|
+
}
|
|
2382
|
+
config_set_oxygen_rate_536(sensor_mac, value){
|
|
2383
|
+
console.log('config_set_oxygen_rate_536');
|
|
2384
|
+
var packet = [244, 32, 0, 0, 0, value];
|
|
2385
|
+
console.log(packet);
|
|
2386
|
+
return this.config_send(sensor_mac, packet);
|
|
2387
|
+
}
|
|
2388
|
+
config_set_oxygen_timeout_536(sensor_mac, value){
|
|
2389
|
+
console.log('config_set_oxygen_timeout_536');
|
|
2390
|
+
var packet = [244, 37, 0, 0, 0];
|
|
2391
|
+
let value_ = int2Bytes(value, 2);
|
|
2392
|
+
packet.push(...value_);
|
|
2393
|
+
console.log(packet);
|
|
2394
|
+
return this.config_send(sensor_mac, packet);
|
|
2395
|
+
}
|
|
2396
|
+
config_set_oxygen_max_threshold_s1_536(sensor_mac, value){
|
|
2397
|
+
console.log('config_set_oxygen_max_threshold_s1_536');
|
|
2398
|
+
value = value * 100;
|
|
2399
|
+
var packet = [244, 34, 0, 0, 0, 1];
|
|
2400
|
+
let value_ = int2Bytes(value, 2);
|
|
2401
|
+
packet.push(...value_);
|
|
2402
|
+
console.log(packet);
|
|
2403
|
+
return this.config_send(sensor_mac, packet);
|
|
2404
|
+
}
|
|
2405
|
+
config_set_oxygen_max_threshold_s2_536(sensor_mac, value){
|
|
2406
|
+
console.log('config_set_oxygen_max_threshold_s2_536');
|
|
2407
|
+
value = value * 100;
|
|
2408
|
+
var packet = [244, 34, 0, 0, 0, 2];
|
|
2409
|
+
let value_ = int2Bytes(value, 2);
|
|
2410
|
+
packet.push(...value_);
|
|
2411
|
+
console.log(packet);
|
|
2412
|
+
return this.config_send(sensor_mac, packet);
|
|
2413
|
+
}
|
|
2414
|
+
config_set_oxygen_max_threshold_s3_536(sensor_mac, value){
|
|
2415
|
+
value = value * 100;
|
|
2416
|
+
console.log('config_set_oxygen_max_threshold_s3_536');
|
|
2417
|
+
var packet = [244, 34, 0, 0, 0, 3];
|
|
2418
|
+
let value_ = int2Bytes(value, 2);
|
|
2419
|
+
packet.push(...value_);
|
|
2420
|
+
console.log(packet);
|
|
2421
|
+
return this.config_send(sensor_mac, packet);
|
|
2422
|
+
}
|
|
2423
|
+
config_set_oxygen_max_threshold_s4_536(sensor_mac, value){
|
|
2424
|
+
value = value * 100;
|
|
2425
|
+
console.log('config_set_oxygen_max_threshold_s4_536');
|
|
2426
|
+
var packet = [244, 34, 0, 0, 0, 4];
|
|
2427
|
+
let value_ = int2Bytes(value, 2);
|
|
2428
|
+
packet.push(...value_);
|
|
2429
|
+
console.log(packet);
|
|
2430
|
+
return this.config_send(sensor_mac, packet);
|
|
2431
|
+
}
|
|
2432
|
+
config_set_oxygen_min_threshold_s1_536(sensor_mac, value){
|
|
2433
|
+
console.log('config_set_oxygen_min_threshold_s1_536');
|
|
2434
|
+
value = value * 100;
|
|
2435
|
+
var packet = [244, 39, 0, 0, 0, 1];
|
|
2436
|
+
let value_ = int2Bytes(value, 2);
|
|
2437
|
+
packet.push(...value_);
|
|
2438
|
+
console.log(packet);
|
|
2439
|
+
return this.config_send(sensor_mac, packet);
|
|
2440
|
+
}
|
|
2441
|
+
config_set_oxygen_min_threshold_s2_536(sensor_mac, value){
|
|
2442
|
+
console.log('config_set_oxygen_min_threshold_s2_536');
|
|
2443
|
+
value = value * 100;
|
|
2444
|
+
var packet = [244, 39, 0, 0, 0, 2];
|
|
2445
|
+
let value_ = int2Bytes(value, 2);
|
|
2446
|
+
packet.push(...value_);
|
|
2447
|
+
console.log(packet);
|
|
2448
|
+
return this.config_send(sensor_mac, packet);
|
|
2449
|
+
}
|
|
2450
|
+
config_set_oxygen_min_threshold_s3_536(sensor_mac, value){
|
|
2451
|
+
value = value * 100;
|
|
2452
|
+
console.log('config_set_oxygen_min_threshold_s3_536');
|
|
2453
|
+
var packet = [244, 39, 0, 0, 0, 3];
|
|
2454
|
+
let value_ = int2Bytes(value, 2);
|
|
2455
|
+
packet.push(...value_);
|
|
2456
|
+
console.log(packet);
|
|
2457
|
+
return this.config_send(sensor_mac, packet);
|
|
2458
|
+
}
|
|
2459
|
+
config_set_oxygen_min_threshold_s4_536(sensor_mac, value){
|
|
2460
|
+
value = value * 100;
|
|
2461
|
+
console.log('config_set_oxygen_min_threshold_s4_536');
|
|
2462
|
+
var packet = [244, 39, 0, 0, 0, 4];
|
|
2463
|
+
let value_ = int2Bytes(value, 2);
|
|
2464
|
+
packet.push(...value_);
|
|
2465
|
+
console.log(packet);
|
|
2466
|
+
return this.config_send(sensor_mac, packet);
|
|
2467
|
+
}
|
|
2468
|
+
config_set_axis_enabled_119(sensor_mac, value){
|
|
2469
|
+
console.log('config_set_axis_enabled_119');
|
|
2470
|
+
var packet = [244, 73, 0, 0, 0, value];
|
|
2471
|
+
console.log(packet);
|
|
2472
|
+
return this.config_send(sensor_mac, packet);
|
|
2473
|
+
}
|
|
2474
|
+
config_set_raw_acc_data_119(sensor_mac, value){
|
|
2475
|
+
console.log('config_set_raw_acc_data_119');
|
|
2476
|
+
var packet = [244, 71, 0, 0, 0, value];
|
|
2477
|
+
console.log(packet);
|
|
2478
|
+
return this.config_send(sensor_mac, packet);
|
|
2479
|
+
}
|
|
2248
2480
|
config_get_delay(sensor_mac){
|
|
2249
2481
|
return new Promise((fulfill, reject) => {
|
|
2250
2482
|
this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
|
|
@@ -4183,12 +4415,9 @@ function sensor_types(parent){
|
|
|
4183
4415
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
4184
4416
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
4185
4417
|
'always_on': frame_data.always_on,
|
|
4186
|
-
'
|
|
4187
|
-
'
|
|
4188
|
-
'
|
|
4189
|
-
'hardware_id': frame.slice(37, 40),
|
|
4190
|
-
'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
|
|
4191
|
-
'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
|
|
4418
|
+
'hardware_id': frame.slice(25, 28),
|
|
4419
|
+
'report_rate': frame.slice(28, 32).reduce(msbLsb) + " sec",
|
|
4420
|
+
'tx_life_counter': frame.slice(32, 36).reduce(msbLsb),
|
|
4192
4421
|
'machine_values': {
|
|
4193
4422
|
'firmware': frame[2],
|
|
4194
4423
|
'fsr': frame[16],
|
|
@@ -8668,7 +8897,7 @@ function sensor_types(parent){
|
|
|
8668
8897
|
}
|
|
8669
8898
|
},
|
|
8670
8899
|
'parse_fly': (frame) => {
|
|
8671
|
-
if(frame[2]
|
|
8900
|
+
if(frame[2] == 19){ // Screen version fw 19
|
|
8672
8901
|
let reset_mode = "Disabled";
|
|
8673
8902
|
switch(frame[38]){
|
|
8674
8903
|
case 0:
|
|
@@ -8681,40 +8910,40 @@ function sensor_types(parent){
|
|
|
8681
8910
|
reset_mode = "Timeout";
|
|
8682
8911
|
break;
|
|
8683
8912
|
}
|
|
8684
|
-
let acc_odr = "
|
|
8913
|
+
let acc_odr = "10 Hz";
|
|
8685
8914
|
switch(frame[40]){
|
|
8686
8915
|
case 0:
|
|
8687
|
-
acc_odr = "
|
|
8916
|
+
acc_odr = "10 Hz";
|
|
8688
8917
|
break;
|
|
8689
8918
|
case 1:
|
|
8690
|
-
acc_odr = "
|
|
8919
|
+
acc_odr = "20 Hz";
|
|
8691
8920
|
break;
|
|
8692
8921
|
case 2:
|
|
8693
|
-
acc_odr = "
|
|
8922
|
+
acc_odr = "50 Hz";
|
|
8694
8923
|
break;
|
|
8695
8924
|
case 3:
|
|
8696
|
-
acc_odr = "
|
|
8925
|
+
acc_odr = "100 Hz";
|
|
8697
8926
|
break;
|
|
8698
8927
|
case 4:
|
|
8699
|
-
acc_odr = "
|
|
8928
|
+
acc_odr = "200 Hz";
|
|
8700
8929
|
break;
|
|
8701
8930
|
case 5:
|
|
8702
|
-
acc_odr = "
|
|
8931
|
+
acc_odr = "400 Hz";
|
|
8703
8932
|
break;
|
|
8704
8933
|
}
|
|
8705
|
-
let rtc_sampling_interval = "5
|
|
8934
|
+
let rtc_sampling_interval = "5 sec";
|
|
8706
8935
|
switch(frame[39]){
|
|
8707
8936
|
case 0:
|
|
8708
|
-
rtc_sampling_interval = "1
|
|
8937
|
+
rtc_sampling_interval = "1 min";
|
|
8709
8938
|
break;
|
|
8710
8939
|
case 1:
|
|
8711
|
-
rtc_sampling_interval = "5
|
|
8940
|
+
rtc_sampling_interval = "5 min";
|
|
8712
8941
|
break;
|
|
8713
8942
|
case 2:
|
|
8714
|
-
rtc_sampling_interval = "15
|
|
8943
|
+
rtc_sampling_interval = "15 min";
|
|
8715
8944
|
break;
|
|
8716
8945
|
case 3:
|
|
8717
|
-
rtc_sampling_interval = "30
|
|
8946
|
+
rtc_sampling_interval = "30 min";
|
|
8718
8947
|
break;
|
|
8719
8948
|
case 4:
|
|
8720
8949
|
rtc_sampling_interval = "1 hour";
|
|
@@ -8732,22 +8961,40 @@ function sensor_types(parent){
|
|
|
8732
8961
|
rtc_sampling_interval = "12 hours";
|
|
8733
8962
|
break;
|
|
8734
8963
|
case 9:
|
|
8735
|
-
rtc_sampling_interval = "5
|
|
8964
|
+
rtc_sampling_interval = "5 sec";
|
|
8736
8965
|
break;
|
|
8737
8966
|
case 10:
|
|
8738
|
-
rtc_sampling_interval = "10
|
|
8967
|
+
rtc_sampling_interval = "10 sec";
|
|
8739
8968
|
break;
|
|
8740
8969
|
case 11:
|
|
8741
|
-
rtc_sampling_interval = "15
|
|
8970
|
+
rtc_sampling_interval = "15 sec";
|
|
8742
8971
|
break;
|
|
8743
8972
|
case 12:
|
|
8744
|
-
rtc_sampling_interval = "30
|
|
8973
|
+
rtc_sampling_interval = "30 sec";
|
|
8974
|
+
break;
|
|
8975
|
+
}
|
|
8976
|
+
let screen_control = 0;
|
|
8977
|
+
switch(frame[41]){
|
|
8978
|
+
case 0:
|
|
8979
|
+
screen_control = "IO1";
|
|
8980
|
+
break;
|
|
8981
|
+
case 1:
|
|
8982
|
+
screen_control = "IO2";
|
|
8983
|
+
break;
|
|
8984
|
+
case 2:
|
|
8985
|
+
screen_control = "IO3";
|
|
8986
|
+
break;
|
|
8987
|
+
case 3:
|
|
8988
|
+
screen_control = "Accelero";
|
|
8989
|
+
break;
|
|
8990
|
+
case 4:
|
|
8991
|
+
screen_control = "Magneto";
|
|
8745
8992
|
break;
|
|
8746
8993
|
}
|
|
8747
8994
|
return {
|
|
8748
8995
|
'firmware': frame[2],
|
|
8749
|
-
'accelerometer_threshold': (frame[16]* 32) + "mg",
|
|
8750
|
-
'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
|
|
8996
|
+
'accelerometer_threshold': (frame[16]* 32) + " mg",
|
|
8997
|
+
'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + " msec",
|
|
8751
8998
|
'accelero_state': frame[19]? "Enabled": "Disabled",
|
|
8752
8999
|
'input_1_active_edge': frame[20]? "Rising": "Falling",
|
|
8753
9000
|
'input_2_active_edge': frame[21]? "Rising": "Falling",
|
|
@@ -8770,13 +9017,16 @@ function sensor_types(parent){
|
|
|
8770
9017
|
String(frame[34]).padStart(2, '0'),
|
|
8771
9018
|
String(frame[35]).padStart(2, '0')
|
|
8772
9019
|
].join(':'),
|
|
8773
|
-
'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
|
|
9020
|
+
'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + " min",
|
|
8774
9021
|
'counter_reset_mode': reset_mode,
|
|
8775
9022
|
'sampling_interval': rtc_sampling_interval,
|
|
8776
9023
|
'acc_odr': acc_odr,
|
|
8777
|
-
'
|
|
8778
|
-
'
|
|
8779
|
-
'
|
|
9024
|
+
'screen_control': screen_control,
|
|
9025
|
+
'screen_on_time': frame[42] + ' sec',
|
|
9026
|
+
'interrupt_timeout': frame[43] + ' msec',
|
|
9027
|
+
'hardware_id': frame.slice(44, 47),
|
|
9028
|
+
'report_rate': frame.slice(47, 51).reduce(msbLsb) + " sec",
|
|
9029
|
+
'tx_life_counter': frame.slice(51, 55).reduce(msbLsb),
|
|
8780
9030
|
'machine_values': {
|
|
8781
9031
|
'firmware': frame[2],
|
|
8782
9032
|
'accelerometer_threshold': frame[16],
|
|
@@ -8795,14 +9045,17 @@ function sensor_types(parent){
|
|
|
8795
9045
|
'counter_reset_mode': frame[38],
|
|
8796
9046
|
'sampling_interval': frame[39],
|
|
8797
9047
|
'acc_odr': frame[40],
|
|
8798
|
-
'
|
|
8799
|
-
'
|
|
8800
|
-
'
|
|
9048
|
+
'screen_control': frame[41],
|
|
9049
|
+
'screen_on_time': frame[42],
|
|
9050
|
+
'interrupt_timeout': frame[43],
|
|
9051
|
+
'hardware_id': frame.slice(44, 47),
|
|
9052
|
+
'report_rate': frame.slice(47, 51),
|
|
9053
|
+
'tx_life_counter': frame.slice(51, 55)
|
|
8801
9054
|
}
|
|
8802
9055
|
}
|
|
8803
|
-
} else if(frame[2]
|
|
9056
|
+
} else if(frame[2] == 16){ // Screen version
|
|
8804
9057
|
let reset_mode = "Disabled";
|
|
8805
|
-
switch(frame[
|
|
9058
|
+
switch(frame[38]){
|
|
8806
9059
|
case 0:
|
|
8807
9060
|
reset_mode = "Disabled";
|
|
8808
9061
|
break;
|
|
@@ -8814,7 +9067,7 @@ function sensor_types(parent){
|
|
|
8814
9067
|
break;
|
|
8815
9068
|
}
|
|
8816
9069
|
let acc_odr = "10Hz";
|
|
8817
|
-
switch(frame[
|
|
9070
|
+
switch(frame[40]){
|
|
8818
9071
|
case 0:
|
|
8819
9072
|
acc_odr = "10Hz";
|
|
8820
9073
|
break;
|
|
@@ -8835,7 +9088,7 @@ function sensor_types(parent){
|
|
|
8835
9088
|
break;
|
|
8836
9089
|
}
|
|
8837
9090
|
let rtc_sampling_interval = "5 seconds";
|
|
8838
|
-
switch(frame[
|
|
9091
|
+
switch(frame[39]){
|
|
8839
9092
|
case 0:
|
|
8840
9093
|
rtc_sampling_interval = "1 minute";
|
|
8841
9094
|
break;
|
|
@@ -8876,97 +9129,217 @@ function sensor_types(parent){
|
|
|
8876
9129
|
rtc_sampling_interval = "30 seconds";
|
|
8877
9130
|
break;
|
|
8878
9131
|
}
|
|
9132
|
+
let screen_control = 0;
|
|
9133
|
+
switch(frame[41]){
|
|
9134
|
+
case 0:
|
|
9135
|
+
screen_control = "IO1";
|
|
9136
|
+
break;
|
|
9137
|
+
case 1:
|
|
9138
|
+
screen_control = "IO2";
|
|
9139
|
+
break;
|
|
9140
|
+
case 2:
|
|
9141
|
+
screen_control = "IO3";
|
|
9142
|
+
break;
|
|
9143
|
+
case 3:
|
|
9144
|
+
screen_control = "Accelero";
|
|
9145
|
+
break;
|
|
9146
|
+
case 4:
|
|
9147
|
+
screen_control = "Magneto";
|
|
9148
|
+
break;
|
|
9149
|
+
}
|
|
8879
9150
|
return {
|
|
8880
9151
|
'firmware': frame[2],
|
|
8881
9152
|
'accelerometer_threshold': (frame[16]* 32) + "mg",
|
|
8882
|
-
'debouncing_timeout': frame
|
|
8883
|
-
'accelero_state': frame[
|
|
8884
|
-
'input_1_active_edge': frame[
|
|
8885
|
-
'input_2_active_edge': frame[
|
|
8886
|
-
'input_3_active_edge': frame[
|
|
8887
|
-
'counter_threshold': frame.slice(
|
|
8888
|
-
'trasnmit_on_change_status': frame[
|
|
9153
|
+
'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
|
|
9154
|
+
'accelero_state': frame[19]? "Enabled": "Disabled",
|
|
9155
|
+
'input_1_active_edge': frame[20]? "Rising": "Falling",
|
|
9156
|
+
'input_2_active_edge': frame[21]? "Rising": "Falling",
|
|
9157
|
+
'input_3_active_edge': frame[22]? "Rising": "Falling",
|
|
9158
|
+
'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
|
|
9159
|
+
'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
|
|
8889
9160
|
'Shift_end_1': [
|
|
8890
|
-
String(frame[
|
|
8891
|
-
String(frame[
|
|
9161
|
+
String(frame[28]).padStart(2, '0'),
|
|
9162
|
+
String(frame[29]).padStart(2, '0')
|
|
8892
9163
|
].join(':'),
|
|
8893
9164
|
'Shift_end_2': [
|
|
8894
|
-
String(frame[
|
|
8895
|
-
String(frame[
|
|
9165
|
+
String(frame[30]).padStart(2, '0'),
|
|
9166
|
+
String(frame[31]).padStart(2, '0')
|
|
8896
9167
|
].join(':'),
|
|
8897
9168
|
'Shift_end_3': [
|
|
8898
|
-
String(frame[
|
|
8899
|
-
String(frame[
|
|
9169
|
+
String(frame[32]).padStart(2, '0'),
|
|
9170
|
+
String(frame[33]).padStart(2, '0')
|
|
8900
9171
|
].join(':'),
|
|
8901
9172
|
'Shift_end_4': [
|
|
8902
|
-
String(frame[
|
|
8903
|
-
String(frame[
|
|
9173
|
+
String(frame[34]).padStart(2, '0'),
|
|
9174
|
+
String(frame[35]).padStart(2, '0')
|
|
8904
9175
|
].join(':'),
|
|
8905
|
-
'reset_timeout': frame.slice(
|
|
9176
|
+
'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
|
|
8906
9177
|
'counter_reset_mode': reset_mode,
|
|
8907
9178
|
'sampling_interval': rtc_sampling_interval,
|
|
8908
9179
|
'acc_odr': acc_odr,
|
|
8909
|
-
'
|
|
8910
|
-
'
|
|
8911
|
-
'
|
|
9180
|
+
'screen_control': screen_control,
|
|
9181
|
+
'screen_on_time': frame[42] + 'sec',
|
|
9182
|
+
'hardware_id': frame.slice(43, 46),
|
|
9183
|
+
'report_rate': frame.slice(46, 50).reduce(msbLsb) + "sec",
|
|
9184
|
+
'tx_life_counter': frame.slice(50, 54).reduce(msbLsb),
|
|
8912
9185
|
'machine_values': {
|
|
8913
9186
|
'firmware': frame[2],
|
|
8914
9187
|
'accelerometer_threshold': frame[16],
|
|
8915
|
-
'debouncing_timeout': frame
|
|
8916
|
-
'accelero_state': frame[
|
|
8917
|
-
'input_1_active_edge': frame[
|
|
8918
|
-
'input_2_active_edge': frame[
|
|
8919
|
-
'input_3_active_edge': frame[
|
|
8920
|
-
'counter_threshold': frame.slice(
|
|
8921
|
-
'trasnmit_on_change_status': frame[
|
|
8922
|
-
'Shift_end_1': frame.slice(
|
|
8923
|
-
'Shift_end_2': frame.slice(
|
|
8924
|
-
'Shift_end_3': frame.slice(
|
|
8925
|
-
'Shift_end_4': frame.slice(
|
|
8926
|
-
'reset_timeout': frame.slice(
|
|
8927
|
-
'counter_reset_mode': frame[
|
|
8928
|
-
'sampling_interval': frame[
|
|
8929
|
-
'acc_odr': frame[
|
|
8930
|
-
'
|
|
8931
|
-
'
|
|
8932
|
-
'
|
|
8933
|
-
|
|
8934
|
-
|
|
8935
|
-
|
|
8936
|
-
|
|
8937
|
-
|
|
8938
|
-
|
|
8939
|
-
|
|
8940
|
-
|
|
8941
|
-
|
|
8942
|
-
|
|
8943
|
-
|
|
8944
|
-
|
|
8945
|
-
|
|
8946
|
-
|
|
8947
|
-
|
|
9188
|
+
'debouncing_timeout': frame.slice(17, 19),
|
|
9189
|
+
'accelero_state': frame[19],
|
|
9190
|
+
'input_1_active_edge': frame[20],
|
|
9191
|
+
'input_2_active_edge': frame[21],
|
|
9192
|
+
'input_3_active_edge': frame[22],
|
|
9193
|
+
'counter_threshold': frame.slice(23, 27),
|
|
9194
|
+
'trasnmit_on_change_status': frame[27],
|
|
9195
|
+
'Shift_end_1': frame.slice(28, 30),
|
|
9196
|
+
'Shift_end_2': frame.slice(30, 32),
|
|
9197
|
+
'Shift_end_3': frame.slice(32, 34),
|
|
9198
|
+
'Shift_end_4': frame.slice(34, 36),
|
|
9199
|
+
'reset_timeout': frame.slice(36, 38),
|
|
9200
|
+
'counter_reset_mode': frame[38],
|
|
9201
|
+
'sampling_interval': frame[39],
|
|
9202
|
+
'acc_odr': frame[40],
|
|
9203
|
+
'screen_control': frame[41],
|
|
9204
|
+
'screen_on_time': frame[42],
|
|
9205
|
+
'hardware_id': frame.slice(43, 46),
|
|
9206
|
+
'report_rate': frame.slice(46, 50),
|
|
9207
|
+
'tx_life_counter': frame.slice(50, 54)
|
|
9208
|
+
}
|
|
9209
|
+
}
|
|
9210
|
+
} else if(frame[2] > 9){ // firmware 10 11 12 13 14 15
|
|
9211
|
+
let reset_mode = "Disabled";
|
|
9212
|
+
switch(frame[38]){
|
|
9213
|
+
case 0:
|
|
9214
|
+
reset_mode = "Disabled";
|
|
9215
|
+
break;
|
|
9216
|
+
case 1:
|
|
9217
|
+
reset_mode = "Shift Ends";
|
|
9218
|
+
break;
|
|
9219
|
+
case 2:
|
|
9220
|
+
reset_mode = "Timeout";
|
|
9221
|
+
break;
|
|
9222
|
+
}
|
|
9223
|
+
let acc_odr = "10Hz";
|
|
9224
|
+
switch(frame[40]){
|
|
9225
|
+
case 0:
|
|
9226
|
+
acc_odr = "10Hz";
|
|
9227
|
+
break;
|
|
9228
|
+
case 1:
|
|
9229
|
+
acc_odr = "20Hz";
|
|
9230
|
+
break;
|
|
9231
|
+
case 2:
|
|
9232
|
+
acc_odr = "50Hz";
|
|
9233
|
+
break;
|
|
9234
|
+
case 3:
|
|
9235
|
+
acc_odr = "100Hz";
|
|
9236
|
+
break;
|
|
9237
|
+
case 4:
|
|
9238
|
+
acc_odr = "200Hz";
|
|
9239
|
+
break;
|
|
9240
|
+
case 5:
|
|
9241
|
+
acc_odr = "400Hz";
|
|
9242
|
+
break;
|
|
9243
|
+
}
|
|
9244
|
+
let rtc_sampling_interval = "5 seconds";
|
|
9245
|
+
switch(frame[39]){
|
|
9246
|
+
case 0:
|
|
9247
|
+
rtc_sampling_interval = "1 minute";
|
|
9248
|
+
break;
|
|
9249
|
+
case 1:
|
|
9250
|
+
rtc_sampling_interval = "5 minutes";
|
|
9251
|
+
break;
|
|
9252
|
+
case 2:
|
|
9253
|
+
rtc_sampling_interval = "15 minutes";
|
|
9254
|
+
break;
|
|
9255
|
+
case 3:
|
|
9256
|
+
rtc_sampling_interval = "30 minutes";
|
|
9257
|
+
break;
|
|
9258
|
+
case 4:
|
|
9259
|
+
rtc_sampling_interval = "1 hour";
|
|
9260
|
+
break;
|
|
9261
|
+
case 5:
|
|
9262
|
+
rtc_sampling_interval = "2 hours";
|
|
9263
|
+
break;
|
|
9264
|
+
case 6:
|
|
9265
|
+
rtc_sampling_interval = "3 hours";
|
|
9266
|
+
break;
|
|
9267
|
+
case 7:
|
|
9268
|
+
rtc_sampling_interval = "6 hours";
|
|
9269
|
+
break;
|
|
9270
|
+
case 8:
|
|
9271
|
+
rtc_sampling_interval = "12 hours";
|
|
9272
|
+
break;
|
|
9273
|
+
case 9:
|
|
9274
|
+
rtc_sampling_interval = "5 seconds";
|
|
9275
|
+
break;
|
|
9276
|
+
case 10:
|
|
9277
|
+
rtc_sampling_interval = "10 seconds";
|
|
9278
|
+
break;
|
|
9279
|
+
case 11:
|
|
9280
|
+
rtc_sampling_interval = "15 seconds";
|
|
9281
|
+
break;
|
|
9282
|
+
case 12:
|
|
9283
|
+
rtc_sampling_interval = "30 seconds";
|
|
9284
|
+
break;
|
|
9285
|
+
}
|
|
9286
|
+
return {
|
|
9287
|
+
'firmware': frame[2],
|
|
9288
|
+
'accelerometer_threshold': (frame[16]* 32) + "mg",
|
|
9289
|
+
'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + "msec",
|
|
9290
|
+
'accelero_state': frame[19]? "Enabled": "Disabled",
|
|
9291
|
+
'input_1_active_edge': frame[20]? "Rising": "Falling",
|
|
9292
|
+
'input_2_active_edge': frame[21]? "Rising": "Falling",
|
|
9293
|
+
'input_3_active_edge': frame[22]? "Rising": "Falling",
|
|
9294
|
+
'counter_threshold': frame.slice(23, 27).reduce(msbLsb),
|
|
9295
|
+
'trasnmit_on_change_status': frame[27]? "Enabled": "Disabled",
|
|
9296
|
+
'Shift_end_1': [
|
|
9297
|
+
String(frame[28]).padStart(2, '0'),
|
|
9298
|
+
String(frame[29]).padStart(2, '0')
|
|
9299
|
+
].join(':'),
|
|
9300
|
+
'Shift_end_2': [
|
|
9301
|
+
String(frame[30]).padStart(2, '0'),
|
|
9302
|
+
String(frame[31]).padStart(2, '0')
|
|
9303
|
+
].join(':'),
|
|
9304
|
+
'Shift_end_3': [
|
|
9305
|
+
String(frame[32]).padStart(2, '0'),
|
|
9306
|
+
String(frame[33]).padStart(2, '0')
|
|
9307
|
+
].join(':'),
|
|
9308
|
+
'Shift_end_4': [
|
|
9309
|
+
String(frame[34]).padStart(2, '0'),
|
|
9310
|
+
String(frame[35]).padStart(2, '0')
|
|
9311
|
+
].join(':'),
|
|
9312
|
+
'reset_timeout': frame.slice(36, 38).reduce(msbLsb) + "min",
|
|
9313
|
+
'counter_reset_mode': reset_mode,
|
|
9314
|
+
'sampling_interval': rtc_sampling_interval,
|
|
9315
|
+
'acc_odr': acc_odr,
|
|
9316
|
+
'hardware_id': frame.slice(41, 44),
|
|
9317
|
+
'report_rate': frame.slice(44, 48).reduce(msbLsb) + "sec",
|
|
9318
|
+
'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
|
|
9319
|
+
'machine_values': {
|
|
9320
|
+
'firmware': frame[2],
|
|
8948
9321
|
'accelerometer_threshold': frame[16],
|
|
8949
|
-
'debouncing_timeout': frame
|
|
8950
|
-
'
|
|
8951
|
-
'
|
|
8952
|
-
'
|
|
8953
|
-
'
|
|
9322
|
+
'debouncing_timeout': frame.slice(17, 19),
|
|
9323
|
+
'accelero_state': frame[19],
|
|
9324
|
+
'input_1_active_edge': frame[20],
|
|
9325
|
+
'input_2_active_edge': frame[21],
|
|
9326
|
+
'input_3_active_edge': frame[22],
|
|
9327
|
+
'counter_threshold': frame.slice(23, 27),
|
|
9328
|
+
'trasnmit_on_change_status': frame[27],
|
|
9329
|
+
'Shift_end_1': frame.slice(28, 30),
|
|
9330
|
+
'Shift_end_2': frame.slice(30, 32),
|
|
9331
|
+
'Shift_end_3': frame.slice(32, 34),
|
|
9332
|
+
'Shift_end_4': frame.slice(34, 36),
|
|
9333
|
+
'reset_timeout': frame.slice(36, 38),
|
|
9334
|
+
'counter_reset_mode': frame[38],
|
|
9335
|
+
'sampling_interval': frame[39],
|
|
9336
|
+
'acc_odr': frame[40],
|
|
9337
|
+
'hardware_id': frame.slice(41, 44),
|
|
9338
|
+
'report_rate': frame.slice(44, 48),
|
|
9339
|
+
'tx_life_counter': frame.slice(48, 52)
|
|
8954
9340
|
}
|
|
8955
9341
|
}
|
|
8956
|
-
}
|
|
8957
|
-
}
|
|
8958
|
-
},
|
|
8959
|
-
'109': {
|
|
8960
|
-
name: 'Wireless Custom Solar Sensor',
|
|
8961
|
-
parse: (d) => {
|
|
8962
|
-
return {
|
|
8963
|
-
illuminance: d.slice(0, 4).reduce(msbLsb),
|
|
8964
|
-
total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
|
|
8965
|
-
ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
|
|
8966
|
-
};
|
|
8967
|
-
},
|
|
8968
|
-
'parse_fly': (frame) => {
|
|
8969
|
-
if(frame[2] > 8){
|
|
9342
|
+
} else if(frame[2] > 8){
|
|
8970
9343
|
let reset_mode = "Disabled";
|
|
8971
9344
|
switch(frame[37]){
|
|
8972
9345
|
case 0:
|
|
@@ -9045,12 +9418,12 @@ function sensor_types(parent){
|
|
|
9045
9418
|
return {
|
|
9046
9419
|
'firmware': frame[2],
|
|
9047
9420
|
'accelerometer_threshold': (frame[16]* 32) + "mg",
|
|
9048
|
-
'debouncing_timeout': frame[17] + "
|
|
9421
|
+
'debouncing_timeout': frame[17] + "msec",
|
|
9049
9422
|
'accelero_state': frame[18]? "Enabled": "Disabled",
|
|
9050
9423
|
'input_1_active_edge': frame[19]? "Rising": "Falling",
|
|
9051
9424
|
'input_2_active_edge': frame[20]? "Rising": "Falling",
|
|
9052
9425
|
'input_3_active_edge': frame[21]? "Rising": "Falling",
|
|
9053
|
-
'counter_threshold': frame.slice(22, 26).reduce(msbLsb)
|
|
9426
|
+
'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
|
|
9054
9427
|
'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
|
|
9055
9428
|
'Shift_end_1': [
|
|
9056
9429
|
String(frame[27]).padStart(2, '0'),
|
|
@@ -9102,11 +9475,11 @@ function sensor_types(parent){
|
|
|
9102
9475
|
return {
|
|
9103
9476
|
'firmware': frame[2],
|
|
9104
9477
|
'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
|
|
9105
|
-
'accelerometer_threshold': (frame[16]* 32)
|
|
9106
|
-
'debouncing_timeout': frame[17].toString() + "
|
|
9478
|
+
'accelerometer_threshold': (frame[16]* 32) + "mg.",
|
|
9479
|
+
'debouncing_timeout': frame[17].toString() + "msec.",
|
|
9107
9480
|
'accelero_state': frame[18],
|
|
9108
9481
|
'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
|
|
9109
|
-
'counter_threshold': frame.slice(22, 26).reduce(msbLsb)
|
|
9482
|
+
'counter_threshold': frame.slice(22, 26).reduce(msbLsb),
|
|
9110
9483
|
'trasnmit_on_change_status': frame[26],
|
|
9111
9484
|
'machine_values': {
|
|
9112
9485
|
'firmware': frame[2],
|
|
@@ -9132,74 +9505,240 @@ function sensor_types(parent){
|
|
|
9132
9505
|
};
|
|
9133
9506
|
},
|
|
9134
9507
|
'parse_fly': (frame) => {
|
|
9135
|
-
|
|
9136
|
-
|
|
9137
|
-
|
|
9138
|
-
|
|
9139
|
-
|
|
9140
|
-
|
|
9141
|
-
|
|
9142
|
-
|
|
9143
|
-
|
|
9144
|
-
|
|
9508
|
+
if(frame[2] > 8){
|
|
9509
|
+
let reset_mode = "Disabled";
|
|
9510
|
+
switch(frame[37]){
|
|
9511
|
+
case 0:
|
|
9512
|
+
reset_mode = "Disabled";
|
|
9513
|
+
break;
|
|
9514
|
+
case 1:
|
|
9515
|
+
reset_mode = "Shift Ends";
|
|
9516
|
+
break;
|
|
9517
|
+
case 2:
|
|
9518
|
+
reset_mode = "Timeout";
|
|
9519
|
+
break;
|
|
9145
9520
|
}
|
|
9146
|
-
|
|
9147
|
-
|
|
9148
|
-
|
|
9149
|
-
|
|
9150
|
-
|
|
9151
|
-
|
|
9152
|
-
|
|
9153
|
-
|
|
9154
|
-
|
|
9155
|
-
|
|
9156
|
-
|
|
9157
|
-
|
|
9158
|
-
|
|
9159
|
-
|
|
9160
|
-
|
|
9161
|
-
|
|
9162
|
-
|
|
9163
|
-
|
|
9164
|
-
|
|
9165
|
-
|
|
9166
|
-
|
|
9167
|
-
|
|
9168
|
-
|
|
9169
|
-
|
|
9170
|
-
|
|
9171
|
-
|
|
9172
|
-
|
|
9173
|
-
|
|
9174
|
-
|
|
9175
|
-
|
|
9176
|
-
|
|
9177
|
-
|
|
9178
|
-
|
|
9179
|
-
|
|
9180
|
-
|
|
9181
|
-
|
|
9182
|
-
|
|
9183
|
-
|
|
9184
|
-
|
|
9185
|
-
|
|
9186
|
-
|
|
9187
|
-
|
|
9188
|
-
|
|
9189
|
-
|
|
9190
|
-
|
|
9191
|
-
|
|
9192
|
-
|
|
9193
|
-
|
|
9194
|
-
|
|
9195
|
-
|
|
9196
|
-
|
|
9197
|
-
|
|
9198
|
-
|
|
9199
|
-
|
|
9200
|
-
|
|
9201
|
-
|
|
9202
|
-
|
|
9521
|
+
let acc_odr = "10Hz";
|
|
9522
|
+
switch(frame[39]){
|
|
9523
|
+
case 0:
|
|
9524
|
+
acc_odr = "10Hz";
|
|
9525
|
+
break;
|
|
9526
|
+
case 1:
|
|
9527
|
+
acc_odr = "20Hz";
|
|
9528
|
+
break;
|
|
9529
|
+
case 2:
|
|
9530
|
+
acc_odr = "50Hz";
|
|
9531
|
+
break;
|
|
9532
|
+
case 3:
|
|
9533
|
+
acc_odr = "100Hz";
|
|
9534
|
+
break;
|
|
9535
|
+
case 4:
|
|
9536
|
+
acc_odr = "200Hz";
|
|
9537
|
+
break;
|
|
9538
|
+
case 5:
|
|
9539
|
+
acc_odr = "400Hz";
|
|
9540
|
+
break;
|
|
9541
|
+
}
|
|
9542
|
+
let rtc_sampling_interval = "5 seconds";
|
|
9543
|
+
switch(frame[38]){
|
|
9544
|
+
case 0:
|
|
9545
|
+
rtc_sampling_interval = "1 minute";
|
|
9546
|
+
break;
|
|
9547
|
+
case 1:
|
|
9548
|
+
rtc_sampling_interval = "5 minutes";
|
|
9549
|
+
break;
|
|
9550
|
+
case 2:
|
|
9551
|
+
rtc_sampling_interval = "15 minutes";
|
|
9552
|
+
break;
|
|
9553
|
+
case 3:
|
|
9554
|
+
rtc_sampling_interval = "30 minutes";
|
|
9555
|
+
break;
|
|
9556
|
+
case 4:
|
|
9557
|
+
rtc_sampling_interval = "1 hour";
|
|
9558
|
+
break;
|
|
9559
|
+
case 5:
|
|
9560
|
+
rtc_sampling_interval = "2 hours";
|
|
9561
|
+
break;
|
|
9562
|
+
case 6:
|
|
9563
|
+
rtc_sampling_interval = "3 hours";
|
|
9564
|
+
break;
|
|
9565
|
+
case 7:
|
|
9566
|
+
rtc_sampling_interval = "6 hours";
|
|
9567
|
+
break;
|
|
9568
|
+
case 8:
|
|
9569
|
+
rtc_sampling_interval = "12 hours";
|
|
9570
|
+
break;
|
|
9571
|
+
case 9:
|
|
9572
|
+
rtc_sampling_interval = "5 seconds";
|
|
9573
|
+
break;
|
|
9574
|
+
case 10:
|
|
9575
|
+
rtc_sampling_interval = "10 seconds";
|
|
9576
|
+
break;
|
|
9577
|
+
case 11:
|
|
9578
|
+
rtc_sampling_interval = "15 seconds";
|
|
9579
|
+
break;
|
|
9580
|
+
case 12:
|
|
9581
|
+
rtc_sampling_interval = "30 seconds";
|
|
9582
|
+
break;
|
|
9583
|
+
}
|
|
9584
|
+
return {
|
|
9585
|
+
'firmware': frame[2],
|
|
9586
|
+
'accelerometer_threshold': (frame[16]* 32) + "mg",
|
|
9587
|
+
'debouncing_timeout': frame[17] + "sec",
|
|
9588
|
+
'accelero_state': frame[18]? "Enabled": "Disabled",
|
|
9589
|
+
'input_1_active_edge': frame[19]? "Rising": "Falling",
|
|
9590
|
+
'input_2_active_edge': frame[20]? "Rising": "Falling",
|
|
9591
|
+
'input_3_active_edge': frame[21]? "Rising": "Falling",
|
|
9592
|
+
'counter_threshold': frame.slice(22, 26).reduce(msbLsb) + "sec",
|
|
9593
|
+
'trasnmit_on_change_status': frame[26]? "Enabled": "Disabled",
|
|
9594
|
+
'Shift_end_1': [
|
|
9595
|
+
String(frame[27]).padStart(2, '0'),
|
|
9596
|
+
String(frame[28]).padStart(2, '0')
|
|
9597
|
+
].join(':'),
|
|
9598
|
+
'Shift_end_2': [
|
|
9599
|
+
String(frame[29]).padStart(2, '0'),
|
|
9600
|
+
String(frame[30]).padStart(2, '0')
|
|
9601
|
+
].join(':'),
|
|
9602
|
+
'Shift_end_3': [
|
|
9603
|
+
String(frame[31]).padStart(2, '0'),
|
|
9604
|
+
String(frame[32]).padStart(2, '0')
|
|
9605
|
+
].join(':'),
|
|
9606
|
+
'Shift_end_4': [
|
|
9607
|
+
String(frame[33]).padStart(2, '0'),
|
|
9608
|
+
String(frame[34]).padStart(2, '0')
|
|
9609
|
+
].join(':'),
|
|
9610
|
+
'reset_timeout': frame.slice(35, 37).reduce(msbLsb) + "min",
|
|
9611
|
+
'counter_reset_mode': reset_mode,
|
|
9612
|
+
'sampling_interval': rtc_sampling_interval,
|
|
9613
|
+
'acc_odr': acc_odr,
|
|
9614
|
+
'hardware_id': frame.slice(40, 43),
|
|
9615
|
+
'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
|
|
9616
|
+
'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
|
|
9617
|
+
'machine_values': {
|
|
9618
|
+
'firmware': frame[2],
|
|
9619
|
+
'accelerometer_threshold': frame[16],
|
|
9620
|
+
'debouncing_timeout': frame[17],
|
|
9621
|
+
'accelero_state': frame[18],
|
|
9622
|
+
'input_1_active_edge': frame[19],
|
|
9623
|
+
'input_2_active_edge': frame[20],
|
|
9624
|
+
'input_3_active_edge': frame[21],
|
|
9625
|
+
'counter_threshold': frame.slice(22, 26),
|
|
9626
|
+
'trasnmit_on_change_status': frame[26],
|
|
9627
|
+
'Shift_end_1': frame.slice(27, 29),
|
|
9628
|
+
'Shift_end_2': frame.slice(29, 31),
|
|
9629
|
+
'Shift_end_3': frame.slice(31, 33),
|
|
9630
|
+
'Shift_end_4': frame.slice(33, 35),
|
|
9631
|
+
'reset_timeout': frame.slice(35, 37),
|
|
9632
|
+
'counter_reset_mode': frame[37],
|
|
9633
|
+
'sampling_interval': frame[38],
|
|
9634
|
+
'acc_odr': frame[39],
|
|
9635
|
+
'hardware_id': frame.slice(40, 43),
|
|
9636
|
+
'report_rate': frame.slice(43, 47),
|
|
9637
|
+
'tx_life_counter': frame.slice(47, 51)
|
|
9638
|
+
}
|
|
9639
|
+
}
|
|
9640
|
+
} else{
|
|
9641
|
+
return {
|
|
9642
|
+
'firmware': frame[2],
|
|
9643
|
+
'report_rate': frame.slice(12, 16).reduce(msbLsb).toString() + "sec.",
|
|
9644
|
+
'accelerometer_threshold': (frame[16]* 32).toString() + "mg.",
|
|
9645
|
+
'debouncing_timeout': frame[17].toString() + "sec.",
|
|
9646
|
+
'accelero_state': frame[18],
|
|
9647
|
+
'digital_inputs_active_edge': frame.slice(19, 22).reduce(msbLsb),
|
|
9648
|
+
'counter_threshold': frame.slice(22, 26).reduce(msbLsb).toString() + "sec.",
|
|
9649
|
+
'trasnmit_on_change_status': frame[26],
|
|
9650
|
+
'machine_values': {
|
|
9651
|
+
'firmware': frame[2],
|
|
9652
|
+
'report_rate': frame.slice(12, 16),
|
|
9653
|
+
'accelerometer_threshold': frame[16],
|
|
9654
|
+
'debouncing_timeout': frame[17],
|
|
9655
|
+
'accelero_active_state': frame[18],
|
|
9656
|
+
'digital_inputs_active_edge': frame.slice(19, 22),
|
|
9657
|
+
'counter_threshold': frame.slice(22, 26),
|
|
9658
|
+
'trasnmit_on_change_status': frame[26]
|
|
9659
|
+
}
|
|
9660
|
+
}
|
|
9661
|
+
}
|
|
9662
|
+
}
|
|
9663
|
+
},
|
|
9664
|
+
'109': {
|
|
9665
|
+
name: 'Wireless Custom Solar Sensor',
|
|
9666
|
+
parse: (d) => {
|
|
9667
|
+
return {
|
|
9668
|
+
illuminance: d.slice(0, 4).reduce(msbLsb),
|
|
9669
|
+
total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
|
|
9670
|
+
ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
|
|
9671
|
+
};
|
|
9672
|
+
},
|
|
9673
|
+
'parse_fly': (frame) => {
|
|
9674
|
+
return {
|
|
9675
|
+
'firmware': frame[2],
|
|
9676
|
+
'hardware_id': frame.slice(12, 15),
|
|
9677
|
+
'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
|
|
9678
|
+
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
|
|
9679
|
+
'machine_values': {
|
|
9680
|
+
'firmware': frame[2],
|
|
9681
|
+
'hardware_id': frame.slice(12, 15),
|
|
9682
|
+
'sample_rate': frame.slice(15, 19).reduce(msbLsb),
|
|
9683
|
+
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb)
|
|
9684
|
+
}
|
|
9685
|
+
}
|
|
9686
|
+
}
|
|
9687
|
+
},
|
|
9688
|
+
'110': {
|
|
9689
|
+
name: 'One Channel Vibration Plus v4',
|
|
9690
|
+
parse: (payload, parsed, mac) => {
|
|
9691
|
+
if(payload[7] & 2){
|
|
9692
|
+
console.log('Error found');
|
|
9693
|
+
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
9694
|
+
return parsed;
|
|
9695
|
+
}
|
|
9696
|
+
let msg_type = (payload[7] & 16)? 'motion' : 'regular';
|
|
9697
|
+
if(payload[8] === 1){
|
|
9698
|
+
var deviceAddr = mac;
|
|
9699
|
+
var firmware = payload[1];
|
|
9700
|
+
var hour = payload[12];
|
|
9701
|
+
var minute = payload[13];
|
|
9702
|
+
var expected_packets = msbLsb(payload[16], payload[17]);
|
|
9703
|
+
var current_packet = msbLsb(payload[18], payload[19]);
|
|
9704
|
+
var sdata_start = 20;
|
|
9705
|
+
|
|
9706
|
+
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
9707
|
+
if(expected_packets != 1){
|
|
9708
|
+
// 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
|
|
9709
|
+
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet)-1) in globalDevices[deviceAddr].data)) {
|
|
9710
|
+
console.log('-----');
|
|
9711
|
+
console.log('bad packet breakdown deleting stream');
|
|
9712
|
+
console.log(current_packet);
|
|
9713
|
+
console.log(expected_packets);
|
|
9714
|
+
console.log(current_packet in globalDevices[deviceAddr].data);
|
|
9715
|
+
console.log(current_packet == 1);
|
|
9716
|
+
console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
|
|
9717
|
+
if(this.hasOwnProperty('failure_no')){
|
|
9718
|
+
this.failure_no = this.failure_no + 1;
|
|
9719
|
+
}
|
|
9720
|
+
else{
|
|
9721
|
+
this.failure_no = 1;
|
|
9722
|
+
}
|
|
9723
|
+
if(this.hasOwnProperty('failure_no')){
|
|
9724
|
+
console.log('####falure no');
|
|
9725
|
+
console.log(this.failure_no);
|
|
9726
|
+
}
|
|
9727
|
+
// console.log(globalDevices[deviceAddr].data);
|
|
9728
|
+
delete globalDevices[deviceAddr];
|
|
9729
|
+
if(current_packet != 1){
|
|
9730
|
+
return;
|
|
9731
|
+
} else{
|
|
9732
|
+
|
|
9733
|
+
var mode = payload[8];
|
|
9734
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
9735
|
+
var fsr = payload[11] >> 5;
|
|
9736
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
9737
|
+
|
|
9738
|
+
globalDevices[deviceAddr] = {
|
|
9739
|
+
// stream_size: expected_packets,
|
|
9740
|
+
data: {},
|
|
9741
|
+
odr: odr,
|
|
9203
9742
|
mo: mode,
|
|
9204
9743
|
fsr: fsr,
|
|
9205
9744
|
hour: hour,
|
|
@@ -12128,10 +12667,10 @@ function sensor_types(parent){
|
|
|
12128
12667
|
name: 'Dual Pressure and Temperature Sensor',
|
|
12129
12668
|
parse: (d) => {
|
|
12130
12669
|
return{
|
|
12131
|
-
pressure_s1: signInt(d.slice(0, 4).reduce(msbLsb))
|
|
12132
|
-
temperature_s1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
|
|
12133
|
-
pressure_s2: signInt(d.slice(6, 10).reduce(msbLsb))
|
|
12134
|
-
temperature_s2: signInt(d.slice(10, 12).reduce(msbLsb))/100
|
|
12670
|
+
pressure_s1: signInt(d.slice(0, 4).reduce(msbLsb),16)/100,
|
|
12671
|
+
temperature_s1: signInt(d.slice(4, 6).reduce(msbLsb),16)/100,
|
|
12672
|
+
pressure_s2: signInt(d.slice(6, 10).reduce(msbLsb),16)/100,
|
|
12673
|
+
temperature_s2: signInt(d.slice(10, 12).reduce(msbLsb),16)/100
|
|
12135
12674
|
};
|
|
12136
12675
|
},
|
|
12137
12676
|
'parse_fly': (frame) => {
|
|
@@ -12207,35 +12746,308 @@ function sensor_types(parent){
|
|
|
12207
12746
|
}
|
|
12208
12747
|
}
|
|
12209
12748
|
},
|
|
12210
|
-
'
|
|
12211
|
-
name: 'Wireless
|
|
12212
|
-
parse: (d) => {
|
|
12213
|
-
|
|
12214
|
-
|
|
12215
|
-
|
|
12216
|
-
|
|
12217
|
-
|
|
12218
|
-
|
|
12219
|
-
'parse_fly': (frame) => {
|
|
12220
|
-
return {
|
|
12221
|
-
'firmware': frame[2],
|
|
12222
|
-
'h2s_threshold': frame[12],
|
|
12223
|
-
'always_on_status': frame[13],
|
|
12224
|
-
'hardware_id': frame.slice(14, 17),
|
|
12225
|
-
'sample_rate': frame.slice(17, 21).reduce(msbLsb) + " Sec.",
|
|
12226
|
-
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
|
|
12227
|
-
'machine_values': {
|
|
12228
|
-
'firmware': frame[2],
|
|
12229
|
-
'h2s threshold': frame[12],
|
|
12230
|
-
'always_on_status': frame[13],
|
|
12231
|
-
'hardware_id': frame.slice(14, 17),
|
|
12232
|
-
'sample_rate': frame.slice(17, 21).reduce(msbLsb),
|
|
12233
|
-
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
|
|
12234
|
-
}
|
|
12749
|
+
'119': {
|
|
12750
|
+
name: 'Wireless Machine Run Time Hour Meter',
|
|
12751
|
+
parse: (d, payload) => {
|
|
12752
|
+
let firmware = payload[1];
|
|
12753
|
+
if(payload[7] & 2 != 0){
|
|
12754
|
+
console.log('Error found');
|
|
12755
|
+
// parsed.data = {error: 'Error found, Acclerometer Probe may be unattached'};
|
|
12756
|
+
let error = {error: 'Error found, Acclerometer Probe may be unattached'};
|
|
12757
|
+
return error;
|
|
12235
12758
|
}
|
|
12236
|
-
|
|
12237
|
-
|
|
12238
|
-
|
|
12759
|
+
let report_type = "Regular";
|
|
12760
|
+
switch(d[17]){
|
|
12761
|
+
case 0:
|
|
12762
|
+
report_type = "Regular";
|
|
12763
|
+
break;
|
|
12764
|
+
case 1:
|
|
12765
|
+
report_type = "Shift end";
|
|
12766
|
+
break;
|
|
12767
|
+
case 2:
|
|
12768
|
+
report_type = "Interrupt";
|
|
12769
|
+
break;
|
|
12770
|
+
case 3:
|
|
12771
|
+
report_type = "Threshold";
|
|
12772
|
+
break;
|
|
12773
|
+
}
|
|
12774
|
+
if ((payload[7] & 4) != 0) {
|
|
12775
|
+
return {
|
|
12776
|
+
raw_data: "Enabled",
|
|
12777
|
+
accelerometer_counter: d.slice(0, 4).reduce(msbLsb),
|
|
12778
|
+
accelerometer_uptime: d.slice(4, 8).reduce(msbLsb),
|
|
12779
|
+
magnetometer_counter: d.slice(8, 12).reduce(msbLsb),
|
|
12780
|
+
magnetometer_uptime: d.slice(12, 16).reduce(msbLsb),
|
|
12781
|
+
input_acc: d[16] & 8 ? 1 : 0,
|
|
12782
|
+
input_mag: d[16] & 16 ? 1 : 0,
|
|
12783
|
+
report_type: report_type,
|
|
12784
|
+
rtc: [
|
|
12785
|
+
String(d[18]).padStart(2, '0'),
|
|
12786
|
+
String(d[19]).padStart(2, '0'),
|
|
12787
|
+
String(d[20]).padStart(2, '0')
|
|
12788
|
+
].join(':'),
|
|
12789
|
+
'temperature': d.slice(21, 23).reduce(msbLsb)/100,
|
|
12790
|
+
'accelero_sample_1':{
|
|
12791
|
+
x:[signInt(d.slice(23, 25).reduce(msbLsb),16)/100],
|
|
12792
|
+
y:[signInt(d.slice(25, 27).reduce(msbLsb),16)/100],
|
|
12793
|
+
z:[signInt(d.slice(27, 29).reduce(msbLsb),16)/100]
|
|
12794
|
+
},
|
|
12795
|
+
'accelero_sample_2':{
|
|
12796
|
+
x:[signInt(d.slice(29, 31).reduce(msbLsb),16)/100],
|
|
12797
|
+
y:[signInt(d.slice(31, 33).reduce(msbLsb),16)/100],
|
|
12798
|
+
z:[signInt(d.slice(33, 35).reduce(msbLsb),16)/100]
|
|
12799
|
+
},
|
|
12800
|
+
'accelero_sample_3':{
|
|
12801
|
+
x:[signInt(d.slice(35, 37).reduce(msbLsb),16)/100],
|
|
12802
|
+
y:[signInt(d.slice(37, 39).reduce(msbLsb),16)/100],
|
|
12803
|
+
z:[signInt(d.slice(39, 41).reduce(msbLsb),16)/100]
|
|
12804
|
+
},
|
|
12805
|
+
'accelero_sample_4':{
|
|
12806
|
+
x:[signInt(d.slice(41, 43).reduce(msbLsb),16)/100],
|
|
12807
|
+
y:[signInt(d.slice(43, 45).reduce(msbLsb),16)/100],
|
|
12808
|
+
z:[signInt(d.slice(45, 47).reduce(msbLsb),16)/100]
|
|
12809
|
+
},
|
|
12810
|
+
'accelero_sample_5':{
|
|
12811
|
+
x:[signInt(d.slice(47, 49).reduce(msbLsb),16)/100],
|
|
12812
|
+
y:[signInt(d.slice(49, 51).reduce(msbLsb),16)/100],
|
|
12813
|
+
z:[signInt(d.slice(51, 53).reduce(msbLsb),16)/100]
|
|
12814
|
+
},
|
|
12815
|
+
'accelero_sample_6':{
|
|
12816
|
+
x:[signInt(d.slice(53, 55).reduce(msbLsb),16)/100],
|
|
12817
|
+
y:[signInt(d.slice(55, 57).reduce(msbLsb),16)/100],
|
|
12818
|
+
z:[signInt(d.slice(57, 59).reduce(msbLsb),16)/100]
|
|
12819
|
+
},
|
|
12820
|
+
'accelero_sample_7':{
|
|
12821
|
+
x:[signInt(d.slice(59, 61).reduce(msbLsb),16)/100],
|
|
12822
|
+
y:[signInt(d.slice(61, 63).reduce(msbLsb),16)/100],
|
|
12823
|
+
z:[signInt(d.slice(63, 65).reduce(msbLsb),16)/100]
|
|
12824
|
+
},
|
|
12825
|
+
'accelero_sample_8':{
|
|
12826
|
+
x:[signInt(d.slice(65, 67).reduce(msbLsb),16)/100],
|
|
12827
|
+
y:[signInt(d.slice(67, 69).reduce(msbLsb),16)/100],
|
|
12828
|
+
z:[signInt(d.slice(69, 71).reduce(msbLsb),16)/100]
|
|
12829
|
+
},
|
|
12830
|
+
'accelero_sample_9':{
|
|
12831
|
+
x:[signInt(d.slice(71, 73).reduce(msbLsb),16)/100],
|
|
12832
|
+
y:[signInt(d.slice(73, 75).reduce(msbLsb),16)/100],
|
|
12833
|
+
z:[signInt(d.slice(75, 77).reduce(msbLsb),16)/100]
|
|
12834
|
+
},
|
|
12835
|
+
'accelero_sample_10':{
|
|
12836
|
+
x:[signInt(d.slice(77, 79).reduce(msbLsb),16)/100],
|
|
12837
|
+
y:[signInt(d.slice(79, 81).reduce(msbLsb),16)/100],
|
|
12838
|
+
z:[signInt(d.slice(81, 83).reduce(msbLsb),16)/100]
|
|
12839
|
+
}
|
|
12840
|
+
};
|
|
12841
|
+
}else{
|
|
12842
|
+
return {
|
|
12843
|
+
raw_data: "Disabled",
|
|
12844
|
+
accelerometer_counter: d.slice(0, 4).reduce(msbLsb),
|
|
12845
|
+
accelerometer_uptime: d.slice(4, 8).reduce(msbLsb),
|
|
12846
|
+
magnetometer_counter: d.slice(8, 12).reduce(msbLsb),
|
|
12847
|
+
magnetometer_uptime: d.slice(12, 16).reduce(msbLsb),
|
|
12848
|
+
input_acc: d[16] & 8 ? 1 : 0,
|
|
12849
|
+
input_mag: d[16] & 16 ? 1 : 0,
|
|
12850
|
+
report_type: report_type,
|
|
12851
|
+
rtc: [
|
|
12852
|
+
String(d[18]).padStart(2, '0'),
|
|
12853
|
+
String(d[19]).padStart(2, '0'),
|
|
12854
|
+
String(d[20]).padStart(2, '0')
|
|
12855
|
+
].join(':'),
|
|
12856
|
+
'temperature': d.slice(21, 23).reduce(msbLsb)/100
|
|
12857
|
+
};
|
|
12858
|
+
}
|
|
12859
|
+
},
|
|
12860
|
+
'parse_fly': (frame) => {
|
|
12861
|
+
let reset_mode = "Disabled";
|
|
12862
|
+
switch(frame[35]){
|
|
12863
|
+
case 0:
|
|
12864
|
+
reset_mode = "Disabled";
|
|
12865
|
+
break;
|
|
12866
|
+
case 1:
|
|
12867
|
+
reset_mode = "Shift Ends";
|
|
12868
|
+
break;
|
|
12869
|
+
case 2:
|
|
12870
|
+
reset_mode = "Timeout";
|
|
12871
|
+
break;
|
|
12872
|
+
}
|
|
12873
|
+
let acc_odr = "10 Hz";
|
|
12874
|
+
switch(frame[37]){
|
|
12875
|
+
case 0:
|
|
12876
|
+
acc_odr = "10 Hz";
|
|
12877
|
+
break;
|
|
12878
|
+
case 1:
|
|
12879
|
+
acc_odr = "20 Hz";
|
|
12880
|
+
break;
|
|
12881
|
+
case 2:
|
|
12882
|
+
acc_odr = "50 Hz";
|
|
12883
|
+
break;
|
|
12884
|
+
case 3:
|
|
12885
|
+
acc_odr = "100 Hz";
|
|
12886
|
+
break;
|
|
12887
|
+
case 4:
|
|
12888
|
+
acc_odr = "200 Hz";
|
|
12889
|
+
break;
|
|
12890
|
+
case 5:
|
|
12891
|
+
acc_odr = "400 Hz";
|
|
12892
|
+
break;
|
|
12893
|
+
}
|
|
12894
|
+
let rtc_sampling_interval = "5 sec";
|
|
12895
|
+
switch(frame[36]){
|
|
12896
|
+
case 0:
|
|
12897
|
+
rtc_sampling_interval = "1 min";
|
|
12898
|
+
break;
|
|
12899
|
+
case 1:
|
|
12900
|
+
rtc_sampling_interval = "5 min";
|
|
12901
|
+
break;
|
|
12902
|
+
case 2:
|
|
12903
|
+
rtc_sampling_interval = "15 min";
|
|
12904
|
+
break;
|
|
12905
|
+
case 3:
|
|
12906
|
+
rtc_sampling_interval = "30 min";
|
|
12907
|
+
break;
|
|
12908
|
+
case 4:
|
|
12909
|
+
rtc_sampling_interval = "1 hour";
|
|
12910
|
+
break;
|
|
12911
|
+
case 5:
|
|
12912
|
+
rtc_sampling_interval = "2 hours";
|
|
12913
|
+
break;
|
|
12914
|
+
case 6:
|
|
12915
|
+
rtc_sampling_interval = "3 hours";
|
|
12916
|
+
break;
|
|
12917
|
+
case 7:
|
|
12918
|
+
rtc_sampling_interval = "6 hours";
|
|
12919
|
+
break;
|
|
12920
|
+
case 8:
|
|
12921
|
+
rtc_sampling_interval = "12 hours";
|
|
12922
|
+
break;
|
|
12923
|
+
case 9:
|
|
12924
|
+
rtc_sampling_interval = "5 sec";
|
|
12925
|
+
break;
|
|
12926
|
+
case 10:
|
|
12927
|
+
rtc_sampling_interval = "10 sec";
|
|
12928
|
+
break;
|
|
12929
|
+
case 11:
|
|
12930
|
+
rtc_sampling_interval = "15 sec";
|
|
12931
|
+
break;
|
|
12932
|
+
case 12:
|
|
12933
|
+
rtc_sampling_interval = "30 sec";
|
|
12934
|
+
break;
|
|
12935
|
+
}
|
|
12936
|
+
let acc_enabled_axis = 'Disabled All';
|
|
12937
|
+
switch(frame[40]){
|
|
12938
|
+
case 0:
|
|
12939
|
+
acc_enabled_axis = 'Disabled All';
|
|
12940
|
+
break;
|
|
12941
|
+
case 1:
|
|
12942
|
+
acc_enabled_axis = 'x axis';
|
|
12943
|
+
break;
|
|
12944
|
+
case 2:
|
|
12945
|
+
acc_enabled_axis = 'y axis';
|
|
12946
|
+
break;
|
|
12947
|
+
case 3:
|
|
12948
|
+
acc_enabled_axis = 'z axis';
|
|
12949
|
+
break;
|
|
12950
|
+
case 7:
|
|
12951
|
+
acc_enabled_axis = 'all axis';
|
|
12952
|
+
break;
|
|
12953
|
+
}
|
|
12954
|
+
return {
|
|
12955
|
+
'firmware': frame[2],
|
|
12956
|
+
'accelerometer_threshold': (frame[16]* 32) + " mg",
|
|
12957
|
+
'debouncing_timeout': frame.slice(17, 19).reduce(msbLsb) + " msec",
|
|
12958
|
+
'accelero_state': frame[19]? "Enabled": "Disabled",
|
|
12959
|
+
'counter_threshold': frame.slice(20, 24).reduce(msbLsb),
|
|
12960
|
+
'trasnmit_on_change_status': frame[24]? "Enabled": "Disabled",
|
|
12961
|
+
'Shift_end_1': [
|
|
12962
|
+
String(frame[25]).padStart(2, '0'),
|
|
12963
|
+
String(frame[26]).padStart(2, '0')
|
|
12964
|
+
].join(':'),
|
|
12965
|
+
'Shift_end_2': [
|
|
12966
|
+
String(frame[27]).padStart(2, '0'),
|
|
12967
|
+
String(frame[28]).padStart(2, '0')
|
|
12968
|
+
].join(':'),
|
|
12969
|
+
'Shift_end_3': [
|
|
12970
|
+
String(frame[29]).padStart(2, '0'),
|
|
12971
|
+
String(frame[30]).padStart(2, '0')
|
|
12972
|
+
].join(':'),
|
|
12973
|
+
'Shift_end_4': [
|
|
12974
|
+
String(frame[31]).padStart(2, '0'),
|
|
12975
|
+
String(frame[32]).padStart(2, '0')
|
|
12976
|
+
].join(':'),
|
|
12977
|
+
'reset_timeout': frame.slice(33, 35).reduce(msbLsb) + " min",
|
|
12978
|
+
'counter_reset_mode': reset_mode,
|
|
12979
|
+
'sampling_interval': rtc_sampling_interval,
|
|
12980
|
+
'acc_odr': acc_odr,
|
|
12981
|
+
'interrupt_timeout': frame.slice(38, 40).reduce(msbLsb) + ' msec',
|
|
12982
|
+
'acc_enabled_axis': acc_enabled_axis,
|
|
12983
|
+
'hardware_id': frame.slice(41, 44),
|
|
12984
|
+
'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
|
|
12985
|
+
'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
|
|
12986
|
+
'machine_values': {
|
|
12987
|
+
'firmware': frame[2],
|
|
12988
|
+
'accelerometer_threshold': (frame[16]* 32),
|
|
12989
|
+
'debouncing_timeout': frame.slice(17, 19),
|
|
12990
|
+
'accelero_state': frame[19],
|
|
12991
|
+
'counter_threshold': frame.slice(20, 24),
|
|
12992
|
+
'trasnmit_on_change_status': frame[24],
|
|
12993
|
+
'Shift_end_1': [
|
|
12994
|
+
frame[25],
|
|
12995
|
+
frame[26]
|
|
12996
|
+
],
|
|
12997
|
+
'Shift_end_2': [
|
|
12998
|
+
frame[27],
|
|
12999
|
+
frame[28]
|
|
13000
|
+
],
|
|
13001
|
+
'Shift_end_3': [
|
|
13002
|
+
frame[29],
|
|
13003
|
+
frame[30]
|
|
13004
|
+
],
|
|
13005
|
+
'Shift_end_4': [
|
|
13006
|
+
frame[31],
|
|
13007
|
+
frame[32]
|
|
13008
|
+
],
|
|
13009
|
+
'reset_timeout': frame.slice(33, 35),
|
|
13010
|
+
'counter_reset_mode': frame[35],
|
|
13011
|
+
'sampling_interval': frame[36],
|
|
13012
|
+
'acc_odr': frame[37],
|
|
13013
|
+
'interrupt_timeout': frame.slice(38, 40),
|
|
13014
|
+
'acc_enabled_axis': frame[40],
|
|
13015
|
+
'hardware_id': frame.slice(41, 44),
|
|
13016
|
+
'report_rate': frame.slice(44, 48),
|
|
13017
|
+
'tx_life_counter': frame.slice(48, 52)
|
|
13018
|
+
}
|
|
13019
|
+
}
|
|
13020
|
+
}
|
|
13021
|
+
},
|
|
13022
|
+
'120': {
|
|
13023
|
+
name: 'Wireless H2S Sensor',
|
|
13024
|
+
parse: (d) => {
|
|
13025
|
+
return {
|
|
13026
|
+
ppm: d.slice(0, 2).reduce(msbLsb),
|
|
13027
|
+
temperature: signInt(d.slice(2, 4).reduce(msbLsb), 16) / 100,
|
|
13028
|
+
humidity: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100
|
|
13029
|
+
};
|
|
13030
|
+
},
|
|
13031
|
+
'parse_fly': (frame) => {
|
|
13032
|
+
return {
|
|
13033
|
+
'firmware': frame[2],
|
|
13034
|
+
'h2s_threshold': frame[12],
|
|
13035
|
+
'always_on_status': frame[13],
|
|
13036
|
+
'hardware_id': frame.slice(14, 17),
|
|
13037
|
+
'sample_rate': frame.slice(17, 21).reduce(msbLsb) + " Sec.",
|
|
13038
|
+
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
|
|
13039
|
+
'machine_values': {
|
|
13040
|
+
'firmware': frame[2],
|
|
13041
|
+
'h2s threshold': frame[12],
|
|
13042
|
+
'always_on_status': frame[13],
|
|
13043
|
+
'hardware_id': frame.slice(14, 17),
|
|
13044
|
+
'sample_rate': frame.slice(17, 21).reduce(msbLsb),
|
|
13045
|
+
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
|
|
13046
|
+
}
|
|
13047
|
+
}
|
|
13048
|
+
}
|
|
13049
|
+
},
|
|
13050
|
+
'121':{
|
|
12239
13051
|
name: 'Wireless Wood Moisture Sensor',
|
|
12240
13052
|
parse: (d) => {
|
|
12241
13053
|
return {
|
|
@@ -12305,7 +13117,7 @@ function sensor_types(parent){
|
|
|
12305
13117
|
'firmware': frame[2],
|
|
12306
13118
|
'fsr': frame_data.fsr,
|
|
12307
13119
|
'boot_time': frame[17] + " sec",
|
|
12308
|
-
'
|
|
13120
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
12309
13121
|
'auto_check_interval': frame_data.auto_check_interval,
|
|
12310
13122
|
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
12311
13123
|
'always_on': frame_data[24] ? 'Enabled' : 'Disabled',
|
|
@@ -12319,7 +13131,7 @@ function sensor_types(parent){
|
|
|
12319
13131
|
'firmware': frame[2],
|
|
12320
13132
|
'fsr': frame[16],
|
|
12321
13133
|
'boot_time': frame[17],
|
|
12322
|
-
'
|
|
13134
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
12323
13135
|
'auto_check_interval': frame.slice(20, 22),
|
|
12324
13136
|
'auto_check_percentage': frame.slice(22, 24),
|
|
12325
13137
|
'always_on': frame[24],
|
|
@@ -12488,9 +13300,10 @@ function sensor_types(parent){
|
|
|
12488
13300
|
'reset_timeout': frame.slice(34, 36).reduce(msbLsb) + "min",
|
|
12489
13301
|
'counter_reset_mode': reset_mode,
|
|
12490
13302
|
'sampling_interval': rtc_sampling_interval,
|
|
12491
|
-
'
|
|
12492
|
-
'
|
|
12493
|
-
'
|
|
13303
|
+
'interrupt_timeout': frame.slice(38, 40).reduce(msbLsb) + "msec",
|
|
13304
|
+
'hardware_id': frame.slice(40, 43),
|
|
13305
|
+
'report_rate': frame.slice(43, 47).reduce(msbLsb) + "sec",
|
|
13306
|
+
'tx_life_counter': frame.slice(47, 51).reduce(msbLsb),
|
|
12494
13307
|
'machine_values': {
|
|
12495
13308
|
'firmware': frame[2],
|
|
12496
13309
|
'debouncing_timeout': frame.slice(16, 18),
|
|
@@ -12506,185 +13319,639 @@ function sensor_types(parent){
|
|
|
12506
13319
|
'reset_timeout': frame.slice(34, 36),
|
|
12507
13320
|
'counter_reset_mode': frame[36],
|
|
12508
13321
|
'sampling_interval': frame[37],
|
|
12509
|
-
'
|
|
12510
|
-
'
|
|
12511
|
-
'
|
|
13322
|
+
'interrupt_timeout': frame.slice(38, 40),
|
|
13323
|
+
'hardware_id': frame.slice(40, 43),
|
|
13324
|
+
'report_rate': frame.slice(43, 47),
|
|
13325
|
+
'tx_life_counter': frame.slice(47, 51)
|
|
12512
13326
|
}
|
|
12513
13327
|
}
|
|
12514
13328
|
}
|
|
12515
13329
|
},
|
|
12516
|
-
'
|
|
12517
|
-
name: '
|
|
12518
|
-
parse: (payload, parsed, mac) => {
|
|
12519
|
-
return parent.sensor_types[80].parse(payload, parsed, mac);
|
|
12520
|
-
},
|
|
12521
|
-
parse_fly: (payload, parsed, mac) => {
|
|
12522
|
-
return parent.sensor_types[80].parse_fly(payload, parsed, mac);
|
|
12523
|
-
},
|
|
12524
|
-
},
|
|
12525
|
-
'181': {
|
|
12526
|
-
name: 'C1D2 Two Channel Vibration Plus',
|
|
12527
|
-
parse: (payload, parsed, mac) => {
|
|
12528
|
-
return parent.sensor_types[81].parse(payload, parsed, mac);
|
|
12529
|
-
},
|
|
12530
|
-
parse_fly: (payload, parsed, mac) => {
|
|
12531
|
-
return parent.sensor_types[81].parse_fly(payload, parsed, mac);
|
|
12532
|
-
},
|
|
12533
|
-
},
|
|
12534
|
-
'200': {
|
|
12535
|
-
name: '4-20mA Pass Through',
|
|
13330
|
+
'124': {
|
|
13331
|
+
name: 'Wireless EH Flow Sensor',
|
|
12536
13332
|
parse: (d) => {
|
|
12537
|
-
var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
|
|
12538
|
-
var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
|
|
12539
|
-
var dac1 = signInt(d.slice(4, 6).reduce(msbLsb));
|
|
12540
|
-
return {
|
|
12541
|
-
adc1: adc1,
|
|
12542
|
-
adc2: adc2,
|
|
12543
|
-
dac1: dac1,
|
|
12544
|
-
mA1: parseFloat((adc1/100.00).toFixed(2)),
|
|
12545
|
-
raw_adc: adc2,
|
|
12546
|
-
raw_dac: dac1
|
|
12547
|
-
};
|
|
12548
|
-
}
|
|
12549
|
-
},
|
|
12550
|
-
'202': {
|
|
12551
|
-
name: 'Wireless Weather Station',
|
|
12552
|
-
parse: (payload, parsed, mac) => {
|
|
12553
13333
|
return {
|
|
12554
|
-
|
|
12555
|
-
|
|
12556
|
-
|
|
12557
|
-
|
|
12558
|
-
|
|
12559
|
-
|
|
12560
|
-
|
|
12561
|
-
|
|
12562
|
-
|
|
12563
|
-
|
|
12564
|
-
|
|
12565
|
-
|
|
12566
|
-
|
|
12567
|
-
return {
|
|
12568
|
-
msg_type: 'regular',
|
|
12569
|
-
temperature: signInt(payload.slice(1, 3).reduce(msbLsb), 16),
|
|
12570
|
-
oxygen_saturation_percent: payload.slice(3, 7).reduce(msbLsb),
|
|
12571
|
-
oxygen_ppm: payload.slice(7, 11).reduce(msbLsb),
|
|
12572
|
-
oxygen_mg_l: payload.slice(11, 15).reduce(msbLsb)
|
|
12573
|
-
};
|
|
12574
|
-
}
|
|
12575
|
-
else{ // theshold
|
|
12576
|
-
let solenoid_status = payload[2];
|
|
12577
|
-
if(solenoid_status == 1){ // Solenoid On
|
|
12578
|
-
return {
|
|
12579
|
-
msg_type: 'threshold',
|
|
12580
|
-
solenoid_number: payload[1],
|
|
12581
|
-
solenoid_status: 'on',
|
|
12582
|
-
temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
|
|
12583
|
-
oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
|
|
12584
|
-
oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
|
|
12585
|
-
oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb),
|
|
12586
|
-
flow_rate: payload.slice(17, 21).reduce(msbLsb)
|
|
12587
|
-
};
|
|
12588
|
-
} else{ // Solenoid Off
|
|
12589
|
-
return {
|
|
12590
|
-
msg_type: 'threshold',
|
|
12591
|
-
solenoid_number: payload[1],
|
|
12592
|
-
solenoid_status: 'off',
|
|
12593
|
-
temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
|
|
12594
|
-
oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
|
|
12595
|
-
oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
|
|
12596
|
-
oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb)
|
|
12597
|
-
};
|
|
12598
|
-
}
|
|
12599
|
-
}
|
|
12600
|
-
},
|
|
12601
|
-
'parse_fly': (frame) => {
|
|
12602
|
-
return {
|
|
12603
|
-
'firmware': frame[2],
|
|
12604
|
-
'hardware_id': frame.slice(12, 15),
|
|
12605
|
-
'report_rate': frame.slice(15, 19).reduce(msbLsb) + "Sec",
|
|
12606
|
-
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
|
|
12607
|
-
'machine_values': {
|
|
12608
|
-
'firmware': frame[2],
|
|
12609
|
-
'hardware_id': frame.slice(12, 15),
|
|
12610
|
-
'report_rate': frame.slice(15, 19),
|
|
12611
|
-
'tx_life_counter': frame.slice(19, 23)
|
|
12612
|
-
}
|
|
12613
|
-
}
|
|
12614
|
-
}
|
|
12615
|
-
},
|
|
12616
|
-
'217': {
|
|
12617
|
-
name: 'Wireless Weight Scale',
|
|
12618
|
-
parse: (d) => {
|
|
12619
|
-
return {
|
|
12620
|
-
weight: signInt(d.slice(0, 4).reduce(msbLsb)) / 100
|
|
12621
|
-
};
|
|
12622
|
-
}
|
|
12623
|
-
},
|
|
12624
|
-
'270': {
|
|
12625
|
-
name: 'Custom Salinity DO sensor',
|
|
12626
|
-
parse: (d) => {
|
|
12627
|
-
return {
|
|
12628
|
-
sensor_status: d[0],
|
|
12629
|
-
do_temperature_1: d.slice(1, 3).reduce(msbLsb) / 100,
|
|
12630
|
-
do_temperature_2: d.slice(3, 5).reduce(msbLsb) / 100,
|
|
12631
|
-
do_temperature_3: d.slice(5, 7).reduce(msbLsb) / 100,
|
|
12632
|
-
do_temperature_4: d.slice(7, 9).reduce(msbLsb) / 100,
|
|
12633
|
-
ec_temperature_1: d.slice(9, 11).reduce(msbLsb) / 100,
|
|
12634
|
-
ec_temperature_2: d.slice(11, 13).reduce(msbLsb) / 100,
|
|
12635
|
-
ec_temperature_3: d.slice(13, 15).reduce(msbLsb) / 100,
|
|
12636
|
-
ec_temperature_4: d.slice(15, 17).reduce(msbLsb) / 100,
|
|
12637
|
-
do_saturation_perc_1: d.slice(17, 19).reduce(msbLsb) / 100,
|
|
12638
|
-
do_saturation_perc_2: d.slice(19, 21).reduce(msbLsb) / 100,
|
|
12639
|
-
do_saturation_perc_3: d.slice(21, 23).reduce(msbLsb) / 100,
|
|
12640
|
-
do_saturation_perc_4: d.slice(23, 25).reduce(msbLsb) / 100,
|
|
12641
|
-
do_ppm_1: d.slice(25, 27).reduce(msbLsb) / 100,
|
|
12642
|
-
do_ppm_2: d.slice(27, 29).reduce(msbLsb) / 100,
|
|
12643
|
-
do_ppm_3: d.slice(29, 31).reduce(msbLsb) / 100,
|
|
12644
|
-
do_ppm_4: d.slice(31, 33).reduce(msbLsb) / 100,
|
|
12645
|
-
do_mgl_1: d.slice(33, 35).reduce(msbLsb) / 100,
|
|
12646
|
-
do_mgl_2: d.slice(35, 37).reduce(msbLsb) / 100,
|
|
12647
|
-
do_mgl_3: d.slice(37, 39).reduce(msbLsb) / 100,
|
|
12648
|
-
do_mgl_4: d.slice(39, 41).reduce(msbLsb) / 100,
|
|
12649
|
-
ec_conductivity_1: d.slice(41, 43).reduce(msbLsb) / 100,
|
|
12650
|
-
ec_conductivity_2: d.slice(43, 45).reduce(msbLsb) / 100,
|
|
12651
|
-
ec_conductivity_3: d.slice(45, 47).reduce(msbLsb) / 100,
|
|
12652
|
-
ec_conductivity_4: d.slice(47, 49).reduce(msbLsb) / 100,
|
|
12653
|
-
ec_salinity_ppt_1: d.slice(49, 57).reduce(msbLsb) / 100,
|
|
12654
|
-
ec_salinity_ppt_2: d.slice(57, 65).reduce(msbLsb) / 100,
|
|
12655
|
-
ec_salinity_ppt_3: d.slice(65, 73).reduce(msbLsb) / 100,
|
|
12656
|
-
ec_salinity_ppt_4: d.slice(73, 81).reduce(msbLsb) / 100,
|
|
12657
|
-
ec_tds_1: d.slice(81, 85).reduce(msbLsb) / 100,
|
|
12658
|
-
ec_tds_2: d.slice(85, 89).reduce(msbLsb) / 100,
|
|
12659
|
-
ec_tds_3: d.slice(89, 93).reduce(msbLsb) / 100,
|
|
12660
|
-
ec_tds_4: d.slice(93, 97).reduce(msbLsb) / 100
|
|
13334
|
+
volume_flow: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
|
|
13335
|
+
conductivity: d.slice(4, 8).reduce(msbLsb),
|
|
13336
|
+
flow_velocity: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100,
|
|
13337
|
+
pressure: signInt(d.slice(12, 16).reduce(msbLsb),32) / 100,
|
|
13338
|
+
// WARNING doesn't handle decimal values and will round to whole number.
|
|
13339
|
+
total_flow_1: d.slice(16, 24).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
|
|
13340
|
+
total_flow_2: d.slice(24, 32).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
|
|
13341
|
+
total_flow_3: d.slice(32, 40).reduce(msbLsb_to_SignedInt, 0n) / BigInt(100),
|
|
13342
|
+
battery_life: d.slice(40, 42).reduce(msbLsb),
|
|
13343
|
+
battery_state: d[42],
|
|
13344
|
+
total_flow_1_raw: d.slice(16, 24),
|
|
13345
|
+
total_flow_2_raw: d.slice(24, 32),
|
|
13346
|
+
total_flow_3_raw: d.slice(32, 40)
|
|
12661
13347
|
};
|
|
12662
13348
|
},
|
|
12663
13349
|
'parse_fly': (frame) => {
|
|
13350
|
+
let frame_data = {};
|
|
13351
|
+
switch(frame[12]){
|
|
13352
|
+
case 0:
|
|
13353
|
+
frame_data.flow_unit = 'cm³/s';
|
|
13354
|
+
break;
|
|
13355
|
+
case 1:
|
|
13356
|
+
frame_data.flow_unit = 'cm³/min';
|
|
13357
|
+
break;
|
|
13358
|
+
case 2:
|
|
13359
|
+
frame_data.flow_unit = 'cm³/h';
|
|
13360
|
+
break;
|
|
13361
|
+
case 3:
|
|
13362
|
+
frame_data.flow_unit = 'cm³/d';
|
|
13363
|
+
break;
|
|
13364
|
+
case 4:
|
|
13365
|
+
frame_data.flow_unit = 'dm³/s';
|
|
13366
|
+
break;
|
|
13367
|
+
case 5:
|
|
13368
|
+
frame_data.flow_unit = 'dm³/min';
|
|
13369
|
+
break;
|
|
13370
|
+
case 6:
|
|
13371
|
+
frame_data.flow_unit = 'dm³/h';
|
|
13372
|
+
break;
|
|
13373
|
+
case 7:
|
|
13374
|
+
frame_data.flow_unit = 'dm³/d';
|
|
13375
|
+
break;
|
|
13376
|
+
case 8:
|
|
13377
|
+
frame_data.flow_unit = 'm³/s';
|
|
13378
|
+
break;
|
|
13379
|
+
case 9:
|
|
13380
|
+
frame_data.flow_unit = 'm³/min';
|
|
13381
|
+
break;
|
|
13382
|
+
case 10:
|
|
13383
|
+
frame_data.flow_unit = 'm³/h';
|
|
13384
|
+
break;
|
|
13385
|
+
case 11:
|
|
13386
|
+
frame_data.flow_unit = 'm³/d';
|
|
13387
|
+
break;
|
|
13388
|
+
case 12:
|
|
13389
|
+
frame_data.flow_unit = 'ml/s';
|
|
13390
|
+
break;
|
|
13391
|
+
case 13:
|
|
13392
|
+
frame_data.flow_unit = 'ml/min';
|
|
13393
|
+
break;
|
|
13394
|
+
case 14:
|
|
13395
|
+
frame_data.flow_unit = 'ml/h';
|
|
13396
|
+
break;
|
|
13397
|
+
case 15:
|
|
13398
|
+
frame_data.flow_unit = 'ml/d';
|
|
13399
|
+
break;
|
|
13400
|
+
case 16:
|
|
13401
|
+
unitStrframe_data.flow_uniting = 'l/s';
|
|
13402
|
+
break;
|
|
13403
|
+
case 17:
|
|
13404
|
+
frame_data.flow_unit = 'l/min';
|
|
13405
|
+
break;
|
|
13406
|
+
case 18:
|
|
13407
|
+
frame_data.flow_unit = 'l/h';
|
|
13408
|
+
break;
|
|
13409
|
+
case 19:
|
|
13410
|
+
frame_data.flow_unit = 'l/d';
|
|
13411
|
+
break;
|
|
13412
|
+
case 20:
|
|
13413
|
+
frame_data.flow_unit = 'hl/s';
|
|
13414
|
+
break;
|
|
13415
|
+
case 21:
|
|
13416
|
+
frame_data.flow_unit = 'hl/min';
|
|
13417
|
+
break;
|
|
13418
|
+
case 22:
|
|
13419
|
+
frame_data.flow_unit = 'hl/h';
|
|
13420
|
+
break;
|
|
13421
|
+
case 23:
|
|
13422
|
+
frame_data.flow_unit = 'hl/d';
|
|
13423
|
+
break;
|
|
13424
|
+
case 24:
|
|
13425
|
+
frame_data.flow_unit = 'Ml/s';
|
|
13426
|
+
break;
|
|
13427
|
+
case 25:
|
|
13428
|
+
frame_data.flow_unit = 'Ml/min';
|
|
13429
|
+
break;
|
|
13430
|
+
case 26:
|
|
13431
|
+
frame_data.flow_unit = 'Ml/h';
|
|
13432
|
+
break;
|
|
13433
|
+
case 27:
|
|
13434
|
+
frame_data.flow_unit = 'Ml/d';
|
|
13435
|
+
break;
|
|
13436
|
+
|
|
13437
|
+
// US Customary & Imperial Flow Rates
|
|
13438
|
+
case 32:
|
|
13439
|
+
frame_data.flow_unit = 'af/s';
|
|
13440
|
+
break;
|
|
13441
|
+
case 33:
|
|
13442
|
+
frame_data.flow_unit = 'af/min';
|
|
13443
|
+
break;
|
|
13444
|
+
case 34:
|
|
13445
|
+
frame_data.flow_unit = 'af/h';
|
|
13446
|
+
break;
|
|
13447
|
+
case 35:
|
|
13448
|
+
frame_data.flow_unit = 'af/d';
|
|
13449
|
+
break;
|
|
13450
|
+
case 36:
|
|
13451
|
+
frame_data.flow_unit = 'ft³/s';
|
|
13452
|
+
break;
|
|
13453
|
+
case 37:
|
|
13454
|
+
frame_data.flow_unit = 'ft³/min';
|
|
13455
|
+
break;
|
|
13456
|
+
case 38:
|
|
13457
|
+
frame_data.flow_unit = 'ft³/h';
|
|
13458
|
+
break;
|
|
13459
|
+
case 39:
|
|
13460
|
+
frame_data.flow_unit = 'ft³/d';
|
|
13461
|
+
break;
|
|
13462
|
+
case 40:
|
|
13463
|
+
frame_data.flow_unit = 'fl oz/s (us)';
|
|
13464
|
+
break;
|
|
13465
|
+
case 41:
|
|
13466
|
+
frame_data.flow_unit = 'fl oz/min (us)';
|
|
13467
|
+
break;
|
|
13468
|
+
case 42:
|
|
13469
|
+
frame_data.flow_unit = 'fl oz/h (us)';
|
|
13470
|
+
break;
|
|
13471
|
+
case 43:
|
|
13472
|
+
frame_data.flow_unit = 'fl oz/d (us)';
|
|
13473
|
+
break;
|
|
13474
|
+
case 44:
|
|
13475
|
+
frame_data.flow_unit = 'gal/s (us)';
|
|
13476
|
+
break;
|
|
13477
|
+
case 45:
|
|
13478
|
+
frame_data.flow_unit = 'gal/min (us)';
|
|
13479
|
+
break;
|
|
13480
|
+
case 46:
|
|
13481
|
+
frame_data.flow_unit = 'gal/h (us)';
|
|
13482
|
+
break;
|
|
13483
|
+
case 47:
|
|
13484
|
+
frame_data.flow_unit = 'gal/d (us)';
|
|
13485
|
+
break;
|
|
13486
|
+
case 48:
|
|
13487
|
+
frame_data.flow_unit = 'Mgal/s (us)';
|
|
13488
|
+
break;
|
|
13489
|
+
case 49:
|
|
13490
|
+
frame_data.flow_unit = 'Mgal/min (us)';
|
|
13491
|
+
break;
|
|
13492
|
+
case 50:
|
|
13493
|
+
frame_data.flow_unit = 'Mgal/h (us)';
|
|
13494
|
+
break;
|
|
13495
|
+
case 51:
|
|
13496
|
+
frame_data.flow_unit = 'Mgal/d (us)';
|
|
13497
|
+
break;
|
|
13498
|
+
case 52:
|
|
13499
|
+
frame_data.flow_unit = 'bbl/s (us;liq.)';
|
|
13500
|
+
break;
|
|
13501
|
+
case 53:
|
|
13502
|
+
frame_data.flow_unit = 'bbl/min (us;liq.)';
|
|
13503
|
+
break;
|
|
13504
|
+
case 54:
|
|
13505
|
+
frame_data.flow_unit = 'bbl/h (us;liq.)';
|
|
13506
|
+
break;
|
|
13507
|
+
case 55:
|
|
13508
|
+
frame_data.flow_unit = 'bbl/d (us;liq.)';
|
|
13509
|
+
break;
|
|
13510
|
+
case 56:
|
|
13511
|
+
frame_data.flow_unit = 'bbl/s (us;beer)';
|
|
13512
|
+
break;
|
|
13513
|
+
case 57:
|
|
13514
|
+
frame_data.flow_unit = 'bbl/min (us;beer)';
|
|
13515
|
+
break;
|
|
13516
|
+
case 58:
|
|
13517
|
+
frame_data.flow_unit = 'bbl/h (us;beer)';
|
|
13518
|
+
break;
|
|
13519
|
+
case 59:
|
|
13520
|
+
frame_data.flow_unit = 'bbl/d (us;beer)';
|
|
13521
|
+
break;
|
|
13522
|
+
case 60:
|
|
13523
|
+
frame_data.flow_unit = 'bbl/s (us;oil)';
|
|
13524
|
+
break;
|
|
13525
|
+
case 61:
|
|
13526
|
+
frame_data.flow_unit = 'bbl/min (us;oil)';
|
|
13527
|
+
break;
|
|
13528
|
+
case 62:
|
|
13529
|
+
frame_data.flow_unit = 'bbl/h (us;oil)';
|
|
13530
|
+
break;
|
|
13531
|
+
case 63:
|
|
13532
|
+
frame_data.flow_unit = 'bbl/d (us;oil)';
|
|
13533
|
+
break;
|
|
13534
|
+
case 64:
|
|
13535
|
+
frame_data.flow_unit = 'bbl/s (us;tank)';
|
|
13536
|
+
break;
|
|
13537
|
+
case 65:
|
|
13538
|
+
frame_data.flow_unit = 'bbl/min (us;tank)';
|
|
13539
|
+
break;
|
|
13540
|
+
case 66:
|
|
13541
|
+
frame_data.flow_unit = 'bbl/h (us;tank)';
|
|
13542
|
+
break;
|
|
13543
|
+
case 67:
|
|
13544
|
+
frame_data.flow_unit = 'bbl/d (us;tank)';
|
|
13545
|
+
break;
|
|
13546
|
+
case 68:
|
|
13547
|
+
frame_data.flow_unit = 'gal/s (imp)';
|
|
13548
|
+
break;
|
|
13549
|
+
case 69:
|
|
13550
|
+
frame_data.flow_unit = 'gal/min (imp)';
|
|
13551
|
+
break;
|
|
13552
|
+
case 70:
|
|
13553
|
+
frame_data.flow_unit = 'gal/h (imp)';
|
|
13554
|
+
break;
|
|
13555
|
+
case 71:
|
|
13556
|
+
frame_data.flow_unit = 'gal/d (imp)';
|
|
13557
|
+
break;
|
|
13558
|
+
case 72:
|
|
13559
|
+
frame_data.flow_unit = 'Mgal/s (imp)';
|
|
13560
|
+
break;
|
|
13561
|
+
case 73:
|
|
13562
|
+
frame_data.flow_unit = 'Mgal/min (imp)';
|
|
13563
|
+
break;
|
|
13564
|
+
case 74:
|
|
13565
|
+
frame_data.flow_unit = 'Mgal/h (imp)';
|
|
13566
|
+
break;
|
|
13567
|
+
case 75:
|
|
13568
|
+
frame_data.flow_unit = 'Mgal/d (imp)';
|
|
13569
|
+
break;
|
|
13570
|
+
case 76:
|
|
13571
|
+
frame_data.flow_unit = 'bbl/s (imp;beer)';
|
|
13572
|
+
break;
|
|
13573
|
+
case 77:
|
|
13574
|
+
frame_data.flow_unit = 'bbl/min (imp;beer)';
|
|
13575
|
+
break;
|
|
13576
|
+
case 78:
|
|
13577
|
+
frame_data.flow_unit = 'bbl/h (imp;beer)';
|
|
13578
|
+
break;
|
|
13579
|
+
case 79:
|
|
13580
|
+
frame_data.flow_unit = 'bbl/d (imp;beer)';
|
|
13581
|
+
break;
|
|
13582
|
+
case 80:
|
|
13583
|
+
frame_data.flow_unit = 'bbl/s (imp;oil)';
|
|
13584
|
+
break;
|
|
13585
|
+
case 81:
|
|
13586
|
+
frame_data.flow_unit = 'bbl/min (imp;oil)';
|
|
13587
|
+
break;
|
|
13588
|
+
case 82:
|
|
13589
|
+
frame_data.flow_unit = 'bbl/h (imp;oil)';
|
|
13590
|
+
break;
|
|
13591
|
+
case 83:
|
|
13592
|
+
frame_data.flow_unit = 'bbl/d (imp;oil)';
|
|
13593
|
+
break;
|
|
13594
|
+
case 88:
|
|
13595
|
+
frame_data.flow_unit = 'kgal/s (us)';
|
|
13596
|
+
break;
|
|
13597
|
+
case 89:
|
|
13598
|
+
frame_data.flow_unit = 'kgal/min (us)';
|
|
13599
|
+
break;
|
|
13600
|
+
case 90:
|
|
13601
|
+
frame_data.flow_unit = 'kgal/h (us)';
|
|
13602
|
+
break;
|
|
13603
|
+
case 91:
|
|
13604
|
+
frame_data.flow_unit = 'kgal/d (us)';
|
|
13605
|
+
break;
|
|
13606
|
+
case 92:
|
|
13607
|
+
frame_data.flow_unit = 'MMft³/s';
|
|
13608
|
+
break;
|
|
13609
|
+
case 93:
|
|
13610
|
+
frame_data.flow_unit = 'MMft³/min';
|
|
13611
|
+
break;
|
|
13612
|
+
case 94:
|
|
13613
|
+
frame_data.flow_unit = 'MMft³/h';
|
|
13614
|
+
break;
|
|
13615
|
+
case 96:
|
|
13616
|
+
frame_data.flow_unit = 'Mft³/d';
|
|
13617
|
+
break;
|
|
13618
|
+
}
|
|
13619
|
+
switch(frame[13]){
|
|
13620
|
+
case 0:
|
|
13621
|
+
frame_data.pressure_unit = 'bar';
|
|
13622
|
+
break;
|
|
13623
|
+
case 1:
|
|
13624
|
+
frame_data.pressure_unit = 'psi a';
|
|
13625
|
+
break;
|
|
13626
|
+
case 2:
|
|
13627
|
+
frame_data.pressure_unit = 'bar g';
|
|
13628
|
+
break;
|
|
13629
|
+
case 3:
|
|
13630
|
+
frame_data.pressure_unit = 'psi g';
|
|
13631
|
+
break;
|
|
13632
|
+
case 4:
|
|
13633
|
+
frame_data.pressure_unit = 'Pa a';
|
|
13634
|
+
break;
|
|
13635
|
+
case 5:
|
|
13636
|
+
frame_data.pressure_unit = 'kPa a';
|
|
13637
|
+
break;
|
|
13638
|
+
case 6:
|
|
13639
|
+
frame_data.pressure_unit = 'MPa a';
|
|
13640
|
+
break;
|
|
13641
|
+
case 7:
|
|
13642
|
+
frame_data.pressure_unit = 'Pa g';
|
|
13643
|
+
break;
|
|
13644
|
+
case 8:
|
|
13645
|
+
frame_data.pressure_unit = 'kPa g';
|
|
13646
|
+
break;
|
|
13647
|
+
case 9:
|
|
13648
|
+
frame_data.pressure_unit = 'MPa g';
|
|
13649
|
+
break;
|
|
13650
|
+
}
|
|
13651
|
+
switch(frame[14]){
|
|
13652
|
+
case 1:
|
|
13653
|
+
frame_data.conductivity_unit = 'MS/m';
|
|
13654
|
+
break;
|
|
13655
|
+
case 2:
|
|
13656
|
+
frame_data.conductivity_unit = 'kS/m';
|
|
13657
|
+
break;
|
|
13658
|
+
case 3:
|
|
13659
|
+
frame_data.conductivity_unit = 'S/m';
|
|
13660
|
+
break;
|
|
13661
|
+
case 4:
|
|
13662
|
+
frame_data.conductivity_unit = 'S/cm';
|
|
13663
|
+
break;
|
|
13664
|
+
case 5:
|
|
13665
|
+
frame_data.conductivity_unit = 'mS/m';
|
|
13666
|
+
break;
|
|
13667
|
+
case 6:
|
|
13668
|
+
frame_data.conductivity_unit = 'mS/cm';
|
|
13669
|
+
break;
|
|
13670
|
+
case 7:
|
|
13671
|
+
frame_data.conductivity_unit = 'μS/m';
|
|
13672
|
+
break;
|
|
13673
|
+
case 8:
|
|
13674
|
+
frame_data.conductivity_unit = 'μS/cm';
|
|
13675
|
+
break;
|
|
13676
|
+
case 9:
|
|
13677
|
+
frame_data.conductivity_unit = 'μS/mm';
|
|
13678
|
+
break;
|
|
13679
|
+
case 10:
|
|
13680
|
+
frame_data.conductivity_unit = 'nS/cm';
|
|
13681
|
+
break;
|
|
13682
|
+
}
|
|
13683
|
+
|
|
13684
|
+
frame_data.totalizer_unit = [];
|
|
13685
|
+
|
|
13686
|
+
for (let index = 0; index < 3; index++) {
|
|
13687
|
+
switch(frame[index + 15]){
|
|
13688
|
+
case 0:
|
|
13689
|
+
frame_data.totalizer_unit[index] = 'cm³';
|
|
13690
|
+
break;
|
|
13691
|
+
case 1:
|
|
13692
|
+
frame_data.totalizer_unit[index] = 'dm³';
|
|
13693
|
+
break;
|
|
13694
|
+
case 2:
|
|
13695
|
+
frame_data.totalizer_unit[index] = 'm³';
|
|
13696
|
+
break;
|
|
13697
|
+
case 3:
|
|
13698
|
+
frame_data.totalizer_unit[index] = 'ml';
|
|
13699
|
+
break;
|
|
13700
|
+
case 4:
|
|
13701
|
+
frame_data.totalizer_unit[index] = 'l';
|
|
13702
|
+
break;
|
|
13703
|
+
case 5:
|
|
13704
|
+
frame_data.totalizer_unit[index] = 'hl';
|
|
13705
|
+
break;
|
|
13706
|
+
case 6:
|
|
13707
|
+
frame_data.totalizer_unit[index] = 'Ml Mega';
|
|
13708
|
+
break;
|
|
13709
|
+
case 8:
|
|
13710
|
+
frame_data.totalizer_unit[index] = 'af';
|
|
13711
|
+
break;
|
|
13712
|
+
case 9:
|
|
13713
|
+
frame_data.totalizer_unit[index] = 'ft³';
|
|
13714
|
+
break;
|
|
13715
|
+
case 10:
|
|
13716
|
+
frame_data.totalizer_unit[index] = 'fl oz (us)';
|
|
13717
|
+
break;
|
|
13718
|
+
case 11:
|
|
13719
|
+
frame_data.totalizer_unit[index] = 'gal (us)';
|
|
13720
|
+
break;
|
|
13721
|
+
case 12:
|
|
13722
|
+
frame_data.totalizer_unit[index] = 'Mgal (us)';
|
|
13723
|
+
break;
|
|
13724
|
+
case 13:
|
|
13725
|
+
frame_data.totalizer_unit[index] = 'bbl (us;liq.)';
|
|
13726
|
+
break;
|
|
13727
|
+
case 14:
|
|
13728
|
+
frame_data.totalizer_unit[index] = 'bbl (us;beer)';
|
|
13729
|
+
break;
|
|
13730
|
+
case 15:
|
|
13731
|
+
frame_data.totalizer_unit[index] = 'bbl (us;oil)';
|
|
13732
|
+
break;
|
|
13733
|
+
case 16:
|
|
13734
|
+
frame_data.totalizer_unit[index] = 'bbl (us;tank)';
|
|
13735
|
+
break;
|
|
13736
|
+
case 17:
|
|
13737
|
+
frame_data.totalizer_unit[index] = 'gal (imp)';
|
|
13738
|
+
break;
|
|
13739
|
+
case 18:
|
|
13740
|
+
frame_data.totalizer_unit[index] = 'Mgal (imp)';
|
|
13741
|
+
break;
|
|
13742
|
+
case 19:
|
|
13743
|
+
frame_data.totalizer_unit[index] = 'bbl (imp;beer)';
|
|
13744
|
+
break;
|
|
13745
|
+
case 20:
|
|
13746
|
+
frame_data.totalizer_unit[index] = 'bbl (imp;oil)';
|
|
13747
|
+
break;
|
|
13748
|
+
case 22:
|
|
13749
|
+
frame_data.totalizer_unit[index] = 'kgal (us)';
|
|
13750
|
+
break;
|
|
13751
|
+
case 23:
|
|
13752
|
+
frame_data.totalizer_unit[index] = 'Mft³';
|
|
13753
|
+
break;
|
|
13754
|
+
}
|
|
13755
|
+
|
|
13756
|
+
}
|
|
12664
13757
|
return {
|
|
12665
13758
|
'firmware': frame[2],
|
|
12666
|
-
'
|
|
12667
|
-
'
|
|
12668
|
-
'
|
|
12669
|
-
'
|
|
12670
|
-
'
|
|
12671
|
-
'
|
|
12672
|
-
'
|
|
13759
|
+
'flow_unit': frame_data.flow_unit,
|
|
13760
|
+
'pressure_unit': frame_data.pressure_unit,
|
|
13761
|
+
'conductivity_unit': frame_data.conductivity_unit,
|
|
13762
|
+
'totalizer_1_unit': frame_data.totalizer_unit[0],
|
|
13763
|
+
'totalizer_2_unit': frame_data.totalizer_unit[1],
|
|
13764
|
+
'totalizer_3_unit': frame_data.totalizer_unit[2],
|
|
13765
|
+
'hardware_id': frame.slice(18, 21),
|
|
13766
|
+
'sample_rate': frame.slice(21, 25).reduce(msbLsb),
|
|
13767
|
+
'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
|
|
12673
13768
|
'machine_values': {
|
|
12674
13769
|
'firmware': frame[2],
|
|
12675
|
-
'
|
|
12676
|
-
'
|
|
12677
|
-
'
|
|
12678
|
-
'
|
|
12679
|
-
'
|
|
12680
|
-
'
|
|
12681
|
-
'
|
|
13770
|
+
'flow_unit': frame[12],
|
|
13771
|
+
'pressure_unit': frame[13],
|
|
13772
|
+
'conductivity_unit': frame[14],
|
|
13773
|
+
'totalizer_1_unit': frame[15],
|
|
13774
|
+
'totalizer_2_unit': frame[16],
|
|
13775
|
+
'totalizer_3_unit': frame[17],
|
|
13776
|
+
'hardware_id': frame.slice(18, 21),
|
|
13777
|
+
'sample_rate': frame.slice(21, 25),
|
|
13778
|
+
'tx_life_counter': frame.slice(25, 29)
|
|
12682
13779
|
}
|
|
12683
13780
|
}
|
|
12684
13781
|
}
|
|
12685
13782
|
},
|
|
12686
|
-
'
|
|
12687
|
-
name: '
|
|
13783
|
+
'180': {
|
|
13784
|
+
name: 'C1D2 One Channel Vibration Plus',
|
|
13785
|
+
parse: (payload, parsed, mac) => {
|
|
13786
|
+
return parent.sensor_types[80].parse(payload, parsed, mac);
|
|
13787
|
+
},
|
|
13788
|
+
parse_fly: (payload, parsed, mac) => {
|
|
13789
|
+
return parent.sensor_types[80].parse_fly(payload, parsed, mac);
|
|
13790
|
+
},
|
|
13791
|
+
},
|
|
13792
|
+
'181': {
|
|
13793
|
+
name: 'C1D2 Two Channel Vibration Plus',
|
|
13794
|
+
parse: (payload, parsed, mac) => {
|
|
13795
|
+
return parent.sensor_types[81].parse(payload, parsed, mac);
|
|
13796
|
+
},
|
|
13797
|
+
parse_fly: (payload, parsed, mac) => {
|
|
13798
|
+
return parent.sensor_types[81].parse_fly(payload, parsed, mac);
|
|
13799
|
+
},
|
|
13800
|
+
},
|
|
13801
|
+
'200': {
|
|
13802
|
+
name: '4-20mA Pass Through',
|
|
13803
|
+
parse: (d) => {
|
|
13804
|
+
var adc1 = signInt(d.slice(0, 2).reduce(msbLsb));
|
|
13805
|
+
var adc2 = signInt(d.slice(2, 4).reduce(msbLsb));
|
|
13806
|
+
var dac1 = signInt(d.slice(4, 6).reduce(msbLsb));
|
|
13807
|
+
return {
|
|
13808
|
+
adc1: adc1,
|
|
13809
|
+
adc2: adc2,
|
|
13810
|
+
dac1: dac1,
|
|
13811
|
+
mA1: parseFloat((adc1/100.00).toFixed(2)),
|
|
13812
|
+
raw_adc: adc2,
|
|
13813
|
+
raw_dac: dac1
|
|
13814
|
+
};
|
|
13815
|
+
}
|
|
13816
|
+
},
|
|
13817
|
+
'202': {
|
|
13818
|
+
name: 'Wireless Weather Station',
|
|
13819
|
+
parse: (payload, parsed, mac) => {
|
|
13820
|
+
return {
|
|
13821
|
+
Temp: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
|
|
13822
|
+
Humid: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
|
|
13823
|
+
Pressure: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 100,
|
|
13824
|
+
WindSpd: signInt(payload.slice(20, 24).reduce(msbLsb),32) / 100,
|
|
13825
|
+
WindDir: signInt(payload.slice(24, 28).reduce(msbLsb),32) / 100,
|
|
13826
|
+
reserve: payload[7]
|
|
13827
|
+
};
|
|
13828
|
+
}
|
|
13829
|
+
},
|
|
13830
|
+
'211': {
|
|
13831
|
+
name: 'DO and Flow Sensor',
|
|
13832
|
+
parse: (payload, parsed, mac) => {
|
|
13833
|
+
if(payload[0] == 0){ // regular
|
|
13834
|
+
return {
|
|
13835
|
+
msg_type: 'regular',
|
|
13836
|
+
temperature: signInt(payload.slice(1, 3).reduce(msbLsb), 16),
|
|
13837
|
+
oxygen_saturation_percent: payload.slice(3, 7).reduce(msbLsb),
|
|
13838
|
+
oxygen_ppm: payload.slice(7, 11).reduce(msbLsb),
|
|
13839
|
+
oxygen_mg_l: payload.slice(11, 15).reduce(msbLsb)
|
|
13840
|
+
};
|
|
13841
|
+
}
|
|
13842
|
+
else{ // theshold
|
|
13843
|
+
let solenoid_status = payload[2];
|
|
13844
|
+
if(solenoid_status == 1){ // Solenoid On
|
|
13845
|
+
return {
|
|
13846
|
+
msg_type: 'threshold',
|
|
13847
|
+
solenoid_number: payload[1],
|
|
13848
|
+
solenoid_status: 'on',
|
|
13849
|
+
temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
|
|
13850
|
+
oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
|
|
13851
|
+
oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
|
|
13852
|
+
oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb),
|
|
13853
|
+
flow_rate: payload.slice(17, 21).reduce(msbLsb)
|
|
13854
|
+
};
|
|
13855
|
+
} else{ // Solenoid Off
|
|
13856
|
+
return {
|
|
13857
|
+
msg_type: 'threshold',
|
|
13858
|
+
solenoid_number: payload[1],
|
|
13859
|
+
solenoid_status: 'off',
|
|
13860
|
+
temperature: signInt(payload.slice(3, 5).reduce(msbLsb), 16),
|
|
13861
|
+
oxygen_saturation_percent: payload.slice(5, 9).reduce(msbLsb),
|
|
13862
|
+
oxygen_ppm: payload.slice(9, 13).reduce(msbLsb),
|
|
13863
|
+
oxygen_mg_l: payload.slice(13, 17).reduce(msbLsb)
|
|
13864
|
+
};
|
|
13865
|
+
}
|
|
13866
|
+
}
|
|
13867
|
+
},
|
|
13868
|
+
'parse_fly': (frame) => {
|
|
13869
|
+
return {
|
|
13870
|
+
'firmware': frame[2],
|
|
13871
|
+
'hardware_id': frame.slice(12, 15),
|
|
13872
|
+
'report_rate': frame.slice(15, 19).reduce(msbLsb) + "Sec",
|
|
13873
|
+
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
|
|
13874
|
+
'machine_values': {
|
|
13875
|
+
'firmware': frame[2],
|
|
13876
|
+
'hardware_id': frame.slice(12, 15),
|
|
13877
|
+
'report_rate': frame.slice(15, 19),
|
|
13878
|
+
'tx_life_counter': frame.slice(19, 23)
|
|
13879
|
+
}
|
|
13880
|
+
}
|
|
13881
|
+
}
|
|
13882
|
+
},
|
|
13883
|
+
'217': {
|
|
13884
|
+
name: 'Wireless Weight Scale',
|
|
13885
|
+
parse: (d) => {
|
|
13886
|
+
return {
|
|
13887
|
+
weight: signInt(d.slice(0, 4).reduce(msbLsb)) / 100
|
|
13888
|
+
};
|
|
13889
|
+
}
|
|
13890
|
+
},
|
|
13891
|
+
'270': {
|
|
13892
|
+
name: 'Custom Salinity DO sensor',
|
|
13893
|
+
parse: (d) => {
|
|
13894
|
+
return {
|
|
13895
|
+
sensor_status: d[0],
|
|
13896
|
+
do_temperature_1: d.slice(1, 3).reduce(msbLsb) / 100,
|
|
13897
|
+
do_temperature_2: d.slice(3, 5).reduce(msbLsb) / 100,
|
|
13898
|
+
do_temperature_3: d.slice(5, 7).reduce(msbLsb) / 100,
|
|
13899
|
+
do_temperature_4: d.slice(7, 9).reduce(msbLsb) / 100,
|
|
13900
|
+
ec_temperature_1: d.slice(9, 11).reduce(msbLsb) / 100,
|
|
13901
|
+
ec_temperature_2: d.slice(11, 13).reduce(msbLsb) / 100,
|
|
13902
|
+
ec_temperature_3: d.slice(13, 15).reduce(msbLsb) / 100,
|
|
13903
|
+
ec_temperature_4: d.slice(15, 17).reduce(msbLsb) / 100,
|
|
13904
|
+
do_saturation_perc_1: d.slice(17, 19).reduce(msbLsb) / 100,
|
|
13905
|
+
do_saturation_perc_2: d.slice(19, 21).reduce(msbLsb) / 100,
|
|
13906
|
+
do_saturation_perc_3: d.slice(21, 23).reduce(msbLsb) / 100,
|
|
13907
|
+
do_saturation_perc_4: d.slice(23, 25).reduce(msbLsb) / 100,
|
|
13908
|
+
do_ppm_1: d.slice(25, 27).reduce(msbLsb) / 100,
|
|
13909
|
+
do_ppm_2: d.slice(27, 29).reduce(msbLsb) / 100,
|
|
13910
|
+
do_ppm_3: d.slice(29, 31).reduce(msbLsb) / 100,
|
|
13911
|
+
do_ppm_4: d.slice(31, 33).reduce(msbLsb) / 100,
|
|
13912
|
+
do_mgl_1: d.slice(33, 35).reduce(msbLsb) / 100,
|
|
13913
|
+
do_mgl_2: d.slice(35, 37).reduce(msbLsb) / 100,
|
|
13914
|
+
do_mgl_3: d.slice(37, 39).reduce(msbLsb) / 100,
|
|
13915
|
+
do_mgl_4: d.slice(39, 41).reduce(msbLsb) / 100,
|
|
13916
|
+
ec_conductivity_1: d.slice(41, 43).reduce(msbLsb) / 100,
|
|
13917
|
+
ec_conductivity_2: d.slice(43, 45).reduce(msbLsb) / 100,
|
|
13918
|
+
ec_conductivity_3: d.slice(45, 47).reduce(msbLsb) / 100,
|
|
13919
|
+
ec_conductivity_4: d.slice(47, 49).reduce(msbLsb) / 100,
|
|
13920
|
+
ec_salinity_ppt_1: d.slice(49, 57).reduce(msbLsb) / 100,
|
|
13921
|
+
ec_salinity_ppt_2: d.slice(57, 65).reduce(msbLsb) / 100,
|
|
13922
|
+
ec_salinity_ppt_3: d.slice(65, 73).reduce(msbLsb) / 100,
|
|
13923
|
+
ec_salinity_ppt_4: d.slice(73, 81).reduce(msbLsb) / 100,
|
|
13924
|
+
ec_tds_1: d.slice(81, 85).reduce(msbLsb) / 100,
|
|
13925
|
+
ec_tds_2: d.slice(85, 89).reduce(msbLsb) / 100,
|
|
13926
|
+
ec_tds_3: d.slice(89, 93).reduce(msbLsb) / 100,
|
|
13927
|
+
ec_tds_4: d.slice(93, 97).reduce(msbLsb) / 100
|
|
13928
|
+
};
|
|
13929
|
+
},
|
|
13930
|
+
'parse_fly': (frame) => {
|
|
13931
|
+
return {
|
|
13932
|
+
'firmware': frame[2],
|
|
13933
|
+
'do_bootup_time': frame[12] + "Sec",
|
|
13934
|
+
'ec_bootup_time': frame[13] + "Sec",
|
|
13935
|
+
'device_ids_do_sensors': frame.slice(14, 18),
|
|
13936
|
+
'device_ids_ec_sensors': frame.slice(18, 22),
|
|
13937
|
+
'hardware_id': frame.slice(22, 25),
|
|
13938
|
+
'report_rate': frame.slice(25, 29).reduce(msbLsb) + "Sec",
|
|
13939
|
+
'tx_life_counter': frame.slice(29, 33).reduce(msbLsb),
|
|
13940
|
+
'machine_values': {
|
|
13941
|
+
'firmware': frame[2],
|
|
13942
|
+
'do_bootup_time': frame[12],
|
|
13943
|
+
'ec_bootup_time': frame[13],
|
|
13944
|
+
'device_ids_do_sensors': frame.slice(14, 18),
|
|
13945
|
+
'device_ids_ec_sensors': frame.slice(18, 22),
|
|
13946
|
+
'hardware_id': frame.slice(22, 25),
|
|
13947
|
+
'report_rate': frame.slice(25, 29),
|
|
13948
|
+
'tx_life_counter': frame.slice(29, 33)
|
|
13949
|
+
}
|
|
13950
|
+
}
|
|
13951
|
+
}
|
|
13952
|
+
},
|
|
13953
|
+
'502': {
|
|
13954
|
+
name: 'Custom Environmental Sensor',
|
|
12688
13955
|
parse: (d, full) => {
|
|
12689
13956
|
reserve = full[7];
|
|
12690
13957
|
if (reserve == 0xAA){
|
|
@@ -13802,8 +15069,682 @@ function sensor_types(parent){
|
|
|
13802
15069
|
};
|
|
13803
15070
|
}
|
|
13804
15071
|
},
|
|
13805
|
-
'
|
|
13806
|
-
name: '
|
|
15072
|
+
'536': {
|
|
15073
|
+
name: 'Wireless Oxygen Flow Meter',
|
|
15074
|
+
parse: (payload, parsed) => {
|
|
15075
|
+
return {
|
|
15076
|
+
error_status: payload[0],
|
|
15077
|
+
s1_oxygen_temp: payload.slice(1, 3).reduce(msbLsb)/100,
|
|
15078
|
+
s2_oxygen_temp: payload.slice(3, 5).reduce(msbLsb)/100,
|
|
15079
|
+
s3_oxygen_temp: payload.slice(5, 7).reduce(msbLsb)/100,
|
|
15080
|
+
s4_oxygen_temp: payload.slice(7, 9).reduce(msbLsb)/100,
|
|
15081
|
+
s1_saturation_percent: payload.slice(9, 13).reduce(msbLsb)/100,
|
|
15082
|
+
s2_saturation_percent: payload.slice(13, 17).reduce(msbLsb)/100,
|
|
15083
|
+
s3_saturation_percent: payload.slice(17, 21).reduce(msbLsb)/100,
|
|
15084
|
+
s4_saturation_percent: payload.slice(21, 25).reduce(msbLsb)/100,
|
|
15085
|
+
s1_oxigen_ppm: payload.slice(25, 29).reduce(msbLsb)/100,
|
|
15086
|
+
s2_oxigen_ppm: payload.slice(29, 33).reduce(msbLsb)/100,
|
|
15087
|
+
s3_oxigen_ppm: payload.slice(33, 37).reduce(msbLsb)/100,
|
|
15088
|
+
s4_oxigen_ppm: payload.slice(37, 41).reduce(msbLsb)/100,
|
|
15089
|
+
s1_oxigen_mg_l: payload.slice(41, 45).reduce(msbLsb)/100,
|
|
15090
|
+
s2_oxigen_mg_l: payload.slice(45, 49).reduce(msbLsb)/100,
|
|
15091
|
+
s3_oxigen_mg_l: payload.slice(49, 53).reduce(msbLsb)/100,
|
|
15092
|
+
s4_oxigen_mg_l: payload.slice(53, 57).reduce(msbLsb)/100,
|
|
15093
|
+
s1_flow_rate: payload.slice(57, 61).reduce(msbLsb)/100,
|
|
15094
|
+
s2_flow_rate: payload.slice(61, 65).reduce(msbLsb)/100,
|
|
15095
|
+
s3_flow_rate: payload.slice(65, 69).reduce(msbLsb)/100,
|
|
15096
|
+
s4_flow_rate: payload.slice(69, 73).reduce(msbLsb)/100,
|
|
15097
|
+
s1_solenoid_status: payload[73],
|
|
15098
|
+
s2_solenoid_status: payload[74],
|
|
15099
|
+
s3_solenoid_status: payload[75],
|
|
15100
|
+
s4_solenoid_status: payload[76]
|
|
15101
|
+
}
|
|
15102
|
+
},
|
|
15103
|
+
'parse_fly': (frame) => {
|
|
15104
|
+
return {
|
|
15105
|
+
'firmware': frame[2],
|
|
15106
|
+
'oxygen_bootup_time': frame[12] + 'sec',
|
|
15107
|
+
'flow_bootup_time': frame[13]+ 'sec',
|
|
15108
|
+
's1_oxygen_addr': frame[14],
|
|
15109
|
+
's2_oxygen_addr': frame[15],
|
|
15110
|
+
's3_oxygen_addr': frame[16],
|
|
15111
|
+
's4_oxygen_addr': frame[17],
|
|
15112
|
+
's1_flow_addr': frame[18],
|
|
15113
|
+
's2_flow_addr': frame[19],
|
|
15114
|
+
's3_flow_addr': frame[20],
|
|
15115
|
+
's4_flow_addr': frame[21],
|
|
15116
|
+
'hardware_id': frame.slice(22, 25),
|
|
15117
|
+
'report_rate': frame.slice(25, 29).reduce(msbLsb) + 'sec',
|
|
15118
|
+
'tx_life_counter': frame.slice(29, 33).reduce(msbLsb),
|
|
15119
|
+
'machine_values': {
|
|
15120
|
+
'firmware': frame[2],
|
|
15121
|
+
'oxygen_bootup_time': frame[12],
|
|
15122
|
+
'flow_bootup_time': frame[13],
|
|
15123
|
+
's1_oxygen_addr': frame[14],
|
|
15124
|
+
's2_oxygen_addr': frame[15],
|
|
15125
|
+
's3_oxygen_addr': frame[16],
|
|
15126
|
+
's4_oxygen_addr': frame[17],
|
|
15127
|
+
's1_flow_addr': frame[18],
|
|
15128
|
+
's2_flow_addr': frame[19],
|
|
15129
|
+
's3_flow_addr': frame[20],
|
|
15130
|
+
's4_flow_addr': frame[21],
|
|
15131
|
+
'hardware_id': frame.slice(22, 25),
|
|
15132
|
+
'report_rate': frame.slice(25, 29),
|
|
15133
|
+
'tx_life_counter': frame.slice(29, 33)
|
|
15134
|
+
}
|
|
15135
|
+
}
|
|
15136
|
+
}
|
|
15137
|
+
},
|
|
15138
|
+
'537': {
|
|
15139
|
+
name: 'Type 537 - Custom Standalone Smart Vibration Sensor',
|
|
15140
|
+
parse: (payload, parsed, mac) => {
|
|
15141
|
+
if(payload[7] >> 1 != 0){
|
|
15142
|
+
console.log('Error found');
|
|
15143
|
+
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
15144
|
+
return parsed;
|
|
15145
|
+
}
|
|
15146
|
+
|
|
15147
|
+
if(payload[8] === 1){
|
|
15148
|
+
var deviceAddr = mac;
|
|
15149
|
+
var firmware = payload[1];
|
|
15150
|
+
var hour = payload[11];
|
|
15151
|
+
var minute = payload[12];
|
|
15152
|
+
var expected_packets = payload[15];
|
|
15153
|
+
var current_packet = payload[16];
|
|
15154
|
+
var sdata_start = 17;
|
|
15155
|
+
|
|
15156
|
+
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
15157
|
+
if(expected_packets != 1){
|
|
15158
|
+
// 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
|
|
15159
|
+
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
|
|
15160
|
+
console.log('-----');
|
|
15161
|
+
console.log('bad packet breakdown deleting stream');
|
|
15162
|
+
console.log(current_packet);
|
|
15163
|
+
console.log(expected_packets);
|
|
15164
|
+
console.log(current_packet in globalDevices[deviceAddr].data);
|
|
15165
|
+
console.log(current_packet == 1);
|
|
15166
|
+
console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
|
|
15167
|
+
if(this.hasOwnProperty('failure_no')){
|
|
15168
|
+
this.failure_no = this.failure_no + 1;
|
|
15169
|
+
}
|
|
15170
|
+
else{
|
|
15171
|
+
this.failure_no = 1;
|
|
15172
|
+
}
|
|
15173
|
+
if(this.hasOwnProperty('failure_no')){
|
|
15174
|
+
console.log('####falure no');
|
|
15175
|
+
console.log(this.failure_no);
|
|
15176
|
+
}
|
|
15177
|
+
// console.log(globalDevices[deviceAddr].data);
|
|
15178
|
+
delete globalDevices[deviceAddr];
|
|
15179
|
+
if(current_packet != 1){
|
|
15180
|
+
return;
|
|
15181
|
+
} else{
|
|
15182
|
+
|
|
15183
|
+
var mode = payload[8];
|
|
15184
|
+
var odr = payload[9];
|
|
15185
|
+
var en_axis = payload[10] & 7;
|
|
15186
|
+
var fsr = payload[10] >> 5;
|
|
15187
|
+
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
15188
|
+
|
|
15189
|
+
|
|
15190
|
+
switch(odr){
|
|
15191
|
+
case 6:
|
|
15192
|
+
odr = 50;
|
|
15193
|
+
break;
|
|
15194
|
+
case 7:
|
|
15195
|
+
odr = 100;
|
|
15196
|
+
break;
|
|
15197
|
+
case 8:
|
|
15198
|
+
odr = 200;
|
|
15199
|
+
break;
|
|
15200
|
+
case 9:
|
|
15201
|
+
odr = 400;
|
|
15202
|
+
break;
|
|
15203
|
+
case 10:
|
|
15204
|
+
odr = 800;
|
|
15205
|
+
break;
|
|
15206
|
+
case 11:
|
|
15207
|
+
odr = 1600;
|
|
15208
|
+
break;
|
|
15209
|
+
case 12:
|
|
15210
|
+
odr = 3200;
|
|
15211
|
+
break;
|
|
15212
|
+
case 13:
|
|
15213
|
+
odr = 6400;
|
|
15214
|
+
break;
|
|
15215
|
+
case 14:
|
|
15216
|
+
odr = 12800;
|
|
15217
|
+
break;
|
|
15218
|
+
case 15:
|
|
15219
|
+
odr = 25600;
|
|
15220
|
+
break;
|
|
15221
|
+
default:
|
|
15222
|
+
odr = 0;
|
|
15223
|
+
}
|
|
15224
|
+
|
|
15225
|
+
globalDevices[deviceAddr] = {
|
|
15226
|
+
// stream_size: expected_packets,
|
|
15227
|
+
data: {},
|
|
15228
|
+
odr: odr,
|
|
15229
|
+
mo: mode,
|
|
15230
|
+
en_axis: en_axis,
|
|
15231
|
+
fsr: fsr,
|
|
15232
|
+
hour: hour,
|
|
15233
|
+
minute: minute,
|
|
15234
|
+
device_temp: device_temp,
|
|
15235
|
+
}
|
|
15236
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
15237
|
+
return;
|
|
15238
|
+
}
|
|
15239
|
+
}
|
|
15240
|
+
else{
|
|
15241
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
15242
|
+
}
|
|
15243
|
+
}
|
|
15244
|
+
else{
|
|
15245
|
+
var mode = payload[8];
|
|
15246
|
+
var odr = payload[9];
|
|
15247
|
+
var en_axis = payload[10] & 7;
|
|
15248
|
+
var fsr = payload[10] >> 5;
|
|
15249
|
+
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
15250
|
+
|
|
15251
|
+
|
|
15252
|
+
switch(odr){
|
|
15253
|
+
case 6:
|
|
15254
|
+
odr = 50;
|
|
15255
|
+
break;
|
|
15256
|
+
case 7:
|
|
15257
|
+
odr = 100;
|
|
15258
|
+
break;
|
|
15259
|
+
case 8:
|
|
15260
|
+
odr = 200;
|
|
15261
|
+
break;
|
|
15262
|
+
case 9:
|
|
15263
|
+
odr = 400;
|
|
15264
|
+
break;
|
|
15265
|
+
case 10:
|
|
15266
|
+
odr = 800;
|
|
15267
|
+
break;
|
|
15268
|
+
case 11:
|
|
15269
|
+
odr = 1600;
|
|
15270
|
+
break;
|
|
15271
|
+
case 12:
|
|
15272
|
+
odr = 3200;
|
|
15273
|
+
break;
|
|
15274
|
+
case 13:
|
|
15275
|
+
odr = 6400;
|
|
15276
|
+
break;
|
|
15277
|
+
case 14:
|
|
15278
|
+
odr = 12800;
|
|
15279
|
+
break;
|
|
15280
|
+
case 15:
|
|
15281
|
+
odr = 25600;
|
|
15282
|
+
break;
|
|
15283
|
+
default:
|
|
15284
|
+
odr = 0;
|
|
15285
|
+
}
|
|
15286
|
+
|
|
15287
|
+
globalDevices[deviceAddr] = {
|
|
15288
|
+
// stream_size: expected_packets,
|
|
15289
|
+
data: {},
|
|
15290
|
+
odr: odr,
|
|
15291
|
+
mo: mode,
|
|
15292
|
+
en_axis: en_axis,
|
|
15293
|
+
fsr: fsr,
|
|
15294
|
+
hour: hour,
|
|
15295
|
+
minute: minute,
|
|
15296
|
+
device_temp: device_temp,
|
|
15297
|
+
}
|
|
15298
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
15299
|
+
}
|
|
15300
|
+
if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
|
|
15301
|
+
var raw_data = new Array();
|
|
15302
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
15303
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
15304
|
+
}
|
|
15305
|
+
var label = 0;
|
|
15306
|
+
|
|
15307
|
+
var fft = new Array();
|
|
15308
|
+
var fft_concat = {};
|
|
15309
|
+
|
|
15310
|
+
var en_axis_data = {};
|
|
15311
|
+
switch (globalDevices[deviceAddr].en_axis){
|
|
15312
|
+
case 1:
|
|
15313
|
+
en_axis_data.x_offset = 0;
|
|
15314
|
+
en_axis_data.increment = 2;
|
|
15315
|
+
break;
|
|
15316
|
+
case 2:
|
|
15317
|
+
en_axis_data.y_offset = 0;
|
|
15318
|
+
en_axis_data.increment = 2;
|
|
15319
|
+
break;
|
|
15320
|
+
case 3:
|
|
15321
|
+
en_axis_data.x_offset = 0;
|
|
15322
|
+
en_axis_data.y_offset = 2;
|
|
15323
|
+
en_axis_data.increment = 4;
|
|
15324
|
+
break;
|
|
15325
|
+
case 4:
|
|
15326
|
+
en_axis_data.z_offset = 0;
|
|
15327
|
+
en_axis_data.increment = 2;
|
|
15328
|
+
break;
|
|
15329
|
+
case 5:
|
|
15330
|
+
en_axis_data.x_offset = 0;
|
|
15331
|
+
en_axis_data.z_offset = 2;
|
|
15332
|
+
en_axis_data.increment = 4;
|
|
15333
|
+
break;
|
|
15334
|
+
case 6:
|
|
15335
|
+
en_axis_data.y_offset = 0;
|
|
15336
|
+
en_axis_data.z_offset = 2;
|
|
15337
|
+
en_axis_data.increment = 4;
|
|
15338
|
+
break;
|
|
15339
|
+
case 7:
|
|
15340
|
+
en_axis_data.x_offset = 0;
|
|
15341
|
+
en_axis_data.y_offset = 2;
|
|
15342
|
+
en_axis_data.z_offset = 4;
|
|
15343
|
+
en_axis_data.increment = 6;
|
|
15344
|
+
break;
|
|
15345
|
+
default:
|
|
15346
|
+
en_axis_data.increment = 0;
|
|
15347
|
+
}
|
|
15348
|
+
|
|
15349
|
+
var fsr_mult = .00006;
|
|
15350
|
+
var fsr_text = "";
|
|
15351
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
15352
|
+
case 0:
|
|
15353
|
+
fsr_mult = 0.00006;
|
|
15354
|
+
break;
|
|
15355
|
+
case 1:
|
|
15356
|
+
fsr_mult = 0.00012;
|
|
15357
|
+
break;
|
|
15358
|
+
case 2:
|
|
15359
|
+
fsr_mult = 0.00024;
|
|
15360
|
+
break;
|
|
15361
|
+
case 3:
|
|
15362
|
+
fsr_mult = 0.00049;
|
|
15363
|
+
break;
|
|
15364
|
+
}
|
|
15365
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
15366
|
+
case 0:
|
|
15367
|
+
fsr_text = "2g";
|
|
15368
|
+
break;
|
|
15369
|
+
case 1:
|
|
15370
|
+
fsr_text = "4g";
|
|
15371
|
+
break;
|
|
15372
|
+
case 2:
|
|
15373
|
+
fsr_text = "8g";
|
|
15374
|
+
break;
|
|
15375
|
+
case 3:
|
|
15376
|
+
fsr_text = "16g";
|
|
15377
|
+
break;
|
|
15378
|
+
}
|
|
15379
|
+
|
|
15380
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
15381
|
+
label++;
|
|
15382
|
+
|
|
15383
|
+
fft_concat[label] = {};
|
|
15384
|
+
|
|
15385
|
+
if('x_offset' in en_axis_data){
|
|
15386
|
+
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));
|
|
15387
|
+
}
|
|
15388
|
+
if('y_offset' in en_axis_data){
|
|
15389
|
+
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));
|
|
15390
|
+
}
|
|
15391
|
+
if('z_offset' in en_axis_data){
|
|
15392
|
+
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));
|
|
15393
|
+
}
|
|
15394
|
+
}
|
|
15395
|
+
var fft_concat_obj = {
|
|
15396
|
+
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
15397
|
+
mac_address: deviceAddr,
|
|
15398
|
+
en_axis: globalDevices[deviceAddr].en_axis,
|
|
15399
|
+
fsr: fsr_text,
|
|
15400
|
+
odr: globalDevices[deviceAddr].odr,
|
|
15401
|
+
device_temp: globalDevices[deviceAddr].device_temp,
|
|
15402
|
+
data: fft_concat
|
|
15403
|
+
};
|
|
15404
|
+
sensor_data = fft_concat_obj;
|
|
15405
|
+
delete globalDevices[deviceAddr];
|
|
15406
|
+
if(this.hasOwnProperty('failure_no')){
|
|
15407
|
+
console.log('####falure no');
|
|
15408
|
+
console.log(this.failure_no);
|
|
15409
|
+
}
|
|
15410
|
+
|
|
15411
|
+
return sensor_data;
|
|
15412
|
+
}
|
|
15413
|
+
else{
|
|
15414
|
+
return;
|
|
15415
|
+
}
|
|
15416
|
+
}else{
|
|
15417
|
+
|
|
15418
|
+
var mode = payload[8];
|
|
15419
|
+
var odr = payload[9];
|
|
15420
|
+
var en_axis = payload[10] & 7;
|
|
15421
|
+
var fsr = payload[10] >> 5;
|
|
15422
|
+
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
15423
|
+
|
|
15424
|
+
|
|
15425
|
+
switch(odr){
|
|
15426
|
+
case 6:
|
|
15427
|
+
odr = 50;
|
|
15428
|
+
break;
|
|
15429
|
+
case 7:
|
|
15430
|
+
odr = 100;
|
|
15431
|
+
break;
|
|
15432
|
+
case 8:
|
|
15433
|
+
odr = 200;
|
|
15434
|
+
break;
|
|
15435
|
+
case 9:
|
|
15436
|
+
odr = 400;
|
|
15437
|
+
break;
|
|
15438
|
+
case 10:
|
|
15439
|
+
odr = 800;
|
|
15440
|
+
break;
|
|
15441
|
+
case 11:
|
|
15442
|
+
odr = 1600;
|
|
15443
|
+
break;
|
|
15444
|
+
case 12:
|
|
15445
|
+
odr = 3200;
|
|
15446
|
+
break;
|
|
15447
|
+
case 13:
|
|
15448
|
+
odr = 6400;
|
|
15449
|
+
break;
|
|
15450
|
+
case 14:
|
|
15451
|
+
odr = 12800;
|
|
15452
|
+
break;
|
|
15453
|
+
case 15:
|
|
15454
|
+
odr = 25600;
|
|
15455
|
+
break;
|
|
15456
|
+
default:
|
|
15457
|
+
odr = 0;
|
|
15458
|
+
}
|
|
15459
|
+
|
|
15460
|
+
globalDevices[deviceAddr] = {
|
|
15461
|
+
// stream_size: expected_packets,
|
|
15462
|
+
data: {},
|
|
15463
|
+
odr: odr,
|
|
15464
|
+
mo: mode,
|
|
15465
|
+
en_axis: en_axis,
|
|
15466
|
+
fsr: fsr,
|
|
15467
|
+
hour: hour,
|
|
15468
|
+
minute: minute,
|
|
15469
|
+
device_temp: device_temp,
|
|
15470
|
+
}
|
|
15471
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
15472
|
+
return;
|
|
15473
|
+
}
|
|
15474
|
+
}
|
|
15475
|
+
else if(payload[8] === 0 || payload[8] === 2){
|
|
15476
|
+
// mode byte most significant bit will indicate fft data.
|
|
15477
|
+
// console.log(d);
|
|
15478
|
+
var odr;
|
|
15479
|
+
switch(payload[9]){
|
|
15480
|
+
case 6:
|
|
15481
|
+
odr = "50Hz"
|
|
15482
|
+
break;
|
|
15483
|
+
case 7:
|
|
15484
|
+
odr = "100Hz";
|
|
15485
|
+
break;
|
|
15486
|
+
case 8:
|
|
15487
|
+
odr = "200Hz";
|
|
15488
|
+
break;
|
|
15489
|
+
case 9:
|
|
15490
|
+
odr = "400Hz";
|
|
15491
|
+
break;
|
|
15492
|
+
case 10:
|
|
15493
|
+
odr = "800Hz";
|
|
15494
|
+
break;
|
|
15495
|
+
case 11:
|
|
15496
|
+
odr = "1600Hz";
|
|
15497
|
+
break;
|
|
15498
|
+
case 12:
|
|
15499
|
+
odr = "3200Hz";
|
|
15500
|
+
break;
|
|
15501
|
+
case 13:
|
|
15502
|
+
odr = "6400Hz";
|
|
15503
|
+
break;
|
|
15504
|
+
case 14:
|
|
15505
|
+
odr = "12800Hz";
|
|
15506
|
+
break;
|
|
15507
|
+
case 15:
|
|
15508
|
+
odr = "25600Hz";
|
|
15509
|
+
break;
|
|
15510
|
+
}
|
|
15511
|
+
return {
|
|
15512
|
+
mode: payload[8],
|
|
15513
|
+
|
|
15514
|
+
odr: odr,
|
|
15515
|
+
temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
15516
|
+
|
|
15517
|
+
x_rms_ACC_G: payload.slice(12, 14).reduce(msbLsb)/1000,
|
|
15518
|
+
x_max_ACC_G: payload.slice(14, 16).reduce(msbLsb)/1000,
|
|
15519
|
+
x_velocity_mm_sec: payload.slice(16, 18).reduce(msbLsb) / 100,
|
|
15520
|
+
x_displacement_mm: payload.slice(18, 20).reduce(msbLsb) / 100,
|
|
15521
|
+
x_peak_one_Hz: payload.slice(20, 22).reduce(msbLsb),
|
|
15522
|
+
x_peak_two_Hz: payload.slice(22, 24).reduce(msbLsb),
|
|
15523
|
+
x_peak_three_Hz: payload.slice(24, 26).reduce(msbLsb),
|
|
15524
|
+
|
|
15525
|
+
y_rms_ACC_G: payload.slice(26, 28).reduce(msbLsb)/1000,
|
|
15526
|
+
y_max_ACC_G: payload.slice(28, 30).reduce(msbLsb)/1000,
|
|
15527
|
+
y_velocity_mm_sec: payload.slice(30, 32).reduce(msbLsb) / 100,
|
|
15528
|
+
y_displacement_mm: payload.slice(32, 34).reduce(msbLsb) / 100,
|
|
15529
|
+
y_peak_one_Hz: payload.slice(34, 36).reduce(msbLsb),
|
|
15530
|
+
y_peak_two_Hz: payload.slice(36, 38).reduce(msbLsb),
|
|
15531
|
+
y_peak_three_Hz: payload.slice(38, 40).reduce(msbLsb),
|
|
15532
|
+
|
|
15533
|
+
z_rms_ACC_G: payload.slice(40, 42).reduce(msbLsb)/1000,
|
|
15534
|
+
z_max_ACC_G: payload.slice(42, 44).reduce(msbLsb)/1000,
|
|
15535
|
+
z_velocity_mm_sec: payload.slice(44, 46).reduce(msbLsb) / 100,
|
|
15536
|
+
z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
|
|
15537
|
+
z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
|
|
15538
|
+
z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
|
|
15539
|
+
z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
|
|
15540
|
+
};
|
|
15541
|
+
}
|
|
15542
|
+
// else{
|
|
15543
|
+
// parsed.data = {'error': 'Vibration mode error'}
|
|
15544
|
+
// return parsed;
|
|
15545
|
+
// }
|
|
15546
|
+
},
|
|
15547
|
+
'parse_fly': (frame) => {
|
|
15548
|
+
let frame_data = {};
|
|
15549
|
+
switch(frame[16]){
|
|
15550
|
+
case 0:
|
|
15551
|
+
frame_data.mode = "Processed";
|
|
15552
|
+
break;
|
|
15553
|
+
case 1:
|
|
15554
|
+
frame_data.mode = "Raw";
|
|
15555
|
+
break;
|
|
15556
|
+
case 2:
|
|
15557
|
+
frame_data.mode = "Processed + Raw on demand";
|
|
15558
|
+
break;
|
|
15559
|
+
}
|
|
15560
|
+
switch(frame[17]){
|
|
15561
|
+
case 6:
|
|
15562
|
+
frame_data.odr_1 = 50;
|
|
15563
|
+
break;
|
|
15564
|
+
case 7:
|
|
15565
|
+
frame_data.odr_1 = 100;
|
|
15566
|
+
break;
|
|
15567
|
+
case 8:
|
|
15568
|
+
frame_data.odr_1 = 200;
|
|
15569
|
+
break;
|
|
15570
|
+
case 9:
|
|
15571
|
+
frame_data.odr_1 = 400;
|
|
15572
|
+
break;
|
|
15573
|
+
case 10:
|
|
15574
|
+
frame_data.odr_1 = 800;
|
|
15575
|
+
break;
|
|
15576
|
+
case 11:
|
|
15577
|
+
frame_data.odr_1 = 1600;
|
|
15578
|
+
break;
|
|
15579
|
+
case 12:
|
|
15580
|
+
frame_data.odr_1 = 3200;
|
|
15581
|
+
break;
|
|
15582
|
+
case 13:
|
|
15583
|
+
frame_data.odr_1 = 6400;
|
|
15584
|
+
break;
|
|
15585
|
+
case 14:
|
|
15586
|
+
frame_data.odr_1 = 12800;
|
|
15587
|
+
break;
|
|
15588
|
+
case 15:
|
|
15589
|
+
frame_data.odr_1 = 25600;
|
|
15590
|
+
break;
|
|
15591
|
+
}
|
|
15592
|
+
frame_data.sampling_duration_1 = frame[19]*50 + "ms";
|
|
15593
|
+
switch(frame[21]){
|
|
15594
|
+
case 0:
|
|
15595
|
+
frame_data.filter_status = "Disabled";
|
|
15596
|
+
break;
|
|
15597
|
+
case 1:
|
|
15598
|
+
frame_data.filter_status = "Enabled";
|
|
15599
|
+
break;
|
|
15600
|
+
}
|
|
15601
|
+
switch(frame[22]){
|
|
15602
|
+
case 0:
|
|
15603
|
+
frame_data.lpf_coeff_1 = 4;
|
|
15604
|
+
break;
|
|
15605
|
+
case 1:
|
|
15606
|
+
frame_data.lpf_coeff_1 = 8;
|
|
15607
|
+
break;
|
|
15608
|
+
case 2:
|
|
15609
|
+
frame_data.lpf_coeff_1 = 16;
|
|
15610
|
+
break;
|
|
15611
|
+
case 2:
|
|
15612
|
+
frame_data.lpf_coeff_1 = 32;
|
|
15613
|
+
break;
|
|
15614
|
+
case 4:
|
|
15615
|
+
frame_data.lpf_coeff_1 = 64;
|
|
15616
|
+
break;
|
|
15617
|
+
case 5:
|
|
15618
|
+
frame_data.lpf_coeff_1 = 128;
|
|
15619
|
+
break;
|
|
15620
|
+
case 6:
|
|
15621
|
+
frame_data.lpf_coeff_1 = 256;
|
|
15622
|
+
break;
|
|
15623
|
+
case 7:
|
|
15624
|
+
frame_data.lpf_coeff_1 = 512;
|
|
15625
|
+
break;
|
|
15626
|
+
case 8:
|
|
15627
|
+
frame_data.lpf_coeff_1 = 1024;
|
|
15628
|
+
break;
|
|
15629
|
+
case 9:
|
|
15630
|
+
frame_data.lpf_coeff_1 = 2048;
|
|
15631
|
+
break;
|
|
15632
|
+
}
|
|
15633
|
+
frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
|
|
15634
|
+
switch(frame[24]){
|
|
15635
|
+
case 0:
|
|
15636
|
+
frame_data.hpf_coeff_1 = 4;
|
|
15637
|
+
break;
|
|
15638
|
+
case 1:
|
|
15639
|
+
frame_data.hpf_coeff_1 = 8;
|
|
15640
|
+
break;
|
|
15641
|
+
case 2:
|
|
15642
|
+
frame_data.hpf_coeff_1 = 16;
|
|
15643
|
+
break;
|
|
15644
|
+
case 2:
|
|
15645
|
+
frame_data.hpf_coeff_1 = 32;
|
|
15646
|
+
break;
|
|
15647
|
+
case 4:
|
|
15648
|
+
frame_data.hpf_coeff_1 = 64;
|
|
15649
|
+
break;
|
|
15650
|
+
case 5:
|
|
15651
|
+
frame_data.hpf_coeff_1 = 128;
|
|
15652
|
+
break;
|
|
15653
|
+
case 6:
|
|
15654
|
+
frame_data.hpf_coeff_1 = 256;
|
|
15655
|
+
break;
|
|
15656
|
+
case 7:
|
|
15657
|
+
frame_data.hpf_coeff_1 = 512;
|
|
15658
|
+
break;
|
|
15659
|
+
case 8:
|
|
15660
|
+
frame_data.hpf_coeff_1 = 1024;
|
|
15661
|
+
break;
|
|
15662
|
+
case 9:
|
|
15663
|
+
frame_data.hpf_coeff_1 = 2048;
|
|
15664
|
+
break;
|
|
15665
|
+
}
|
|
15666
|
+
frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
|
|
15667
|
+
switch(frame[26]){
|
|
15668
|
+
case 0:
|
|
15669
|
+
frame_data.sampling_interval = "5 Minutes";
|
|
15670
|
+
break;
|
|
15671
|
+
case 1:
|
|
15672
|
+
frame_data.sampling_interval = "10 Minutes";
|
|
15673
|
+
break;
|
|
15674
|
+
case 2:
|
|
15675
|
+
frame_data.sampling_interval = "15 Minutes";
|
|
15676
|
+
break;
|
|
15677
|
+
case 2:
|
|
15678
|
+
frame_data.sampling_interval = "20 Minutes";
|
|
15679
|
+
break;
|
|
15680
|
+
case 4:
|
|
15681
|
+
frame_data.sampling_interval = "30 Minutes";
|
|
15682
|
+
break;
|
|
15683
|
+
case 5:
|
|
15684
|
+
frame_data.sampling_interval = "60 Minutes";
|
|
15685
|
+
break;
|
|
15686
|
+
case 6:
|
|
15687
|
+
frame_data.sampling_interval = "120 Minutes";
|
|
15688
|
+
break;
|
|
15689
|
+
case 7:
|
|
15690
|
+
frame_data.sampling_interval = "180 Minutes";
|
|
15691
|
+
break;
|
|
15692
|
+
case 8:
|
|
15693
|
+
frame_data.sampling_interval = "1 Minute";
|
|
15694
|
+
break;
|
|
15695
|
+
}
|
|
15696
|
+
frame_data.on_request_timeout = frame[27] + " Seconds";
|
|
15697
|
+
frame_data.deadband = frame[28] + "mg";
|
|
15698
|
+
|
|
15699
|
+
switch(frame[29]){
|
|
15700
|
+
case 0:
|
|
15701
|
+
frame_data.payload_length = "50 Bytes";
|
|
15702
|
+
break;
|
|
15703
|
+
case 1:
|
|
15704
|
+
frame_data.payload_length = "100 Bytes";
|
|
15705
|
+
break;
|
|
15706
|
+
case 2:
|
|
15707
|
+
frame_data.payload_length = "150 Bytes";
|
|
15708
|
+
break;
|
|
15709
|
+
case 3:
|
|
15710
|
+
frame_data.payload_length = "180 Bytes";
|
|
15711
|
+
break;
|
|
15712
|
+
}
|
|
15713
|
+
|
|
15714
|
+
return {
|
|
15715
|
+
'firmware': frame[2],
|
|
15716
|
+
'destination_address': toMac(frame.slice(12, 16)),
|
|
15717
|
+
'mode': frame_data.mode,
|
|
15718
|
+
'odr_1': frame_data.odr_1+'Hz',
|
|
15719
|
+
'sampling_duration_1': frame_data.sampling_duration_1,
|
|
15720
|
+
'filter_status': frame_data.filter_status,
|
|
15721
|
+
'lpf_coeff_1': frame_data.lpf_coeff_1,
|
|
15722
|
+
'lpf_freq_1': frame_data.lpf_freq_1+'Hz',
|
|
15723
|
+
'hpf_coeff_1': frame_data.hpf_coeff_1,
|
|
15724
|
+
'hpf_freq_1': frame_data.hpf_freq_1+'Hz',
|
|
15725
|
+
'sampling_interval': frame_data.sampling_interval,
|
|
15726
|
+
'on_request_timeout': frame_data.on_request_timeout,
|
|
15727
|
+
'deadband': frame_data.deadband,
|
|
15728
|
+
'payload_length': frame_data.payload_length,
|
|
15729
|
+
'machine_values': {
|
|
15730
|
+
'firmware': frame[2],
|
|
15731
|
+
'destination_address': toMac(frame.slice(12, 16), false),
|
|
15732
|
+
'mode': frame[16],
|
|
15733
|
+
'odr_1': frame[17],
|
|
15734
|
+
'sampling_duration_1': frame[19],
|
|
15735
|
+
'filter_status': frame[21],
|
|
15736
|
+
'lpf_coeff_1': frame[22],
|
|
15737
|
+
'hpf_coeff_1': frame[24],
|
|
15738
|
+
'sampling_interval': frame[26],
|
|
15739
|
+
'on_request_timeout': frame[27],
|
|
15740
|
+
'deadband': frame[28],
|
|
15741
|
+
'payload_length': frame[29]
|
|
15742
|
+
}
|
|
15743
|
+
}
|
|
15744
|
+
}
|
|
15745
|
+
},
|
|
15746
|
+
'538': {
|
|
15747
|
+
name: 'One Channel Vibration Plus',
|
|
13807
15748
|
parse: (payload, parsed, mac) => {
|
|
13808
15749
|
if(payload[7] >> 1 != 0){
|
|
13809
15750
|
console.log('Error found');
|
|
@@ -13823,7 +15764,7 @@ function sensor_types(parent){
|
|
|
13823
15764
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
13824
15765
|
if(expected_packets != 1){
|
|
13825
15766
|
// 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
|
|
13826
|
-
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !((current_packet-1) in globalDevices[deviceAddr].data)) {
|
|
15767
|
+
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
|
|
13827
15768
|
console.log('-----');
|
|
13828
15769
|
console.log('bad packet breakdown deleting stream');
|
|
13829
15770
|
console.log(current_packet);
|
|
@@ -13964,6 +15905,7 @@ function sensor_types(parent){
|
|
|
13964
15905
|
}
|
|
13965
15906
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
13966
15907
|
}
|
|
15908
|
+
|
|
13967
15909
|
if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
|
|
13968
15910
|
var raw_data = new Array();
|
|
13969
15911
|
for(const packet in globalDevices[deviceAddr].data){
|
|
@@ -14410,28 +16352,223 @@ function sensor_types(parent){
|
|
|
14410
16352
|
}
|
|
14411
16353
|
}
|
|
14412
16354
|
},
|
|
14413
|
-
'
|
|
14414
|
-
name: '
|
|
16355
|
+
'539': {
|
|
16356
|
+
name: 'RS485 Modbus Wireless Converter',
|
|
16357
|
+
parse: (d) => {
|
|
16358
|
+
return {
|
|
16359
|
+
subdevice_type: d[0],
|
|
16360
|
+
number_of_registers: d[1],
|
|
16361
|
+
status_24_31: d[2],
|
|
16362
|
+
status_16_23: d[3],
|
|
16363
|
+
status_8_15: d[4],
|
|
16364
|
+
status_0_7: d[5],
|
|
16365
|
+
// TODO we can automatically determine how many registers are here based on the number_of_registers and create data objects appropriately
|
|
16366
|
+
// r1: d.slice(2,4),
|
|
16367
|
+
// r2: d.slice(4,6),
|
|
16368
|
+
// r3: d.slice(6,8),
|
|
16369
|
+
// r4: d.slice(8,10),
|
|
16370
|
+
data: d.slice(6)
|
|
16371
|
+
};
|
|
16372
|
+
},
|
|
16373
|
+
},
|
|
16374
|
+
'540': {
|
|
16375
|
+
name: 'Wireless Ultrasonic Flow Meter FD-Q32C',
|
|
16376
|
+
parse: (d) => {
|
|
16377
|
+
return {
|
|
16378
|
+
raw_adc: d.slice(0, 2).reduce(msbLsb),
|
|
16379
|
+
ma: d.slice(2, 4).reduce(msbLsb) / 100,
|
|
16380
|
+
flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
|
|
16381
|
+
};
|
|
16382
|
+
},
|
|
16383
|
+
'parse_fly': (frame) => {
|
|
16384
|
+
let firmware = frame[2];
|
|
16385
|
+
if(firmware > 13){ // firmware 14 and above
|
|
16386
|
+
let frame_data = {};
|
|
16387
|
+
let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
|
|
16388
|
+
if(!auto_check_interval){
|
|
16389
|
+
frame_data.auto_check_interval = 'Disabled';
|
|
16390
|
+
}else{
|
|
16391
|
+
frame_data.auto_check_interval = auto_check_interval + " sec";
|
|
16392
|
+
}
|
|
16393
|
+
frame_data.always_on = frame[24]?"Enabled":"Disabled";
|
|
16394
|
+
switch(frame[16]){
|
|
16395
|
+
case 0:
|
|
16396
|
+
frame_data.fsr = "+-6.114 V";
|
|
16397
|
+
break;
|
|
16398
|
+
case 1:
|
|
16399
|
+
frame_data.fsr = "+-4.096 V";
|
|
16400
|
+
break;
|
|
16401
|
+
case 2:
|
|
16402
|
+
frame_data.fsr = "+-2.048 V";
|
|
16403
|
+
break;
|
|
16404
|
+
case 3:
|
|
16405
|
+
frame_data.fsr = "+-1.024 V";
|
|
16406
|
+
break;
|
|
16407
|
+
case 4:
|
|
16408
|
+
frame_data.fsr = "+-0.512 V";
|
|
16409
|
+
break;
|
|
16410
|
+
case 5:
|
|
16411
|
+
frame_data.fsr = "+-0.256 V";
|
|
16412
|
+
break;
|
|
16413
|
+
}
|
|
16414
|
+
return {
|
|
16415
|
+
'firmware': frame[2],
|
|
16416
|
+
'fsr': frame_data.fsr,
|
|
16417
|
+
'boot_time': frame[17] + " sec",
|
|
16418
|
+
'power_adc': frame.slice(18, 20).reduce(msbLsb),
|
|
16419
|
+
'auto_check_interval': frame_data.auto_check_interval,
|
|
16420
|
+
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
16421
|
+
'always_on': frame_data.always_on,
|
|
16422
|
+
'calibration_one': frame.slice(25, 29).reduce(msbLsb),
|
|
16423
|
+
'calibration_two':frame.slice(29, 33).reduce(msbLsb),
|
|
16424
|
+
'calibration_three':frame.slice(33, 37).reduce(msbLsb),
|
|
16425
|
+
'hardware_id': frame.slice(37, 40),
|
|
16426
|
+
'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
|
|
16427
|
+
'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
|
|
16428
|
+
'machine_values': {
|
|
16429
|
+
'firmware': frame[2],
|
|
16430
|
+
'fsr': frame[16],
|
|
16431
|
+
'boot_time': frame[17],
|
|
16432
|
+
'power_adc': frame.slice(18, 20),
|
|
16433
|
+
'auto_check_interval': frame.slice(20, 22),
|
|
16434
|
+
'auto_check_percentage': frame.slice(22, 24),
|
|
16435
|
+
'always_on': frame[24],
|
|
16436
|
+
'calibration_one': frame.slice(25, 29),
|
|
16437
|
+
'calibration_two':frame.slice(29, 33),
|
|
16438
|
+
'calibration_three':frame.slice(33, 37),
|
|
16439
|
+
'hardware_id': frame.slice(37, 40),
|
|
16440
|
+
'report_rate': frame.slice(40, 44),
|
|
16441
|
+
'tx_life_counter': frame.slice(44, 48)
|
|
16442
|
+
}
|
|
16443
|
+
}
|
|
16444
|
+
}
|
|
16445
|
+
}
|
|
16446
|
+
},
|
|
16447
|
+
'541': {
|
|
16448
|
+
name: 'Custom Inline Flow Sensor',
|
|
16449
|
+
parse: (d) => {
|
|
16450
|
+
return {
|
|
16451
|
+
adc1: signInt(d.slice(0, 2).reduce(msbLsb)),
|
|
16452
|
+
adc2: signInt(d.slice(2, 4).reduce(msbLsb)),
|
|
16453
|
+
mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
|
|
16454
|
+
mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100,
|
|
16455
|
+
flow_1: signInt(d.slice(8, 12).reduce(msbLsb))/100,
|
|
16456
|
+
flow_2:signInt(d.slice(12, 16).reduce(msbLsb))/100
|
|
16457
|
+
};
|
|
16458
|
+
},
|
|
16459
|
+
'parse_fly': (frame) => {
|
|
16460
|
+
let firmware = frame[2];
|
|
16461
|
+
if(firmware > 13){ // firmware 14 and above
|
|
16462
|
+
let frame_data = {};
|
|
16463
|
+
let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
|
|
16464
|
+
if(!auto_check_interval){
|
|
16465
|
+
frame_data.auto_check_interval = 'Disabled';
|
|
16466
|
+
}else{
|
|
16467
|
+
frame_data.auto_check_interval = auto_check_interval + " sec";
|
|
16468
|
+
}
|
|
16469
|
+
frame_data.always_on = frame[24]?"Enabled":"Disabled";
|
|
16470
|
+
switch(frame[16]){
|
|
16471
|
+
case 0:
|
|
16472
|
+
frame_data.fsr = "+-6.114 V";
|
|
16473
|
+
break;
|
|
16474
|
+
case 1:
|
|
16475
|
+
frame_data.fsr = "+-4.096 V";
|
|
16476
|
+
break;
|
|
16477
|
+
case 2:
|
|
16478
|
+
frame_data.fsr = "+-2.048 V";
|
|
16479
|
+
break;
|
|
16480
|
+
case 3:
|
|
16481
|
+
frame_data.fsr = "+-1.024 V";
|
|
16482
|
+
break;
|
|
16483
|
+
case 4:
|
|
16484
|
+
frame_data.fsr = "+-0.512 V";
|
|
16485
|
+
break;
|
|
16486
|
+
case 5:
|
|
16487
|
+
frame_data.fsr = "+-0.256 V";
|
|
16488
|
+
break;
|
|
16489
|
+
}
|
|
16490
|
+
return {
|
|
16491
|
+
'firmware': frame[2],
|
|
16492
|
+
'fsr': frame_data.fsr,
|
|
16493
|
+
'boot_up_time': frame[17] + " sec",
|
|
16494
|
+
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
16495
|
+
'auto_check_interval': frame_data.auto_check_interval,
|
|
16496
|
+
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
16497
|
+
'always_on': frame_data.always_on,
|
|
16498
|
+
'calibration_one': frame.slice(25, 29).reduce(msbLsb),
|
|
16499
|
+
'calibration_two':frame.slice(29, 33).reduce(msbLsb),
|
|
16500
|
+
'calibration_three':frame.slice(33, 37).reduce(msbLsb),
|
|
16501
|
+
'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
|
|
16502
|
+
'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
|
|
16503
|
+
'hardware_id': frame.slice(41, 44),
|
|
16504
|
+
'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
|
|
16505
|
+
'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
|
|
16506
|
+
'machine_values': {
|
|
16507
|
+
'firmware': frame[2],
|
|
16508
|
+
'fsr': frame[16],
|
|
16509
|
+
'boot_up_time': frame[17],
|
|
16510
|
+
'adc_pin_reading': frame.slice(18, 20),
|
|
16511
|
+
'auto_check_interval': frame.slice(20, 22),
|
|
16512
|
+
'auto_check_percentage': frame.slice(22, 24),
|
|
16513
|
+
'always_on': frame[24],
|
|
16514
|
+
'calibration_one': frame.slice(25, 29),
|
|
16515
|
+
'calibration_two':frame.slice(29, 33),
|
|
16516
|
+
'calibration_three':frame.slice(33, 37),
|
|
16517
|
+
'min_flow_rate':frame.slice(37, 39),
|
|
16518
|
+
'max_flow_rate':frame.slice(39, 41),
|
|
16519
|
+
'hardware_id': frame.slice(41, 44),
|
|
16520
|
+
'report_rate': frame.slice(44, 48),
|
|
16521
|
+
'tx_life_counter': frame.slice(48, 52)
|
|
16522
|
+
}
|
|
16523
|
+
}
|
|
16524
|
+
}
|
|
16525
|
+
}
|
|
16526
|
+
},
|
|
16527
|
+
'542': {
|
|
16528
|
+
name: 'Custom LWGY Flow Sensor',
|
|
16529
|
+
parse: (d) => {
|
|
16530
|
+
return {
|
|
16531
|
+
frequency: d.slice(0, 2).reduce(msbLsb),
|
|
16532
|
+
vol_flow: d.slice(2, 4).reduce(msbLsb)/100
|
|
16533
|
+
};
|
|
16534
|
+
},
|
|
16535
|
+
'parse_fly': (frame) => {
|
|
16536
|
+
return {
|
|
16537
|
+
'firmware': frame[2],
|
|
16538
|
+
'hardware_id': frame.slice(12, 15),
|
|
16539
|
+
'report_rate': frame.slice(15, 19).reduce(msbLsb) + " sec",
|
|
16540
|
+
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
|
|
16541
|
+
'machine_values': {
|
|
16542
|
+
'firmware': frame[2],
|
|
16543
|
+
'hardware_id': frame.slice(12, 15),
|
|
16544
|
+
'report_rate': frame.slice(15, 19),
|
|
16545
|
+
'tx_life_counter': frame.slice(19, 23)
|
|
16546
|
+
}
|
|
16547
|
+
}
|
|
16548
|
+
}
|
|
16549
|
+
},
|
|
16550
|
+
'543': {
|
|
16551
|
+
name: 'Custom Seismic Vibration Sensor',
|
|
14415
16552
|
parse: (payload, parsed, mac) => {
|
|
14416
|
-
if(payload[7]
|
|
16553
|
+
if(payload[7] & 2){
|
|
14417
16554
|
console.log('Error found');
|
|
14418
16555
|
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
14419
16556
|
return parsed;
|
|
14420
16557
|
}
|
|
14421
|
-
|
|
16558
|
+
let msg_type = 'regular'; // (payload[7] & 16)? 'motion' : 'regular';
|
|
14422
16559
|
if(payload[8] === 1){
|
|
14423
16560
|
var deviceAddr = mac;
|
|
14424
16561
|
var firmware = payload[1];
|
|
14425
|
-
var hour = payload[
|
|
14426
|
-
var minute = payload[
|
|
14427
|
-
var expected_packets = payload[
|
|
14428
|
-
var current_packet = payload[
|
|
14429
|
-
var sdata_start =
|
|
16562
|
+
var hour = payload[12];
|
|
16563
|
+
var minute = payload[13];
|
|
16564
|
+
var expected_packets = msbLsb(payload[16], payload[17]);
|
|
16565
|
+
var current_packet = msbLsb(payload[18], payload[19]);
|
|
16566
|
+
var sdata_start = 20;
|
|
14430
16567
|
|
|
14431
16568
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
14432
16569
|
if(expected_packets != 1){
|
|
14433
16570
|
// 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
|
|
14434
|
-
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet
|
|
16571
|
+
if(current_packet in globalDevices[deviceAddr].data || current_packet == 1 || !(((current_packet)-1) in globalDevices[deviceAddr].data)) {
|
|
14435
16572
|
console.log('-----');
|
|
14436
16573
|
console.log('bad packet breakdown deleting stream');
|
|
14437
16574
|
console.log(current_packet);
|
|
@@ -14450,63 +16587,25 @@ function sensor_types(parent){
|
|
|
14450
16587
|
console.log(this.failure_no);
|
|
14451
16588
|
}
|
|
14452
16589
|
// console.log(globalDevices[deviceAddr].data);
|
|
14453
|
-
delete globalDevices[deviceAddr];
|
|
14454
|
-
if(current_packet != 1){
|
|
14455
|
-
return;
|
|
14456
|
-
} else{
|
|
14457
|
-
|
|
14458
|
-
var mode = payload[8];
|
|
14459
|
-
var odr = payload[9];
|
|
14460
|
-
var en_axis = payload[10] & 7;
|
|
14461
|
-
var fsr = payload[10] >> 5;
|
|
14462
|
-
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
14463
|
-
|
|
16590
|
+
delete globalDevices[deviceAddr];
|
|
16591
|
+
if(current_packet != 1){
|
|
16592
|
+
return;
|
|
16593
|
+
} else{
|
|
14464
16594
|
|
|
14465
|
-
|
|
14466
|
-
|
|
14467
|
-
|
|
14468
|
-
|
|
14469
|
-
case 7:
|
|
14470
|
-
odr = 100;
|
|
14471
|
-
break;
|
|
14472
|
-
case 8:
|
|
14473
|
-
odr = 200;
|
|
14474
|
-
break;
|
|
14475
|
-
case 9:
|
|
14476
|
-
odr = 400;
|
|
14477
|
-
break;
|
|
14478
|
-
case 10:
|
|
14479
|
-
odr = 800;
|
|
14480
|
-
break;
|
|
14481
|
-
case 11:
|
|
14482
|
-
odr = 1600;
|
|
14483
|
-
break;
|
|
14484
|
-
case 12:
|
|
14485
|
-
odr = 3200;
|
|
14486
|
-
break;
|
|
14487
|
-
case 13:
|
|
14488
|
-
odr = 6400;
|
|
14489
|
-
break;
|
|
14490
|
-
case 14:
|
|
14491
|
-
odr = 12800;
|
|
14492
|
-
break;
|
|
14493
|
-
case 15:
|
|
14494
|
-
odr = 25600;
|
|
14495
|
-
break;
|
|
14496
|
-
default:
|
|
14497
|
-
odr = 0;
|
|
14498
|
-
}
|
|
16595
|
+
var mode = payload[8];
|
|
16596
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
16597
|
+
var fsr = payload[11] >> 5;
|
|
16598
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
14499
16599
|
|
|
14500
16600
|
globalDevices[deviceAddr] = {
|
|
14501
16601
|
// stream_size: expected_packets,
|
|
14502
16602
|
data: {},
|
|
14503
16603
|
odr: odr,
|
|
14504
16604
|
mo: mode,
|
|
14505
|
-
en_axis: en_axis,
|
|
14506
16605
|
fsr: fsr,
|
|
14507
16606
|
hour: hour,
|
|
14508
16607
|
minute: minute,
|
|
14509
|
-
|
|
16608
|
+
temperature: temperature,
|
|
14510
16609
|
}
|
|
14511
16610
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
14512
16611
|
return;
|
|
@@ -14518,57 +16617,19 @@ function sensor_types(parent){
|
|
|
14518
16617
|
}
|
|
14519
16618
|
else{
|
|
14520
16619
|
var mode = payload[8];
|
|
14521
|
-
var odr = payload[9];
|
|
14522
|
-
var
|
|
14523
|
-
var
|
|
14524
|
-
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
switch(odr){
|
|
14528
|
-
case 6:
|
|
14529
|
-
odr = 50;
|
|
14530
|
-
break;
|
|
14531
|
-
case 7:
|
|
14532
|
-
odr = 100;
|
|
14533
|
-
break;
|
|
14534
|
-
case 8:
|
|
14535
|
-
odr = 200;
|
|
14536
|
-
break;
|
|
14537
|
-
case 9:
|
|
14538
|
-
odr = 400;
|
|
14539
|
-
break;
|
|
14540
|
-
case 10:
|
|
14541
|
-
odr = 800;
|
|
14542
|
-
break;
|
|
14543
|
-
case 11:
|
|
14544
|
-
odr = 1600;
|
|
14545
|
-
break;
|
|
14546
|
-
case 12:
|
|
14547
|
-
odr = 3200;
|
|
14548
|
-
break;
|
|
14549
|
-
case 13:
|
|
14550
|
-
odr = 6400;
|
|
14551
|
-
break;
|
|
14552
|
-
case 14:
|
|
14553
|
-
odr = 12800;
|
|
14554
|
-
break;
|
|
14555
|
-
case 15:
|
|
14556
|
-
odr = 25600;
|
|
14557
|
-
break;
|
|
14558
|
-
default:
|
|
14559
|
-
odr = 0;
|
|
14560
|
-
}
|
|
16620
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
16621
|
+
var fsr = payload[11] >> 5;
|
|
16622
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
14561
16623
|
|
|
14562
16624
|
globalDevices[deviceAddr] = {
|
|
14563
16625
|
// stream_size: expected_packets,
|
|
14564
16626
|
data: {},
|
|
14565
16627
|
odr: odr,
|
|
14566
16628
|
mo: mode,
|
|
14567
|
-
en_axis: en_axis,
|
|
14568
16629
|
fsr: fsr,
|
|
14569
16630
|
hour: hour,
|
|
14570
16631
|
minute: minute,
|
|
14571
|
-
|
|
16632
|
+
temperature: temperature,
|
|
14572
16633
|
}
|
|
14573
16634
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
14574
16635
|
}
|
|
@@ -14584,58 +16645,23 @@ function sensor_types(parent){
|
|
|
14584
16645
|
var fft_concat = {};
|
|
14585
16646
|
|
|
14586
16647
|
var en_axis_data = {};
|
|
14587
|
-
|
|
14588
|
-
|
|
14589
|
-
|
|
14590
|
-
|
|
14591
|
-
|
|
14592
|
-
case 2:
|
|
14593
|
-
en_axis_data.y_offset = 0;
|
|
14594
|
-
en_axis_data.increment = 2;
|
|
14595
|
-
break;
|
|
14596
|
-
case 3:
|
|
14597
|
-
en_axis_data.x_offset = 0;
|
|
14598
|
-
en_axis_data.y_offset = 2;
|
|
14599
|
-
en_axis_data.increment = 4;
|
|
14600
|
-
break;
|
|
14601
|
-
case 4:
|
|
14602
|
-
en_axis_data.z_offset = 0;
|
|
14603
|
-
en_axis_data.increment = 2;
|
|
14604
|
-
break;
|
|
14605
|
-
case 5:
|
|
14606
|
-
en_axis_data.x_offset = 0;
|
|
14607
|
-
en_axis_data.z_offset = 2;
|
|
14608
|
-
en_axis_data.increment = 4;
|
|
14609
|
-
break;
|
|
14610
|
-
case 6:
|
|
14611
|
-
en_axis_data.y_offset = 0;
|
|
14612
|
-
en_axis_data.z_offset = 2;
|
|
14613
|
-
en_axis_data.increment = 4;
|
|
14614
|
-
break;
|
|
14615
|
-
case 7:
|
|
14616
|
-
en_axis_data.x_offset = 0;
|
|
14617
|
-
en_axis_data.y_offset = 2;
|
|
14618
|
-
en_axis_data.z_offset = 4;
|
|
14619
|
-
en_axis_data.increment = 6;
|
|
14620
|
-
break;
|
|
14621
|
-
default:
|
|
14622
|
-
en_axis_data.increment = 0;
|
|
14623
|
-
}
|
|
16648
|
+
en_axis_data.x_offset = 0;
|
|
16649
|
+
en_axis_data.y_offset = 2;
|
|
16650
|
+
en_axis_data.z_offset = 4;
|
|
16651
|
+
en_axis_data.increment = 6;
|
|
16652
|
+
fft_concat = {x: [], y: [], z: []};
|
|
14624
16653
|
|
|
14625
16654
|
var fsr_mult = .00006;
|
|
14626
16655
|
var fsr_text = "";
|
|
14627
16656
|
switch(globalDevices[deviceAddr].fsr){
|
|
14628
16657
|
case 0:
|
|
14629
|
-
fsr_mult = 0.
|
|
16658
|
+
fsr_mult = 0.0000608;
|
|
14630
16659
|
break;
|
|
14631
16660
|
case 1:
|
|
14632
|
-
fsr_mult = 0.
|
|
16661
|
+
fsr_mult = 0.0001216;
|
|
14633
16662
|
break;
|
|
14634
16663
|
case 2:
|
|
14635
|
-
fsr_mult = 0.
|
|
14636
|
-
break;
|
|
14637
|
-
case 3:
|
|
14638
|
-
fsr_mult = 0.00049;
|
|
16664
|
+
fsr_mult = 0.0002448;
|
|
14639
16665
|
break;
|
|
14640
16666
|
}
|
|
14641
16667
|
switch(globalDevices[deviceAddr].fsr){
|
|
@@ -14648,33 +16674,34 @@ function sensor_types(parent){
|
|
|
14648
16674
|
case 2:
|
|
14649
16675
|
fsr_text = "8g";
|
|
14650
16676
|
break;
|
|
14651
|
-
case 3:
|
|
14652
|
-
fsr_text = "16g";
|
|
14653
|
-
break;
|
|
14654
16677
|
}
|
|
14655
16678
|
|
|
16679
|
+
|
|
14656
16680
|
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
14657
16681
|
label++;
|
|
14658
16682
|
|
|
14659
|
-
fft_concat[label] = {};
|
|
14660
|
-
|
|
14661
16683
|
if('x_offset' in en_axis_data){
|
|
14662
|
-
fft_concat
|
|
16684
|
+
fft_concat.x.push(parseFloat((signInt(((raw_data[i+en_axis_data.x_offset]<<8)+(raw_data[i+en_axis_data.x_offset+1])), 16)*fsr_mult).toFixed(2)));
|
|
14663
16685
|
}
|
|
14664
16686
|
if('y_offset' in en_axis_data){
|
|
14665
|
-
fft_concat
|
|
16687
|
+
fft_concat.y.push(parseFloat((signInt(((raw_data[i+en_axis_data.y_offset]<<8)+(raw_data[i+en_axis_data.y_offset+1])), 16)*fsr_mult).toFixed(2)));
|
|
14666
16688
|
}
|
|
14667
16689
|
if('z_offset' in en_axis_data){
|
|
14668
|
-
fft_concat
|
|
16690
|
+
fft_concat.z.push(parseFloat((signInt(((raw_data[i+en_axis_data.z_offset]<<8)+(raw_data[i+en_axis_data.z_offset+1])), 16)*fsr_mult).toFixed(2)));
|
|
14669
16691
|
}
|
|
14670
16692
|
}
|
|
14671
16693
|
var fft_concat_obj = {
|
|
14672
|
-
|
|
16694
|
+
mode: payload[8],
|
|
16695
|
+
msg_type: msg_type,
|
|
16696
|
+
time_id: [
|
|
16697
|
+
String(globalDevices[deviceAddr].hour).padStart(2, '0'),
|
|
16698
|
+
String(globalDevices[deviceAddr].minute).padStart(2, '0'),
|
|
16699
|
+
].join(':'),
|
|
14673
16700
|
mac_address: deviceAddr,
|
|
14674
|
-
en_axis: globalDevices[deviceAddr].en_axis,
|
|
14675
16701
|
fsr: fsr_text,
|
|
14676
16702
|
odr: globalDevices[deviceAddr].odr,
|
|
14677
|
-
|
|
16703
|
+
temperature: globalDevices[deviceAddr].temperature,
|
|
16704
|
+
total_samples: label,
|
|
14678
16705
|
data: fft_concat
|
|
14679
16706
|
};
|
|
14680
16707
|
sensor_data = fft_concat_obj;
|
|
@@ -14692,100 +16719,48 @@ function sensor_types(parent){
|
|
|
14692
16719
|
}else{
|
|
14693
16720
|
|
|
14694
16721
|
var mode = payload[8];
|
|
14695
|
-
var odr = payload[9];
|
|
14696
|
-
var
|
|
14697
|
-
var
|
|
14698
|
-
var device_temp = msbLsb(payload[13], payload[14])/100;
|
|
14699
|
-
|
|
14700
|
-
|
|
14701
|
-
switch(odr){
|
|
14702
|
-
case 6:
|
|
14703
|
-
odr = 50;
|
|
14704
|
-
break;
|
|
14705
|
-
case 7:
|
|
14706
|
-
odr = 100;
|
|
14707
|
-
break;
|
|
14708
|
-
case 8:
|
|
14709
|
-
odr = 200;
|
|
14710
|
-
break;
|
|
14711
|
-
case 9:
|
|
14712
|
-
odr = 400;
|
|
14713
|
-
break;
|
|
14714
|
-
case 10:
|
|
14715
|
-
odr = 800;
|
|
14716
|
-
break;
|
|
14717
|
-
case 11:
|
|
14718
|
-
odr = 1600;
|
|
14719
|
-
break;
|
|
14720
|
-
case 12:
|
|
14721
|
-
odr = 3200;
|
|
14722
|
-
break;
|
|
14723
|
-
case 13:
|
|
14724
|
-
odr = 6400;
|
|
14725
|
-
break;
|
|
14726
|
-
case 14:
|
|
14727
|
-
odr = 12800;
|
|
14728
|
-
break;
|
|
14729
|
-
case 15:
|
|
14730
|
-
odr = 25600;
|
|
14731
|
-
break;
|
|
14732
|
-
default:
|
|
14733
|
-
odr = 0;
|
|
14734
|
-
}
|
|
16722
|
+
var odr = msbLsb(payload[9], payload[10]);
|
|
16723
|
+
var fsr = payload[11] >> 5;
|
|
16724
|
+
var temperature = msbLsb(payload[14], payload[15])/100;
|
|
14735
16725
|
|
|
14736
16726
|
globalDevices[deviceAddr] = {
|
|
14737
16727
|
// stream_size: expected_packets,
|
|
14738
16728
|
data: {},
|
|
14739
16729
|
odr: odr,
|
|
14740
16730
|
mo: mode,
|
|
14741
|
-
en_axis: en_axis,
|
|
14742
16731
|
fsr: fsr,
|
|
14743
16732
|
hour: hour,
|
|
14744
16733
|
minute: minute,
|
|
14745
|
-
|
|
16734
|
+
temperature: temperature,
|
|
14746
16735
|
}
|
|
14747
16736
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
14748
16737
|
return;
|
|
14749
16738
|
}
|
|
14750
16739
|
}
|
|
14751
|
-
else if(payload[8] === 0 || payload[8] === 2){
|
|
16740
|
+
else if(payload[8] === 0 || payload[8] === 2 || payload[8] === 3){
|
|
14752
16741
|
// mode byte most significant bit will indicate fft data.
|
|
14753
16742
|
// console.log(d);
|
|
14754
16743
|
var odr;
|
|
14755
16744
|
switch(payload[9]){
|
|
14756
|
-
case
|
|
14757
|
-
odr = "
|
|
14758
|
-
break;
|
|
14759
|
-
case 7:
|
|
14760
|
-
odr = "100Hz";
|
|
14761
|
-
break;
|
|
14762
|
-
case 8:
|
|
14763
|
-
odr = "200Hz";
|
|
14764
|
-
break;
|
|
14765
|
-
case 9:
|
|
14766
|
-
odr = "400Hz";
|
|
14767
|
-
break;
|
|
14768
|
-
case 10:
|
|
14769
|
-
odr = "800Hz";
|
|
14770
|
-
break;
|
|
14771
|
-
case 11:
|
|
14772
|
-
odr = "1600Hz";
|
|
16745
|
+
case 3:
|
|
16746
|
+
odr = "32.25Hz"
|
|
14773
16747
|
break;
|
|
14774
|
-
case
|
|
14775
|
-
odr = "
|
|
16748
|
+
case 4:
|
|
16749
|
+
odr = "62.5Hz";
|
|
14776
16750
|
break;
|
|
14777
|
-
case
|
|
14778
|
-
odr = "
|
|
16751
|
+
case 5:
|
|
16752
|
+
odr = "125Hz";
|
|
14779
16753
|
break;
|
|
14780
|
-
case
|
|
14781
|
-
odr = "
|
|
16754
|
+
case 6:
|
|
16755
|
+
odr = "250Hz";
|
|
14782
16756
|
break;
|
|
14783
|
-
case
|
|
14784
|
-
odr = "
|
|
16757
|
+
case 7:
|
|
16758
|
+
odr = "500Hz";
|
|
14785
16759
|
break;
|
|
14786
16760
|
}
|
|
14787
16761
|
return {
|
|
14788
16762
|
mode: payload[8],
|
|
16763
|
+
msg_type: msg_type,
|
|
14789
16764
|
|
|
14790
16765
|
odr: odr,
|
|
14791
16766
|
temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
@@ -14812,7 +16787,7 @@ function sensor_types(parent){
|
|
|
14812
16787
|
z_displacement_mm: payload.slice(46, 48).reduce(msbLsb) / 100,
|
|
14813
16788
|
z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
|
|
14814
16789
|
z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
|
|
14815
|
-
z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb)
|
|
16790
|
+
z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb)
|
|
14816
16791
|
};
|
|
14817
16792
|
}
|
|
14818
16793
|
// else{
|
|
@@ -14829,44 +16804,32 @@ function sensor_types(parent){
|
|
|
14829
16804
|
case 1:
|
|
14830
16805
|
frame_data.mode = "Raw";
|
|
14831
16806
|
break;
|
|
14832
|
-
case 2:
|
|
14833
|
-
frame_data.mode = "Processed + Raw on demand";
|
|
14834
|
-
break;
|
|
14835
|
-
}
|
|
14836
|
-
switch(frame[17]){
|
|
14837
|
-
case 6:
|
|
14838
|
-
frame_data.odr_1 = 50;
|
|
14839
|
-
break;
|
|
14840
|
-
case 7:
|
|
14841
|
-
frame_data.odr_1 = 100;
|
|
14842
|
-
break;
|
|
14843
|
-
case 8:
|
|
14844
|
-
frame_data.odr_1 = 200;
|
|
14845
|
-
break;
|
|
14846
|
-
case 9:
|
|
14847
|
-
frame_data.odr_1 = 400;
|
|
16807
|
+
case 2:
|
|
16808
|
+
frame_data.mode = "Processed + Raw on demand";
|
|
14848
16809
|
break;
|
|
14849
|
-
case
|
|
14850
|
-
frame_data.
|
|
16810
|
+
case 3:
|
|
16811
|
+
frame_data.mode = "Smart";
|
|
14851
16812
|
break;
|
|
14852
|
-
|
|
14853
|
-
|
|
16813
|
+
}
|
|
16814
|
+
switch(frame[17]){
|
|
16815
|
+
case 3:
|
|
16816
|
+
frame_data.odr_1 = 31.25;
|
|
14854
16817
|
break;
|
|
14855
|
-
case
|
|
14856
|
-
frame_data.odr_1 =
|
|
16818
|
+
case 4:
|
|
16819
|
+
frame_data.odr_1 = 62.5;
|
|
14857
16820
|
break;
|
|
14858
|
-
case
|
|
14859
|
-
frame_data.odr_1 =
|
|
16821
|
+
case 5:
|
|
16822
|
+
frame_data.odr_1 = 125;
|
|
14860
16823
|
break;
|
|
14861
|
-
case
|
|
14862
|
-
frame_data.odr_1 =
|
|
16824
|
+
case 6:
|
|
16825
|
+
frame_data.odr_1 = 250;
|
|
14863
16826
|
break;
|
|
14864
|
-
case
|
|
14865
|
-
frame_data.odr_1 =
|
|
16827
|
+
case 7:
|
|
16828
|
+
frame_data.odr_1 = 500;
|
|
14866
16829
|
break;
|
|
14867
16830
|
}
|
|
14868
|
-
frame_data.sampling_duration_1 = frame[
|
|
14869
|
-
switch(frame[
|
|
16831
|
+
frame_data.sampling_duration_1 = frame[18]*50 + "ms";
|
|
16832
|
+
switch(frame[19]){
|
|
14870
16833
|
case 0:
|
|
14871
16834
|
frame_data.filter_status = "Disabled";
|
|
14872
16835
|
break;
|
|
@@ -14874,7 +16837,7 @@ function sensor_types(parent){
|
|
|
14874
16837
|
frame_data.filter_status = "Enabled";
|
|
14875
16838
|
break;
|
|
14876
16839
|
}
|
|
14877
|
-
switch(frame[
|
|
16840
|
+
switch(frame[20]){
|
|
14878
16841
|
case 0:
|
|
14879
16842
|
frame_data.lpf_coeff_1 = 4;
|
|
14880
16843
|
break;
|
|
@@ -14907,7 +16870,7 @@ function sensor_types(parent){
|
|
|
14907
16870
|
break;
|
|
14908
16871
|
}
|
|
14909
16872
|
frame_data.lpf_freq_1 = frame_data.odr_1 / frame_data.lpf_coeff_1;
|
|
14910
|
-
switch(frame[
|
|
16873
|
+
switch(frame[21]){
|
|
14911
16874
|
case 0:
|
|
14912
16875
|
frame_data.hpf_coeff_1 = 4;
|
|
14913
16876
|
break;
|
|
@@ -14939,40 +16902,49 @@ function sensor_types(parent){
|
|
|
14939
16902
|
frame_data.hpf_coeff_1 = 2048;
|
|
14940
16903
|
break;
|
|
14941
16904
|
}
|
|
14942
|
-
frame_data.hpf_freq_1 = frame_data.odr_1 / frame_data.hpf_coeff_1;
|
|
14943
|
-
switch(frame[
|
|
16905
|
+
frame_data.hpf_freq_1 = (frame_data.odr_1 / frame_data.hpf_coeff_1).toFixed(4);
|
|
16906
|
+
switch(frame[22]){
|
|
14944
16907
|
case 0:
|
|
14945
16908
|
frame_data.sampling_interval = "5 Minutes";
|
|
16909
|
+
frame_data.sampling_interval_number = 5;
|
|
14946
16910
|
break;
|
|
14947
16911
|
case 1:
|
|
14948
16912
|
frame_data.sampling_interval = "10 Minutes";
|
|
16913
|
+
frame_data.sampling_interval_number = 10;
|
|
14949
16914
|
break;
|
|
14950
16915
|
case 2:
|
|
14951
16916
|
frame_data.sampling_interval = "15 Minutes";
|
|
16917
|
+
frame_data.sampling_interval_number = 15;
|
|
14952
16918
|
break;
|
|
14953
16919
|
case 2:
|
|
14954
16920
|
frame_data.sampling_interval = "20 Minutes";
|
|
16921
|
+
frame_data.sampling_interval_number = 20;
|
|
14955
16922
|
break;
|
|
14956
16923
|
case 4:
|
|
14957
16924
|
frame_data.sampling_interval = "30 Minutes";
|
|
16925
|
+
frame_data.sampling_interval_number = 30;
|
|
14958
16926
|
break;
|
|
14959
16927
|
case 5:
|
|
14960
16928
|
frame_data.sampling_interval = "60 Minutes";
|
|
16929
|
+
frame_data.sampling_interval_number = 60;
|
|
14961
16930
|
break;
|
|
14962
16931
|
case 6:
|
|
14963
16932
|
frame_data.sampling_interval = "120 Minutes";
|
|
16933
|
+
frame_data.sampling_interval_number = 120;
|
|
14964
16934
|
break;
|
|
14965
16935
|
case 7:
|
|
14966
16936
|
frame_data.sampling_interval = "180 Minutes";
|
|
16937
|
+
frame_data.sampling_interval_number = 180;
|
|
14967
16938
|
break;
|
|
14968
16939
|
case 8:
|
|
14969
16940
|
frame_data.sampling_interval = "1 Minute";
|
|
16941
|
+
frame_data.sampling_interval_number = 1;
|
|
14970
16942
|
break;
|
|
14971
16943
|
}
|
|
14972
|
-
frame_data.on_request_timeout = frame[
|
|
14973
|
-
frame_data.deadband = frame[
|
|
16944
|
+
frame_data.on_request_timeout = frame[23] + " Seconds";
|
|
16945
|
+
frame_data.deadband = frame[24] + "mg";
|
|
14974
16946
|
|
|
14975
|
-
switch(frame[
|
|
16947
|
+
switch(frame[25]){
|
|
14976
16948
|
case 0:
|
|
14977
16949
|
frame_data.payload_length = "50 Bytes";
|
|
14978
16950
|
break;
|
|
@@ -14986,207 +16958,69 @@ function sensor_types(parent){
|
|
|
14986
16958
|
frame_data.payload_length = "180 Bytes";
|
|
14987
16959
|
break;
|
|
14988
16960
|
}
|
|
16961
|
+
switch(frame[26]){
|
|
16962
|
+
case 0:
|
|
16963
|
+
frame_data.fsr_text = "2g";
|
|
16964
|
+
break;
|
|
16965
|
+
case 1:
|
|
16966
|
+
frame_data.fsr_text = "4g";
|
|
16967
|
+
break;
|
|
16968
|
+
case 2:
|
|
16969
|
+
frame_data.fsr_text = "8g";
|
|
16970
|
+
break;
|
|
16971
|
+
}
|
|
16972
|
+
|
|
16973
|
+
frame_data.auto_raw_interval = frame[31] * frame_data.sampling_interval_number || 'disabled';
|
|
16974
|
+
frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
|
|
16975
|
+
frame_data.smart_mode_threshold = frame[33] * 50;
|
|
16976
|
+
frame_data.motion_to_delay = frame[41] * 50;
|
|
14989
16977
|
|
|
14990
16978
|
return {
|
|
14991
16979
|
'firmware': frame[2],
|
|
14992
16980
|
'destination_address': toMac(frame.slice(12, 16)),
|
|
14993
16981
|
'mode': frame_data.mode,
|
|
14994
|
-
'
|
|
14995
|
-
'
|
|
16982
|
+
'odr': frame_data.odr_1+'Hz',
|
|
16983
|
+
'sampling_duration': frame_data.sampling_duration_1,
|
|
14996
16984
|
'filter_status': frame_data.filter_status,
|
|
14997
|
-
'
|
|
14998
|
-
'
|
|
14999
|
-
'
|
|
15000
|
-
'
|
|
16985
|
+
'lpf_coeff': frame_data.lpf_coeff_1,
|
|
16986
|
+
'lpf_freq': frame_data.lpf_freq_1+'Hz',
|
|
16987
|
+
'hpf_coeff': frame_data.hpf_coeff_1,
|
|
16988
|
+
'hpf_freq': frame_data.hpf_freq_1+'Hz',
|
|
15001
16989
|
'sampling_interval': frame_data.sampling_interval,
|
|
15002
16990
|
'on_request_timeout': frame_data.on_request_timeout,
|
|
15003
16991
|
'deadband': frame_data.deadband,
|
|
15004
16992
|
'payload_length': frame_data.payload_length,
|
|
16993
|
+
'fsr': frame_data.fsr_text,
|
|
16994
|
+
'auto_raw_destination_address': toMac(frame.slice(27 , 31)),
|
|
16995
|
+
'auto_raw_interval': frame_data.auto_raw_interval,
|
|
16996
|
+
'smart_mode_skip_count': frame[32],
|
|
16997
|
+
'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
|
|
16998
|
+
'max_tx_raw_samples': frame.slice(34, 36).reduce(msbLsb),
|
|
16999
|
+
'hardware_id': frame.slice(36, 39),
|
|
17000
|
+
'reserved': frame.slice(39, 43),
|
|
17001
|
+
'tx_lifetime_counter': frame.slice(43, 46).reduce(msbLsb),
|
|
15005
17002
|
'machine_values': {
|
|
15006
17003
|
'firmware': frame[2],
|
|
15007
17004
|
'destination_address': toMac(frame.slice(12, 16), false),
|
|
15008
17005
|
'mode': frame[16],
|
|
15009
|
-
'
|
|
15010
|
-
'
|
|
15011
|
-
'filter_status': frame[
|
|
15012
|
-
'
|
|
15013
|
-
'
|
|
15014
|
-
'sampling_interval': frame[
|
|
15015
|
-
'on_request_timeout': frame[
|
|
15016
|
-
'deadband': frame[
|
|
15017
|
-
'payload_length': frame[
|
|
15018
|
-
|
|
15019
|
-
|
|
15020
|
-
|
|
15021
|
-
|
|
15022
|
-
|
|
15023
|
-
|
|
15024
|
-
|
|
15025
|
-
|
|
15026
|
-
|
|
15027
|
-
number_of_registers: d[1],
|
|
15028
|
-
status_24_31: d[2],
|
|
15029
|
-
status_16_23: d[3],
|
|
15030
|
-
status_8_15: d[4],
|
|
15031
|
-
status_0_7: d[5],
|
|
15032
|
-
// TODO we can automatically determine how many registers are here based on the number_of_registers and create data objects appropriately
|
|
15033
|
-
// r1: d.slice(2,4),
|
|
15034
|
-
// r2: d.slice(4,6),
|
|
15035
|
-
// r3: d.slice(6,8),
|
|
15036
|
-
// r4: d.slice(8,10),
|
|
15037
|
-
data: d.slice(6)
|
|
15038
|
-
};
|
|
15039
|
-
},
|
|
15040
|
-
},
|
|
15041
|
-
'540': {
|
|
15042
|
-
name: 'Wireless Ultrasonic Flow Meter FD-Q32C',
|
|
15043
|
-
parse: (d) => {
|
|
15044
|
-
return {
|
|
15045
|
-
raw_adc: d.slice(0, 2).reduce(msbLsb),
|
|
15046
|
-
ma: d.slice(2, 4).reduce(msbLsb) / 100,
|
|
15047
|
-
flow_ltr_min: d.slice(4, 8).reduce(msbLsb) / 100
|
|
15048
|
-
};
|
|
15049
|
-
},
|
|
15050
|
-
'parse_fly': (frame) => {
|
|
15051
|
-
let firmware = frame[2];
|
|
15052
|
-
if(firmware > 13){ // firmware 14 and above
|
|
15053
|
-
let frame_data = {};
|
|
15054
|
-
let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
|
|
15055
|
-
if(!auto_check_interval){
|
|
15056
|
-
frame_data.auto_check_interval = 'Disabled';
|
|
15057
|
-
}else{
|
|
15058
|
-
frame_data.auto_check_interval = auto_check_interval + " sec";
|
|
15059
|
-
}
|
|
15060
|
-
frame_data.always_on = frame[24]?"Enabled":"Disabled";
|
|
15061
|
-
switch(frame[16]){
|
|
15062
|
-
case 0:
|
|
15063
|
-
frame_data.fsr = "+-6.114 V";
|
|
15064
|
-
break;
|
|
15065
|
-
case 1:
|
|
15066
|
-
frame_data.fsr = "+-4.096 V";
|
|
15067
|
-
break;
|
|
15068
|
-
case 2:
|
|
15069
|
-
frame_data.fsr = "+-2.048 V";
|
|
15070
|
-
break;
|
|
15071
|
-
case 3:
|
|
15072
|
-
frame_data.fsr = "+-1.024 V";
|
|
15073
|
-
break;
|
|
15074
|
-
case 4:
|
|
15075
|
-
frame_data.fsr = "+-0.512 V";
|
|
15076
|
-
break;
|
|
15077
|
-
case 5:
|
|
15078
|
-
frame_data.fsr = "+-0.256 V";
|
|
15079
|
-
break;
|
|
15080
|
-
}
|
|
15081
|
-
return {
|
|
15082
|
-
'firmware': frame[2],
|
|
15083
|
-
'fsr': frame_data.fsr,
|
|
15084
|
-
'boot_time': frame[17] + " sec",
|
|
15085
|
-
'power_adc': frame.slice(18, 20).reduce(msbLsb),
|
|
15086
|
-
'auto_check_interval': frame_data.auto_check_interval,
|
|
15087
|
-
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
15088
|
-
'always_on': frame_data.always_on,
|
|
15089
|
-
'calibration_one': frame.slice(25, 29).reduce(msbLsb),
|
|
15090
|
-
'calibration_two':frame.slice(29, 33).reduce(msbLsb),
|
|
15091
|
-
'calibration_three':frame.slice(33, 37).reduce(msbLsb),
|
|
15092
|
-
'hardware_id': frame.slice(37, 40),
|
|
15093
|
-
'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
|
|
15094
|
-
'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
|
|
15095
|
-
'machine_values': {
|
|
15096
|
-
'firmware': frame[2],
|
|
15097
|
-
'fsr': frame[16],
|
|
15098
|
-
'boot_time': frame[17],
|
|
15099
|
-
'power_adc': frame.slice(18, 20),
|
|
15100
|
-
'auto_check_interval': frame.slice(20, 22),
|
|
15101
|
-
'auto_check_percentage': frame.slice(22, 24),
|
|
15102
|
-
'always_on': frame[24],
|
|
15103
|
-
'calibration_one': frame.slice(25, 29),
|
|
15104
|
-
'calibration_two':frame.slice(29, 33),
|
|
15105
|
-
'calibration_three':frame.slice(33, 37),
|
|
15106
|
-
'hardware_id': frame.slice(37, 40),
|
|
15107
|
-
'report_rate': frame.slice(40, 44),
|
|
15108
|
-
'tx_life_counter': frame.slice(44, 48)
|
|
15109
|
-
}
|
|
15110
|
-
}
|
|
15111
|
-
}
|
|
15112
|
-
}
|
|
15113
|
-
},
|
|
15114
|
-
'541': {
|
|
15115
|
-
name: 'Custom Inline Flow Sensor',
|
|
15116
|
-
parse: (d) => {
|
|
15117
|
-
return {
|
|
15118
|
-
adc1: signInt(d.slice(0, 2).reduce(msbLsb)),
|
|
15119
|
-
adc2: signInt(d.slice(2, 4).reduce(msbLsb)),
|
|
15120
|
-
mA1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
|
|
15121
|
-
mA2: signInt(d.slice(6, 8).reduce(msbLsb))/100,
|
|
15122
|
-
flow_1: signInt(d.slice(8, 12).reduce(msbLsb))/100,
|
|
15123
|
-
flow_2:signInt(d.slice(12, 16).reduce(msbLsb))/100
|
|
15124
|
-
};
|
|
15125
|
-
},
|
|
15126
|
-
'parse_fly': (frame) => {
|
|
15127
|
-
let firmware = frame[2];
|
|
15128
|
-
if(firmware > 13){ // firmware 14 and above
|
|
15129
|
-
let frame_data = {};
|
|
15130
|
-
let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
|
|
15131
|
-
if(!auto_check_interval){
|
|
15132
|
-
frame_data.auto_check_interval = 'Disabled';
|
|
15133
|
-
}else{
|
|
15134
|
-
frame_data.auto_check_interval = auto_check_interval + " sec";
|
|
15135
|
-
}
|
|
15136
|
-
frame_data.always_on = frame[24]?"Enabled":"Disabled";
|
|
15137
|
-
switch(frame[16]){
|
|
15138
|
-
case 0:
|
|
15139
|
-
frame_data.fsr = "+-6.114 V";
|
|
15140
|
-
break;
|
|
15141
|
-
case 1:
|
|
15142
|
-
frame_data.fsr = "+-4.096 V";
|
|
15143
|
-
break;
|
|
15144
|
-
case 2:
|
|
15145
|
-
frame_data.fsr = "+-2.048 V";
|
|
15146
|
-
break;
|
|
15147
|
-
case 3:
|
|
15148
|
-
frame_data.fsr = "+-1.024 V";
|
|
15149
|
-
break;
|
|
15150
|
-
case 4:
|
|
15151
|
-
frame_data.fsr = "+-0.512 V";
|
|
15152
|
-
break;
|
|
15153
|
-
case 5:
|
|
15154
|
-
frame_data.fsr = "+-0.256 V";
|
|
15155
|
-
break;
|
|
15156
|
-
}
|
|
15157
|
-
return {
|
|
15158
|
-
'firmware': frame[2],
|
|
15159
|
-
'fsr': frame_data.fsr,
|
|
15160
|
-
'boot_up_time': frame[17] + " sec",
|
|
15161
|
-
'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
|
|
15162
|
-
'auto_check_interval': frame_data.auto_check_interval,
|
|
15163
|
-
'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
|
|
15164
|
-
'always_on': frame_data.always_on,
|
|
15165
|
-
'calibration_one': frame.slice(25, 29).reduce(msbLsb),
|
|
15166
|
-
'calibration_two':frame.slice(29, 33).reduce(msbLsb),
|
|
15167
|
-
'calibration_three':frame.slice(33, 37).reduce(msbLsb),
|
|
15168
|
-
'min_flow_rate':frame.slice(37, 39).reduce(msbLsb),
|
|
15169
|
-
'max_flow_rate':frame.slice(39, 41).reduce(msbLsb),
|
|
15170
|
-
'hardware_id': frame.slice(41, 44),
|
|
15171
|
-
'report_rate': frame.slice(44, 48).reduce(msbLsb) + " sec",
|
|
15172
|
-
'tx_life_counter': frame.slice(48, 52).reduce(msbLsb),
|
|
15173
|
-
'machine_values': {
|
|
15174
|
-
'firmware': frame[2],
|
|
15175
|
-
'fsr': frame[16],
|
|
15176
|
-
'boot_up_time': frame[17],
|
|
15177
|
-
'adc_pin_reading': frame.slice(18, 20),
|
|
15178
|
-
'auto_check_interval': frame.slice(20, 22),
|
|
15179
|
-
'auto_check_percentage': frame.slice(22, 24),
|
|
15180
|
-
'always_on': frame[24],
|
|
15181
|
-
'calibration_one': frame.slice(25, 29),
|
|
15182
|
-
'calibration_two':frame.slice(29, 33),
|
|
15183
|
-
'calibration_three':frame.slice(33, 37),
|
|
15184
|
-
'min_flow_rate':frame.slice(37, 39),
|
|
15185
|
-
'max_flow_rate':frame.slice(39, 41),
|
|
15186
|
-
'hardware_id': frame.slice(41, 44),
|
|
15187
|
-
'report_rate': frame.slice(44, 48),
|
|
15188
|
-
'tx_life_counter': frame.slice(48, 52),
|
|
15189
|
-
}
|
|
17006
|
+
'odr': frame[17],
|
|
17007
|
+
'sampling_duration': frame[18],
|
|
17008
|
+
'filter_status': frame[19],
|
|
17009
|
+
'lpf_coeff': frame[20],
|
|
17010
|
+
'hpf_coeff': frame[21],
|
|
17011
|
+
'sampling_interval': frame[22],
|
|
17012
|
+
'on_request_timeout': frame[23],
|
|
17013
|
+
'deadband': frame[24],
|
|
17014
|
+
'payload_length': frame[25],
|
|
17015
|
+
'fsr': frame[26],
|
|
17016
|
+
'auto_raw_destination_address': toMac(frame.slice(27 , 31), false),
|
|
17017
|
+
'auto_raw_interval': frame[31],
|
|
17018
|
+
'smart_mode_skip_count': frame[32],
|
|
17019
|
+
'smart_mode_acc_threshold':frame[33],
|
|
17020
|
+
'max_tx_raw_samples': frame.slice(34, 36),
|
|
17021
|
+
'hardware_id': frame.slice(36, 39),
|
|
17022
|
+
'reserved': frame.slice(39, 43),
|
|
17023
|
+
'tx_lifetime_counter': frame.slice(43, 46)
|
|
15190
17024
|
}
|
|
15191
17025
|
}
|
|
15192
17026
|
}
|
|
@@ -15303,6 +17137,38 @@ function int2Bytes(i, l){
|
|
|
15303
17137
|
}
|
|
15304
17138
|
return bytes;
|
|
15305
17139
|
}
|
|
17140
|
+
function msbLsb_to_SignedInt(value, addition) {
|
|
17141
|
+
const bigValue = BigInt(value);
|
|
17142
|
+
const bigAddition = BigInt(addition);
|
|
17143
|
+
|
|
17144
|
+
let result = (bigValue << 8n) + bigAddition;
|
|
17145
|
+
|
|
17146
|
+
// Always return the result as an unsigned 64-bit BigInt.
|
|
17147
|
+
return BigInt.asIntN(64, result);
|
|
17148
|
+
};
|
|
17149
|
+
function msbLsb_to_UnsignedInt(value, addition) {
|
|
17150
|
+
const bigValue = BigInt(value);
|
|
17151
|
+
const bigAddition = BigInt(addition);
|
|
17152
|
+
|
|
17153
|
+
let result = (bigValue << 8n) + bigAddition;
|
|
17154
|
+
|
|
17155
|
+
// Always return the result as a signed 64-bit BigInt.
|
|
17156
|
+
return BigInt.asUintN(64, result);
|
|
17157
|
+
};
|
|
17158
|
+
// TODO implement this function in future for decimal formatting on BigInt values
|
|
17159
|
+
// Untested. Requires multiplication by scale factor to account for decimal value loss before passing in. Might handle that in this function as well.
|
|
17160
|
+
// function formatFixedPoint(bigIntValue, decimalPlaces) {
|
|
17161
|
+
// let sign = bigIntValue < 0n ? "-" : "";
|
|
17162
|
+
// let absValue = bigIntValue < 0n ? -bigIntValue : bigIntValue;
|
|
17163
|
+
|
|
17164
|
+
// let s = absValue.toString();
|
|
17165
|
+
// if (s.length <= decimalPlaces) {
|
|
17166
|
+
// s = '0'.repeat(decimalPlaces - s.length + 1) + s;
|
|
17167
|
+
// }
|
|
17168
|
+
|
|
17169
|
+
// let decimalIndex = s.length - decimalPlaces;
|
|
17170
|
+
// return sign + s.substring(0, decimalIndex) + '.' + s.substring(decimalIndex);
|
|
17171
|
+
// }
|
|
15306
17172
|
function signInt(i, b){
|
|
15307
17173
|
if(i.toString(2).length != b) return i;
|
|
15308
17174
|
return -(((~i) & ((1 << (b-1))-1))+1);
|