node-red-contrib-tcp-client-server-avd 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,460 @@
1
+ # Specificatie: Node-RED TCP Client/Server Node
2
+
3
+ ## 1. Inleiding
4
+
5
+ Dit document beschrijft de specificatie voor een Node-RED node die in staat is om als TCP client en/of TCP server te functioneren. De node moet flexibel zijn en beide modi ondersteunen, zodat gebruikers TCP-communicatie kunnen implementeren in hun Node-RED flows.
6
+
7
+ ## 2. Doelstelling
8
+
9
+ Het doel is om een robuuste, gebruiksvriendelijke Node-RED node te ontwikkelen die:
10
+ - Fungeert als TCP client (uitgaande verbindingen)
11
+ - Fungeert als TCP server (inkomende verbindingen)
12
+ - Beide modi ondersteunt in één node
13
+ - Foutafhandeling en herconnectie biedt
14
+ - Verschillende dataformaten ondersteunt (string, buffer, JSON, etc.)
15
+ - Gebruikersvriendelijke configuratie heeft
16
+
17
+ ## 3. Functionele Eisen
18
+
19
+ ### 3.1 Algemene Functionaliteit
20
+
21
+ - De node moet configureerbaar zijn als client, server, of beide
22
+ - Ondersteuning voor zowel IPv4 als IPv6
23
+ - Mogelijkheid om meerdere verbindingen te beheren (server mode)
24
+ - Ondersteuning voor verschillende data encoding/decoding methoden
25
+ - Real-time status feedback (verbonden, verbroken, fout)
26
+
27
+ ### 3.2 TCP Client Mode
28
+
29
+ #### 3.2.1 Verbindingsbeheer
30
+ - Automatisch verbinden bij flow start (optioneel)
31
+ - Handmatig verbinden via input message
32
+ - Automatische herconnectie bij verbroken verbinding (configureerbaar)
33
+ - Configureerbare reconnect interval en max aantal pogingen
34
+ - Timeout configuratie voor connectiepogingen
35
+
36
+ #### 3.2.2 Data Transmissie
37
+ - Verzenden van data via input messages
38
+ - Ontvangen van data via output messages
39
+ - Ondersteuning voor verschillende dataformaten:
40
+ - String (verschillende encodings: UTF-8, ASCII, etc.)
41
+ - Buffer (raw binary data)
42
+ - JSON (geformatteerd)
43
+ - Hex string
44
+ - Configureerbare delimiter voor message framing (optioneel)
45
+ - Keep-alive optie
46
+
47
+ #### 3.2.3 Configuratie Opties
48
+ - Hostname of IP adres
49
+ - Poort nummer
50
+ - Protocol (TCP)
51
+ - Local address binding (optioneel)
52
+ - Local port binding (optioneel)
53
+ - Connection timeout
54
+ - Reconnect settings
55
+
56
+ ### 3.3 TCP Server Mode
57
+
58
+ #### 3.3.1 Server Beheer
59
+ - Server starten bij flow start (optioneel)
60
+ - Luisteren op geconfigureerde poort
61
+ - Accepteren van meerdere gelijktijdige client verbindingen
62
+ - Unieke identificatie van elke client verbinding
63
+ - Server stoppen via input message
64
+
65
+ #### 3.3.2 Data Transmissie
66
+ - Verzenden naar specifieke client of alle clients
67
+ - Ontvangen van data per client verbinding
68
+ - Zelfde dataformaat ondersteuning als client mode
69
+ - Client identificatie in output messages
70
+
71
+ #### 3.3.3 Configuratie Opties
72
+ - Luister poort
73
+ - Bind address (standaard: alle interfaces)
74
+ - Max aantal gelijktijdige verbindingen
75
+ - Connection timeout voor client verbindingen
76
+ - Data formatting opties
77
+
78
+ ### 3.4 Gecombineerde Mode (Client + Server)
79
+
80
+ - Mogelijkheid om zowel client als server functionaliteit te gebruiken
81
+ - Aparte configuratie voor client en server delen
82
+ - Onafhankelijke status voor beide modi
83
+
84
+ ## 4. Message Structure
85
+
86
+ ### 4.1 Input Messages (naar Node)
87
+
88
+ #### 4.1.1 Client Mode - Verbinding Beheer
89
+ ```javascript
90
+ // Verbinden
91
+ { topic: "connect" }
92
+
93
+ // Verbreken
94
+ { topic: "disconnect" }
95
+
96
+ // Data verzenden
97
+ {
98
+ topic: "send",
99
+ payload: "data om te verzenden" // string, buffer, of object
100
+ }
101
+ ```
102
+
103
+ #### 4.1.2 Server Mode - Server Beheer
104
+ ```javascript
105
+ // Server starten
106
+ { topic: "start" }
107
+
108
+ // Server stoppen
109
+ { topic: "stop" }
110
+
111
+ // Data verzenden naar specifieke client
112
+ {
113
+ topic: "send",
114
+ clientId: "client-unique-id",
115
+ payload: "data om te verzenden"
116
+ }
117
+
118
+ // Data verzenden naar alle clients
119
+ {
120
+ topic: "broadcast",
121
+ payload: "data om te verzenden"
122
+ }
123
+ ```
124
+
125
+ ### 4.2 Output Messages (van Node)
126
+
127
+ #### 4.2.1 Client Mode
128
+ ```javascript
129
+ // Verbindingsstatus
130
+ {
131
+ topic: "status",
132
+ payload: "connected" | "disconnected" | "error",
133
+ status: "connected" | "disconnected" | "error",
134
+ error: "error message (indien van toepassing)"
135
+ }
136
+
137
+ // Ontvangen data
138
+ {
139
+ topic: "data",
140
+ payload: "ontvangen data",
141
+ timestamp: "ISO timestamp"
142
+ }
143
+ ```
144
+
145
+ #### 4.2.2 Server Mode
146
+ ```javascript
147
+ // Server status
148
+ {
149
+ topic: "status",
150
+ payload: "listening" | "stopped" | "error",
151
+ port: 1234,
152
+ error: "error message (indien van toepassing)"
153
+ }
154
+
155
+ // Client verbinding
156
+ {
157
+ topic: "client/connected",
158
+ clientId: "unique-client-id",
159
+ remoteAddress: "client-ip",
160
+ remotePort: "client-port"
161
+ }
162
+
163
+ // Client verbreking
164
+ {
165
+ topic: "client/disconnected",
166
+ clientId: "unique-client-id"
167
+ }
168
+
169
+ // Ontvangen data
170
+ {
171
+ topic: "data",
172
+ payload: "ontvangen data",
173
+ clientId: "unique-client-id",
174
+ remoteAddress: "client-ip",
175
+ timestamp: "ISO timestamp"
176
+ }
177
+ ```
178
+
179
+ ## 5. Node Configuratie UI
180
+
181
+ ### 5.1 Basis Configuratie
182
+
183
+ #### Mode Selectie
184
+ - **Type**: Dropdown selectie
185
+ - **Opties**:
186
+ - "TCP Client"
187
+ - "TCP Server"
188
+ - "TCP Client & Server"
189
+ - **Standaard**: "TCP Client"
190
+
191
+ #### Node Name
192
+ - Standaard Node-RED node naam veld
193
+ - Optioneel label voor UI
194
+
195
+ ### 5.2 Client Configuratie (indien client mode actief)
196
+
197
+ #### Verbindings Instellingen
198
+ - **Host**: Text input (standaard: "localhost")
199
+ - **Port**: Number input (standaard: 8080)
200
+ - **Protocol**: Read-only (TCP)
201
+ - **IPv4/IPv6**: Toggle (standaard: IPv4)
202
+
203
+ #### Verbindings Gedrag
204
+ - **Auto Connect**: Checkbox (standaard: true)
205
+ - **Reconnect**: Checkbox (standaard: true)
206
+ - **Reconnect Interval**: Number input in seconden (standaard: 5)
207
+ - **Max Reconnect Attempts**: Number input (standaard: 0 = oneindig)
208
+ - **Connection Timeout**: Number input in seconden (standaard: 10)
209
+
210
+ #### Data Instellingen
211
+ - **Input Format**: Dropdown
212
+ - "String"
213
+ - "Buffer"
214
+ - "JSON"
215
+ - "Hex String"
216
+ - **Output Format**: Dropdown (zelfde opties)
217
+ - **Encoding**: Dropdown (UTF-8, ASCII, Latin1, etc.) - alleen voor string format
218
+ - **Message Delimiter**: Text input (optioneel, voor message framing)
219
+ - **Keep-Alive**: Checkbox (standaard: false)
220
+
221
+ ### 5.3 Server Configuratie (indien server mode actief)
222
+
223
+ #### Server Instellingen
224
+ - **Listen Port**: Number input (standaard: 8080)
225
+ - **Bind Address**: Text input (standaard: "0.0.0.0" = alle interfaces)
226
+ - **Protocol**: Read-only (TCP)
227
+ - **IPv4/IPv6**: Toggle (standaard: IPv4)
228
+
229
+ #### Verbindings Beheer
230
+ - **Auto Start**: Checkbox (standaard: true)
231
+ - **Max Connections**: Number input (standaard: 0 = onbeperkt)
232
+ - **Connection Timeout**: Number input in seconden (standaard: 600)
233
+ - **Keep-Alive**: Checkbox (standaard: false)
234
+
235
+ #### Data Instellingen
236
+ - **Input Format**: Dropdown (zelfde als client)
237
+ - **Output Format**: Dropdown (zelfde als client)
238
+ - **Encoding**: Dropdown (zelfde als client)
239
+ - **Message Delimiter**: Text input (optioneel)
240
+
241
+ ## 6. Status Weergave
242
+
243
+ ### 6.1 Status Iconen en Kleuren
244
+
245
+ #### Client Mode
246
+ - **Groen (verbonden)**: Succesvol verbonden met server
247
+ - **Rood (fout)**: Verbindingsfout of verbreken
248
+ - **Grijs (niet verbonden)**: Niet verbonden
249
+ - **Geel (verbinden)**: Verbinding wordt tot stand gebracht
250
+
251
+ #### Server Mode
252
+ - **Groen (luisterend)**: Server luistert actief op poort
253
+ - **Rood (gestopt/fout)**: Server is gestopt of fout opgetreden
254
+ - **Blauw (actief)**: Server actief met X verbindingen
255
+
256
+ ### 6.2 Status Tekst
257
+ - Dynamische status tekst onder het node icoon
258
+ - Toon relevante informatie (IP:Port, aantal verbindingen, etc.)
259
+
260
+ ## 7. Foutafhandeling
261
+
262
+ ### 7.1 Client Mode Fouten
263
+ - **Connection refused**: Server niet bereikbaar
264
+ - **Connection timeout**: Timeout bij verbinden
265
+ - **Network error**: Netwerkproblemen
266
+ - **Socket closed**: Verbinding gesloten door server
267
+ - **Invalid data format**: Data formaat fout
268
+
269
+ ### 7.2 Server Mode Fouten
270
+ - **Port in use**: Poort al in gebruik
271
+ - **Permission denied**: Geen rechten om op poort te luisteren
272
+ - **Bind error**: Fout bij binden aan adres
273
+ - **Client connection error**: Fout bij accepteren client
274
+
275
+ ### 7.3 Error Messages
276
+ - Alle fouten moeten worden gemeld via output messages
277
+ - Status node moet foutstatus tonen
278
+ - Optioneel: error logging naar console
279
+
280
+ ## 8. Technische Details
281
+
282
+ ### 8.1 Implementatie
283
+ - Gebruik Node.js `net` module voor TCP functionaliteit
284
+ - Node-RED node development framework gebruiken
285
+ - Asynchrone I/O voor betere performance
286
+ - Event-driven architecture
287
+
288
+ ### 8.2 Dependencies
289
+ - Node.js `net` module (built-in)
290
+ - Node-RED runtime
291
+ - EventEmitter patterns
292
+
293
+ ### 8.3 Performance Overwegingen
294
+ - Efficiënte buffer handling
295
+ - Memory management voor lange verbindingen
296
+ - Throttling opties voor hoge data volumes
297
+ - Connection pooling waar mogelijk
298
+
299
+ ### 8.4 Security Overwegingen
300
+ - Input validation
301
+ - Rate limiting opties (toekomstig)
302
+ - TLS/SSL ondersteuning (toekomstig, indien gewenst)
303
+ - Sanitize user input voor veiligheid
304
+
305
+ ### 8.5 Package Structuur
306
+ - **Package naam**: `node-red-contrib-tcp-client-server-avd`
307
+ - **Node type**: `tcp-client-server-avd`
308
+ - **Bestandsstructuur**:
309
+ ```
310
+ node-red-contrib-tcp-client-server-avd/
311
+ ├── package.json
312
+ ├── README.md
313
+ ├── SPECIFICATIE.md
314
+ └── nodes/
315
+ ├── tcp-client-server-avd.js
316
+ └── tcp-client-server-avd.html
317
+ ```
318
+ - **package.json configuratie**:
319
+ - `main`: "nodes/tcp-client-server-avd.js"
320
+ - `node-red.nodes`: verwijst naar "nodes/tcp-client-server-avd.js"
321
+ - Node-RED vindt automatisch het HTML bestand met dezelfde naam
322
+ - `files` veld specificeert welke bestanden in het package worden opgenomen
323
+
324
+ ## 9. Gebruiksvoorbeelden
325
+
326
+ ### 9.1 Basis TCP Client
327
+ ```
328
+ Input → TCP Client Node → Output
329
+ - Client verbindt automatisch met server
330
+ - Verzendt data van input
331
+ - Output ontvangen data
332
+ ```
333
+
334
+ ### 9.2 Basis TCP Server
335
+ ```
336
+ TCP Server Node → Output
337
+ - Server start automatisch
338
+ - Luistert op poort 8080
339
+ - Output ontvangen data van clients
340
+ ```
341
+
342
+ ### 9.3 Client met Reconnect
343
+ ```
344
+ Input → TCP Client (met reconnect) → Output
345
+ - Automatische herconnectie bij verbreken
346
+ - Reconnect interval: 5 seconden
347
+ - Max attempts: oneindig
348
+ ```
349
+
350
+ ### 9.4 Server met Meerdere Clients
351
+ ```
352
+ TCP Server → Function Node → TCP Server
353
+ - Server ontvangt data van meerdere clients
354
+ - Function node verwerkt data
355
+ - Verzendt response terug naar specifieke client
356
+ ```
357
+
358
+ ## 10. Toekomstige Uitbreidingen (Optioneel)
359
+
360
+ - TLS/SSL ondersteuning voor beveiligde verbindingen
361
+ - UDP protocol ondersteuning
362
+ - WebSocket ondersteuning
363
+ - Serial port ondersteuning
364
+ - Data transformation nodes (JSON, XML, etc.)
365
+ - Rate limiting en throttling
366
+ - Connection statistics en monitoring
367
+ - Message queue voor offline scenarios
368
+ - Compression ondersteuning
369
+
370
+ ## 11. Test Scenario's
371
+
372
+ ### 11.1 Client Mode Tests
373
+ - Verbinden met geldige server
374
+ - Verbinden met ongeldige server (foutafhandeling)
375
+ - Data verzenden en ontvangen
376
+ - Automatische reconnect functionaliteit
377
+ - Verbinding verbreken en handmatig reconnecten
378
+ - Verschillende dataformaten testen
379
+
380
+ ### 11.2 Server Mode Tests
381
+ - Server starten en stoppen
382
+ - Meerdere clients accepteren
383
+ - Data ontvangen en verzenden per client
384
+ - Broadcast naar alle clients
385
+ - Server restart met actieve verbindingen
386
+ - Max connections limiet
387
+
388
+ ### 11.3 Integratie Tests
389
+ - Client-Server communicatie
390
+ - Lange verbindingen (stability)
391
+ - Hoge data volumes
392
+ - Foutscenario's (netwerk onderbrekingen)
393
+ - Performance onder belasting
394
+
395
+ ## 12. Documentatie Vereisten
396
+
397
+ - README met installatie instructies
398
+ - Gebruikershandleiding met voorbeelden
399
+ - API documentatie voor message formaten
400
+ - Troubleshooting gids
401
+ - Change log voor versies
402
+
403
+ ### 12.1 Installatie Methoden
404
+
405
+ #### Via npm (aanbevolen)
406
+ ```bash
407
+ npm install node-red-contrib-tcp-client-server-avd
408
+ ```
409
+
410
+ #### Via Node-RED Manage Palette (tgz bestand)
411
+ 1. Open Node-RED webinterface
412
+ 2. Ga naar Menu → Manage palette
413
+ 3. Klik op Install tab
414
+ 4. Upload het `.tgz` bestand of geef het pad op
415
+ 5. Klik op Install
416
+
417
+ #### Handmatige installatie
418
+ 1. Download of clone het project
419
+ 2. Kopieer de map naar Node-RED `nodes` directory (`~/.node-red/nodes/`)
420
+ 3. Installeer dependencies: `npm install`
421
+ 4. Herstart Node-RED
422
+
423
+ ### 12.2 Package Distributie
424
+ - Het package wordt gedistribueerd als `.tgz` bestand
425
+ - Gebruik `npm pack` om een distributie-bestand te maken
426
+ - Het package bevat alleen essentiële bestanden (nodes/, README.md)
427
+ - Bestandsnamen moeten consistent zijn met de node type naam
428
+
429
+ ## 13. Versie Beheer
430
+
431
+ ### Versie 1.0.0 (Initieel)
432
+ - Basis TCP client functionaliteit
433
+ - Basis TCP server functionaliteit
434
+ - String en Buffer data formaten
435
+ - Basis foutafhandeling
436
+ - JSON en Hex format ondersteuning
437
+ - Geavanceerde reconnect logica
438
+ - Message delimiter ondersteuning
439
+ - Keep-alive optie
440
+ - IPv4 en IPv6 ondersteuning
441
+ - Meerdere client verbindingen (server mode)
442
+ - Package structuur geoptimaliseerd voor Node-RED installatie:
443
+ - Bestandsnamen aangepast naar `tcp-client-server-avd.js/html` voor consistentie
444
+ - `package.json` bijgewerkt met `main` en `files` velden
445
+ - Node configuratie vereenvoudigd (automatische HTML detectie)
446
+ - Distributie via `npm pack` voor correcte package structuur
447
+
448
+ ### Toekomstige Versies
449
+ - Performance verbeteringen
450
+ - TLS/SSL ondersteuning
451
+ - Rate limiting en throttling
452
+ - Connection statistics en monitoring
453
+ - Message queue voor offline scenarios
454
+ - Compression ondersteuning
455
+
456
+ ---
457
+
458
+ **Document Versie**: 1.1
459
+ **Laatste Update**: Januari 2025
460
+ **Status**: Actueel