@ncd-io/node-red-enterprise-sensors 2.0.2 → 2.0.3

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.
@@ -0,0 +1,438 @@
1
+ const { toMac, signInt, msbLsb } = require('../utils');
2
+
3
+ // --- 1. DEFINE LOCAL FUNCTIONS ---
4
+ // These are defined as local variables so they can call each other easily.
5
+ module.exports = (globalDevices) => {
6
+
7
+ const get_write_buffer_size = (firmware) => {
8
+ return 33;
9
+ };
10
+
11
+ const get_config_map = (firmware) => {
12
+ console.log('Generating sync map for firmware version', firmware);
13
+
14
+ return {
15
+ "core_version": {
16
+ "read_index": 3,
17
+ "descriptions": {
18
+ "title": "Core Version",
19
+ "main_caption": "The version of the core communication stack."
20
+ },
21
+ "validator": {
22
+ "type": "uint8"
23
+ },
24
+ "tags": [
25
+ "system"
26
+ ]
27
+ },
28
+ "firmware_version": {
29
+ "read_index": 4,
30
+ "descriptions": {
31
+ "title": "Firmware Version",
32
+ "main_caption": "The application-specific firmware version."
33
+ },
34
+ "validator": {
35
+ "type": "uint8"
36
+ },
37
+ "tags": [
38
+ "system"
39
+ ]
40
+ },
41
+ "sensor_type": {
42
+ "read_index": 5,
43
+ "descriptions": {
44
+ "title": "Sensor Type",
45
+ "main_caption": "The hardware identifier for the specific sensor model."
46
+ },
47
+ "validator": {
48
+ "type": "uint16be"
49
+ },
50
+ "tags": [
51
+ "system"
52
+ ]
53
+ },
54
+ "tx_lifetime_counter": {
55
+ "read_index": 7,
56
+ "descriptions": {
57
+ "title": "Sampling Interval",
58
+ "main_caption": "Set how often will the sensor transmit measurement data. Note: For this sensor, this value functions as the sampling interval rather than a traditional delay.",
59
+ "sub_caption": "Default value: 20 milliseconds."
60
+ },
61
+ "validator": {
62
+ "type": "uint32be"
63
+ },
64
+ "tags": [
65
+ "diagnostics"
66
+ ]
67
+ },
68
+ "hardware_id": {
69
+ "read_index": 11,
70
+ "length": 3,
71
+ "descriptions": {
72
+ "title": "Hardware ID",
73
+ "main_caption": "A unique 3-byte hardware identifier."
74
+ },
75
+ "validator": {
76
+ "type": "buffer"
77
+ },
78
+ "tags": [
79
+ "system"
80
+ ]
81
+ },
82
+ "network_id": {
83
+ "read_index": 14,
84
+ "write_index": 3,
85
+ "length": 2,
86
+ "descriptions": {
87
+ "title": "Network ID",
88
+ "main_caption": ""
89
+ },
90
+ "default_value": "7fff",
91
+ "validator": {
92
+ "type": "hex",
93
+ "length": 4
94
+ },
95
+ "html_id": "pan_id",
96
+ "tags": [
97
+ "communications"
98
+ ]
99
+ },
100
+ "destination_address": {
101
+ "read_index": 16,
102
+ "write_index": 5,
103
+ "length": 4,
104
+ "descriptions": {
105
+ "title": "Destination Address",
106
+ "main_caption": ""
107
+ },
108
+ "default_value": "0000ffff",
109
+ "validator": {
110
+ "type": "mac",
111
+ "length": 8
112
+ },
113
+ "html_id": "destination",
114
+ "tags": [
115
+ "communications"
116
+ ]
117
+ },
118
+ "node_id": {
119
+ "read_index": 20,
120
+ "write_index": 9,
121
+ "descriptions": {
122
+ "title": "Node ID",
123
+ "main_caption": ""
124
+ },
125
+ "default_value": "0",
126
+ "validator": {
127
+ "type": "uint8",
128
+ "min": 0,
129
+ "max": 255,
130
+ "generated": true
131
+ },
132
+ "html_id": "node_id",
133
+ "tags": [
134
+ "generic"
135
+ ]
136
+ },
137
+ "report_rate": {
138
+ "read_index": 21,
139
+ "write_index": 10,
140
+ "descriptions": {
141
+ "title": "Delay",
142
+ "main_caption": ""
143
+ },
144
+ "default_value": 3,
145
+ "validator": {
146
+ "type": "uint32be"
147
+ },
148
+ "html_id": "delay"
149
+ },
150
+ "fsr": {
151
+ "read_index": 25,
152
+ "write_index": 14,
153
+ "descriptions": {
154
+ "title": "Set FSR",
155
+ "main_caption": ""
156
+ },
157
+ "default_value": 0,
158
+ "validator": {
159
+ "type": "uint8",
160
+ "min": 0,
161
+ "max": 5,
162
+ "generated": true
163
+ },
164
+ "options": {
165
+ "0": "6.114",
166
+ "1": "4.096",
167
+ "2": "2.048",
168
+ "3": "1.024",
169
+ "4": "0.512",
170
+ "5": "0.256"
171
+ },
172
+ "html_id": "fsr_420ma"
173
+ },
174
+ "boot_up_time": {
175
+ "read_index": 26,
176
+ "write_index": 27,
177
+ "descriptions": {
178
+ "title": "Sensor Boot Time",
179
+ "main_caption": ""
180
+ },
181
+ "default_value": 0,
182
+ "validator": {
183
+ "type": "uint8",
184
+ "min": 0,
185
+ "max": 255
186
+ },
187
+ "html_id": "sensor_boot_time_420ma"
188
+ },
189
+ "adc_pin_reading": {
190
+ "read_index": 27,
191
+ "validator": {
192
+ "type": "uint16be"
193
+ },
194
+ "tags": [
195
+ "diagnostics"
196
+ ]
197
+ },
198
+ "auto_check_interval": {
199
+ "read_index": 29,
200
+ "write_index": 28,
201
+ "descriptions": {
202
+ "title": "Auto Check Interval",
203
+ "main_caption": "To disable the auto check interval feature make this setting active and use a value of 0."
204
+ },
205
+ "default_value": 60,
206
+ "validator": {
207
+ "type": "uint16be",
208
+ "min": 0,
209
+ "max": 65535
210
+ },
211
+ "html_id": "auto_check_interval_88"
212
+ },
213
+ "auto_check_threshold": {
214
+ "read_index": 31,
215
+ "write_index": 30,
216
+ "descriptions": {
217
+ "title": "Auto Check Threshold",
218
+ "main_caption": "This is a percent value. It will dictate a new transmission if the percentage change since last transmission exceeds the percentage set in this field."
219
+ },
220
+ "default_value": 20,
221
+ "validator": {
222
+ "type": "uint16be",
223
+ "min": 0,
224
+ "max": 65535
225
+ },
226
+ "html_id": "auto_check_threshold_88"
227
+ },
228
+ "always_on": {
229
+ "read_index": 33,
230
+ "write_index": 32,
231
+ "descriptions": {
232
+ "title": "Set Sensor Always On",
233
+ "main_caption": "This command will keep the external power to the sensor always enabled."
234
+ },
235
+ "default_value": 0,
236
+ "validator": {
237
+ "type": "uint8",
238
+ "min": 0,
239
+ "max": 1,
240
+ "generated": true
241
+ },
242
+ "options": {
243
+ "0": "Disable",
244
+ "1": "Enable"
245
+ },
246
+ "html_id": "always_on_420ma"
247
+ },
248
+ "calibration_one": {
249
+ "read_index": 34,
250
+ "write_index": 15,
251
+ "descriptions": {
252
+ "title": "Low Calibration Point",
253
+ "main_caption": ""
254
+ },
255
+ "default_value": 68805,
256
+ "validator": {
257
+ "type": "uint32be",
258
+ "min": 0,
259
+ "max": 4294967295
260
+ },
261
+ "html_id": "low_calibration_420ma"
262
+ },
263
+ "calibration_two": {
264
+ "read_index": 38,
265
+ "write_index": 19,
266
+ "descriptions": {
267
+ "title": "Mid Calibration Point",
268
+ "main_caption": ""
269
+ },
270
+ "default_value": 68724,
271
+ "validator": {
272
+ "type": "uint32be",
273
+ "min": 0,
274
+ "max": 4294967295
275
+ },
276
+ "html_id": "mid_calibration_420ma"
277
+ },
278
+ "calibration_three": {
279
+ "read_index": 42,
280
+ "write_index": 23,
281
+ "descriptions": {
282
+ "title": "High Calibration Point",
283
+ "main_caption": ""
284
+ },
285
+ "default_value": 68714,
286
+ "validator": {
287
+ "type": "uint32be",
288
+ "min": 0,
289
+ "max": 4294967295
290
+ },
291
+ "html_id": "high_calibration_420ma"
292
+ }
293
+ };
294
+ };
295
+
296
+ const sync_parse = (rep_buffer) => {
297
+ let response = {
298
+ 'human_readable': {},
299
+ 'machine_values': {}
300
+ };
301
+
302
+ // Get the map based on the sensor type byte
303
+ const sync_map = get_config_map(rep_buffer[4]);
304
+
305
+ for (const [key, config] of Object.entries(sync_map)) {
306
+ // Destructure 'type' from inside 'validator' and rename 'read_index' to 'idx'
307
+ const { read_index: idx, length, validator: { type } = {}, converter, options } = config;
308
+
309
+ // If for some reason a config doesn't have a validator/type, skip it
310
+ if (!type) continue;
311
+
312
+ switch (type) {
313
+ case 'uint8':
314
+ response.machine_values[key] = rep_buffer[idx];
315
+ break;
316
+ case 'uint16be':
317
+ response.machine_values[key] = rep_buffer.readUInt16BE(idx);
318
+ break;
319
+ case 'uint32be':
320
+ response.machine_values[key] = rep_buffer.readUInt32BE(idx);
321
+ break;
322
+ case 'buffer':
323
+ response.machine_values[key] = rep_buffer.subarray(idx, idx + length);
324
+ break;
325
+ case 'hex':
326
+ response.machine_values[key] = rep_buffer.subarray(idx, idx + length).toString('hex');
327
+ break;
328
+ case 'mac':
329
+ response.machine_values[key] = rep_buffer.subarray(idx, idx + length).toString('hex');
330
+ break;
331
+ }
332
+ let human_value = response.machine_values[key];
333
+ if(options && options[response.machine_values[key]]){
334
+ human_value = options[response.machine_values[key]];
335
+ }else{
336
+ if(converter && converter.multiplier){
337
+ human_value = human_value * converter.multiplier;
338
+ }
339
+ if(converter && converter.units){
340
+ human_value = human_value + converter.units;
341
+ }
342
+ }
343
+ response.human_readable[key] = human_value;
344
+ }
345
+ if (Object.hasOwn(response.machine_values, 'destination_address') && response.machine_values.destination_address.toLowerCase() === '00000000') {
346
+ console.log('##############################');
347
+ console.log('#########Dest Override########');
348
+ console.log('##############################');
349
+ response.destination_address = "0000ffff";
350
+ // response.auto_raw_destination_address = "0000ffff";
351
+ };
352
+ return response;
353
+ };
354
+
355
+ const parse_fly = (frame) => {
356
+ let firmware = frame[2];
357
+ if(firmware > 13){ // firmware 14 and above
358
+ let frame_data = {};
359
+ let auto_check_interval = frame.slice(20, 22).reduce(msbLsb);
360
+ if(!auto_check_interval){
361
+ frame_data.auto_check_interval = 'Disabled';
362
+ }else{
363
+ frame_data.auto_check_interval = auto_check_interval + " sec";
364
+ }
365
+ frame_data.always_on = frame[24]?"Enabled":"Disabled";
366
+ switch(frame[16]){
367
+ case 0:
368
+ frame_data.fsr = "+-6.114 V";
369
+ break;
370
+ case 1:
371
+ frame_data.fsr = "+-4.096 V";
372
+ break;
373
+ case 2:
374
+ frame_data.fsr = "+-2.048 V";
375
+ break;
376
+ case 3:
377
+ frame_data.fsr = "+-1.024 V";
378
+ break;
379
+ case 4:
380
+ frame_data.fsr = "+-0.512 V";
381
+ break;
382
+ case 5:
383
+ frame_data.fsr = "+-0.256 V";
384
+ break;
385
+ }
386
+ return {
387
+ 'firmware': frame[2],
388
+ 'fsr': frame_data.fsr,
389
+ 'boot_up_time': frame[17] + " sec",
390
+ 'adc_pin_reading': frame.slice(18, 20).reduce(msbLsb),
391
+ 'auto_check_interval': frame_data.auto_check_interval,
392
+ 'auto_check_threshold': frame.slice(22, 24).reduce(msbLsb),
393
+ 'always_on': frame_data.always_on,
394
+ 'calibration_one': frame.slice(25, 29).reduce(msbLsb),
395
+ 'calibration_two':frame.slice(29, 33).reduce(msbLsb),
396
+ 'calibration_three':frame.slice(33, 37).reduce(msbLsb),
397
+ 'hardware_id': frame.slice(37, 40),
398
+ 'report_rate': frame.slice(40, 44).reduce(msbLsb) + " sec",
399
+ 'tx_life_counter': frame.slice(44, 48).reduce(msbLsb),
400
+ 'machine_values': {
401
+ 'firmware': frame[2],
402
+ 'fsr': frame[16],
403
+ 'boot_up_time': frame[17],
404
+ 'adc_pin_reading': frame.slice(18, 20),
405
+ 'auto_check_interval': frame.slice(20, 22),
406
+ 'auto_check_percentage': frame.slice(22, 24),
407
+ 'always_on': frame[24],
408
+ 'calibration_one': frame.slice(25, 29),
409
+ 'calibration_two':frame.slice(29, 33),
410
+ 'calibration_three':frame.slice(33, 37),
411
+ 'hardware_id': frame.slice(37, 40),
412
+ 'report_rate': frame.slice(40, 44),
413
+ 'tx_life_counter': frame.slice(44, 48)
414
+ }
415
+ }
416
+ }
417
+ };
418
+
419
+ const parse = (d) => {
420
+ return {
421
+ adc: signInt(d.slice(0, 2).reduce(msbLsb), 16),
422
+ vdc: signInt(d.slice(2, 4).reduce(msbLsb), 16)/100
423
+ };
424
+ };
425
+
426
+ // --- 2. EXPORT THE MODULE ---
427
+ // Export the module with all the necessary functions and properties
428
+ // that need to be called from outside the scrip
429
+ return {
430
+ type: 96,
431
+ name: '16-Bit 1-Channel 0-48VDC Receiver',
432
+ parse,
433
+ get_write_buffer_size,
434
+ get_config_map,
435
+ sync_parse,
436
+ parse_fly
437
+ };
438
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ncd-io/node-red-enterprise-sensors",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/wireless.html CHANGED
@@ -1002,7 +1002,15 @@
1002
1002
  adc_threshold_128:{value: 3, validate: NCD_validators.number_range(0, 65535)},
1003
1003
  auto_check_interval_128_active:{value:""},
1004
1004
  auto_check_interval_128:{value: 0, validate: NCD_validators.number_range(0, 255)},
1005
- auto_calibration_128:{value:0}
1005
+ auto_calibration_128:{value:0},
1006
+
1007
+ reset_total_545_active:{value:""},
1008
+ cal_validation_545_active:{value:""},
1009
+
1010
+ boot_time_4_active:{value:""},
1011
+ boot_time_4:{value: 0, validate: NCD_validators.number_range(0, 65535)},
1012
+ operation_mode_4_active:{value:""},
1013
+ operation_mode_4:{value:0}
1006
1014
  },
1007
1015
  inputs: 0,
1008
1016
  outputs: 1,
@@ -1494,7 +1502,7 @@
1494
1502
  <label for="node-input-auto_config"><i class="icon-tag"></i> Auto Config</label>
1495
1503
  <input class="section-control" type="checkbox" id="node-input-auto_config" value="1">
1496
1504
  </div>
1497
- <div class="form-row ncd-dependent" data-sensor-4 data-sensor-12 data-sensor-21 data-sensor-29 data-sensor-23 data-sensor-26 data-sensor-30 data-sensor-32 data-sensor-33 data-sensor-35 data-sensor-39 data-sensor-44 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-53 data-sensor-54 data-sensor-55 data-sensor-56 data-sensor-58 data-sensor-74 data-sensor-76 data-sensor-78 data-sensor-79 data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-87 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-91 data-sensor-93 data-sensor-97 data-sensor-98 data-sensor-99 data-sensor-101 data-sensor-102 data-sensor-103 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-108 data-sensor-109 data-sensor-110 data-sensor-111 data-sensor-112 data-sensor-114 data-sensor-117 data-sensor-118 data-sensor-119 data-sensor-120 data-sensor-121 data-sensor-122 data-sensor-123 data-sensor-124 data-sensor-125 data-sensor-126 data-sensor-128 data-sensor-180 data-sensor-181 data-sensor-202 data-sensor-211 data-sensor-217 data-sensor-270 data-sensor-519 data-sensor-520 data-sensor-521 data-sensor-531 data-sensor-535 data-sensor-536 data-sensor-537 data-sensor-538 data-sensor-539 data-sensor-540 data-sensor-541 data-sensor-542 data-sensor-543 data-sensor-545 data-sensor-554 data-sensor-1010 data-sensor-1011>
1505
+ <div class="form-row ncd-dependent" data-sensor-1 data-sensor-4 data-sensor-12 data-sensor-15 data-sensor-21 data-sensor-29 data-sensor-23 data-sensor-26 data-sensor-30 data-sensor-32 data-sensor-33 data-sensor-35 data-sensor-39 data-sensor-44 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-53 data-sensor-54 data-sensor-55 data-sensor-56 data-sensor-58 data-sensor-74 data-sensor-75 data-sensor-76 data-sensor-78 data-sensor-79 data-sensor-80 data-sensor-81 data-sensor-82 data-sensor-84 data-sensor-87 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-91 data-sensor-93 data-sensor-95 data-sensor-96 data-sensor-97 data-sensor-98 data-sensor-99 data-sensor-101 data-sensor-102 data-sensor-103 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-108 data-sensor-109 data-sensor-110 data-sensor-111 data-sensor-112 data-sensor-114 data-sensor-117 data-sensor-118 data-sensor-119 data-sensor-120 data-sensor-121 data-sensor-122 data-sensor-123 data-sensor-124 data-sensor-125 data-sensor-126 data-sensor-128 data-sensor-180 data-sensor-181 data-sensor-202 data-sensor-211 data-sensor-217 data-sensor-270 data-sensor-519 data-sensor-520 data-sensor-521 data-sensor-531 data-sensor-535 data-sensor-536 data-sensor-537 data-sensor-538 data-sensor-539 data-sensor-540 data-sensor-541 data-sensor-542 data-sensor-543 data-sensor-545 data-sensor-554 data-sensor-1010 data-sensor-1011>
1498
1506
  <hr>
1499
1507
  <label for="node-input-on_the_fly_enable"><i class="icon-tag"></i> OTF Config*</label>
1500
1508
  <input type="checkbox" id="node-input-on_the_fly_enable" value="1">
@@ -2611,7 +2619,7 @@
2611
2619
  </div>
2612
2620
  </div>
2613
2621
 
2614
- <div class="ncd-dependent" data-sensor-14 data-sensor-15 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-56 data-sensor-85 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-95 data-sensor-96 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-122 data-sensor-540 data-sensor-541>
2622
+ <div class="ncd-dependent" data-sensor-14 data-sensor-15 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-56 data-sensor-75 data-sensor-85 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-95 data-sensor-96 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-122 data-sensor-540 data-sensor-541>
2615
2623
  <div class="form-row ncd-active-check">
2616
2624
  <strong>Sensor Boot Time</strong>
2617
2625
  <p class="caption">
@@ -2678,7 +2686,7 @@
2678
2686
  </div>
2679
2687
  </div>
2680
2688
 
2681
- <div class="ncd-dependent" data-sensor-3 data-sensor-14 data-sensor-15 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-56 data-sensor-85 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-95 data-sensor-96 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-122 data-sensor-200 data-sensor-540 data-sensor-541>
2689
+ <div class="ncd-dependent" data-sensor-3 data-sensor-14 data-sensor-15 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-56 data-sensor-75 data-sensor-85 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-95 data-sensor-96 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-122 data-sensor-200 data-sensor-540 data-sensor-541>
2682
2690
  <div class="form-row ncd-active-check">
2683
2691
  <strong>Low Calibration Point</strong>
2684
2692
  <div>
@@ -2690,6 +2698,8 @@
2690
2698
  <input type="text" id="node-input-low_calibration_420ma" placeholder="68805" value="68805">
2691
2699
  </div>
2692
2700
  </div>
2701
+ </div>
2702
+ <div class="ncd-dependent" data-sensor-3 data-sensor-14 data-sensor-15 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-56 data-sensor-75 data-sensor-85 data-sensor-88 data-sensor-89 data-sensor-95 data-sensor-96 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-122 data-sensor-200 data-sensor-540 data-sensor-541>
2693
2703
  <div class="form-row ncd-active-check">
2694
2704
  <strong>Mid Calibration Point</strong>
2695
2705
  <div>
@@ -2712,6 +2722,8 @@
2712
2722
  <input type="text" id="node-input-high_calibration_420ma" placeholder="68714" value="68714">
2713
2723
  </div>
2714
2724
  </div>
2725
+ </div>
2726
+ <div class="ncd-dependent" data-sensor-3 data-sensor-14 data-sensor-15 data-sensor-45 data-sensor-48 data-sensor-52 data-sensor-56 data-sensor-75 data-sensor-85 data-sensor-88 data-sensor-89 data-sensor-90 data-sensor-95 data-sensor-96 data-sensor-105 data-sensor-106 data-sensor-107 data-sensor-122 data-sensor-200 data-sensor-540 data-sensor-541>
2715
2727
  <div class="form-row ncd-active-check">
2716
2728
  <strong>Set FSR</strong>
2717
2729
  <div>
@@ -4495,9 +4507,33 @@
4495
4507
  </div>
4496
4508
  <div class="ncd-dependent" data-sensor-4 data-sensor-12 data-sensor-23>
4497
4509
  <hr>
4510
+ <div class="form-row ncd-active-check">
4511
+ <strong>Set Operation Mode</strong>
4512
+ <p class="caption">
4513
+ This setting is for the internal temperature chip.<br>
4514
+ • <strong>Shutdown:</strong> One of the low power modes. When this mode is enabled, sensor consumes less current than normal operation.<br>
4515
+ • <strong>Brust:</strong> One of the low power modes. In this mode, the sensor measures a specific number of temperature samples and then it goes to shutdown mode. The number of samples is set by the "Number of Samples" configuration.<br>
4516
+ • <strong>Normal:</strong> Normal sensor operation (Not low power).<br>
4517
+ </p>
4518
+ <div>
4519
+ <label for="node-input-operation_mode_4_active">Active:</label>
4520
+ <input type="checkbox" id="node-input-operation_mode_4_active" class="ncd-config-toggle" data-target-id="node-input-operation_mode_4" value="1">
4521
+ </div>
4522
+ <div>
4523
+ <label for="node-input-operation_mode_4"><i class="icon-tag"></i>Value:</label>
4524
+ <select id="node-input-operation_mode_4">
4525
+ <option selected="selected" value="0">Normal</option>
4526
+ <option value="1">Shutdown</option>
4527
+ <option value="2">Burst</option>
4528
+ </select>
4529
+ </div>
4530
+ <p class="caption">
4531
+ Default value: Normal.
4532
+ </p>
4533
+ </div>
4498
4534
  <div class="form-row ncd-active-check">
4499
4535
  <strong>Set Thermocouple Type</strong>
4500
- <p>Set the type of thermocouple being used, this device supports eight thermocouple types (e.g., K, J, T, N, S, E, B, R).</p>
4536
+ <p class="caption">Set the type of thermocouple being used, this device supports eight thermocouple types (e.g., K, J, T, N, S, E, B, R).</p>
4501
4537
  <div>
4502
4538
  <label for="node-input-thermocouple_type_23_active">Active:</label>
4503
4539
  <input type="checkbox" id="node-input-thermocouple_type_23_active" class="ncd-config-toggle" data-target-id="node-input-thermocouple_type_23" value="1">
@@ -4515,10 +4551,13 @@
4515
4551
  <option value="112">Type R</option>
4516
4552
  </select>
4517
4553
  </div>
4554
+ <p class="caption">
4555
+ Default value: Type K.
4556
+ </p>
4518
4557
  </div>
4519
4558
  <div class="form-row ncd-active-check">
4520
4559
  <strong>Set Filter Level</strong>
4521
- <p>The sensor applies the selected filter level by averaging multiple temperature readings over time.
4560
+ <p class="caption">The sensor applies the selected filter level by averaging multiple temperature readings over time.
4522
4561
  A higher filter level smooths out rapid fluctuations (noise) in the measurements, resulting in more stable data but with a slower response.
4523
4562
  A lower filter level offers quicker response but with potentially more noise in the data.<br>
4524
4563
  <br>
@@ -4537,7 +4576,7 @@
4537
4576
  <div>
4538
4577
  <label for="node-input-filter_thermocouple"><i class="icon-tag"></i>Value:</label>
4539
4578
  <select id="node-input-filter_thermocouple">
4540
- <option selected="selected" value="0">Level 0</option>
4579
+ <option selected="selected" value="0">Filter Disabled</option>
4541
4580
  <option value="1">Level 1</option>
4542
4581
  <option value="2">Level 2</option>
4543
4582
  <option value="3">Level 3</option>
@@ -4547,10 +4586,13 @@
4547
4586
  <option value="7">Level 7</option>
4548
4587
  </select>
4549
4588
  </div>
4589
+ <p class="caption">
4590
+ Default value: Filter Disabled.
4591
+ </p>
4550
4592
  </div>
4551
4593
  <div class="form-row ncd-active-check">
4552
4594
  <strong>Set Cold Junction Resolution</strong>
4553
- <p>The internal chip integrates an ambient temperature sensor which can be used to measure the thermocouple cold-junction temperature.
4595
+ <p class="caption">The internal chip integrates an ambient temperature sensor which can be used to measure the thermocouple cold-junction temperature.
4554
4596
  The temperature resolution is user-selectable to 0.0625°C or 0.25°C resolutions and setting the resolution determines the temperature update rate.</p>
4555
4597
  <div>
4556
4598
  <label for="node-input-cold_junction_thermocouple_active">Active:</label>
@@ -4563,10 +4605,13 @@
4563
4605
  <option value="128">0.25⁰C</option>
4564
4606
  </select>
4565
4607
  </div>
4608
+ <p class="caption">
4609
+ Default value: 0.0625⁰C.
4610
+ </p>
4566
4611
  </div>
4567
4612
  <div class="form-row ncd-active-check">
4568
4613
  <strong>Set ADC Resolution</strong>
4569
- <p>The ADC measurement resolution is selectable, which enables the user to choose faster conversion times with
4614
+ <p class="caption">The ADC measurement resolution is selectable, which enables the user to choose faster conversion times with
4570
4615
  reduced resolution. This feature is useful to detect fast transient temperatures.</p>
4571
4616
  <div>
4572
4617
  <label for="node-input-sample_resolution_thermocouple_active">Active:</label>
@@ -4581,10 +4626,13 @@
4581
4626
  <option value="96">12 Bits</option>
4582
4627
  </select>
4583
4628
  </div>
4629
+ <p class="caption">
4630
+ Default value: 18 Bit.
4631
+ </p>
4584
4632
  </div>
4585
4633
  <div class="form-row ncd-active-check">
4586
4634
  <strong>Set Number of Samples</strong>
4587
- <p>Specifies how many temperature samples are taken per measurement, in addition, if the filter option is enabled, then the filter
4635
+ <p class="caption">Specifies how many temperature samples are taken per measurement, in addition, if the filter option is enabled, then the filter
4588
4636
  engine is applied to each temperature sample.</p>
4589
4637
  <div>
4590
4638
  <label for="node-input-number_of_samples_thermocouple_active">Active:</label>
@@ -4603,10 +4651,13 @@
4603
4651
  <option value="28">128 Samples</option>
4604
4652
  </select>
4605
4653
  </div>
4654
+ <p class="caption">
4655
+ Default value: 1 Sample.
4656
+ </p>
4606
4657
  </div>
4607
4658
  <div class="form-row ncd-active-check">
4608
4659
  <strong>Set Measurement Type</strong>
4609
- <p>Configures the sensor to measure either the hot-junction temperature, cold-junction temperature, or the differential between them.</p>
4660
+ <p class="caption">Configures the sensor to measure either the hot-junction temperature, cold-junction temperature, or the differential between them.</p>
4610
4661
  <div>
4611
4662
  <label for="node-input-measurement_type_thermocouple_active">Active:</label>
4612
4663
  <input type="checkbox" id="node-input-measurement_type_thermocouple_active" class="ncd-config-toggle" data-target-id="node-input-measurement_type_thermocouple" value="1">
@@ -4619,6 +4670,26 @@
4619
4670
  <option value="2">Delta</option>
4620
4671
  </select>
4621
4672
  </div>
4673
+ <p class="caption">
4674
+ Default value: Hot Junction.
4675
+ </p>
4676
+ </div>
4677
+ <div class="form-row ncd-active-check">
4678
+ <strong>Set Boot Time</strong>
4679
+ <p class="caption">
4680
+ Sets the time (in milliseconds) taken for sensor to be ready for use after it's powered on.
4681
+ </p>
4682
+ <div>
4683
+ <label for="node-input-boot_time_4_active">Active:</label>
4684
+ <input type="checkbox" id="node-input-boot_time_4_active" class="ncd-config-toggle" data-target-id="node-input-boot_time_4" value="1">
4685
+ </div>
4686
+ <div>
4687
+ <label for="node-input-boot_time_4"><i class="icon-tag"></i>Value:</label>
4688
+ <input type="text" id="node-input-boot_time_4" placeholder="0" value="0">
4689
+ </div>
4690
+ <p class="caption">
4691
+ Default value: 1500 milliseconds.
4692
+ </p>
4622
4693
  </div>
4623
4694
  </div>
4624
4695
  <div class="ncd-dependent" data-sensor-46>
@@ -6767,7 +6838,7 @@
6767
6838
  <label for="node-input-temperature_unit_545"><i class="icon-tag"></i>Value:</label>
6768
6839
  <select id="node-input-temperature_unit_545">
6769
6840
  <option value="0">Fahrenheit</option>
6770
- <option value="1">celsius</option>
6841
+ <option value="1">Celsius</option>
6771
6842
  </select>
6772
6843
  </div>
6773
6844
  </div>
@@ -6808,6 +6879,20 @@
6808
6879
  </select>
6809
6880
  </div>
6810
6881
  </div>
6882
+ <div class="form-row ncd-active-check">
6883
+ <strong>Reset Total Flow</strong>
6884
+ <div>
6885
+ <label for="node-input-reset_total_545_active"><i class="icon-tag"></i>Active:</label>
6886
+ <input type="checkbox" id="node-input-reset_total_545_active" value="1">
6887
+ </div>
6888
+ </div>
6889
+ <div class="form-row ncd-active-check">
6890
+ <strong>Set Calibration Validation</strong>
6891
+ <div>
6892
+ <label for="node-input-cal_validation_545_active"><i class="icon-tag"></i>Active:</label>
6893
+ <input type="checkbox" id="node-input-cal_validation_545_active" value="1">
6894
+ </div>
6895
+ </div>
6811
6896
  <div class="form-row ncd-active-check">
6812
6897
  <strong>Set Gas Type</strong>
6813
6898
  <div>