@ncd-io/node-red-enterprise-sensors 1.1.4 → 1.2.0
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 +609 -226
- package/package.json +1 -1
- package/wireless.html +167 -38
- package/wireless.js +141 -17
package/lib/WirelessGateway.js
CHANGED
|
@@ -122,6 +122,25 @@ module.exports = class WirelessSensor{
|
|
|
122
122
|
this._emitter.emit("link_info",msg_obj);
|
|
123
123
|
}
|
|
124
124
|
parse(frame){
|
|
125
|
+
// NOTE this must be above the type selection to prevent rs-485 data from triggering other functionality.
|
|
126
|
+
if(globalDevices.hasOwnProperty(frame.mac) && globalDevices[frame.mac].hasOwnProperty('bridge') && globalDevices[frame.mac].bridge){
|
|
127
|
+
// if(type === undefined && globalDevices.hasOwnProperty(frame.mac) && globalDevices[frame.mac].hasOwnProperty('bridge') && globalDevices[frame.mac].bridge){
|
|
128
|
+
let query_data = {
|
|
129
|
+
addr: frame.mac,
|
|
130
|
+
payload: frame.data,
|
|
131
|
+
}
|
|
132
|
+
if(globalDevices[frame.mac].hasOwnProperty('command_queue') && globalDevices[frame.mac].command_queue.length != 0){
|
|
133
|
+
if(globalDevices[frame.mac].command_queue[0].hasOwnProperty('command')){
|
|
134
|
+
query_data.command = globalDevices[frame.mac].command_queue[0].command;
|
|
135
|
+
}
|
|
136
|
+
if(globalDevices[frame.mac].command_queue[0].hasOwnProperty('meta')){
|
|
137
|
+
query_data.meta = globalDevices[frame.mac].command_queue[0].meta;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
this._emitter.emit('converter_ack-'+frame.mac, query_data);
|
|
141
|
+
return;
|
|
142
|
+
// }
|
|
143
|
+
}
|
|
125
144
|
var type = this.payloadType[frame.data[0]];
|
|
126
145
|
if(typeof this[type] == 'function'){
|
|
127
146
|
var data = this[type](frame.data.slice(1), frame);
|
|
@@ -141,7 +160,7 @@ module.exports = class WirelessSensor{
|
|
|
141
160
|
}
|
|
142
161
|
}
|
|
143
162
|
// #OTF
|
|
144
|
-
var otf_devices = [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,105,106,107,108,110,111,112,114,118,180,181,202,519,520,521,531,535,537,538,539,540,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,105,106,107,108,110,111,112,114,118,120,180,181,202,217,519,520,521,531,535,537,538,539,540,1010,1011];
|
|
145
164
|
var device_type = msbLsb(frame.data[6], frame.data[7]);
|
|
146
165
|
// var device_type = frame.data[7];
|
|
147
166
|
|
|
@@ -303,7 +322,7 @@ module.exports = class WirelessSensor{
|
|
|
303
322
|
};
|
|
304
323
|
|
|
305
324
|
// #OTF
|
|
306
|
-
var otf_devices = [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,105,106,107,108,110,111,112,114,118,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
|
|
325
|
+
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,105,106,107,108,110,111,112,114,118,120,180,181,202,217,519,520,521,531,535,537,538,539,540,1010,1011];
|
|
307
326
|
if(otf_devices.includes(parsed.sensor_type)){
|
|
308
327
|
// If the message says FLY and there is not FLY timer in progress.
|
|
309
328
|
if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
|
|
@@ -1288,6 +1307,12 @@ module.exports = class WirelessSensor{
|
|
|
1288
1307
|
console.log(packet);
|
|
1289
1308
|
return this.config_send(sensor_mac, packet);
|
|
1290
1309
|
}
|
|
1310
|
+
config_set_quality_of_service_108(sensor_mac, value){
|
|
1311
|
+
console.log('config_set_quality_of_service_108');
|
|
1312
|
+
var packet = [244, 52, 0, 0, 0, value]
|
|
1313
|
+
console.log(packet);
|
|
1314
|
+
return this.config_send(sensor_mac, packet);
|
|
1315
|
+
}
|
|
1291
1316
|
config_set_rtc_108(sensor_mac){
|
|
1292
1317
|
console.log('config_set_rtc_108');
|
|
1293
1318
|
var date = new Date();
|
|
@@ -1295,8 +1320,8 @@ module.exports = class WirelessSensor{
|
|
|
1295
1320
|
console.log(packet);
|
|
1296
1321
|
return this.config_send(sensor_mac, packet);
|
|
1297
1322
|
}
|
|
1298
|
-
|
|
1299
|
-
console.log('
|
|
1323
|
+
config_set_transmission_interval_108(sensor_mac, value){
|
|
1324
|
+
console.log('config_set_transmission_interval_108');
|
|
1300
1325
|
var packet = [244, 55, 0, 0, 0, value];
|
|
1301
1326
|
console.log(packet);
|
|
1302
1327
|
return this.config_send(sensor_mac, packet);
|
|
@@ -1631,6 +1656,14 @@ module.exports = class WirelessSensor{
|
|
|
1631
1656
|
console.log(packet);
|
|
1632
1657
|
return this.config_send(sensor_mac, packet);
|
|
1633
1658
|
}
|
|
1659
|
+
config_set_max_raw_sample_110(sensor_mac, value){
|
|
1660
|
+
console.log('config_set_max_raw_sample_110');
|
|
1661
|
+
var packet = [244, 79, 0, 0, 101, 87];
|
|
1662
|
+
var val = int2Bytes(value, 2);
|
|
1663
|
+
packet.push(...val);
|
|
1664
|
+
console.log(packet);
|
|
1665
|
+
return this.config_send(sensor_mac, packet);
|
|
1666
|
+
}
|
|
1634
1667
|
config_set_acceleration_interrupt_threshold_84(sensor_mac, value){
|
|
1635
1668
|
console.log('config_set_acceleration_interrupt_threshold_84');
|
|
1636
1669
|
var packet = [244, 79, 0, 0, 0, 60, value];
|
|
@@ -1928,6 +1961,30 @@ module.exports = class WirelessSensor{
|
|
|
1928
1961
|
console.log(packet);
|
|
1929
1962
|
return this.config_send(sensor_mac, packet);
|
|
1930
1963
|
}
|
|
1964
|
+
config_set_to_always_on_120(sensor_mac){
|
|
1965
|
+
console.log('config_set_to_always_on_120');
|
|
1966
|
+
let packet = [244, 10, 0, 0, 0, 1];
|
|
1967
|
+
console.log(packet);
|
|
1968
|
+
return this.config_send(sensor_mac, packet);
|
|
1969
|
+
}
|
|
1970
|
+
config_set_sensor_reset_120(sensor_mac){
|
|
1971
|
+
console.log('config_set_sensor_reset_120');
|
|
1972
|
+
let packet = [244, 12, 0, 0, 26];
|
|
1973
|
+
console.log(packet);
|
|
1974
|
+
return this.config_send(sensor_mac, packet);
|
|
1975
|
+
}
|
|
1976
|
+
config_set_sensor_calib_120(sensor_mac){
|
|
1977
|
+
console.log('config_set_sensor_calib_120');
|
|
1978
|
+
let packet = [244, 13, 0, 0, 74];
|
|
1979
|
+
console.log(packet);
|
|
1980
|
+
return this.config_send(sensor_mac, packet);
|
|
1981
|
+
}
|
|
1982
|
+
config_set_alert_threshold_120(sensor_mac, value){
|
|
1983
|
+
console.log('config_set_alert_threshold_120');
|
|
1984
|
+
let packet = [244, 14, 0, 0, value];
|
|
1985
|
+
console.log(packet);
|
|
1986
|
+
return this.config_send(sensor_mac, packet);
|
|
1987
|
+
}
|
|
1931
1988
|
config_get_delay(sensor_mac){
|
|
1932
1989
|
return new Promise((fulfill, reject) => {
|
|
1933
1990
|
this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
|
|
@@ -2193,6 +2250,101 @@ module.exports = class WirelessSensor{
|
|
|
2193
2250
|
});
|
|
2194
2251
|
});
|
|
2195
2252
|
}
|
|
2253
|
+
queue_bridge_query(sensor_mac, data, meta = null, opts){
|
|
2254
|
+
var that = this;
|
|
2255
|
+
if(!globalDevices.hasOwnProperty(sensor_mac)){
|
|
2256
|
+
globalDevices[sensor_mac] = {bridge: true, command_queue: []};
|
|
2257
|
+
}
|
|
2258
|
+
// if(!Object.hasOwn(node._gateway_node.sensor_list[msg.payload.address], 'command_queue')){
|
|
2259
|
+
// if(!globalDevices[sensor_mac].hasOwnProperty('command_queue')){
|
|
2260
|
+
// globalDevices[sensor_mac].command_queue = [{'command': data, 'meta': meta}];
|
|
2261
|
+
// }else{
|
|
2262
|
+
globalDevices[sensor_mac].command_queue.push({'command': data, 'meta': meta});
|
|
2263
|
+
// }
|
|
2264
|
+
|
|
2265
|
+
return new Promise((fulfill, reject) => {
|
|
2266
|
+
that.queue.add(() => {
|
|
2267
|
+
return new Promise((f, r) => {
|
|
2268
|
+
var tout;
|
|
2269
|
+
function fail(response){
|
|
2270
|
+
that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
|
|
2271
|
+
clearTimeout(tout);
|
|
2272
|
+
|
|
2273
|
+
if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
|
|
2274
|
+
globalDevices[sensor_mac].command_queue.shift();
|
|
2275
|
+
}
|
|
2276
|
+
reject({
|
|
2277
|
+
err: response,
|
|
2278
|
+
sent: [mac2bytes(sensor_mac), data, opts]
|
|
2279
|
+
});
|
|
2280
|
+
f();
|
|
2281
|
+
}
|
|
2282
|
+
function pass(response){
|
|
2283
|
+
clearTimeout(tout);
|
|
2284
|
+
|
|
2285
|
+
that._emitter.emit('converter_response', response);
|
|
2286
|
+
that._emitter.emit('converter_response-'+sensor_mac, response);
|
|
2287
|
+
|
|
2288
|
+
|
|
2289
|
+
if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
|
|
2290
|
+
globalDevices[sensor_mac].command_queue.shift();
|
|
2291
|
+
}
|
|
2292
|
+
that._emitter.removeListener('converter_error-'+sensor_mac, fail);
|
|
2293
|
+
fulfill(response);
|
|
2294
|
+
f();
|
|
2295
|
+
// that._emitter.
|
|
2296
|
+
};
|
|
2297
|
+
|
|
2298
|
+
that._emitter.once('converter_ack-'+sensor_mac, pass);
|
|
2299
|
+
that._emitter.once('converter_error-'+sensor_mac, fail);
|
|
2300
|
+
tout = setTimeout(() => {
|
|
2301
|
+
that._emitter.removeListener('converter_error-'+sensor_mac, fail);
|
|
2302
|
+
that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
|
|
2303
|
+
|
|
2304
|
+
if(globalDevices[sensor_mac].hasOwnProperty('command_queue')){
|
|
2305
|
+
globalDevices[sensor_mac].command_queue.shift();
|
|
2306
|
+
};
|
|
2307
|
+
if(sensor_mac == '00:00:00:00:00:00:FF:FF'){
|
|
2308
|
+
reject({
|
|
2309
|
+
res: 'Broadcast mode, no target device',
|
|
2310
|
+
sent: [mac2bytes(sensor_mac), data, opts]
|
|
2311
|
+
});
|
|
2312
|
+
}else{
|
|
2313
|
+
reject({
|
|
2314
|
+
err: 'Wireless Converter did not respond',
|
|
2315
|
+
sent: [mac2bytes(sensor_mac), data, opts]
|
|
2316
|
+
});
|
|
2317
|
+
};
|
|
2318
|
+
|
|
2319
|
+
f();
|
|
2320
|
+
}, 1500);
|
|
2321
|
+
that.send.transmit_request(mac2bytes(sensor_mac), data, opts).then().catch((err) => {
|
|
2322
|
+
that._emitter.removeListener('converter_error-'+sensor_mac, fail);
|
|
2323
|
+
that._emitter.removeListener('converter_ack-'+sensor_mac, pass);
|
|
2324
|
+
reject({
|
|
2325
|
+
err: err,
|
|
2326
|
+
sent: [mac2bytes(sensor_mac), data, opts]
|
|
2327
|
+
});
|
|
2328
|
+
f();
|
|
2329
|
+
}).then();
|
|
2330
|
+
});
|
|
2331
|
+
});
|
|
2332
|
+
this.queue.add(() => {
|
|
2333
|
+
return new Promise((f, r) => {
|
|
2334
|
+
setTimeout(f, 500);
|
|
2335
|
+
});
|
|
2336
|
+
});
|
|
2337
|
+
});
|
|
2338
|
+
};
|
|
2339
|
+
prepare_bridge_query(sensor_mac, commands){
|
|
2340
|
+
commands.forEach((command) => {
|
|
2341
|
+
if(command.hasOwnProperty('meta')){
|
|
2342
|
+
this.queue_bridge_query(sensor_mac, command.command, command.meta);
|
|
2343
|
+
}else{
|
|
2344
|
+
this.queue_bridge_query(sensor_mac, command.command);
|
|
2345
|
+
}
|
|
2346
|
+
});
|
|
2347
|
+
}
|
|
2196
2348
|
build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware){
|
|
2197
2349
|
if(current_packet != 1){
|
|
2198
2350
|
console.log('bad packet cleanup');
|
|
@@ -2400,7 +2552,54 @@ module.exports = class WirelessSensor{
|
|
|
2400
2552
|
});
|
|
2401
2553
|
});
|
|
2402
2554
|
});
|
|
2403
|
-
}
|
|
2555
|
+
};
|
|
2556
|
+
local_at_send(parameter, value, ctrl_timeout = 1000){
|
|
2557
|
+
var that = this;
|
|
2558
|
+
return new Promise((fulfill, reject) => {
|
|
2559
|
+
that.queue.add(() => {
|
|
2560
|
+
return new Promise((f, r) => {
|
|
2561
|
+
var failed = false;
|
|
2562
|
+
var retries = 0;
|
|
2563
|
+
var tO;
|
|
2564
|
+
function fail(packet){
|
|
2565
|
+
failed = true;
|
|
2566
|
+
clearTimeout(tO);
|
|
2567
|
+
// that._emitter.removeListener('receive_packet-'+sensor_mac, pass);
|
|
2568
|
+
// that._emitter.removeListener('transmit_status-'+sensor_mac, pass);
|
|
2569
|
+
reject({
|
|
2570
|
+
err: packet,
|
|
2571
|
+
sent: ['Local Module', parameter, value]
|
|
2572
|
+
});
|
|
2573
|
+
r();
|
|
2574
|
+
}
|
|
2575
|
+
function pass(packet){
|
|
2576
|
+
if(failed) return;
|
|
2577
|
+
clearTimeout(tO);
|
|
2578
|
+
fulfill(packet);
|
|
2579
|
+
f();
|
|
2580
|
+
};
|
|
2581
|
+
|
|
2582
|
+
function send(){
|
|
2583
|
+
that.send.at_command(parameter, value).then(function(frame){
|
|
2584
|
+
if(frame.status == 'OK'){
|
|
2585
|
+
pass(frame);
|
|
2586
|
+
}else{
|
|
2587
|
+
tO = setTimeout(() => {
|
|
2588
|
+
if(retries < 0){
|
|
2589
|
+
retries++;
|
|
2590
|
+
send();
|
|
2591
|
+
}else{
|
|
2592
|
+
fail('AT response timeout');
|
|
2593
|
+
}
|
|
2594
|
+
}, ctrl_timeout);
|
|
2595
|
+
}
|
|
2596
|
+
}).catch(fail);
|
|
2597
|
+
};
|
|
2598
|
+
send();
|
|
2599
|
+
});
|
|
2600
|
+
});
|
|
2601
|
+
});
|
|
2602
|
+
};
|
|
2404
2603
|
route_discover(sensor_mac, opts){
|
|
2405
2604
|
var data = [85];
|
|
2406
2605
|
var that = this;
|
|
@@ -2725,7 +2924,7 @@ function sensor_types(parent){
|
|
|
2725
2924
|
}
|
|
2726
2925
|
},
|
|
2727
2926
|
'21': {
|
|
2728
|
-
name: '
|
|
2927
|
+
name: 'Differential Bidirectional Pressure Sensor',
|
|
2729
2928
|
parse: (d) => {
|
|
2730
2929
|
return {
|
|
2731
2930
|
pressure: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
|
|
@@ -6442,7 +6641,7 @@ function sensor_types(parent){
|
|
|
6442
6641
|
return {
|
|
6443
6642
|
mode: payload[8],
|
|
6444
6643
|
sampling_frequency: payload.slice(9, 13).reduce(msbLsb),
|
|
6445
|
-
rms_mv: payload.slice(13, 17).reduce(msbLsb) / 1000,
|
|
6644
|
+
rms_mv: signInt(payload.slice(13, 17).reduce(msbLsb), 32) / 1000,
|
|
6446
6645
|
freq_1: payload.slice(17, 19).reduce(msbLsb),
|
|
6447
6646
|
freq_2: payload.slice(19, 21).reduce(msbLsb),
|
|
6448
6647
|
freq_3: payload.slice(21, 23).reduce(msbLsb),
|
|
@@ -6475,10 +6674,10 @@ function sensor_types(parent){
|
|
|
6475
6674
|
'fly_rate': frame.slice(15, 17).reduce(msbLsb) + " min",
|
|
6476
6675
|
'sensor_gain_db': frame[17] + " dB",
|
|
6477
6676
|
'sensor_boot_time': frame[18] + " sec",
|
|
6478
|
-
'sampling_frequency':
|
|
6479
|
-
'hardware_id': frame.slice(23, 26),
|
|
6480
|
-
'report_rate': frame.slice(26, 30).reduce(msbLsb),
|
|
6481
|
-
'tx_life_count': frame.slice(30, 34).reduce(msbLsb),
|
|
6677
|
+
'sampling_frequency': frame.slice(19, 23).reduce(msbLsb) + " Hz",
|
|
6678
|
+
// 'hardware_id': frame.slice(23, 26),
|
|
6679
|
+
// 'report_rate': frame.slice(26, 30).reduce(msbLsb),
|
|
6680
|
+
// 'tx_life_count': frame.slice(30, 34).reduce(msbLsb),
|
|
6482
6681
|
'machine_values': {
|
|
6483
6682
|
'firmware': frame[2],
|
|
6484
6683
|
'mode':frame[12],
|
|
@@ -6487,10 +6686,10 @@ function sensor_types(parent){
|
|
|
6487
6686
|
'fly_rate': frame.slice(15, 17),
|
|
6488
6687
|
'sensor_gain_db': frame[17],
|
|
6489
6688
|
'sensor_boot_time': frame[18],
|
|
6490
|
-
'sampling_frequency': frame.slice(19, 23)
|
|
6491
|
-
'hardware_id': frame.slice(23, 26),
|
|
6492
|
-
'report_rate': frame.slice(26, 30),
|
|
6493
|
-
'tx_life_count': frame.slice(30, 34)
|
|
6689
|
+
'sampling_frequency': frame.slice(19, 23)
|
|
6690
|
+
// 'hardware_id': frame.slice(23, 26),
|
|
6691
|
+
// 'report_rate': frame.slice(26, 30),
|
|
6692
|
+
// 'tx_life_count': frame.slice(30, 34)
|
|
6494
6693
|
}
|
|
6495
6694
|
}
|
|
6496
6695
|
}
|
|
@@ -6619,14 +6818,14 @@ function sensor_types(parent){
|
|
|
6619
6818
|
return {
|
|
6620
6819
|
mode: payload[8],
|
|
6621
6820
|
sampling_frequency: payload.slice(9, 13).reduce(msbLsb),
|
|
6622
|
-
c1_rms_mv: payload.slice(13,
|
|
6623
|
-
c1_freq_1: payload.slice(
|
|
6624
|
-
c1_freq_2: payload.slice(
|
|
6625
|
-
c1_freq_3: payload.slice(
|
|
6626
|
-
c2_rms_mv: payload.slice(23,
|
|
6627
|
-
c2_freq_1: payload.slice(
|
|
6628
|
-
c2_freq_2: payload.slice(
|
|
6629
|
-
c2_freq_3: payload.slice(
|
|
6821
|
+
c1_rms_mv: signInt(payload.slice(13, 17).reduce(msbLsb), 32) / 1000,
|
|
6822
|
+
c1_freq_1: payload.slice(17, 19).reduce(msbLsb),
|
|
6823
|
+
c1_freq_2: payload.slice(19, 21).reduce(msbLsb),
|
|
6824
|
+
c1_freq_3: payload.slice(21, 23).reduce(msbLsb),
|
|
6825
|
+
c2_rms_mv: signInt(payload.slice(23, 27).reduce(msbLsb), 32) / 1000,
|
|
6826
|
+
c2_freq_1: payload.slice(27, 29).reduce(msbLsb),
|
|
6827
|
+
c2_freq_2: payload.slice(29, 31).reduce(msbLsb),
|
|
6828
|
+
c2_freq_3: payload.slice(31, 33).reduce(msbLsb)
|
|
6630
6829
|
};
|
|
6631
6830
|
}
|
|
6632
6831
|
},
|
|
@@ -6657,10 +6856,10 @@ function sensor_types(parent){
|
|
|
6657
6856
|
'c1_sensor_boot_time': frame[18] + " sec",
|
|
6658
6857
|
'c2_sensor_gain_db': frame[19] + " dB",
|
|
6659
6858
|
'c2_sensor_boot_time': frame[20] + " sec",
|
|
6660
|
-
'sampling_frequency':
|
|
6661
|
-
'hardware_id': frame.slice(25, 28),
|
|
6662
|
-
'report_rate': frame.slice(28, 32).reduce(msbLsb),
|
|
6663
|
-
'tx_life_count': frame.slice(32, 36).reduce(msbLsb),
|
|
6859
|
+
'sampling_frequency': frame.slice(21, 25).reduce(msbLsb) + " Hz",
|
|
6860
|
+
// 'hardware_id': frame.slice(25, 28),
|
|
6861
|
+
// 'report_rate': frame.slice(28, 32).reduce(msbLsb),
|
|
6862
|
+
// 'tx_life_count': frame.slice(32, 36).reduce(msbLsb),
|
|
6664
6863
|
'machine_values': {
|
|
6665
6864
|
'firmware': frame[2],
|
|
6666
6865
|
'mode': frame[12],
|
|
@@ -6671,10 +6870,10 @@ function sensor_types(parent){
|
|
|
6671
6870
|
'c1_sensor_boot_time': frame[18],
|
|
6672
6871
|
'c2_sensor_gain_db': frame[19],
|
|
6673
6872
|
'c2_sensor_boot_time': frame[20],
|
|
6674
|
-
'sampling_frequency': frame.slice(21, 25)
|
|
6675
|
-
'hardware_id': frame.slice(25, 28),
|
|
6676
|
-
'report_rate': frame.slice(28, 32),
|
|
6677
|
-
'tx_life_count': frame.slice(32, 36)
|
|
6873
|
+
'sampling_frequency': frame.slice(21, 25)
|
|
6874
|
+
// 'hardware_id': frame.slice(25, 28),
|
|
6875
|
+
// 'report_rate': frame.slice(28, 32),
|
|
6876
|
+
// 'tx_life_count': frame.slice(32, 36)
|
|
6678
6877
|
}
|
|
6679
6878
|
}
|
|
6680
6879
|
}
|
|
@@ -6811,23 +7010,47 @@ function sensor_types(parent){
|
|
|
6811
7010
|
}
|
|
6812
7011
|
}
|
|
6813
7012
|
},
|
|
7013
|
+
'109': {
|
|
7014
|
+
name: 'Wireless Custom Solar Sensor',
|
|
7015
|
+
parse: (d) => {
|
|
7016
|
+
return {
|
|
7017
|
+
illuminance: d.slice(0, 4).reduce(msbLsb),
|
|
7018
|
+
total_solar_radiation: d.slice(4, 6).reduce(msbLsb),
|
|
7019
|
+
ultraviolet_radiation: d.slice(6, 8).reduce(msbLsb)
|
|
7020
|
+
};
|
|
7021
|
+
},
|
|
7022
|
+
'parse_fly': (frame) => {
|
|
7023
|
+
return {
|
|
7024
|
+
'firmware': frame[2],
|
|
7025
|
+
'hardware_id': frame.slice(12, 15),
|
|
7026
|
+
'sample_rate': frame.slice(15, 19).reduce(msbLsb) + " Sec.",
|
|
7027
|
+
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb),
|
|
7028
|
+
'machine_values': {
|
|
7029
|
+
'firmware': frame[2],
|
|
7030
|
+
'hardware_id': frame.slice(12, 15),
|
|
7031
|
+
'sample_rate': frame.slice(15, 19).reduce(msbLsb),
|
|
7032
|
+
'tx_life_counter': frame.slice(19, 23).reduce(msbLsb)
|
|
7033
|
+
}
|
|
7034
|
+
}
|
|
7035
|
+
}
|
|
7036
|
+
},
|
|
6814
7037
|
'110': {
|
|
6815
7038
|
name: 'One Channel Vibration Plus v4',
|
|
6816
7039
|
parse: (payload, parsed, mac) => {
|
|
6817
|
-
if(payload[7]
|
|
7040
|
+
if(payload[7] & 2){
|
|
6818
7041
|
console.log('Error found');
|
|
6819
7042
|
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
6820
7043
|
return parsed;
|
|
6821
7044
|
}
|
|
6822
|
-
|
|
7045
|
+
let msg_type = (payload[7] & 16)? 'motion' : 'regular';
|
|
6823
7046
|
if(payload[8] === 1){
|
|
6824
7047
|
var deviceAddr = mac;
|
|
6825
7048
|
var firmware = payload[1];
|
|
6826
7049
|
var hour = payload[12];
|
|
6827
7050
|
var minute = payload[13];
|
|
6828
|
-
var expected_packets = payload[16];
|
|
6829
|
-
var current_packet = payload[
|
|
6830
|
-
var sdata_start =
|
|
7051
|
+
var expected_packets = msbLsb(payload[16], payload[17]);
|
|
7052
|
+
var current_packet = msbLsb(payload[18], payload[19]);
|
|
7053
|
+
var sdata_start = 20;
|
|
6831
7054
|
|
|
6832
7055
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
6833
7056
|
if(expected_packets != 1){
|
|
@@ -6998,12 +7221,15 @@ function sensor_types(parent){
|
|
|
6998
7221
|
}
|
|
6999
7222
|
}
|
|
7000
7223
|
var fft_concat_obj = {
|
|
7224
|
+
mode: payload[8],
|
|
7225
|
+
msg_type: msg_type,
|
|
7001
7226
|
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
7002
7227
|
mac_address: deviceAddr,
|
|
7003
7228
|
en_axis: globalDevices[deviceAddr].en_axis,
|
|
7004
7229
|
fsr: fsr_text,
|
|
7005
7230
|
odr: globalDevices[deviceAddr].odr,
|
|
7006
7231
|
device_temp: globalDevices[deviceAddr].device_temp,
|
|
7232
|
+
total_samples: label,
|
|
7007
7233
|
data: fft_concat
|
|
7008
7234
|
};
|
|
7009
7235
|
sensor_data = fft_concat_obj;
|
|
@@ -7079,6 +7305,7 @@ function sensor_types(parent){
|
|
|
7079
7305
|
}
|
|
7080
7306
|
return {
|
|
7081
7307
|
mode: payload[8],
|
|
7308
|
+
msg_type: msg_type,
|
|
7082
7309
|
|
|
7083
7310
|
odr: odr,
|
|
7084
7311
|
temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
@@ -7126,6 +7353,9 @@ function sensor_types(parent){
|
|
|
7126
7353
|
case 2:
|
|
7127
7354
|
frame_data.mode = "Processed + Raw on demand";
|
|
7128
7355
|
break;
|
|
7356
|
+
case 3:
|
|
7357
|
+
frame_data.mode = "Smart";
|
|
7358
|
+
break;
|
|
7129
7359
|
}
|
|
7130
7360
|
switch(frame[17]){
|
|
7131
7361
|
case 6:
|
|
@@ -7237,30 +7467,39 @@ function sensor_types(parent){
|
|
|
7237
7467
|
switch(frame[22]){
|
|
7238
7468
|
case 0:
|
|
7239
7469
|
frame_data.sampling_interval = "5 Minutes";
|
|
7470
|
+
frame_data.sampling_interval_number = 5;
|
|
7240
7471
|
break;
|
|
7241
7472
|
case 1:
|
|
7242
7473
|
frame_data.sampling_interval = "10 Minutes";
|
|
7474
|
+
frame_data.sampling_interval_number = 10;
|
|
7243
7475
|
break;
|
|
7244
7476
|
case 2:
|
|
7245
7477
|
frame_data.sampling_interval = "15 Minutes";
|
|
7478
|
+
frame_data.sampling_interval_number = 15;
|
|
7246
7479
|
break;
|
|
7247
7480
|
case 2:
|
|
7248
7481
|
frame_data.sampling_interval = "20 Minutes";
|
|
7482
|
+
frame_data.sampling_interval_number = 20;
|
|
7249
7483
|
break;
|
|
7250
7484
|
case 4:
|
|
7251
7485
|
frame_data.sampling_interval = "30 Minutes";
|
|
7486
|
+
frame_data.sampling_interval_number = 30;
|
|
7252
7487
|
break;
|
|
7253
7488
|
case 5:
|
|
7254
7489
|
frame_data.sampling_interval = "60 Minutes";
|
|
7490
|
+
frame_data.sampling_interval_number = 60;
|
|
7255
7491
|
break;
|
|
7256
7492
|
case 6:
|
|
7257
7493
|
frame_data.sampling_interval = "120 Minutes";
|
|
7494
|
+
frame_data.sampling_interval_number = 120;
|
|
7258
7495
|
break;
|
|
7259
7496
|
case 7:
|
|
7260
7497
|
frame_data.sampling_interval = "180 Minutes";
|
|
7498
|
+
frame_data.sampling_interval_number = 180;
|
|
7261
7499
|
break;
|
|
7262
7500
|
case 8:
|
|
7263
7501
|
frame_data.sampling_interval = "1 Minute";
|
|
7502
|
+
frame_data.sampling_interval_number = 1;
|
|
7264
7503
|
break;
|
|
7265
7504
|
}
|
|
7266
7505
|
frame_data.on_request_timeout = frame[23] + " Seconds";
|
|
@@ -7295,6 +7534,9 @@ function sensor_types(parent){
|
|
|
7295
7534
|
break;
|
|
7296
7535
|
}
|
|
7297
7536
|
frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
|
|
7537
|
+
frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
|
|
7538
|
+
frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
|
|
7539
|
+
frame_data.smart_mode_threshold = frame[34] * 50;
|
|
7298
7540
|
return {
|
|
7299
7541
|
'firmware': frame[2],
|
|
7300
7542
|
'destination_address': toMac(frame.slice(12, 16)),
|
|
@@ -7312,6 +7554,14 @@ function sensor_types(parent){
|
|
|
7312
7554
|
'payload_length': frame_data.payload_length,
|
|
7313
7555
|
'fsr': frame_data.fsr_text,
|
|
7314
7556
|
'rpm_compute_status': frame_data.rpm_status,
|
|
7557
|
+
'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
|
|
7558
|
+
'auto_raw_interval': frame_data.auto_raw_interval,
|
|
7559
|
+
'smart_mode_skip_count': frame[33],
|
|
7560
|
+
'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
|
|
7561
|
+
'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
|
|
7562
|
+
'hardware_id': frame.slice(39, 42),
|
|
7563
|
+
'reserved': frame.slice(42, 46),
|
|
7564
|
+
'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
|
|
7315
7565
|
'machine_values': {
|
|
7316
7566
|
'firmware': frame[2],
|
|
7317
7567
|
'destination_address': toMac(frame.slice(12, 16), false),
|
|
@@ -7326,7 +7576,15 @@ function sensor_types(parent){
|
|
|
7326
7576
|
'deadband': frame[24],
|
|
7327
7577
|
'payload_length': frame[25],
|
|
7328
7578
|
'fsr': frame[26],
|
|
7329
|
-
'rpm_compute_status': frame[27]
|
|
7579
|
+
'rpm_compute_status': frame[27],
|
|
7580
|
+
'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
|
|
7581
|
+
'auto_raw_interval': frame[32],
|
|
7582
|
+
'smart_mode_skip_count': frame[33],
|
|
7583
|
+
'smart_mode_acc_threshold':frame[34],
|
|
7584
|
+
'uptime_counter': frame.slice(35, 39),
|
|
7585
|
+
'hardware_id': frame.slice(39, 42),
|
|
7586
|
+
'reserved': frame.slice(42, 46),
|
|
7587
|
+
'tx_lifetime_counter': frame.slice(46, 50)
|
|
7330
7588
|
}
|
|
7331
7589
|
}
|
|
7332
7590
|
}
|
|
@@ -7344,15 +7602,15 @@ function sensor_types(parent){
|
|
|
7344
7602
|
if(payload[7] & 2 && payload[7] & 4){
|
|
7345
7603
|
return parsed;
|
|
7346
7604
|
}
|
|
7347
|
-
|
|
7605
|
+
let msg_type = (payload[7] & 16)? 'motion' : 'regular';
|
|
7348
7606
|
if(payload[8] === 1){
|
|
7349
7607
|
var deviceAddr = mac;
|
|
7350
7608
|
var firmware = payload[1];
|
|
7351
7609
|
var hour = payload[12];
|
|
7352
7610
|
var minute = payload[13];
|
|
7353
|
-
var expected_packets = payload[16];
|
|
7354
|
-
var current_packet = payload[
|
|
7355
|
-
var sdata_start =
|
|
7611
|
+
var expected_packets = msbLsb(payload[16], payload[17]);
|
|
7612
|
+
var current_packet = msbLsb(payload[18], payload[19]);
|
|
7613
|
+
var sdata_start = 20;
|
|
7356
7614
|
|
|
7357
7615
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
7358
7616
|
if(expected_packets != 1){
|
|
@@ -7532,6 +7790,8 @@ function sensor_types(parent){
|
|
|
7532
7790
|
}
|
|
7533
7791
|
|
|
7534
7792
|
var fft_concat_obj = {
|
|
7793
|
+
mode: payload[8],
|
|
7794
|
+
msg_type: msg_type,
|
|
7535
7795
|
probe: probe,
|
|
7536
7796
|
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
7537
7797
|
probe: probe,
|
|
@@ -7540,6 +7800,7 @@ function sensor_types(parent){
|
|
|
7540
7800
|
fsr: fsr_text,
|
|
7541
7801
|
odr: globalDevices[deviceAddr].odr,
|
|
7542
7802
|
device_temp: globalDevices[deviceAddr].device_temp,
|
|
7803
|
+
total_samples: label,
|
|
7543
7804
|
data: fft_concat
|
|
7544
7805
|
};
|
|
7545
7806
|
sensor_data = fft_concat_obj;
|
|
@@ -7654,9 +7915,9 @@ function sensor_types(parent){
|
|
|
7654
7915
|
// else{
|
|
7655
7916
|
// probe = '1';
|
|
7656
7917
|
// }
|
|
7657
|
-
|
|
7658
7918
|
return {
|
|
7659
7919
|
mode: payload[8],
|
|
7920
|
+
msg_type: msg_type,
|
|
7660
7921
|
|
|
7661
7922
|
s1_odr: odr1,
|
|
7662
7923
|
s1_temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
@@ -7732,6 +7993,9 @@ function sensor_types(parent){
|
|
|
7732
7993
|
case 2:
|
|
7733
7994
|
frame_data.mode = "Processed + Raw on demand";
|
|
7734
7995
|
break;
|
|
7996
|
+
case 3:
|
|
7997
|
+
frame_data.mode = "Smart";
|
|
7998
|
+
break;
|
|
7735
7999
|
}
|
|
7736
8000
|
switch(frame[17]){
|
|
7737
8001
|
case 6:
|
|
@@ -7942,30 +8206,39 @@ function sensor_types(parent){
|
|
|
7942
8206
|
switch(frame[26]){
|
|
7943
8207
|
case 0:
|
|
7944
8208
|
frame_data.sampling_interval = "5 Minutes";
|
|
8209
|
+
frame_data.sampling_interval_number = 5;
|
|
7945
8210
|
break;
|
|
7946
8211
|
case 1:
|
|
7947
8212
|
frame_data.sampling_interval = "10 Minutes";
|
|
8213
|
+
frame_data.sampling_interval_number = 10;
|
|
7948
8214
|
break;
|
|
7949
8215
|
case 2:
|
|
7950
8216
|
frame_data.sampling_interval = "15 Minutes";
|
|
8217
|
+
frame_data.sampling_interval_number = 15;
|
|
7951
8218
|
break;
|
|
7952
8219
|
case 2:
|
|
7953
8220
|
frame_data.sampling_interval = "20 Minutes";
|
|
8221
|
+
frame_data.sampling_interval_number = 20;
|
|
7954
8222
|
break;
|
|
7955
8223
|
case 4:
|
|
7956
8224
|
frame_data.sampling_interval = "30 Minutes";
|
|
8225
|
+
frame_data.sampling_interval_number = 30;
|
|
7957
8226
|
break;
|
|
7958
8227
|
case 5:
|
|
7959
8228
|
frame_data.sampling_interval = "60 Minutes";
|
|
8229
|
+
frame_data.sampling_interval_number = 60;
|
|
7960
8230
|
break;
|
|
7961
8231
|
case 6:
|
|
7962
8232
|
frame_data.sampling_interval = "120 Minutes";
|
|
8233
|
+
frame_data.sampling_interval_number = 120;
|
|
7963
8234
|
break;
|
|
7964
8235
|
case 7:
|
|
7965
8236
|
frame_data.sampling_interval = "180 Minutes";
|
|
8237
|
+
frame_data.sampling_interval_number = 180;
|
|
7966
8238
|
break;
|
|
7967
8239
|
case 8:
|
|
7968
8240
|
frame_data.sampling_interval = "1 Minute";
|
|
8241
|
+
frame_data.sampling_interval_number = 1;
|
|
7969
8242
|
break;
|
|
7970
8243
|
}
|
|
7971
8244
|
frame_data.on_request_timeout = frame[27] + " Seconds";
|
|
@@ -7985,7 +8258,7 @@ function sensor_types(parent){
|
|
|
7985
8258
|
frame_data.payload_length = "180 Bytes";
|
|
7986
8259
|
break;
|
|
7987
8260
|
}
|
|
7988
|
-
switch(frame[
|
|
8261
|
+
switch(frame[30]){
|
|
7989
8262
|
case 0:
|
|
7990
8263
|
frame_data.fsr_text = "2g";
|
|
7991
8264
|
break;
|
|
@@ -8000,6 +8273,10 @@ function sensor_types(parent){
|
|
|
8000
8273
|
break;
|
|
8001
8274
|
}
|
|
8002
8275
|
frame_data.rpm_status = frame[31]? 'Enabled': 'Disabled';
|
|
8276
|
+
frame_data.auto_raw_interval = frame[36] * frame_data.sampling_interval_number || 'disabled';
|
|
8277
|
+
frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
|
|
8278
|
+
frame_data.p1_smart_mode_threshold = frame[38] * 50;
|
|
8279
|
+
frame_data.p2_smart_mode_threshold = frame[39] * 50;
|
|
8003
8280
|
return {
|
|
8004
8281
|
'firmware': frame[2],
|
|
8005
8282
|
'destination_address': toMac(frame.slice(12, 16)),
|
|
@@ -8021,8 +8298,18 @@ function sensor_types(parent){
|
|
|
8021
8298
|
'on_request_timeout': frame_data.on_request_timeout,
|
|
8022
8299
|
'deadband': frame_data.deadband,
|
|
8023
8300
|
'payload_length': frame_data.payload_length,
|
|
8024
|
-
'
|
|
8301
|
+
'fsr': frame_data.fsr_text,
|
|
8025
8302
|
'rpm_compute_status': frame_data.rpm_status,
|
|
8303
|
+
'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
|
|
8304
|
+
'auto_raw_interval': frame_data.auto_raw_interval,
|
|
8305
|
+
'smart_mode_skip_count': frame[37],
|
|
8306
|
+
'smart_mode_acc_threshold_probe_1': frame_data.p1_smart_mode_threshold+'mg',
|
|
8307
|
+
'smart_mode_acc_threshold_probe_2': frame_data.p2_smart_mode_threshold+'mg',
|
|
8308
|
+
'uptime_counter_probe_1': frame.slice(40, 44).reduce(msbLsb),
|
|
8309
|
+
'uptime_counter_probe_2': frame.slice(44, 48).reduce(msbLsb),
|
|
8310
|
+
'hardware_id': frame.slice(48, 51),
|
|
8311
|
+
'reserved': frame.slice(51, 55),
|
|
8312
|
+
'tx_lifetime_counter': frame.slice(55, 59).reduce(msbLsb),
|
|
8026
8313
|
'machine_values': {
|
|
8027
8314
|
'firmware': frame[2],
|
|
8028
8315
|
'destination_address': toMac(frame.slice(12, 16), false),
|
|
@@ -8042,6 +8329,16 @@ function sensor_types(parent){
|
|
|
8042
8329
|
'payload_length': frame[29],
|
|
8043
8330
|
'fsm': frame[30],
|
|
8044
8331
|
'rpm_compute_status': frame[31],
|
|
8332
|
+
'auto_raw_destination_address': toMac(frame.slice(32 , 36)),
|
|
8333
|
+
'auto_raw_interval': frame[36],
|
|
8334
|
+
'smart_mode_skip_count': frame[37],
|
|
8335
|
+
'smart_mode_acc_threshold_probe_1':frame[38],
|
|
8336
|
+
'smart_mode_acc_threshold_probe_2':frame[39],
|
|
8337
|
+
'uptime_counter_probe_1': frame.slice(40, 44),
|
|
8338
|
+
'uptime_counter_probe_2': frame.slice(44, 48),
|
|
8339
|
+
'hardware_id': frame.slice(48, 51),
|
|
8340
|
+
'reserved': frame.slice(51, 55),
|
|
8341
|
+
'tx_lifetime_counter': frame.slice(55, 59).reduce(msbLsb)
|
|
8045
8342
|
}
|
|
8046
8343
|
}
|
|
8047
8344
|
}
|
|
@@ -8049,21 +8346,21 @@ function sensor_types(parent){
|
|
|
8049
8346
|
'112': {
|
|
8050
8347
|
name: 'Condition Based/Predictive Maintenance Sensor v4',
|
|
8051
8348
|
parse: (payload, parsed, mac) => {
|
|
8052
|
-
if(payload[7]
|
|
8349
|
+
if(payload[7] & 2){
|
|
8053
8350
|
console.log('Error found');
|
|
8054
8351
|
console.log(payload[7]);
|
|
8055
8352
|
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
8056
8353
|
return parsed;
|
|
8057
8354
|
}
|
|
8058
|
-
|
|
8355
|
+
let msg_type = (payload[7] & 16)? 'motion' : 'regular';
|
|
8059
8356
|
if(payload[8] === 1){
|
|
8060
8357
|
var deviceAddr = mac;
|
|
8061
8358
|
var firmware = payload[1];
|
|
8062
8359
|
var hour = payload[12];
|
|
8063
8360
|
var minute = payload[13];
|
|
8064
|
-
var expected_packets = payload[16];
|
|
8065
|
-
var current_packet = payload[
|
|
8066
|
-
var sdata_start =
|
|
8361
|
+
var expected_packets = msbLsb(payload[16], payload[17]);
|
|
8362
|
+
var current_packet = msbLsb(payload[18], payload[19]);
|
|
8363
|
+
var sdata_start = 20;
|
|
8067
8364
|
|
|
8068
8365
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
8069
8366
|
if(expected_packets != 1){
|
|
@@ -8233,12 +8530,15 @@ function sensor_types(parent){
|
|
|
8233
8530
|
}
|
|
8234
8531
|
}
|
|
8235
8532
|
var fft_concat_obj = {
|
|
8533
|
+
mode: payload[8],
|
|
8534
|
+
msg_type: msg_type,
|
|
8236
8535
|
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
8237
8536
|
mac_address: deviceAddr,
|
|
8238
8537
|
en_axis: globalDevices[deviceAddr].en_axis,
|
|
8239
8538
|
fsr: fsr_text,
|
|
8240
8539
|
odr: globalDevices[deviceAddr].odr,
|
|
8241
8540
|
device_temp: globalDevices[deviceAddr].device_temp,
|
|
8541
|
+
total_samples: label,
|
|
8242
8542
|
data: fft_concat
|
|
8243
8543
|
};
|
|
8244
8544
|
// console.log(globalDevices[deviceAddr].data);
|
|
@@ -8318,6 +8618,7 @@ function sensor_types(parent){
|
|
|
8318
8618
|
}
|
|
8319
8619
|
return {
|
|
8320
8620
|
mode: payload[8],
|
|
8621
|
+
msg_type: msg_type,
|
|
8321
8622
|
|
|
8322
8623
|
odr: odr,
|
|
8323
8624
|
temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
@@ -8366,6 +8667,9 @@ function sensor_types(parent){
|
|
|
8366
8667
|
case 2:
|
|
8367
8668
|
frame_data.mode = "Processed + Raw on demand";
|
|
8368
8669
|
break;
|
|
8670
|
+
case 3:
|
|
8671
|
+
frame_data.mode = "Smart";
|
|
8672
|
+
break;
|
|
8369
8673
|
}
|
|
8370
8674
|
switch(frame[17]){
|
|
8371
8675
|
case 6:
|
|
@@ -8477,30 +8781,39 @@ function sensor_types(parent){
|
|
|
8477
8781
|
switch(frame[22]){
|
|
8478
8782
|
case 0:
|
|
8479
8783
|
frame_data.sampling_interval = "5 Minutes";
|
|
8784
|
+
frame_data.sampling_interval_number = 5;
|
|
8480
8785
|
break;
|
|
8481
8786
|
case 1:
|
|
8482
8787
|
frame_data.sampling_interval = "10 Minutes";
|
|
8788
|
+
frame_data.sampling_interval_number = 10;
|
|
8483
8789
|
break;
|
|
8484
8790
|
case 2:
|
|
8485
8791
|
frame_data.sampling_interval = "15 Minutes";
|
|
8792
|
+
frame_data.sampling_interval_number = 15;
|
|
8486
8793
|
break;
|
|
8487
8794
|
case 2:
|
|
8488
8795
|
frame_data.sampling_interval = "20 Minutes";
|
|
8796
|
+
frame_data.sampling_interval_number = 20;
|
|
8489
8797
|
break;
|
|
8490
8798
|
case 4:
|
|
8491
8799
|
frame_data.sampling_interval = "30 Minutes";
|
|
8800
|
+
frame_data.sampling_interval_number = 30;
|
|
8492
8801
|
break;
|
|
8493
8802
|
case 5:
|
|
8494
8803
|
frame_data.sampling_interval = "60 Minutes";
|
|
8804
|
+
frame_data.sampling_interval_number = 60;
|
|
8495
8805
|
break;
|
|
8496
8806
|
case 6:
|
|
8497
8807
|
frame_data.sampling_interval = "120 Minutes";
|
|
8808
|
+
frame_data.sampling_interval_number = 120;
|
|
8498
8809
|
break;
|
|
8499
8810
|
case 7:
|
|
8500
8811
|
frame_data.sampling_interval = "180 Minutes";
|
|
8812
|
+
frame_data.sampling_interval_number = 180;
|
|
8501
8813
|
break;
|
|
8502
8814
|
case 8:
|
|
8503
8815
|
frame_data.sampling_interval = "1 Minute";
|
|
8816
|
+
frame_data.sampling_interval_number = 1;
|
|
8504
8817
|
break;
|
|
8505
8818
|
}
|
|
8506
8819
|
frame_data.on_request_timeout = frame[23] + " Seconds";
|
|
@@ -8535,6 +8848,9 @@ function sensor_types(parent){
|
|
|
8535
8848
|
break;
|
|
8536
8849
|
}
|
|
8537
8850
|
frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
|
|
8851
|
+
frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
|
|
8852
|
+
frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
|
|
8853
|
+
frame_data.smart_mode_threshold = frame[34] * 50;
|
|
8538
8854
|
return {
|
|
8539
8855
|
'firmware': frame[2],
|
|
8540
8856
|
'destination_address': toMac(frame.slice(12, 16)),
|
|
@@ -8550,8 +8866,16 @@ function sensor_types(parent){
|
|
|
8550
8866
|
'on_request_timeout': frame_data.on_request_timeout,
|
|
8551
8867
|
'deadband': frame_data.deadband,
|
|
8552
8868
|
'payload_length': frame_data.payload_length,
|
|
8553
|
-
'
|
|
8869
|
+
'fsr': frame_data.fsr_text,
|
|
8554
8870
|
'rpm_compute_status': frame_data.rpm_status,
|
|
8871
|
+
'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
|
|
8872
|
+
'auto_raw_interval': frame_data.auto_raw_interval,
|
|
8873
|
+
'smart_mode_skip_count': frame[33],
|
|
8874
|
+
'smart_mode_acc_threshold': frame_data.smart_mode_threshold+'mg',
|
|
8875
|
+
'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
|
|
8876
|
+
'hardware_id': frame.slice(39, 42),
|
|
8877
|
+
'reserved': frame.slice(42, 46),
|
|
8878
|
+
'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
|
|
8555
8879
|
'machine_values': {
|
|
8556
8880
|
'firmware': frame[2],
|
|
8557
8881
|
'destination_address': toMac(frame.slice(12, 16), false),
|
|
@@ -8566,7 +8890,15 @@ function sensor_types(parent){
|
|
|
8566
8890
|
'deadband': frame[24],
|
|
8567
8891
|
'payload_length': frame[25],
|
|
8568
8892
|
'fsm': frame[26],
|
|
8569
|
-
|
|
8893
|
+
'rpm_compute_status': frame[27],
|
|
8894
|
+
'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
|
|
8895
|
+
'auto_raw_interval': frame[32],
|
|
8896
|
+
'smart_mode_skip_count': frame[33],
|
|
8897
|
+
'smart_mode_acc_threshold':frame[34],
|
|
8898
|
+
'uptime_counter': frame.slice(35, 39),
|
|
8899
|
+
'hardware_id': frame.slice(39, 42),
|
|
8900
|
+
'reserved': frame.slice(42, 46),
|
|
8901
|
+
'tx_lifetime_counter': frame.slice(46, 50)
|
|
8570
8902
|
}
|
|
8571
8903
|
}
|
|
8572
8904
|
}
|
|
@@ -8574,72 +8906,57 @@ function sensor_types(parent){
|
|
|
8574
8906
|
'114': {
|
|
8575
8907
|
name: 'Standalone Smart Vibration Sensor v4',
|
|
8576
8908
|
parse: (payload, parsed, mac) => {
|
|
8577
|
-
if(payload[7]
|
|
8909
|
+
if(payload[7] & 2){
|
|
8578
8910
|
console.log('Error found');
|
|
8579
8911
|
parsed.data = {error: 'Error found, Sensor Probe may be unattached'};
|
|
8580
8912
|
return parsed;
|
|
8581
8913
|
}
|
|
8582
|
-
|
|
8914
|
+
let msg_type = (payload[7] & 16)? 'motion' : 'regular';
|
|
8583
8915
|
if(payload[8] === 1){
|
|
8584
8916
|
var deviceAddr = mac;
|
|
8585
8917
|
var firmware = payload[1];
|
|
8586
8918
|
var hour = payload[12];
|
|
8587
8919
|
var minute = payload[13];
|
|
8588
|
-
var expected_packets = payload[16];
|
|
8589
|
-
var current_packet = payload[
|
|
8590
|
-
var sdata_start =
|
|
8920
|
+
var expected_packets = msbLsb(payload[16], payload[17]);
|
|
8921
|
+
var current_packet = msbLsb(payload[18], payload[19]);
|
|
8922
|
+
var sdata_start = 20;
|
|
8591
8923
|
|
|
8592
8924
|
if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
|
|
8593
8925
|
if(expected_packets != 1){
|
|
8594
|
-
// if
|
|
8595
|
-
if(
|
|
8596
|
-
console.log('
|
|
8597
|
-
|
|
8598
|
-
|
|
8599
|
-
|
|
8600
|
-
|
|
8601
|
-
|
|
8602
|
-
console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
|
|
8603
|
-
if(this.hasOwnProperty('failure_no')){
|
|
8604
|
-
this.failure_no = this.failure_no + 1;
|
|
8605
|
-
}
|
|
8606
|
-
else{
|
|
8607
|
-
this.failure_no = 1;
|
|
8608
|
-
}
|
|
8609
|
-
if(this.hasOwnProperty('failure_no')){
|
|
8610
|
-
console.log('####falure no');
|
|
8611
|
-
console.log(this.failure_no);
|
|
8612
|
-
}
|
|
8613
|
-
// console.log(globalDevices[deviceAddr].data);
|
|
8926
|
+
// if current packet is equal to last one (duplicated data). This does not apply to the last package
|
|
8927
|
+
if (globalDevices[deviceAddr].last_packet_counter == current_packet){
|
|
8928
|
+
console.log('Duplicated message')
|
|
8929
|
+
return;
|
|
8930
|
+
}
|
|
8931
|
+
// if current packet is equal to 1 or last packet counter is higher thant current packet
|
|
8932
|
+
if(current_packet == 1 || (globalDevices[deviceAddr].last_packet_counter > current_packet)){
|
|
8933
|
+
// clear stream
|
|
8614
8934
|
delete globalDevices[deviceAddr];
|
|
8615
|
-
|
|
8616
|
-
|
|
8617
|
-
|
|
8618
|
-
|
|
8619
|
-
|
|
8620
|
-
|
|
8621
|
-
|
|
8622
|
-
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8626
|
-
|
|
8627
|
-
|
|
8628
|
-
|
|
8629
|
-
|
|
8630
|
-
|
|
8631
|
-
fsr: fsr,
|
|
8632
|
-
hour: hour,
|
|
8633
|
-
minute: minute,
|
|
8634
|
-
device_temp: device_temp,
|
|
8635
|
-
}
|
|
8636
|
-
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
8637
|
-
return;
|
|
8935
|
+
// create new stream
|
|
8936
|
+
var mode = payload[8];
|
|
8937
|
+
var odr = msbLsb(payload[9], payload[10])
|
|
8938
|
+
var en_axis = payload[11] & 7;
|
|
8939
|
+
var fsr = payload[11] >> 5;
|
|
8940
|
+
var device_temp = msbLsb(payload[14], payload[15])/100;
|
|
8941
|
+
|
|
8942
|
+
globalDevices[deviceAddr] = {
|
|
8943
|
+
data: {},
|
|
8944
|
+
odr: odr,
|
|
8945
|
+
mo: mode,
|
|
8946
|
+
en_axis: en_axis,
|
|
8947
|
+
fsr: fsr,
|
|
8948
|
+
hour: hour,
|
|
8949
|
+
minute: minute,
|
|
8950
|
+
device_temp: device_temp,
|
|
8638
8951
|
}
|
|
8639
|
-
|
|
8640
|
-
else{
|
|
8952
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
8641
8953
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
8954
|
+
return;
|
|
8642
8955
|
}
|
|
8956
|
+
else{
|
|
8957
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
8958
|
+
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
8959
|
+
}
|
|
8643
8960
|
}
|
|
8644
8961
|
else{
|
|
8645
8962
|
var mode = payload[8];
|
|
@@ -8649,7 +8966,6 @@ function sensor_types(parent){
|
|
|
8649
8966
|
var device_temp = msbLsb(payload[14], payload[15])/100;
|
|
8650
8967
|
|
|
8651
8968
|
globalDevices[deviceAddr] = {
|
|
8652
|
-
// stream_size: expected_packets,
|
|
8653
8969
|
data: {},
|
|
8654
8970
|
odr: odr,
|
|
8655
8971
|
mo: mode,
|
|
@@ -8659,126 +8975,11 @@ function sensor_types(parent){
|
|
|
8659
8975
|
minute: minute,
|
|
8660
8976
|
device_temp: device_temp,
|
|
8661
8977
|
}
|
|
8978
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
8662
8979
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
8663
8980
|
}
|
|
8664
|
-
|
|
8665
|
-
|
|
8666
|
-
for(const packet in globalDevices[deviceAddr].data){
|
|
8667
|
-
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
8668
|
-
}
|
|
8669
|
-
var label = 0;
|
|
8670
|
-
|
|
8671
|
-
var fft = new Array();
|
|
8672
|
-
var fft_concat = {};
|
|
8673
|
-
|
|
8674
|
-
var en_axis_data = {};
|
|
8675
|
-
switch (globalDevices[deviceAddr].en_axis){
|
|
8676
|
-
case 1:
|
|
8677
|
-
en_axis_data.x_offset = 0;
|
|
8678
|
-
en_axis_data.increment = 2;
|
|
8679
|
-
break;
|
|
8680
|
-
case 2:
|
|
8681
|
-
en_axis_data.y_offset = 0;
|
|
8682
|
-
en_axis_data.increment = 2;
|
|
8683
|
-
break;
|
|
8684
|
-
case 3:
|
|
8685
|
-
en_axis_data.x_offset = 0;
|
|
8686
|
-
en_axis_data.y_offset = 2;
|
|
8687
|
-
en_axis_data.increment = 4;
|
|
8688
|
-
break;
|
|
8689
|
-
case 4:
|
|
8690
|
-
en_axis_data.z_offset = 0;
|
|
8691
|
-
en_axis_data.increment = 2;
|
|
8692
|
-
break;
|
|
8693
|
-
case 5:
|
|
8694
|
-
en_axis_data.x_offset = 0;
|
|
8695
|
-
en_axis_data.z_offset = 2;
|
|
8696
|
-
en_axis_data.increment = 4;
|
|
8697
|
-
break;
|
|
8698
|
-
case 6:
|
|
8699
|
-
en_axis_data.y_offset = 0;
|
|
8700
|
-
en_axis_data.z_offset = 2;
|
|
8701
|
-
en_axis_data.increment = 4;
|
|
8702
|
-
break;
|
|
8703
|
-
case 7:
|
|
8704
|
-
en_axis_data.x_offset = 0;
|
|
8705
|
-
en_axis_data.y_offset = 2;
|
|
8706
|
-
en_axis_data.z_offset = 4;
|
|
8707
|
-
en_axis_data.increment = 6;
|
|
8708
|
-
break;
|
|
8709
|
-
default:
|
|
8710
|
-
en_axis_data.increment = 0;
|
|
8711
|
-
}
|
|
8712
|
-
|
|
8713
|
-
var fsr_mult = .00006;
|
|
8714
|
-
var fsr_text = "";
|
|
8715
|
-
switch(globalDevices[deviceAddr].fsr){
|
|
8716
|
-
case 0:
|
|
8717
|
-
fsr_mult = 0.00006;
|
|
8718
|
-
break;
|
|
8719
|
-
case 1:
|
|
8720
|
-
fsr_mult = 0.00012;
|
|
8721
|
-
break;
|
|
8722
|
-
case 2:
|
|
8723
|
-
fsr_mult = 0.00024;
|
|
8724
|
-
break;
|
|
8725
|
-
case 3:
|
|
8726
|
-
fsr_mult = 0.00049;
|
|
8727
|
-
break;
|
|
8728
|
-
}
|
|
8729
|
-
switch(globalDevices[deviceAddr].fsr){
|
|
8730
|
-
case 0:
|
|
8731
|
-
fsr_text = "2g";
|
|
8732
|
-
break;
|
|
8733
|
-
case 1:
|
|
8734
|
-
fsr_text = "4g";
|
|
8735
|
-
break;
|
|
8736
|
-
case 2:
|
|
8737
|
-
fsr_text = "8g";
|
|
8738
|
-
break;
|
|
8739
|
-
case 3:
|
|
8740
|
-
fsr_text = "16g";
|
|
8741
|
-
break;
|
|
8742
|
-
}
|
|
8743
|
-
|
|
8744
|
-
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
8745
|
-
label++;
|
|
8746
|
-
|
|
8747
|
-
fft_concat[label] = {};
|
|
8748
|
-
|
|
8749
|
-
if('x_offset' in en_axis_data){
|
|
8750
|
-
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));
|
|
8751
|
-
}
|
|
8752
|
-
if('y_offset' in en_axis_data){
|
|
8753
|
-
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));
|
|
8754
|
-
}
|
|
8755
|
-
if('z_offset' in en_axis_data){
|
|
8756
|
-
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));
|
|
8757
|
-
}
|
|
8758
|
-
}
|
|
8759
|
-
var fft_concat_obj = {
|
|
8760
|
-
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
8761
|
-
mac_address: deviceAddr,
|
|
8762
|
-
en_axis: globalDevices[deviceAddr].en_axis,
|
|
8763
|
-
fsr: fsr_text,
|
|
8764
|
-
odr: globalDevices[deviceAddr].odr,
|
|
8765
|
-
device_temp: globalDevices[deviceAddr].device_temp,
|
|
8766
|
-
data: fft_concat
|
|
8767
|
-
};
|
|
8768
|
-
sensor_data = fft_concat_obj;
|
|
8769
|
-
delete globalDevices[deviceAddr];
|
|
8770
|
-
if(this.hasOwnProperty('failure_no')){
|
|
8771
|
-
console.log('####falure no');
|
|
8772
|
-
console.log(this.failure_no);
|
|
8773
|
-
}
|
|
8774
|
-
|
|
8775
|
-
return sensor_data;
|
|
8776
|
-
}
|
|
8777
|
-
else{
|
|
8778
|
-
return;
|
|
8779
|
-
}
|
|
8780
|
-
}else{
|
|
8781
|
-
|
|
8981
|
+
}
|
|
8982
|
+
else{
|
|
8782
8983
|
var mode = payload[8];
|
|
8783
8984
|
var odr = msbLsb(payload[9], payload[10])
|
|
8784
8985
|
var en_axis = payload[11] & 7;
|
|
@@ -8786,7 +8987,6 @@ function sensor_types(parent){
|
|
|
8786
8987
|
var device_temp = msbLsb(payload[14], payload[15])/100;
|
|
8787
8988
|
|
|
8788
8989
|
globalDevices[deviceAddr] = {
|
|
8789
|
-
// stream_size: expected_packets,
|
|
8790
8990
|
data: {},
|
|
8791
8991
|
odr: odr,
|
|
8792
8992
|
mo: mode,
|
|
@@ -8796,7 +8996,123 @@ function sensor_types(parent){
|
|
|
8796
8996
|
minute: minute,
|
|
8797
8997
|
device_temp: device_temp,
|
|
8798
8998
|
}
|
|
8999
|
+
globalDevices[deviceAddr].last_packet_counter = current_packet;
|
|
8799
9000
|
globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
|
|
9001
|
+
}
|
|
9002
|
+
if(current_packet == expected_packets){
|
|
9003
|
+
var raw_data = new Array();
|
|
9004
|
+
for(const packet in globalDevices[deviceAddr].data){
|
|
9005
|
+
raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
|
|
9006
|
+
}
|
|
9007
|
+
var label = 0;
|
|
9008
|
+
|
|
9009
|
+
var fft = new Array();
|
|
9010
|
+
var fft_concat = {};
|
|
9011
|
+
|
|
9012
|
+
var en_axis_data = {};
|
|
9013
|
+
switch (globalDevices[deviceAddr].en_axis){
|
|
9014
|
+
case 1:
|
|
9015
|
+
en_axis_data.x_offset = 0;
|
|
9016
|
+
en_axis_data.increment = 2;
|
|
9017
|
+
break;
|
|
9018
|
+
case 2:
|
|
9019
|
+
en_axis_data.y_offset = 0;
|
|
9020
|
+
en_axis_data.increment = 2;
|
|
9021
|
+
break;
|
|
9022
|
+
case 3:
|
|
9023
|
+
en_axis_data.x_offset = 0;
|
|
9024
|
+
en_axis_data.y_offset = 2;
|
|
9025
|
+
en_axis_data.increment = 4;
|
|
9026
|
+
break;
|
|
9027
|
+
case 4:
|
|
9028
|
+
en_axis_data.z_offset = 0;
|
|
9029
|
+
en_axis_data.increment = 2;
|
|
9030
|
+
break;
|
|
9031
|
+
case 5:
|
|
9032
|
+
en_axis_data.x_offset = 0;
|
|
9033
|
+
en_axis_data.z_offset = 2;
|
|
9034
|
+
en_axis_data.increment = 4;
|
|
9035
|
+
break;
|
|
9036
|
+
case 6:
|
|
9037
|
+
en_axis_data.y_offset = 0;
|
|
9038
|
+
en_axis_data.z_offset = 2;
|
|
9039
|
+
en_axis_data.increment = 4;
|
|
9040
|
+
break;
|
|
9041
|
+
case 7:
|
|
9042
|
+
en_axis_data.x_offset = 0;
|
|
9043
|
+
en_axis_data.y_offset = 2;
|
|
9044
|
+
en_axis_data.z_offset = 4;
|
|
9045
|
+
en_axis_data.increment = 6;
|
|
9046
|
+
break;
|
|
9047
|
+
default:
|
|
9048
|
+
en_axis_data.increment = 0;
|
|
9049
|
+
}
|
|
9050
|
+
|
|
9051
|
+
var fsr_mult = .00006;
|
|
9052
|
+
var fsr_text = "";
|
|
9053
|
+
|
|
9054
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
9055
|
+
case 0:
|
|
9056
|
+
fsr_mult = 0.00006;
|
|
9057
|
+
break;
|
|
9058
|
+
case 1:
|
|
9059
|
+
fsr_mult = 0.00012;
|
|
9060
|
+
break;
|
|
9061
|
+
case 2:
|
|
9062
|
+
fsr_mult = 0.00024;
|
|
9063
|
+
break;
|
|
9064
|
+
case 3:
|
|
9065
|
+
fsr_mult = 0.00049;
|
|
9066
|
+
break;
|
|
9067
|
+
}
|
|
9068
|
+
switch(globalDevices[deviceAddr].fsr){
|
|
9069
|
+
case 0:
|
|
9070
|
+
fsr_text = "2g";
|
|
9071
|
+
break;
|
|
9072
|
+
case 1:
|
|
9073
|
+
fsr_text = "4g";
|
|
9074
|
+
break;
|
|
9075
|
+
case 2:
|
|
9076
|
+
fsr_text = "8g";
|
|
9077
|
+
break;
|
|
9078
|
+
case 3:
|
|
9079
|
+
fsr_text = "16g";
|
|
9080
|
+
break;
|
|
9081
|
+
}
|
|
9082
|
+
|
|
9083
|
+
for(var i = 0; i < raw_data.length; i+=en_axis_data.increment){
|
|
9084
|
+
label++;
|
|
9085
|
+
|
|
9086
|
+
fft_concat[label] = {};
|
|
9087
|
+
|
|
9088
|
+
if('x_offset' in en_axis_data){
|
|
9089
|
+
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));
|
|
9090
|
+
}
|
|
9091
|
+
if('y_offset' in en_axis_data){
|
|
9092
|
+
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));
|
|
9093
|
+
}
|
|
9094
|
+
if('z_offset' in en_axis_data){
|
|
9095
|
+
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));
|
|
9096
|
+
}
|
|
9097
|
+
}
|
|
9098
|
+
var fft_concat_obj = {
|
|
9099
|
+
mode: payload[8],
|
|
9100
|
+
msg_type: msg_type,
|
|
9101
|
+
time_id: globalDevices[deviceAddr].hour +':'+ globalDevices[deviceAddr].minute,
|
|
9102
|
+
mac_address: deviceAddr,
|
|
9103
|
+
en_axis: globalDevices[deviceAddr].en_axis,
|
|
9104
|
+
fsr: fsr_text,
|
|
9105
|
+
odr: globalDevices[deviceAddr].odr,
|
|
9106
|
+
device_temp: globalDevices[deviceAddr].device_temp,
|
|
9107
|
+
total_samples: label,
|
|
9108
|
+
ft_confidence : ((globalDevices[deviceAddr].counter / expected_packets) * 100).toFixed(2) + '%',
|
|
9109
|
+
data: fft_concat
|
|
9110
|
+
};
|
|
9111
|
+
sensor_data = fft_concat_obj;
|
|
9112
|
+
delete globalDevices[deviceAddr];
|
|
9113
|
+
return sensor_data;
|
|
9114
|
+
}
|
|
9115
|
+
else{
|
|
8800
9116
|
return;
|
|
8801
9117
|
}
|
|
8802
9118
|
}
|
|
@@ -8838,6 +9154,7 @@ function sensor_types(parent){
|
|
|
8838
9154
|
}
|
|
8839
9155
|
return {
|
|
8840
9156
|
mode: payload[8],
|
|
9157
|
+
msg_type: msg_type,
|
|
8841
9158
|
|
|
8842
9159
|
odr: odr,
|
|
8843
9160
|
temperature: signInt(payload.slice(10, 12).reduce(msbLsb), 16) / 100,
|
|
@@ -8885,6 +9202,9 @@ function sensor_types(parent){
|
|
|
8885
9202
|
case 2:
|
|
8886
9203
|
frame_data.mode = "Processed + Raw on demand";
|
|
8887
9204
|
break;
|
|
9205
|
+
case 3:
|
|
9206
|
+
frame_data.mode = "Smart";
|
|
9207
|
+
break;
|
|
8888
9208
|
}
|
|
8889
9209
|
switch(frame[17]){
|
|
8890
9210
|
case 6:
|
|
@@ -8996,30 +9316,39 @@ function sensor_types(parent){
|
|
|
8996
9316
|
switch(frame[22]){
|
|
8997
9317
|
case 0:
|
|
8998
9318
|
frame_data.sampling_interval = "5 Minutes";
|
|
9319
|
+
frame_data.sampling_interval_number = 5;
|
|
8999
9320
|
break;
|
|
9000
9321
|
case 1:
|
|
9001
9322
|
frame_data.sampling_interval = "10 Minutes";
|
|
9323
|
+
frame_data.sampling_interval_number = 10;
|
|
9002
9324
|
break;
|
|
9003
9325
|
case 2:
|
|
9004
9326
|
frame_data.sampling_interval = "15 Minutes";
|
|
9327
|
+
frame_data.sampling_interval_number = 15;
|
|
9005
9328
|
break;
|
|
9006
9329
|
case 2:
|
|
9007
9330
|
frame_data.sampling_interval = "20 Minutes";
|
|
9331
|
+
frame_data.sampling_interval_number = 20;
|
|
9008
9332
|
break;
|
|
9009
9333
|
case 4:
|
|
9010
9334
|
frame_data.sampling_interval = "30 Minutes";
|
|
9335
|
+
frame_data.sampling_interval_number = 30;
|
|
9011
9336
|
break;
|
|
9012
9337
|
case 5:
|
|
9013
9338
|
frame_data.sampling_interval = "60 Minutes";
|
|
9339
|
+
frame_data.sampling_interval_number = 60;
|
|
9014
9340
|
break;
|
|
9015
9341
|
case 6:
|
|
9016
9342
|
frame_data.sampling_interval = "120 Minutes";
|
|
9343
|
+
frame_data.sampling_interval_number = 120;
|
|
9017
9344
|
break;
|
|
9018
9345
|
case 7:
|
|
9019
9346
|
frame_data.sampling_interval = "180 Minutes";
|
|
9347
|
+
frame_data.sampling_interval_number = 180;
|
|
9020
9348
|
break;
|
|
9021
9349
|
case 8:
|
|
9022
9350
|
frame_data.sampling_interval = "1 Minute";
|
|
9351
|
+
frame_data.sampling_interval_number = 1;
|
|
9023
9352
|
break;
|
|
9024
9353
|
}
|
|
9025
9354
|
frame_data.on_request_timeout = frame[23] + " Seconds";
|
|
@@ -9054,6 +9383,9 @@ function sensor_types(parent){
|
|
|
9054
9383
|
break;
|
|
9055
9384
|
}
|
|
9056
9385
|
frame_data.rpm_status = frame[27]? 'Enabled': 'Disabled';
|
|
9386
|
+
frame_data.auto_raw_interval = frame[32] * frame_data.sampling_interval_number || 'disabled';
|
|
9387
|
+
frame_data.auto_raw_interval = typeof frame_data.auto_raw_interval === 'number' ? frame_data.auto_raw_interval+'min' : frame_data.auto_raw_interval;
|
|
9388
|
+
frame_data.smart_mode_threshold = frame[34] * 50;
|
|
9057
9389
|
return {
|
|
9058
9390
|
'firmware': frame[2],
|
|
9059
9391
|
'destination_address': toMac(frame.slice(12, 16)),
|
|
@@ -9071,6 +9403,14 @@ function sensor_types(parent){
|
|
|
9071
9403
|
'payload_length': frame_data.payload_length,
|
|
9072
9404
|
'fsr': frame_data.fsr_text,
|
|
9073
9405
|
'rpm_compute_status': frame_data.rpm_status,
|
|
9406
|
+
'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
|
|
9407
|
+
'auto_raw_interval': frame_data.auto_raw_interval,
|
|
9408
|
+
'smart_mode_skip_count': frame[33],
|
|
9409
|
+
'smart_mode_acc_threshold':frame_data.smart_mode_threshold+'mg',
|
|
9410
|
+
'uptime_counter': frame.slice(35, 39).reduce(msbLsb),
|
|
9411
|
+
'hardware_id': frame.slice(39, 42),
|
|
9412
|
+
'reserved': frame.slice(42, 46),
|
|
9413
|
+
'tx_lifetime_counter': frame.slice(46, 50).reduce(msbLsb),
|
|
9074
9414
|
'machine_values': {
|
|
9075
9415
|
'firmware': frame[2],
|
|
9076
9416
|
'destination_address': toMac(frame.slice(12, 16), false),
|
|
@@ -9085,7 +9425,15 @@ function sensor_types(parent){
|
|
|
9085
9425
|
'deadband': frame[24],
|
|
9086
9426
|
'payload_length': frame[25],
|
|
9087
9427
|
'fsr': frame[26],
|
|
9088
|
-
|
|
9428
|
+
'rpm_compute_status': frame[27],
|
|
9429
|
+
'auto_raw_destination_address': toMac(frame.slice(28 , 32)),
|
|
9430
|
+
'auto_raw_interval': frame[32],
|
|
9431
|
+
'smart_mode_skip_count': frame[33],
|
|
9432
|
+
'smart_mode_acc_threshold':frame[34],
|
|
9433
|
+
'uptime_counter': frame.slice(35, 39),
|
|
9434
|
+
'hardware_id': frame.slice(39, 42),
|
|
9435
|
+
'reserved': frame.slice(42, 46),
|
|
9436
|
+
'tx_lifetime_counter': frame.slice(46, 50)
|
|
9089
9437
|
}
|
|
9090
9438
|
}
|
|
9091
9439
|
}
|
|
@@ -9173,6 +9521,34 @@ function sensor_types(parent){
|
|
|
9173
9521
|
}
|
|
9174
9522
|
}
|
|
9175
9523
|
},
|
|
9524
|
+
'120': {
|
|
9525
|
+
name: 'Wireless H2S Sensor',
|
|
9526
|
+
parse: (d) => {
|
|
9527
|
+
return {
|
|
9528
|
+
ppm: d.slice(0, 2).reduce(msbLsb),
|
|
9529
|
+
temperature: signInt(d.slice(2, 4).reduce(msbLsb), 16) / 100,
|
|
9530
|
+
humidity: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100
|
|
9531
|
+
};
|
|
9532
|
+
},
|
|
9533
|
+
'parse_fly': (frame) => {
|
|
9534
|
+
return {
|
|
9535
|
+
'firmware': frame[2],
|
|
9536
|
+
'h2s_threshold': frame[12],
|
|
9537
|
+
'always_on_status': frame[13],
|
|
9538
|
+
'hardware_id': frame.slice(14, 17),
|
|
9539
|
+
'sample_rate': frame.slice(17, 21).reduce(msbLsb) + " Sec.",
|
|
9540
|
+
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb),
|
|
9541
|
+
'machine_values': {
|
|
9542
|
+
'firmware': frame[2],
|
|
9543
|
+
'h2s threshold': frame[12],
|
|
9544
|
+
'always_on_status': frame[13],
|
|
9545
|
+
'hardware_id': frame.slice(14, 17),
|
|
9546
|
+
'sample_rate': frame.slice(17, 21).reduce(msbLsb),
|
|
9547
|
+
'tx_life_counter': frame.slice(21, 25).reduce(msbLsb)
|
|
9548
|
+
}
|
|
9549
|
+
}
|
|
9550
|
+
}
|
|
9551
|
+
},
|
|
9176
9552
|
'180': {
|
|
9177
9553
|
name: 'C1D2 One Channel Vibration Plus',
|
|
9178
9554
|
parse: (payload, parsed, mac) => {
|
|
@@ -9223,11 +9599,8 @@ function sensor_types(parent){
|
|
|
9223
9599
|
'217': {
|
|
9224
9600
|
name: 'Wireless Weight Scale',
|
|
9225
9601
|
parse: (d) => {
|
|
9226
|
-
let units;
|
|
9227
|
-
d[0] ? units = "Kg" : units = "Lbs"
|
|
9228
9602
|
return {
|
|
9229
|
-
|
|
9230
|
-
weight: signInt(d.slice(1, 4).reduce(msbLsb)) * 100
|
|
9603
|
+
weight: signInt(d.slice(0, 4).reduce(msbLsb)) / 100
|
|
9231
9604
|
};
|
|
9232
9605
|
}
|
|
9233
9606
|
},
|
|
@@ -9444,6 +9817,16 @@ function sensor_types(parent){
|
|
|
9444
9817
|
}
|
|
9445
9818
|
}
|
|
9446
9819
|
},
|
|
9820
|
+
'518': {
|
|
9821
|
+
name: 'Custom Air Velocity',
|
|
9822
|
+
parse: (d) => {
|
|
9823
|
+
return {
|
|
9824
|
+
pressure: signInt(d.slice(0, 4).reduce(msbLsb), 16) / 100,
|
|
9825
|
+
temperature: signInt(d.slice(4, 6).reduce(msbLsb), 16) / 100,
|
|
9826
|
+
velocity: signInt(d.slice(6, 8).reduce(msbLsb), 16) / 1000
|
|
9827
|
+
};
|
|
9828
|
+
}
|
|
9829
|
+
},
|
|
9447
9830
|
'519': {
|
|
9448
9831
|
name: 'Type 519 - Vibration',
|
|
9449
9832
|
parse: (payload, parsed, mac) => {
|