smithtek-mako-rf 3.3.4 → 3.4.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.
package/MAKO-RF.md ADDED
@@ -0,0 +1,607 @@
1
+ # Original Mako RF · basic Modbus
2
+
3
+ This guide covers the original RF node included in **smithtek-mako-rf**. For Smithtek’s proprietary PassPort Connect link between PassPort, Mako and Solaris, use the separate [PassPort Connect guide](PASSPORT-CONNECT.md). Both nodes are installed by the same package.
4
+
5
+ ## Installation
6
+ Install using the `NodeRED palette manager`
7
+
8
+
9
+ ## Smithtek Mako RF node
10
+
11
+ The Smithtek Mako RF nodes are designed specifically for the Mako PLC, while remaining fully compatible with other Modbus RTU devices connected over RS485.
12
+
13
+ They support communication to one or multiple devices across hard-wired RS485 channels or long-range RF, all from a single, unified node. Whether you’re polling a single PLC or managing a full remote site, the node handles device sequencing and bus control automatically.
14
+
15
+ Built for industrial environments, the node includes integrated queue management, retry handling, timeout control, gap spacing, and automatic reconnection logic. These features provide stable, predictable polling without requiring complex flow logic.
16
+
17
+ The Smithtek Mako RF node effectively replaces the traditional Modbus contrib nodes and the separate Mako decoder node, combining communication and decoding into a single streamlined tool.
18
+
19
+ One node. One inject. Full control.
20
+
21
+
22
+
23
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/Smithtek%20Mako%20RF%20Nodes%20page%201.png?raw=true)
24
+
25
+ The Smithtek Mako RF node operates in two modes:
26
+ Read Mode – Poll slave devices and retrieve data from registers.
27
+ Write Mode – Send commands or values to slave devices.
28
+ The PassPort Gateway provides three communication channels:
29
+ RS485-1
30
+ RS485-2
31
+ Long Range RF
32
+ You can assign any node to any bus channel, allowing wired and RF devices to operate independently while the node manages sequencing and communication control in the background.
33
+
34
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/Smithtek%20Mako%20RF%20Nodes%20page%202.png?raw=true)
35
+ ---
36
+
37
+ ## Bus Configuration
38
+
39
+ Select the communication channel:
40
+ - **RS485-1** → PassPort RS485-1
41
+ - **RS485-2** → PassPort RS485-2
42
+ - **RF** → Long range LoRa radio link
43
+ When RF is selected, serial parameters are automatically managed.
44
+ Timeout, Retries and Gap are configured in **seconds**.
45
+
46
+ ---
47
+
48
+ ## Mode
49
+
50
+ ### Read
51
+ Polls registers from the remote Mako and outputs structured JSON.
52
+
53
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/Smithtek%20Mako%20RF%20Nodes%20page%203.png?raw=true)
54
+ ---
55
+
56
+
57
+
58
+
59
+ ### Write
60
+ Sends values to the remote device using:
61
+
62
+ - FC5 – Write Single Coil
63
+ - FC6 – Write Single Register
64
+ - FC15 – Write Multiple Coils
65
+ - FC16 – Write Multiple Registers
66
+
67
+ Values can come from `msg.payload` or be fixed in the node configuration.
68
+
69
+ Polls registers from the remote Mako and outputs structured JSON.
70
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/Smithtek%20Mako%20RF%20Nodes%20page%204.png?raw=true)
71
+
72
+
73
+ ---
74
+
75
+ ## Device ID
76
+
77
+ The Modbus Unit ID of the remote Mako (1–247).
78
+ Must match the ID configured in the target device.
79
+
80
+ ---
81
+
82
+ ## Function Code
83
+
84
+ Must match the table type configured in your V-NET program:
85
+
86
+ - Read Coils
87
+ - Read Digital Inputs
88
+ - Read Holding Registers
89
+ - Read Input Registers
90
+
91
+ ---
92
+
93
+ ## Address
94
+
95
+ Starting Modbus register address.
96
+ Must align exactly with the Modbus table built in your Mako V-NET program.
97
+
98
+ ---
99
+
100
+ ## Quantity
101
+
102
+ Total number of registers to read.
103
+
104
+ - 16 bit value = 1 register
105
+ - 32 bit value = 2 registers
106
+
107
+ **Example:**
108
+ 3 × 32 bit floats = Quantity 6
109
+
110
+ Quantity must cover all registers defined in your decoder map.
111
+
112
+ ---
113
+
114
+ ## Decoder Map
115
+
116
+ Build the register table in the exact same order as your Mako V-NET Modbus table.
117
+ Each row defines how raw Modbus data is converted into structured JSON.
118
+
119
+ ### Name
120
+ Becomes the output key in `msg.payload`. The name could be your sensor name like "level sensor" or " thermal trip" " pump control" choose a name that suits your SCADA scheme.
121
+
122
+ ### Prefix
123
+
124
+ The Prefix field applies to every name in the decoder table. Enter `b1` and a row named `Pressure` becomes `b1 Pressure` in `msg.payload`, with a space between the prefix and name.
125
+
126
+ Copy the node and change only the prefix to reuse the same table for another asset. Leave it blank to use the table names as entered.
127
+
128
+ ### Register Data Type
129
+
130
+ - 16 bit integer
131
+ - 16 bit unsigned
132
+ - 32 bit integer
133
+ - 32 bit unsigned
134
+ - 32 bit float
135
+ - Digital to unsigned binary encoder
136
+
137
+ ### Offset (regs)
138
+
139
+ Offset is configured in registers.
140
+ Automatic stepping behaviour:
141
+ - 16 bit types increase by 1 register
142
+ - 32 bit types increase by 2 registers
143
+ - Digital encoder increases bit number from 0–15 before moving to the next register
144
+
145
+ Offsets must match your V-NET Modbus table layout exactly.
146
+
147
+ ---
148
+
149
+ ## Digital to Unsigned Binary Encoder
150
+
151
+ Used when one 16 bit register contains multiple digital states.
152
+ The Bit column becomes active.
153
+ Bit automatically increments when adding rows.
154
+ After Bit 15, the next row moves to the next register.
155
+
156
+ ---
157
+
158
+ ## Scale
159
+
160
+ Optional value transformation applied after the Modbus register is read.
161
+
162
+ Decoded numeric readings are rounded to a maximum of six decimal places after Math or Range scaling. Values remain numbers, without added trailing zeros. Very small values may round to zero. Raw data in `msg.modbus.raw` is unchanged.
163
+ The Scale field lets you adjust raw register data into meaningful engineering values without needing extra function nodes. Think of it as lightweight post-processing built directly into the driver.
164
+
165
+ Choose a scaling mode for each row:
166
+
167
+ - **None** leaves the value unchanged.
168
+ - **Math** applies an operator and number, such as `/100` or `+5`.
169
+ - **Range** maps input low/high values to output low/high values.
170
+
171
+ All controls stay on the same row. Selecting None disables the calculation while keeping the entered settings for reuse.
172
+
173
+ ### Math
174
+
175
+ You can apply the following operators:
176
+
177
+ - Addition +
178
+ Adds a number to the value.
179
+ Example:
180
+ +10 → adds 10 to the parsed value
181
+
182
+ - Subtraction -
183
+ Subtracts a number from the value.
184
+ Example:
185
+ -5 → subtracts 5 from the parsed value
186
+
187
+ - Multiply *
188
+ Multiplies the value by a number.
189
+ Example:
190
+ *10 → multiplies the parsed value by 10
191
+
192
+ - Divide /
193
+ Divides the value by a number.
194
+ Example:
195
+ /100 → divides the parsed value by 100
196
+
197
+ - Modulus %
198
+ Returns the remainder after division.
199
+ Example:
200
+ %10 → returns remainder when value is divided by 10
201
+
202
+ If you want to multiple your modbus value by 10 you would put "* 10" without the quotes and use a space between the number and the match function.
203
+
204
+ ### Range — 4–20 mA Scaling
205
+
206
+ Select **Range** and enter **In low**, **In high**, **Out low** and **Out high**. This converts a sensor reading into engineering units in the Passport without a separate Function node or a calculation in the Mako.
207
+
208
+ For a 4–20 mA signal representing 0–100%:
209
+
210
+ | In low | In high | Out low | Out high |
211
+ |---|---|---|---|
212
+ | 4 | 20 | 0 | 100 |
213
+
214
+ A reading of 4 becomes 0, 12 becomes 50, and 20 becomes 100.
215
+
216
+ Use the values actually reported by the register. If it reports 4000–20000, enter 4000 and 20000 as the input limits instead of 4 and 20.
217
+
218
+ Tick **Clamp** to keep the result within the output limits. Otherwise, values outside the input limits continue scaling beyond the output range. Input low and high must differ. Negative, decimal and reversed ranges are supported. Range applies to numeric values and replaces the Math calculation for that row.
219
+
220
+ This allows you to convert raw Modbus numbers into readable, usable data straight from the node — reducing additional processing and keeping flows clean and simple.
221
+
222
+ ---
223
+
224
+ ## Output Behaviour
225
+
226
+ ### Output Pins
227
+
228
+ - **Top pin — Data / alarm:** sends parsed Modbus readings or write confirmations. If a request fails, it sends a readable fault message instead.
229
+ - **Bottom pin — Debug:** sends technical error details for a local Debug node. Leave it disconnected if these details are not needed. Successful requests send nothing from this pin.
230
+
231
+ ### Fault Messages
232
+
233
+ Example payload from the top pin:
234
+
235
+ ```json
236
+ {"b1 RF ID1 Not communicating — check power/RF; disable if out of service":1}
237
+ ```
238
+
239
+ The fault name identifies the prefix, bus and device ID, followed by an operator message. If the prefix is blank, the node Name is used. Other problems, such as an unsupported register or invalid settings, receive a message appropriate to that fault.
240
+
241
+ A timeout fault is sent after one poll exhausts its retries: retries set to 0 means one failed attempt; retries set to 2 means three failed attempts. A successful retry sends normal data only. An unsupported-register error is reported immediately because retrying cannot correct the address. Each failed poll sends a fault; a redeploy cancellation does not.
242
+
243
+ The bottom pin carries `msg.payload.ok`, `msg.payload.error`, `msg.payload.code` and `msg.payload.req` for troubleshooting. Technical details are also available in `msg.modbus`. Node-RED error logs and Catch handling remain available.
244
+
245
+ When communication succeeds again, the top pin resumes normal readings. No automatic zero/clear alarm is sent.
246
+
247
+ ### Successful Read
248
+
249
+ - `msg.payload` → Decoded structured JSON
250
+ - `msg.modbus.raw` → Raw Modbus response
251
+ - `msg.modbus.req` → Request metadata
252
+
253
+ ### Successful Write
254
+
255
+ - `msg.payload` → Device confirmation response
256
+ - `msg.modbus.raw` → Raw Modbus confirmation
257
+
258
+ The write response is the actual Modbus confirmation returned by the remote device.
259
+
260
+ ---
261
+
262
+ ## Industrial Behaviour
263
+
264
+ - Single shared bus queue per channel
265
+ - One request processed at a time
266
+ - Timeout handled in seconds
267
+ - Configurable retry attempts
268
+ - Optional inter-request gap
269
+
270
+ Designed for stable Modbus RTU polling over RS485 or long-range RF links.
271
+
272
+ ---
273
+ ## Decoder Mapping V-NET v NodeRED
274
+
275
+
276
+ The Decoder Map in the Mako RF node must match your V-NET Modbus table exactly.
277
+ Every register must appear in the same order in both tools.
278
+ If the order does not match, the decoded values will be incorrect.
279
+ Think of it as a mirror:
280
+ V-NET defines the Modbus table.
281
+ The Node-RED Decoder reads it back in the exact same sequence.
282
+ Register type, size (16-bit or 32-bit), and position must align between both.
283
+ Digital to Unsigned Binary Encoder
284
+ When using Digital to Unsigned Binary Encoder in V-NET:
285
+ A single 16-bit register holds up to 16 digital values
286
+ Each digital output occupies one bit (0–15)
287
+ In the Node-RED Decoder Map, you select the same register type
288
+ Then assign the correct bit number for each digital
289
+
290
+ Example:
291
+
292
+ Bit 0 = Digital 1
293
+ Bit 1 = Digital 2
294
+ Up to Bit 15
295
+ This allows one register to represent 16 individual digital states.
296
+
297
+ Best Practice
298
+ It is recommended to place Digital to Unsigned registers at the end of your Modbus table.
299
+ This gives you flexibility to:
300
+ Add new digital points later
301
+ Adjust bit assignments
302
+ Expand without shifting existing analog register positions
303
+ Keeping digitals grouped at the end prevents breaking your existing register structure in future revisions.
304
+
305
+ Correct mapping ensures clean decoding, predictable data, and stable long-term expansion.
306
+
307
+ ## Example Configuration reading registers ##
308
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/Decoder%20Map.png?raw=true)
309
+
310
+
311
+
312
+ In the screen shot example above is a typical reading the Mako map/\ ,
313
+
314
+ The V-NET screenshot shows on the left shows.
315
+
316
+ Device ID: 1
317
+ Start register: 0
318
+ Modbus table type: Input Registers
319
+ 2 × 32-bit floats
320
+ 2 × 16-bit unsigned registers
321
+
322
+ The second 16-bit unsigned register is used as a Digital to Unsigned Binary Encoder, allowing up to 16 digital values to be packed into a single register.
323
+ On the Node-RED Mako RF node properties, you can see these settings match exactly:
324
+ Device ID is set to 1
325
+ Function Code matches Input Registers
326
+ Start address is 0
327
+ Quantity shows 16, this is higher than needed but a good habbit to do as it ensurs you dont miss a register. If we wanted to match it completely we would have this set to 6 length!
328
+
329
+ Decoder Map mirrors the exact register order and types from V-NET
330
+ In this example, RF is used as the communication interface on both the Mako PLC and the PassPort Gateway.
331
+ Once deployed, each poll from the PassPort will correctly read the Mako Modbus table.
332
+ The decoded data will then be output from the node, ready for use in dashboards, logic, or cloud transmission.
333
+
334
+ ---
335
+ ## Example Configuration writing a single coil register ##
336
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/decoder%20write%20to%20a%20coil.png?raw=true)
337
+
338
+ In this example, an additional coil has been added to the V-NET Modbus map.
339
+ The Node-RED Mako RF node is now set to Write mode, and the settings match the V-NET configuration:
340
+ Device ID matches the Mako
341
+ Function Code matches the coil type
342
+ Address matches the coil register in V-NET
343
+ Communication channel remains the same (RF or RS485)
344
+ When triggered with an inject node:
345
+ If using msg.payload, the value (true/false) will be written directly to the selected coil.
346
+ If using Fixed, the configured value will be sent on every inject.
347
+ Once deployed, each trigger will send a write command to the Mako, updating the coil state in real time.
348
+
349
+ ---
350
+ ## Example Configuration writing a single holding register ##
351
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/Decoder%20writing%20a%20single%20register.png?raw=true)
352
+
353
+ In this example, a Holding Register has been added in the V-NET Modbus map at address 0.
354
+ The Node-RED Mako RF node is set to Write mode, configured as:
355
+ Device ID matches the Mako
356
+ Function Code set to Write Single Register (FC6)
357
+ Address set to 0 to match V-NET
358
+ Communication channel matches the system (RF or RS485)
359
+ When triggered:
360
+ From msg.payload – the numeric value in the payload is written directly to the holding register.
361
+ Fixed mode – the configured value is written on every inject.
362
+ Once deployed, each inject sends the write command to the Mako, updating the holding register immediately. The value is then available inside the V-NET program just like any other mapped register.
363
+
364
+
365
+ ---
366
+ ## Node Status ##
367
+
368
+ Each Mako RF node shows a live status under the node so you can see what it’s doing without opening debug panels. This is especially useful when polling multiple devices, troubleshooting timeouts, or confirming that queues are being processed correctly.
369
+
370
+ What you’ll see
371
+
372
+ `Idle / waiting`
373
+ No active request is being processed. The node is ready for the next poll.
374
+
375
+ `Polling (in progress)`
376
+ Blue dot status while a request is being sent and a reply is expected.
377
+ Typical text includes the bus name, function code, unit id, and address, for example:
378
+ RF: fc4 uid1 @0 (try 1/3)
379
+
380
+ `Success (response received)`
381
+ Green dot status when the device responded correctly.
382
+ Example:
383
+ RF: ok fc4 uid1
384
+
385
+ `Failure / timeout / comms fault`
386
+ Red ring status when a request fails after retries or times out.
387
+ Example:
388
+ RF: fail fc4 uid1
389
+ The reason will also be available in msg.modbus.error on the output message.
390
+
391
+ `Queue activity (multiple devices)`
392
+ When multiple polls are triggered together, the status will “walk” through each device one at a time as the queue processes. This is normal and confirms the node is sequencing requests rather than blasting the bus.
393
+
394
+ ``Notes``
395
+
396
+ The (try x/y) indicator shows retry behaviour. For example try 2/3 means the first attempt failed and it is retrying.
397
+
398
+ If you see repeated red failures on a single device, it usually points to ID/address mismatch, wiring/RF link quality, or the poll rate being too aggressive for the link.
399
+
400
+
401
+ ---
402
+ ## RSSI (RF Signal Strength Diagnostic) ##
403
+
404
+ RSSI (Received Signal Strength Indicator) provides a live measurement of the RF signal strength between the PassPort and the remote Mako device when using the RF channel.
405
+
406
+ When enabled, the node performs an additional request to the LoRa module after each successful Modbus read. The returned signal strength (in dBm) is then appended to the output payload.
407
+
408
+ This allows you to:
409
+ - Verify RF link quality during installation
410
+ - Diagnose weak or marginal radio paths
411
+ - Confirm antenna alignment and placement
412
+ - Monitor signal health during maintenance
413
+ How to Enable
414
+ - Open the Bus configuration node (smithtek-mako-rf-bus).
415
+ - Select the RF channel.
416
+ - Tick the RSSI checkbox.
417
+ - Deploy.
418
+ - To disable RSSI, simply untick the checkbox and deploy again.
419
+
420
+
421
+ ## RSSI Output Behaviour (msg.payload) ##
422
+
423
+ When enabled:
424
+ RSSI is appended to the normal decoded payload (msg.payload).
425
+ It is added to the same JSON object generated by the Decoder map.
426
+ The property name is automatically derived from the node block name.
427
+
428
+ `RSSI Guard & Timeout Settings`
429
+
430
+ The RSSI feature includes two adjustable timing parameters to fine-tune how the LoRa module is queried after a Modbus poll.
431
+ In most installations.
432
+ `The default values (10ms guard / 100ms timeout) are ideal and do not require adjustment.
433
+
434
+ `RSSI Guard (ms)`
435
+
436
+ The RSSI Guard is the delay between the completed Modbus response and the RSSI request being sent to the LoRa module.
437
+ - This short pause ensures:
438
+ - The Modbus transaction has fully completed
439
+ - The UART buffer has settled
440
+ - The RF module is ready to respond cleanly
441
+
442
+ Typical range: 5–10ms
443
+ Default: 10ms
444
+
445
+ Lower values may work, but 10ms provides stable behaviour across most installations.
446
+
447
+ `RSSI Timeout (ms)`
448
+
449
+ The RSSI Timeout defines how long the system will wait for the LoRa module to respond with the RSSI value before aborting the request.
450
+ Default: 100ms
451
+
452
+ This is usually more than sufficient. Increasing the timeout:
453
+ Does not improve signal strength
454
+ Only increases the wait time if the module does not respond
455
+ The timeout should only be increased if diagnosing unusual behaviour on a slow or noisy link.
456
+
457
+ ## RSSI Practical Guidance ##
458
+
459
+ - Leave both values at default unless diagnosing an issue.
460
+ - Use RSSI primarily during install or maintenance.
461
+ - If RSSI is enabled permanently, keep guard low and timeout reasonable to avoid unnecessary bus slowdown.
462
+
463
+ In short, the defaults are tuned for real-world PassPort + Mako RF deployments and will suit almost every scenario.
464
+
465
+ ![SmithTek Control](https://github.com/smithtekIOT/ArtWork/blob/master/RSSI%20switch.png?raw=true)
466
+
467
+
468
+ ---
469
+ ## Polling Tips – Long Range RF ##
470
+
471
+ RF polling is different to hard-wired RS485. Even though it still looks like Modbus, the request and reply must travel through the radio link and be processed at both ends. That adds “time of flight” and a bit of overhead, so the fastest possible poll rate is always slower than RS485.
472
+
473
+ On the PassPort, the RF channel hides baud/parity/stop settings because the radio link is handled internally. What you control instead is the pacing: timeout, retries, gap, and your inject interval.
474
+
475
+ ``What slows RF down``
476
+
477
+ - Air link latency (packetising + radio turnaround)
478
+ - Retries when the link is marginal
479
+ - Bigger register reads (more bytes to move)
480
+ - Polling too frequently, causing requests to stack up
481
+ - Best practice for multiple Makos
482
+ - Polling should be treated as a “cycle”: each device gets a turn, one at a time.
483
+
484
+ Choose an inject interval that allows the whole device list to complete without building a backlog.
485
+ If you trigger multiple devices at once (single inject feeding multiple RF nodes), the queue will serialize them.
486
+
487
+ Cycle time rule (use this in your markdown)
488
+
489
+ `Cycle time ≈ (N × (typical RF transaction time + gap_s)), plus a bit of margin.`
490
+
491
+ ``Where:``
492
+ - N = number of RF devices
493
+ - typical RF transaction time = how long one poll normally takes (including reply)
494
+ - gap_s = the deliberate spacing you set between requests
495
+
496
+ ## Practical tuning tips ##
497
+
498
+ - Start conservative: increase speed only after you’ve proven stability.
499
+
500
+ - If you see timeouts, the first fix is usually: slow the cycle down (longer inject interval), not bigger timeouts.
501
+
502
+ - Keep read sizes sensible. Large reads are fine, but they raise transaction time, so the cycle must be longer.
503
+ - For RF, it’s usually better to have one inject per site (simple) but set the inject interval long enough that the queue clears every cycle.
504
+
505
+ - If you want “no backlog ever”, do not inject faster than the cycle time, otherwise requests will pile up behind the queue and devices will start timing out.
506
+ ---
507
+
508
+ ## RF Polling Guide (≈100 Bytes Per Device) ##
509
+
510
+ | RF Devices | Typical Per-Device Time (s) | Recommended Gap (s) | Safe Cycle Time (s) | Recommended Inject Interval |
511
+ |------------|----------------------------|---------------------|---------------------|-----------------------------|
512
+ | 1 | 1.5 | 0.5–1.0 | ~2–3 | 3 seconds |
513
+ | 2 | 1.5 | 0.5–1.0 | ~4–5 | 6 seconds |
514
+ | 3 | 1.5 | 0.5–1.0 | ~6–7 | 8–10 seconds |
515
+ | 4 | 1.5 | 0.5–1.0 | ~8–10 | 12 seconds |
516
+ | 5 | 1.5 | 0.5–1.0 | ~10–12 | 15 seconds |
517
+ | 6 | 1.5 | 0.5–1.0 | ~12–15 | 18 seconds |
518
+ | 7 | 1.5 | 0.5–1.0 | ~15–18 | 20 seconds |
519
+ | 8 | 1.5 | 0.5–1.0 | ~18–21 | 25 seconds |
520
+ | 9 | 1.5 | 0.5–1.0 | ~20–24 | 30 seconds |
521
+ | 10 | 1.5 | 0.5–1.0 | ~22–26 | 30–35 seconds |
522
+
523
+ `Important notes read below `
524
+
525
+ ## RF Spreading Factor Note ##
526
+
527
+ The above table is based on the default spreading factor of 1024.
528
+
529
+ At this setting, the transaction times shown are realistic for stable industrial polling with approximately 100 bytes per device.
530
+ If you increase the spreading factor for longer range transmission, the air time increases significantly.
531
+ As a simple rule:
532
+ Add at least 2 seconds per spreading step increase
533
+
534
+ Maximum spreading factor supported is 4096
535
+
536
+ Example:
537
+
538
+ - 1024 → use table values
539
+
540
+ - 2048 → add ~2 seconds to the recommended inject interval
541
+
542
+ - 4096 → add ~4 seconds to the recommended inject interval
543
+
544
+ Increasing spreading improves range and link robustness, but it reduces throughput. Always adjust your inject interval to suit the radio configuration to avoid queue build-up and timeouts.
545
+
546
+ In RF systems, range and stability always win over speed.
547
+
548
+ ---
549
+ # Troubleshooting Guide – Smithtek Mako RF Node
550
+
551
+ | Issue / Symptom | Possible Cause | Recommended Action |
552
+ |-----------------|---------------|--------------------|
553
+ | Red status: `fail fcX uidY` | Device ID mismatch | Confirm Device ID in Node-RED matches V-NET configuration |
554
+ | Red status: timeout | Polling too fast | Increase inject interval (slow the cycle time) |
555
+ | Red status: timeout | RF link marginal | Increase spreading factor or improve antenna alignment |
556
+ | Red status: timeout | Inject interval shorter than cycle time | Ensure inject interval is longer than full device cycle |
557
+ | Red status: timeout after working normally | Bus overloaded | Reduce number of devices per cycle or increase interval |
558
+ | Only first and last device polling | Queue dropping logic enabled | Disable aggressive queue dropping or increase maxQueue |
559
+ | Devices poll intermittently | Retries too high | Reduce retries to prevent blocking the queue |
560
+ | Devices stop polling after deploy | Serial port locked | Restart Node-RED or power cycle PassPort |
561
+ | Data values incorrect | Register order mismatch | Ensure V-NET Modbus table matches Node-RED decoder map exactly |
562
+ | 32-bit values incorrect | Wrong word order | Confirm correct 32-bit interpretation (float / unsigned / integer) |
563
+ | Digital bits incorrect | Bit index mismatch | Ensure correct bit number (0–15) selected in decoder |
564
+ | Write command not working | Wrong function code | Confirm FC5 for coil, FC6 for single register, FC15/16 for multiples |
565
+ | Write works but value wrong | Payload type mismatch | Ensure msg.payload is correct type (bool or number) |
566
+ | Write command appears successful but nothing changes | Writing to wrong register type | Confirm coil vs holding register mapping in V-NET |
567
+ | Queue growing continuously | Inject too fast | Increase inject interval |
568
+ | Random comms drops on RF | Spreading factor too low for range | Increase spreading factor (add time to cycle) |
569
+ | RF very slow but stable | High spreading factor | Increase inject interval accordingly |
570
+ | Works on RS485 but not RF | Wrong Bus selected | Confirm correct Bus channel assigned |
571
+ | RS485 unstable | Wiring issue | Check termination resistors and polarity (A/B swapped) |
572
+ | All devices fail at once | Bus configuration changed | Confirm baud rate, parity, stop bits match |
573
+ | Node shows “bus config missing” | Config node deleted | Reassign or recreate the Bus config |
574
+ | Node invisible / unknown type | HTML/JS syntax error | Check node installtion, reinstall or contact smithtek support |
575
+
576
+ ## Golden Rule
577
+
578
+ Always make your inject interval longer than your full device cycle time.
579
+
580
+ Cycle time ≈ (Number of devices × transaction time + gap).
581
+
582
+ If the inject interval is shorter than the cycle time, the queue will grow, timeouts will occur, and stability will suffer.
583
+
584
+ Slow and stable always beats fast and failing.
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+ ---
593
+ # License
594
+ Copyright (c) 2023 www.smithtek.com.au Licenced under the terms of the GPLv3
595
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
596
+ AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
597
+ THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
598
+ ARE DISCLAIMED. IN NO EVENT SHALL DAMIEN CLARK BE LIABLE FOR ANY DIRECT,
599
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
600
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
601
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
602
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
603
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
604
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
605
+
606
+ www.smithtek.com.au
607
+