@ncd-io/node-red-enterprise-sensors 1.0.11 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -121,7 +121,6 @@ module.exports = class WirelessSensor{
121
121
 
122
122
  this._emitter.emit("link_info",msg_obj);
123
123
  }
124
-
125
124
  parse(frame){
126
125
  var type = this.payloadType[frame.data[0]];
127
126
  if(typeof this[type] == 'function'){
@@ -142,7 +141,7 @@ module.exports = class WirelessSensor{
142
141
  }
143
142
  }
144
143
  // #OTF
145
- var otf_devices = [23,26,32,33,39,44,45,48,52,53,58,74,76,78,79,80,81,82,84,88,89,90,91,101,102,105,106,107,108,110,111,112,114,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
144
+ var otf_devices = [23,26,32,33,39,44,45,48,52,53,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];
146
145
  var device_type = msbLsb(frame.data[6], frame.data[7]);
147
146
  // var device_type = frame.data[7];
148
147
 
@@ -151,6 +150,9 @@ module.exports = class WirelessSensor{
151
150
  var broadcast_otf_devices = [101,102,202];
152
151
  mode = "FLY";
153
152
  }
153
+ if(frame.data[9] == 85 && frame.data[10] == 80 && frame.data[11] == 84 && frame.data[12] == 72 && frame.data[13] == 87 && frame.data[14] == 82 && frame.data[15] == 78) {
154
+ mode = "UPTHWRN";
155
+ }
154
156
  }
155
157
  if(mode == 'ACK'){
156
158
  data.firmware_version = frame.data[5];
@@ -188,6 +190,7 @@ module.exports = class WirelessSensor{
188
190
  type: data.sensor_type,
189
191
  nodeId: data.nodeId,
190
192
  mode: mode,
193
+ // data: data,
191
194
  lastHeard: data.received
192
195
  };
193
196
 
@@ -198,6 +201,8 @@ module.exports = class WirelessSensor{
198
201
  // If we ever need to add any of the additional information of this packet we will need to rebuild to match
199
202
  frame.data.splice(2,0,frame.data[5],0);
200
203
  this.sensor_pool[frame.mac].reported_config = this.sensor_types[data.sensor_type].parse_fly(frame.data);
204
+ }else if(mode === 'ACK'){
205
+ this.sensor_pool[frame.mac].result = data.result;
201
206
  }
202
207
  var that = this;
203
208
 
@@ -219,7 +224,7 @@ module.exports = class WirelessSensor{
219
224
  }).catch(console.log);
220
225
  }
221
226
  }
222
- if(mode != 'FLY'){
227
+ if(mode != 'FLY' && mode !='UPTHWRN'){
223
228
  var send_events = function(){
224
229
  that._emitter.emit(type, data);
225
230
  that._emitter.emit(type+'-'+data.sensor_type, data);
@@ -252,9 +257,10 @@ module.exports = class WirelessSensor{
252
257
  nodeId: payload[0],
253
258
  counter: payload[1],
254
259
  sensor_type: msbLsb(payload[2], payload[3]),
260
+ result: payload[5],
255
261
  data: payload.slice(6)
256
262
  };
257
- }
263
+ };
258
264
  config_error(payload){
259
265
  var errors = [
260
266
  'Unknown',
@@ -294,7 +300,7 @@ module.exports = class WirelessSensor{
294
300
  };
295
301
 
296
302
  // #OTF
297
- var otf_devices = [23,26,32,33,39,44,45,48,52,53,58,74,76,78,79,80,81,82,84,88,89,90,91,101,102,105,106,107,108,110,111,112,114,180,181,202,519,520,521,531,535,537,538,539,540,1010,1011];
303
+ var otf_devices = [23,26,32,33,39,44,45,48,52,53,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];
298
304
  if(otf_devices.includes(parsed.sensor_type)){
299
305
  // If the message says FLY and there is not FLY timer in progress.
300
306
  if(payload[8] == 70 && payload[9] == 76 && payload[10] == 89) {
@@ -302,6 +308,10 @@ module.exports = class WirelessSensor{
302
308
  return parsed;
303
309
  }
304
310
  }
311
+ if(frame.data[9] == 85 && frame.data[10] == 80 && frame.data[11] == 84 && frame.data[12] == 72 && frame.data[13] == 87 && frame.data[14] == 82 && frame.data[15] == 78) {
312
+ parsed.payload = "Upthwrn command";
313
+ return parsed;
314
+ }
305
315
 
306
316
  // Sensor type 515 has a unique OTF that is indicated by a reserve byte value with MSb of 1
307
317
  if(parsed.sensor_type == 515){
@@ -712,7 +722,7 @@ module.exports = class WirelessSensor{
712
722
  data: payload.slice(8)
713
723
  };
714
724
  // #OTF
715
- }else if(parsed.sensor_type == 33 || parsed.sensor_type == 80 || parsed.sensor_type == 81 || parsed.sensor_type == 82 || parsed.sensor_type == 84 || parsed.sensor_type == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || parsed.sensor_type == 180 || parsed.sensor_type == 181 || parsed.sensor_type == 515 || parsed.sensor_type == 519 || parsed.sensor_type == 531 || parsed.sensor_type == 537 || parsed.sensor_type == 538){
725
+ }else if(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 == 110 || parsed.sensor_type == 111 || parsed.sensor_type == 112 || parsed.sensor_type == 114 || 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){
716
726
  parsed.sensor_data = this.sensor_types[parsed.sensor_type].parse(payload, parsed, frame.mac);
717
727
  if(!parsed.sensor_data){
718
728
  return;
@@ -1037,6 +1047,12 @@ module.exports = class WirelessSensor{
1037
1047
  console.log(packet);
1038
1048
  return this.config_send(sensor_mac, packet);
1039
1049
  }
1050
+ config_set_probe_boot_time_202(sensor_mac, value){
1051
+ console.log('config_set_probe_boot_time_202');
1052
+ var packet = [244, 83, 0, 0, 0, value];
1053
+ console.log(packet);
1054
+ return this.config_send(sensor_mac, packet);
1055
+ }
1040
1056
  config_get_sampling_interval_101(sensor_mac, sampling_interval){
1041
1057
  console.log('config_get_sampling_interval_101');
1042
1058
  var packet = [244, 79, 0, 0, 101, 7];
@@ -1255,12 +1271,6 @@ module.exports = class WirelessSensor{
1255
1271
  console.log(packet);
1256
1272
  return this.config_send(sensor_mac, packet);
1257
1273
  }
1258
- config_set_qos_108(sensor_mac, value){
1259
- console.log('config_set_qos_108');
1260
- var packet = [247, 52, 0, 0, 0, value];
1261
- console.log(packet);
1262
- return this.config_send(sensor_mac, packet);
1263
- }
1264
1274
  config_set_deactivate_activate_accelero_108(sensor_mac, value){
1265
1275
  console.log('config_set_deactivate_activate_accelero_108');
1266
1276
  var packet = [244, 37, 0, 0, 0, value];
@@ -1394,6 +1404,36 @@ module.exports = class WirelessSensor{
1394
1404
  console.log(packet);
1395
1405
  return this.config_send(sensor_mac, packet);
1396
1406
  }
1407
+ config_set_filter_thermocouple(sensor_mac, value){
1408
+ console.log('config_set_filter_thermocouple');
1409
+ let packet = [244, 85, 0, 0, 23, value];
1410
+ console.log(packet);
1411
+ return this.config_send(sensor_mac, packet);
1412
+ }
1413
+ config_set_cold_junction_thermocouple(sensor_mac, value){
1414
+ console.log('config_set_cold_junction_thermocouple');
1415
+ let packet = [244, 87, 0, 0, 23, value];
1416
+ console.log(packet);
1417
+ return this.config_send(sensor_mac, packet);
1418
+ }
1419
+ config_set_sample_resolution_thermocouple(sensor_mac, value){
1420
+ console.log('config_set_sample_resolution_thermocouple');
1421
+ let packet = [244, 89, 0, 0, 23, value];
1422
+ console.log(packet);
1423
+ return this.config_send(sensor_mac, packet);
1424
+ }
1425
+ config_set_number_of_samples_thermocouple(sensor_mac, value){
1426
+ console.log('config_set_number_of_samples_thermocouple');
1427
+ let packet = [244, 91, 0, 0, 23, value];
1428
+ console.log(packet);
1429
+ return this.config_send(sensor_mac, packet);
1430
+ }
1431
+ config_set_measurement_type_thermocouple(sensor_mac, value){
1432
+ console.log('config_set_number_of_samples_thermocouple');
1433
+ let packet = [244, 95, 0, 0, 23, value];
1434
+ console.log(packet);
1435
+ return this.config_send(sensor_mac, packet);
1436
+ }
1397
1437
  config_set_debounce_time_2(sensor_mac, value){
1398
1438
  console.log('config_set_debounce_time_2');
1399
1439
  var packet = [244, 66, 0, 0, 2, value];
@@ -1406,14 +1446,20 @@ module.exports = class WirelessSensor{
1406
1446
  console.log(packet);
1407
1447
  return this.config_send(sensor_mac, packet);
1408
1448
  }
1409
- config_set_auto_check_interval_check_88(sensor_mac, value){
1410
- console.log('config_set_disable_auto_check_88');
1449
+ config_set_auto_check_interval_88(sensor_mac, value){
1450
+ console.log('config_set_auto_check_interval_88');
1411
1451
  let packet = [244, 70, 0, 0, 88];
1412
1452
  let interval = int2Bytes((value), 2);
1413
1453
  packet.push(...interval);
1414
1454
  console.log(packet);
1415
1455
  return this.config_send(sensor_mac, packet);
1416
1456
  }
1457
+ config_set_auto_check_threshold_88(sensor_mac, value){
1458
+ console.log('config_set_auto_check_threshold_88');
1459
+ let packet = [244, 72, 0, 0, 88, 0, value];
1460
+ console.log(packet);
1461
+ return this.config_send(sensor_mac, packet);
1462
+ }
1417
1463
  config_set_stay_on_mode_539(sensor_mac, value){
1418
1464
  console.log('config_set_stay_on_mode_539');
1419
1465
  var packet = [247, 50, 0, 0, 0, value];
@@ -1492,7 +1538,7 @@ module.exports = class WirelessSensor{
1492
1538
  }
1493
1539
  config_set_auto_raw_interval_110(sensor_mac, value){
1494
1540
  console.log('config_set_raw_interval_110');
1495
- var packet = [244, 79, 0, 0, 80, 76, value];
1541
+ var packet = [244, 79, 0, 0, 80, 70, value];
1496
1542
  console.log(packet);
1497
1543
  return this.config_send(sensor_mac, packet);
1498
1544
  }
@@ -1504,9 +1550,9 @@ module.exports = class WirelessSensor{
1504
1550
  console.log(packet);
1505
1551
  return this.config_send(sensor_mac, packet);
1506
1552
  }
1507
- config_set_clear_probe_uptimers_110(sensor_mac, value){
1553
+ config_set_clear_probe_uptimers_110(sensor_mac){
1508
1554
  console.log('config_set_clear_probe_uptimers_110');
1509
- var packet = [244, 79, 0, 0, 80, value];
1555
+ var packet = [244, 79, 0, 0, 80, 75];
1510
1556
  console.log(packet);
1511
1557
  return this.config_send(sensor_mac, packet);
1512
1558
  }
@@ -1518,9 +1564,13 @@ module.exports = class WirelessSensor{
1518
1564
  }
1519
1565
  config_set_smart_threshold_110(sensor_mac, value){
1520
1566
  console.log('config_set_smart_threshold_110');
1521
- var packet = [244, 79, 0, 0, 101];
1522
- let value_th = int2Bytes((value), 2);
1523
- packet.push(...value_th);
1567
+ var packet = [244, 79, 0, 0, 101, 78, 1, value];
1568
+ console.log(packet);
1569
+ return this.config_send(sensor_mac, packet);
1570
+ }
1571
+ config_set_smart_threshold_p2_110(sensor_mac, value){
1572
+ console.log('config_set_smart_threshold_p2_110');
1573
+ var packet = [244, 79, 0, 0, 101, 78, 2, value];
1524
1574
  console.log(packet);
1525
1575
  return this.config_send(sensor_mac, packet);
1526
1576
  }
@@ -1649,24 +1699,6 @@ module.exports = class WirelessSensor{
1649
1699
  console.log(packet);
1650
1700
  return this.config_send(sensor_mac, packet);
1651
1701
  }
1652
- config_set_stop_sampling(sensor_mac){
1653
- console.log('config_set_stop_sampling');
1654
- var packet = [244, 37, 0, 2, 5];
1655
- console.log(packet);
1656
- return this.config_send(sensor_mac, packet);
1657
- }
1658
- config_set_extend_otf_timeout(sensor_mac){
1659
- console.log('config_set_extend_otf_timeout');
1660
- var packet = [244, 38, 0, 2, 5];
1661
- console.log(packet);
1662
- return this.config_send(sensor_mac, packet);
1663
- }
1664
- config_set_end_cfg(sensor_mac){
1665
- console.log('config_set_end_cfg');
1666
- var packet = [244, 39, 0, 2, 5];
1667
- console.log(packet);
1668
- return this.config_send(sensor_mac, packet);
1669
- }
1670
1702
  config_set_change_otf_interval(sensor_mac, value){
1671
1703
  console.log('config_set_change_otf_interval');
1672
1704
  var packet = [244, 40, 0, 2, 5];
@@ -1701,6 +1733,78 @@ module.exports = class WirelessSensor{
1701
1733
  console.log(packet);
1702
1734
  return this.config_send(sensor_mac, packet);
1703
1735
  }
1736
+ config_set_rtd_type_39(sensor_mac, value){
1737
+ console.log('config_set_rtd_type_39');
1738
+ var packet = [244, 64, 0, 0, 39, value];
1739
+ console.log(packet);
1740
+ return this.config_send(sensor_mac, packet);
1741
+ }
1742
+ config_set_rtd_range_39(sensor_mac, value){
1743
+ console.log('config_set_rtd_range_39');
1744
+ var packet = [244, 66, 0, 0, 39, value];
1745
+ console.log(packet);
1746
+ return this.config_send(sensor_mac, packet);
1747
+ }
1748
+ config_set_pressure_sensor_fs_ch1_118(sensor_mac, value){
1749
+ console.log('config_set_pressure_sensor_fs_ch1_118');
1750
+ var packet = [244, 64, 0, 0, 26, value];
1751
+ console.log(packet);
1752
+ return this.config_send(sensor_mac, packet);
1753
+ }
1754
+ config_set_pressure_sensor_fs_ch2_118(sensor_mac, value){
1755
+ console.log('config_set_pressure_sensor_fs_ch2_118');
1756
+ var packet = [244, 64, 0, 0, 118, value];
1757
+ console.log(packet);
1758
+ return this.config_send(sensor_mac, packet);
1759
+ }
1760
+ config_set_auto_check_interval_118(sensor_mac, value){
1761
+ console.log('config_set_auto_check_interval_118');
1762
+ var packet = [244, 66, 0, 0, 26];
1763
+ let value_ = int2Bytes((value), 2);
1764
+ packet.push(...value_);
1765
+ console.log(packet);
1766
+ return this.config_send(sensor_mac, packet);
1767
+ }
1768
+ config_set_press_auto_check_percent_118(sensor_mac, value){
1769
+ console.log('config_set_press_auto_check_percent_118');
1770
+ var packet = [244, 68, 0, 0, 26, value];
1771
+ console.log(packet);
1772
+ return this.config_send(sensor_mac, packet);
1773
+ }
1774
+ config_set_temp_auto_check_percent_118(sensor_mac, value){
1775
+ console.log('config_set_temp_auto_check_percent_118');
1776
+ var packet = [244, 70, 0, 0, 26, value];
1777
+ console.log(packet);
1778
+ return this.config_send(sensor_mac, packet);
1779
+ }
1780
+ config_set_raw_length_97(sensor_mac, value){
1781
+ console.log('config_set_raw_length_97');
1782
+ var packet = [244, 67, 0, 0, 0, value];
1783
+ console.log(packet);
1784
+ return this.config_send(sensor_mac, packet);
1785
+ }
1786
+ config_set_raw_timeout_97(sensor_mac, value){
1787
+ console.log('config_set_raw_timeout_97');
1788
+ var packet = [244, 71, 0, 0, 0, value];
1789
+ console.log(packet);
1790
+ return this.config_send(sensor_mac, packet);
1791
+ }
1792
+ config_set_fly_rate_97(sensor_mac, value){
1793
+ console.log('config_set_fly_rate_97');
1794
+ var packet = [244, 73, 0, 0, 0];
1795
+ let value_ = int2Bytes((value), 2);
1796
+ packet.push(...value_);
1797
+ console.log(packet);
1798
+ return this.config_send(sensor_mac, packet);
1799
+ }
1800
+ config_set_boot_up_time_97(sensor_mac, value){
1801
+ console.log('config_set_boot_up_time_97');
1802
+ var packet = [244, 51, 0, 0, 0];
1803
+ let value_ = int2Bytes((value), 2);
1804
+ packet.push(...value_);
1805
+ console.log(packet);
1806
+ return this.config_send(sensor_mac, packet);
1807
+ }
1704
1808
  config_get_delay(sensor_mac){
1705
1809
  return new Promise((fulfill, reject) => {
1706
1810
  this.config_send(sensor_mac, [247, 21, 0, 0, 0]).then((res) => {
@@ -1923,6 +2027,7 @@ module.exports = class WirelessSensor{
1923
2027
  function pass(packet){
1924
2028
  clearTimeout(tout);
1925
2029
  that._emitter.removeListener('config_error-'+sensor_mac, fail);
2030
+ packet.sent = data;
1926
2031
  fulfill(packet);
1927
2032
  f();
1928
2033
  };
@@ -1972,8 +2077,8 @@ module.exports = class WirelessSensor{
1972
2077
  }
1973
2078
  // var odr;
1974
2079
  var odr = payload[8];
1975
- var device_temp = msbLsb(payload[11], payload[12])/100;
1976
- var probe_temp = msbLsb(payload[13], payload[14])/100;
2080
+ var device_temp = signInt((msbLsb(payload[11], payload[12])), 16)/100;
2081
+ var probe_temp = signInt((msbLsb(payload[13], payload[14])), 16)/100;
1977
2082
 
1978
2083
  switch(odr){
1979
2084
  case 6:
@@ -2021,7 +2126,8 @@ module.exports = class WirelessSensor{
2021
2126
  var odr = payload[9];
2022
2127
  var en_axis = payload[10] & 7;
2023
2128
  var fsr = payload[10] >> 5;
2024
- var device_temp = msbLsb(payload[13], payload[14])/100;
2129
+
2130
+ var device_temp = signInt((msbLsb(payload[13], payload[14])), 16)/100;
2025
2131
  switch(odr){
2026
2132
  case 0:
2027
2133
  odr = 4000;
@@ -2071,7 +2177,7 @@ module.exports = class WirelessSensor{
2071
2177
  device_temp: device_temp,
2072
2178
  }
2073
2179
  if(firmware > 0){
2074
- var probe_temp = msbLsb(payload[15], payload[16])/100;
2180
+ var probe_temp = signInt((msbLsb(payload[15], payload[16])), 16)/100;
2075
2181
  globalDevices[deviceAddr].probe_temp = probe_temp;
2076
2182
  }
2077
2183
  globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
@@ -2125,6 +2231,53 @@ module.exports = class WirelessSensor{
2125
2231
  });
2126
2232
  });
2127
2233
  }
2234
+ remote_at_send(sensor_mac, parameter, value, opts, ctrl_timeout = 1000){
2235
+ var that = this;
2236
+ return new Promise((fulfill, reject) => {
2237
+ that.queue.add(() => {
2238
+ return new Promise((f, r) => {
2239
+ var failed = false;
2240
+ var retries = 0;
2241
+ var tO;
2242
+ function fail(packet){
2243
+ failed = true;
2244
+ clearTimeout(tO);
2245
+ that._emitter.removeListener('receive_packet-'+sensor_mac, pass);
2246
+ that._emitter.removeListener('transmit_status-'+sensor_mac, pass);
2247
+ reject({
2248
+ err: packet,
2249
+ sent: [sensor_mac, parameter, value]
2250
+ });
2251
+ r();
2252
+ }
2253
+ function pass(packet){
2254
+ if(failed) return;
2255
+ clearTimeout(tO);
2256
+ fulfill(packet);
2257
+ f();
2258
+ };
2259
+
2260
+ function send(){
2261
+ that.send.remote_at_command(mac2bytes(sensor_mac), parameter, value, true).then(function(frame){
2262
+ if(frame.status == 'OK'){
2263
+ pass(frame);
2264
+ }else{
2265
+ tO = setTimeout(() => {
2266
+ if(retries < 0){
2267
+ retries++;
2268
+ send();
2269
+ }else{
2270
+ fail('Remote AT response timeout');
2271
+ }
2272
+ }, ctrl_timeout);
2273
+ }
2274
+ }).catch(fail);
2275
+ }
2276
+ send();
2277
+ });
2278
+ });
2279
+ });
2280
+ }
2128
2281
  route_discover(sensor_mac, opts){
2129
2282
  var data = [85];
2130
2283
  var that = this;
@@ -2583,10 +2736,9 @@ function sensor_types(parent){
2583
2736
  parse: (payload, parsed, mac) => {
2584
2737
  if(parsed.firmware > 3){
2585
2738
  return {
2586
- input_1: payload[8],
2587
- current_detect: payload[9],
2588
- total_uptime: payload.slice(10, 14).reduce(msbLsb),
2589
- total_cycle_count: payload.slice(14, 18).reduce(msbLsb)
2739
+ current_detect: payload[8],
2740
+ total_uptime: payload.slice(9, 13).reduce(msbLsb),
2741
+ total_cycle_count: payload.slice(13, 17).reduce(msbLsb)
2590
2742
  };
2591
2743
  }else{
2592
2744
  return {
@@ -2836,19 +2988,35 @@ function sensor_types(parent){
2836
2988
  frame_data.fsr = "+-6.144 V";
2837
2989
  break;
2838
2990
  }
2839
- return {
2840
- 'firmware': frame[2],
2841
- 'report_rate': frame.slice(12, 16).reduce(msbLsb),
2842
- 'fsr':frame_data.fsr,
2843
- 'boot_up_time': frame[17],
2844
- 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
2845
- 'machine_values': {
2991
+ if(frame[2]>12){
2992
+ return {
2846
2993
  'firmware': frame[2],
2847
- 'report_rate': frame.slice(12, 16),
2848
- 'fsr':frame[16],
2994
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
2995
+ 'fsr':frame_data.fsr,
2849
2996
  'boot_up_time': frame[17],
2850
- 'adc_pin_reading': frame.slice(18, 20),
2851
- 'frame': frame
2997
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
2998
+ 'machine_values': {
2999
+ 'firmware': frame[2],
3000
+ 'report_rate': frame.slice(12, 16),
3001
+ 'fsr':frame[16],
3002
+ 'boot_up_time': frame[17],
3003
+ 'adc_pin_reading': frame.slice(18, 20),
3004
+ 'frame': frame
3005
+ }
3006
+ }
3007
+ }else{
3008
+ return {
3009
+ 'firmware': frame[2],
3010
+ 'report_rate': frame.slice(12, 16).reduce(msbLsb),
3011
+ 'fsr':frame_data.fsr,
3012
+ 'boot_up_time': frame[17],
3013
+ 'machine_values': {
3014
+ 'firmware': frame[2],
3015
+ 'report_rate': frame.slice(12, 16),
3016
+ 'fsr':frame[16],
3017
+ 'boot_up_time': frame[17],
3018
+ 'frame': frame
3019
+ }
2852
3020
  }
2853
3021
  }
2854
3022
  }
@@ -3046,19 +3214,55 @@ function sensor_types(parent){
3046
3214
  }
3047
3215
  },
3048
3216
  '74': {
3049
- name: 'Wireless Temp Humidity Pressure Air quality Sensor',
3050
- parse: (d) => {
3217
+ name: 'Wireless Temp Humidity Pressure Air quality Sensor V2',
3218
+ parse: (d, parsed) => {
3219
+ if(parsed[1] > 1){ // Firmware version
3220
+ return {
3221
+ temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
3222
+ pressure: d.slice(2, 6).reduce(msbLsb) / 100,
3223
+ humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
3224
+ resistance: d.slice(10, 14).reduce(msbLsb),
3225
+ iaq: d.slice(14, 16).reduce(msbLsb),
3226
+ co2_eqv: d.slice(16, 18).reduce(msbLsb),
3227
+ breath_voc: d.slice(18, 22).reduce(msbLsb) / 100,
3228
+ static_iaq: d.slice(22, 26).reduce(msbLsb) / 100,
3229
+ iaq_accuracy: d[26]
3230
+ };
3231
+ }
3232
+ else{
3233
+ return {
3234
+ temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) / 100,
3235
+ pressure: d.slice(2, 6).reduce(msbLsb) / 100,
3236
+ humidity: d.slice(6, 10).reduce(msbLsb) / 1000,
3237
+ resistance: d.slice(10, 14).reduce(msbLsb),
3238
+ iaq: d.slice(14, 16).reduce(msbLsb),
3239
+ co2_eqv: d.slice(16, 18).reduce(msbLsb),
3240
+ breath_voc: d.slice(18, 22).reduce(msbLsb)/ 100,
3241
+ static_iaq: (d.slice(22, 26).reverse()).reduce(msbLsb)/ 100,
3242
+ // TODO Check if the iaq_accuracy should still be d[27]
3243
+ iaq_accuracy: d[26]
3244
+ };
3245
+ }
3246
+ },
3247
+ 'parse_fly': (frame) => {
3051
3248
  return {
3052
- temperature: signInt(d.slice(0, 2).reduce(msbLsb), 16) *100,
3053
- pressure: d.slice(2, 6).reduce(msbLsb) * 100,
3054
- humidity: d.slice(6, 10).reduce(msbLsb) * 1000,
3055
- resistance: d.slice(10, 14).reduce(msbLsb),
3056
- iaq: d.slice(14, 16).reduce(msbLsb),
3057
- co2_eqv: d.slice(16, 18).reduce(msbLsb),
3058
- breath_voc: d.slice(18, 22).reduce(msbLsb)* 100,
3059
- static_iaq: d.slice(22, 26).reduce(msbLsb)* 100,
3060
- iaq_accuracy: d[27]
3061
- };
3249
+ 'firmware': frame[2],
3250
+ 'calibration_days': frame[12],
3251
+ 'sensor_update_rate':frame.slice(13, 15).reduce(msbLsb),
3252
+ 'hardware_id_1': frame[15],
3253
+ 'hardware_id_2': frame[16],
3254
+ 'hardware_id_3': frame[17],
3255
+ 'report_rate': frame.slice(18, 22).reduce(msbLsb),
3256
+ 'tx_counter': frame.slice(22, 26).reduce(msbLsb),
3257
+ 'machine_values': {
3258
+ 'firmware': frame[2],
3259
+ 'calibration_days': frame[12],
3260
+ 'sensor_update_rate':frame.slice(13, 15),
3261
+ 'hardware_id': frame.slice(15, 18),
3262
+ 'report_rate': frame.slice(18, 22),
3263
+ 'tx_counter': frame.slice(22, 26),
3264
+ }
3265
+ }
3062
3266
  }
3063
3267
  },
3064
3268
  '75': {
@@ -5968,6 +6172,333 @@ function sensor_types(parent){
5968
6172
  };
5969
6173
  }
5970
6174
  },
6175
+ '97': {
6176
+ name: 'One channel Dynamic Ultrasound vibration Sensor',
6177
+ parse: (payload, parsed, mac) => {
6178
+ if (payload[8] === 1) { // raw
6179
+ var mode = payload[8];
6180
+ var sampling_frequency = payload.slice(9, 13).reduce(msbLsb);
6181
+ var sensor_index = payload[13];
6182
+ var gain_db = payload[14];
6183
+ var deviceAddr = mac;
6184
+ var expected_packets = payload.slice(15, 17).reduce(msbLsb);
6185
+ var current_packet = payload.slice(17, 19).reduce(msbLsb);
6186
+ var sdata_start = 19;
6187
+
6188
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6189
+ // if(expected_packets == 1){
6190
+ // this.build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
6191
+ // }
6192
+
6193
+ // if a packet is already stored with the same packet ID,
6194
+ // or if packet ID is 1,
6195
+ // or if current packet ID is not one more than last packet ID
6196
+ if(current_packet == 1 && expected_packets != 1) {
6197
+ if(current_packet in globalDevices[deviceAddr].data || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
6198
+ console.log('bad packet breakdown, deleting stream. Current packet:');
6199
+ console.log(current_packet);
6200
+ console.log('Total Expected Packets:');
6201
+ console.log(expected_packets);
6202
+ // console.log(current_packet in globalDevices[deviceAddr].data && current_packet == 1 && expected_packets != 1);
6203
+ // console.log(current_packet == 1);
6204
+ // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
6205
+ if(this.hasOwnProperty('failure_no')){
6206
+ this.failure_no = this.failure_no + 1;
6207
+ }
6208
+ else{
6209
+ this.failure_no = 1;
6210
+ }
6211
+ if(this.hasOwnProperty('failure_no')){
6212
+ console.log('####falure no');
6213
+ console.log(this.failure_no);
6214
+ }
6215
+ delete globalDevices[deviceAddr];
6216
+ if(current_packet != 1){
6217
+ return;
6218
+ } else{
6219
+ if(current_packet != 1){
6220
+ console.log('bad packet cleanup');
6221
+ return;
6222
+ }
6223
+ globalDevices[deviceAddr] = {
6224
+ // stream_size: expected_packets,
6225
+ data: {},
6226
+ }
6227
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6228
+ return;
6229
+ }
6230
+ }
6231
+ }
6232
+ if(expected_packets == 1){
6233
+ if(current_packet != 1){
6234
+ console.log('bad packet cleanup');
6235
+ return;
6236
+ }
6237
+ globalDevices[deviceAddr] = {
6238
+ // stream_size: expected_packets,
6239
+ data: {},
6240
+ }
6241
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6242
+ //return;
6243
+ } else{
6244
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6245
+ }
6246
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
6247
+ var raw_data = new Array();
6248
+ for(const packet in globalDevices[deviceAddr].data){
6249
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
6250
+ }
6251
+ var label = 0;
6252
+ // var fft = {
6253
+ // data: new Array()
6254
+ // // test: new Array()
6255
+ // };
6256
+ var fft = new Array();
6257
+ var adc = {};
6258
+
6259
+ for(var i = 0; i < raw_data.length; i+=2){
6260
+ label++;
6261
+ adc[label] = (raw_data[i]<<8)+(raw_data[i+1]);
6262
+ }
6263
+ // var data = globalDevices[deviceAddr];
6264
+ delete globalDevices[deviceAddr];
6265
+ if(this.hasOwnProperty('failure_no')){
6266
+ console.log('####falure no');
6267
+ console.log(this.failure_no);
6268
+ }
6269
+ return{
6270
+ 'mode': mode,
6271
+ 'sampling_frequency': sampling_frequency,
6272
+ 'sensor_index': sensor_index,
6273
+ 'gain_db':gain_db,
6274
+ 'adc':adc,
6275
+ 'raw_data':raw_data
6276
+ }
6277
+ }
6278
+ else{
6279
+ return;
6280
+ }
6281
+
6282
+ }else{
6283
+ if(current_packet != 1){
6284
+ console.log('bad packet cleanup');
6285
+ return;
6286
+ }
6287
+ globalDevices[deviceAddr] = {
6288
+ // stream_size: expected_packets,
6289
+ data: {},
6290
+ }
6291
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6292
+ return;
6293
+ }
6294
+ }
6295
+ else if(payload[8] === 0){ // processed mode
6296
+ return {
6297
+ mode: payload[8],
6298
+ rms_mv: payload.slice(9, 13).reduce(msbLsb) / 1000,
6299
+ freq_1: payload.slice(13, 15).reduce(msbLsb),
6300
+ freq_2: payload.slice(15, 17).reduce(msbLsb),
6301
+ freq_3: payload.slice(17, 19).reduce(msbLsb),
6302
+ };
6303
+ }
6304
+
6305
+ },
6306
+ 'parse_fly': (frame) => {
6307
+ return {
6308
+ 'firmware': frame[2],
6309
+ 'raw_length': frame[12],
6310
+ 'raw_on_request_timeout': frame[13] + " Sec",
6311
+ 'fly_rate': frame.slice(14, 16).reduce(msbLsb) + " min",
6312
+ 'sensor_gain_db': frame[16] + " dB",
6313
+ 'sensor_boot_time': frame[17] + " Sec",
6314
+ 'hardware_id_1': frame[18],
6315
+ 'hardware_id_2': frame[19],
6316
+ 'hardware_id_3': frame[20],
6317
+ 'rate': frame.slice(21, 25).reduce(msbLsb),
6318
+ 'tx_life_count': frame.slice(25, 29).reduce(msbLsb),
6319
+ 'machine_values': {
6320
+ 'firmware': frame[2],
6321
+ 'raw_lenght': frame[12],
6322
+ 'raw_on_request_timeout': frame[13],
6323
+ 'fly_rate': frame.slice(14, 16),
6324
+ 'sensor_gain_db': frame[16],
6325
+ 'sensor_boot_time': frame[17],
6326
+ 'hardware_id_1': frame[18],
6327
+ 'hardware_id_2': frame[19],
6328
+ 'hardware_id_3': frame[20],
6329
+ 'rate': frame.slice(21, 25),
6330
+ 'tx_life_count': frame.slice(25, 29)
6331
+ }
6332
+ }
6333
+ }
6334
+ },
6335
+ '98': {
6336
+ name: 'Two channel Dynamic Ultrasound vibration Sensor',
6337
+ parse: (payload, parsed, mac) => {
6338
+ if (payload[8] === 1) { // raw
6339
+ var mode = payload[8];
6340
+ var sampling_frequency = payload.slice(9, 13).reduce(msbLsb);
6341
+ var sensor_index = payload[13];
6342
+ var gain_db = payload[14];
6343
+ var deviceAddr = mac;
6344
+ var expected_packets = payload.slice(15, 17).reduce(msbLsb);
6345
+ var current_packet = payload.slice(17, 19).reduce(msbLsb);
6346
+ var sdata_start = 19;
6347
+
6348
+ if(globalDevices.hasOwnProperty(deviceAddr) || expected_packets == 1){
6349
+ // if(expected_packets == 1){
6350
+ // this.build_102_data(payload, deviceAddr, hour, minute, sdata_start, current_packet, firmware);
6351
+ // }
6352
+
6353
+ // if a packet is already stored with the same packet ID,
6354
+ // or if packet ID is 1,
6355
+ // or if current packet ID is not one more than last packet ID
6356
+ if(current_packet == 1 && expected_packets != 1) {
6357
+ if(current_packet in globalDevices[deviceAddr].data || !(((current_packet&127)-1) in globalDevices[deviceAddr].data)) {
6358
+ console.log('bad packet breakdown, deleting stream. Current packet:');
6359
+ console.log(current_packet);
6360
+ console.log('Total Expected Packets:');
6361
+ console.log(expected_packets);
6362
+ // console.log(current_packet in globalDevices[deviceAddr].data && current_packet == 1 && expected_packets != 1);
6363
+ // console.log(current_packet == 1);
6364
+ // console.log(!((current_packet-1) in globalDevices[deviceAddr].data));
6365
+ if(this.hasOwnProperty('failure_no')){
6366
+ this.failure_no = this.failure_no + 1;
6367
+ }
6368
+ else{
6369
+ this.failure_no = 1;
6370
+ }
6371
+ if(this.hasOwnProperty('failure_no')){
6372
+ console.log('####falure no');
6373
+ console.log(this.failure_no);
6374
+ }
6375
+ delete globalDevices[deviceAddr];
6376
+ if(current_packet != 1){
6377
+ return;
6378
+ } else{
6379
+ if(current_packet != 1){
6380
+ console.log('bad packet cleanup');
6381
+ return;
6382
+ }
6383
+ globalDevices[deviceAddr] = {
6384
+ // stream_size: expected_packets,
6385
+ data: {},
6386
+ }
6387
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6388
+ return;
6389
+ }
6390
+ }
6391
+ }
6392
+ if(expected_packets == 1){
6393
+ if(current_packet != 1){
6394
+ console.log('bad packet cleanup');
6395
+ return;
6396
+ }
6397
+ globalDevices[deviceAddr] = {
6398
+ // stream_size: expected_packets,
6399
+ data: {},
6400
+ }
6401
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6402
+ //return;
6403
+ } else{
6404
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6405
+ }
6406
+ if(Object.keys(globalDevices[deviceAddr].data).length == expected_packets){
6407
+ var raw_data = new Array();
6408
+ for(const packet in globalDevices[deviceAddr].data){
6409
+ raw_data = raw_data.concat(globalDevices[deviceAddr].data[packet]);
6410
+ }
6411
+ var label = 0;
6412
+ // var fft = {
6413
+ // data: new Array()
6414
+ // // test: new Array()
6415
+ // };
6416
+ var fft = new Array();
6417
+ var adc = {};
6418
+
6419
+ for(var i = 0; i < raw_data.length; i+=2){
6420
+ label++;
6421
+ adc[label] = (raw_data[i]<<8)+(raw_data[i+1]);
6422
+ }
6423
+ // var data = globalDevices[deviceAddr];
6424
+ delete globalDevices[deviceAddr];
6425
+ if(this.hasOwnProperty('failure_no')){
6426
+ console.log('####falure no');
6427
+ console.log(this.failure_no);
6428
+ }
6429
+ return{
6430
+ 'mode': mode,
6431
+ 'sampling_frequency': sampling_frequency,
6432
+ 'sensor_index': sensor_index,
6433
+ 'gain_db':gain_db,
6434
+ 'adc':adc,
6435
+ 'raw_data':raw_data
6436
+ }
6437
+ }
6438
+ else{
6439
+ return;
6440
+ }
6441
+
6442
+ }else{
6443
+ if(current_packet != 1){
6444
+ console.log('bad packet cleanup');
6445
+ return;
6446
+ }
6447
+ globalDevices[deviceAddr] = {
6448
+ // stream_size: expected_packets,
6449
+ data: {},
6450
+ }
6451
+ globalDevices[deviceAddr].data[current_packet] = payload.slice(sdata_start);
6452
+ return;
6453
+ }
6454
+ }
6455
+ else if(payload[8] === 0){ // processed mode
6456
+ return {
6457
+ mode: payload[8],
6458
+ c1_rms_mv: payload.slice(9, 13).reduce(msbLsb) / 1000,
6459
+ c1_freq_1: payload.slice(13, 15).reduce(msbLsb),
6460
+ c1_freq_2: payload.slice(15, 17).reduce(msbLsb),
6461
+ c1_freq_3: payload.slice(17, 19).reduce(msbLsb),
6462
+ c2_rms_mv: payload.slice(19, 23).reduce(msbLsb) / 1000,
6463
+ c2_freq_1: payload.slice(23, 25).reduce(msbLsb),
6464
+ c2_freq_2: payload.slice(25, 27).reduce(msbLsb),
6465
+ c2_freq_3: payload.slice(27, 30).reduce(msbLsb)
6466
+ };
6467
+ }
6468
+ },
6469
+ 'parse_fly': (frame) => {
6470
+ return {
6471
+ 'firmware': frame[2],
6472
+ 'raw_length': frame[12],
6473
+ 'raw_on_request_timeout': frame[13] + " Sec",
6474
+ 'fly_rate': frame.slice(14, 16).reduce(msbLsb) + " min",
6475
+ 'c1_sensor_gain_db': frame[16] + " dB",
6476
+ 'c1_sensor_boot_time': frame[17] + " Sec",
6477
+ 'c2_sensor_gain_db': frame[18] + " dB",
6478
+ 'c2_sensor_boot_time': frame[19] + " Sec",
6479
+ 'hardware_id_1': frame[20],
6480
+ 'hardware_id_2': frame[21],
6481
+ 'hardware_id_3': frame[22],
6482
+ 'rate': frame.slice(23, 27).reduce(msbLsb),
6483
+ 'tx_life_count': frame.slice(27, 31).reduce(msbLsb),
6484
+ 'machine_values': {
6485
+ 'firmware': frame[2],
6486
+ 'raw_lenght': frame[12],
6487
+ 'raw_on_request_timeout': frame[13],
6488
+ 'fly_rate': frame.slice(14, 16),
6489
+ 'c1_sensor_gain_db': frame[16],
6490
+ 'c1_sensor_boot_time': frame[17],
6491
+ 'c2_sensor_gain_db': frame[18],
6492
+ 'c2_sensor_boot_time': frame[19],
6493
+ 'hardware_id_1': frame[20],
6494
+ 'hardware_id_2': frame[21],
6495
+ 'hardware_id_3': frame[22],
6496
+ 'rate': frame.slice(23, 27),
6497
+ 'tx_life_count': frame.slice(27, 31)
6498
+ }
6499
+ }
6500
+ }
6501
+ },
5971
6502
  '101':{
5972
6503
  name: 'Pro Vibration',
5973
6504
  parse: (d, full)=>{
@@ -6503,6 +7034,7 @@ function sensor_types(parent){
6503
7034
  z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
6504
7035
  z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
6505
7036
  z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
7037
+ rpm: payload.slice(54, 56).reduce(msbLsb) / 10
6506
7038
  };
6507
7039
  }
6508
7040
  // else{
@@ -7169,6 +7701,7 @@ function sensor_types(parent){
7169
7701
  z1_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
7170
7702
  z1_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
7171
7703
  z1_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
7704
+ rpm_1: payload.slice(54, 56).reduce(msbLsb) / 10,
7172
7705
 
7173
7706
  s2_odr: odr2,
7174
7707
  s2_temperature: signInt(payload.slice(55, 57).reduce(msbLsb), 16) / 100,
@@ -7195,7 +7728,8 @@ function sensor_types(parent){
7195
7728
  z2_displacement_mm: payload.slice(91, 93).reduce(msbLsb) / 100,
7196
7729
  z2_peak_one_Hz: payload.slice(93, 95).reduce(msbLsb),
7197
7730
  z2_peak_two_Hz: payload.slice(95, 97).reduce(msbLsb),
7198
- z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb)
7731
+ z2_peak_three_Hz: payload.slice(97, 99).reduce(msbLsb),
7732
+ rpm_2: payload.slice(99, 101).reduce(msbLsb) / 10
7199
7733
  };
7200
7734
  }
7201
7735
  // else{
@@ -7919,6 +8453,7 @@ function sensor_types(parent){
7919
8453
  z_peak_one_Hz: payload.slice(56, 58).reduce(msbLsb),
7920
8454
  z_peak_two_Hz: payload.slice(58, 60).reduce(msbLsb),
7921
8455
  z_peak_three_Hz: payload.slice(60, 62).reduce(msbLsb),
8456
+ rpm: payload.slice(62, 64).reduce(msbLsb) / 10
7922
8457
  };
7923
8458
  }
7924
8459
  // else{
@@ -8527,6 +9062,7 @@ function sensor_types(parent){
8527
9062
  z_peak_one_Hz: payload.slice(48, 50).reduce(msbLsb),
8528
9063
  z_peak_two_Hz: payload.slice(50, 52).reduce(msbLsb),
8529
9064
  z_peak_three_Hz: payload.slice(52, 54).reduce(msbLsb),
9065
+ rpm: payload.slice(54, 56).reduce(msbLsb) / 10
8530
9066
  };
8531
9067
  }
8532
9068
  // else{
@@ -8733,7 +9269,93 @@ function sensor_types(parent){
8733
9269
  }
8734
9270
  }
8735
9271
  },
8736
-
9272
+ '118': {
9273
+ name: 'Dual Pressure and Temperature Sensor',
9274
+ parse: (d) => {
9275
+ return{
9276
+ pressure_s1: signInt(d.slice(0, 4).reduce(msbLsb)),
9277
+ temperature_s1: signInt(d.slice(4, 6).reduce(msbLsb))/100,
9278
+ pressure_s2: signInt(d.slice(6, 10).reduce(msbLsb)),
9279
+ temperature_s2: signInt(d.slice(10, 12).reduce(msbLsb))/100
9280
+ };
9281
+ },
9282
+ 'parse_fly': (frame) => {
9283
+ let psi_1;
9284
+ let psi_2;
9285
+ switch(frame[12]){
9286
+ case 0:
9287
+ psi_1 = "10 PSI"
9288
+ break;
9289
+ case 1:
9290
+ psi_1 = "20 PSI"
9291
+ break;
9292
+ case 2:
9293
+ psi_1 = "100 PSI"
9294
+ break;
9295
+ case 3:
9296
+ psi_1 = "500 PSI"
9297
+ break;
9298
+ case 4:
9299
+ psi_1 = "1000 PSI"
9300
+ break;
9301
+ case 5:
9302
+ psi_1 = "5000 PSI"
9303
+ break;
9304
+ case 6:
9305
+ psi_1 = "10000 PSI"
9306
+ break;
9307
+ }
9308
+ switch(frame[13]){
9309
+ case 0:
9310
+ psi_2 = "10 PSI"
9311
+ break;
9312
+ case 1:
9313
+ psi_2 = "20 PSI"
9314
+ break;
9315
+ case 2:
9316
+ psi_2 = "100 PSI"
9317
+ break;
9318
+ case 3:
9319
+ psi_2 = "500 PSI"
9320
+ break;
9321
+ case 4:
9322
+ psi_2 = "1000 PSI"
9323
+ break;
9324
+ case 5:
9325
+ psi_2 = "5000 PSI"
9326
+ break;
9327
+ case 6:
9328
+ psi_2 = "10000 PSI"
9329
+ break;
9330
+ }
9331
+ return {
9332
+ 'firmware': frame[2],
9333
+ 'sensor_1_fs': psi_1,
9334
+ 'sensor_2_fs': psi_2,
9335
+ 'auto_check_interval': frame.slice(14, 16).reduce(msbLsb) + " Sec.",
9336
+ 'press_auto_check_percent': frame[17] + " %",
9337
+ 'temp_auto_check_percent': frame[17] + " %",
9338
+ 'hardware_id_1': frame[18],
9339
+ 'hardware_id_2': frame[19],
9340
+ 'hardware_id_3': frame[20],
9341
+ 'sample_rate': frame.slice(21, 25).reduce(msbLsb) + " Sec.",
9342
+ 'tx_life_counter': frame.slice(25, 29).reduce(msbLsb),
9343
+ 'machine_values': {
9344
+ 'firmware': frame[2],
9345
+ 'sensor_1_fs': frame[12],
9346
+ 'sensor_2_fs': frame[13],
9347
+ 'auto_check_interval': frame.slice(14, 16),
9348
+ 'press_auto_check_percent': frame[16],
9349
+ 'temp_auto_check_percent': frame[17],
9350
+ 'hardware_id_1': frame[18],
9351
+ 'hardware_id_2': frame[19],
9352
+ 'hardware_id_3': frame[20],
9353
+ 'sample_rate': frame.slice(21, 25),
9354
+ 'tx_life_counter': frame.slice(25, 29),
9355
+ }
9356
+ }
9357
+ }
9358
+ },
8737
9359
  '180': {
8738
9360
  name: 'C1D2 One Channel Vibration Plus',
8739
9361
  parse: (payload, parsed, mac) => {
@@ -8770,14 +9392,14 @@ function sensor_types(parent){
8770
9392
  },
8771
9393
  '202': {
8772
9394
  name: 'Wireless Weather Station',
8773
- parse: (d) => {
9395
+ parse: (payload, parsed, mac) => {
8774
9396
  return {
8775
- Temp: signInt(d.slice(0, 4).reduce(msbLsb), 32) / 100,
8776
- Humid: signInt(d.slice(4, 8).reduce(msbLsb), 32) / 100,
8777
- Pressure: signInt(d.slice(8, 12).reduce(msbLsb), 32) / 100,
8778
- WindSpd: signInt(d.slice(12, 16).reduce(msbLsb),32) / 100,
8779
- WindDir: signInt(d.slice(16, 20).reduce(msbLsb),32) / 100
8780
-
9397
+ Temp: signInt(payload.slice(8, 12).reduce(msbLsb), 32) / 100,
9398
+ Humid: signInt(payload.slice(12, 16).reduce(msbLsb), 32) / 100,
9399
+ Pressure: signInt(payload.slice(16, 20).reduce(msbLsb), 32) / 100,
9400
+ WindSpd: signInt(payload.slice(20, 24).reduce(msbLsb),32) / 100,
9401
+ WindDir: signInt(payload.slice(24, 28).reduce(msbLsb),32) / 100,
9402
+ reserve: payload[7]
8781
9403
  };
8782
9404
  }
8783
9405
  },
@@ -11120,7 +11742,7 @@ function sensor_types(parent){
11120
11742
  }
11121
11743
  },
11122
11744
  '539': {
11123
- name: 'RS-485 Modbus Wireless Converter',
11745
+ name: 'RS485 Modbus Wireless Converter',
11124
11746
  parse: (d) => {
11125
11747
  return {
11126
11748
  subdevice_type: d[0],
@@ -11148,6 +11770,22 @@ function sensor_types(parent){
11148
11770
  };
11149
11771
  }
11150
11772
  },
11773
+ '1010': {
11774
+ name: 'RS232 Wireless Converter',
11775
+ parse: (d) => {
11776
+ return {
11777
+ data: d
11778
+ };
11779
+ },
11780
+ },
11781
+ '1011': {
11782
+ name: 'RS485 Wireless Converter',
11783
+ parse: (d) => {
11784
+ return {
11785
+ data: d
11786
+ };
11787
+ },
11788
+ },
11151
11789
  '10000': {
11152
11790
  name: '4-Relay',
11153
11791
  parse: (d) => {