• MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 16:40

Het Grote Victron Node Red Topic.

InhoudsopgaveNuttige links in andere topics

Inleiding
Show Topic en Show Payload
Een Watchdog functie. Gaat alles nog goed?
Manage Palette - Node Red Uitbreidingen beheren
Informatie over het Operating Systeem

Versturen van E-mail vanuit Node Red
Inleiding
Ik neem deel aan verschillende topics waarin ik ideeën plaats voor software toepassingen voor Victron systemen. Veel van deze suggesties zijn gemaakt met behulp van Node Red.

Soms krijg ik vragen om toe te lichten hoe ik iets bepaalds gemaakt heb.

Ik wil nu en in de toekomst zulke toelichtingen met uitleg in dit topic publiceren. In dit start-topic neem ik dan een inhoudsopgave op met de besproken onderwerpen.

Vragen zijn natuurlijk welkom.
Ik zal mijn best doen deze te beantwoorden voor zover dit binnen mijn kennisgebied valt.

* Werk in uitvoering *

[ Voor 55% gewijzigd door MJ de Bruijn op 01-12-2025 12:53 ]


  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 16:40

Show Topic en Show Payload



In uitgebreide flows is het soms prettig om te kunnen zien welke gegevens Nodes naar elkaar versturen.
Ik heb hiervoor twee Subflows gemaakt die de binnenkomende gegevens tonen en ongewijzigd weer doorsturen.

Om dit te testen kun je de vlogende flow maken:

Afbeeldingslocatie: https://tweakers.net/i/axCMdHoQ2NihnRYPrsC-HcFBnxo=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/xpynpng48AnP994I8IiaaT7i.jpg?f=user_large

Subflow Show Topic plaatst de inhoud van een bericht samen met de actuele tijd in het opmerkingen veld en stuurt het bericht ongewijzigd verder.
Subflow Show Payload doet hetzelfde maar toont tevens de Payload van het bericht. Dit is alleen zinvol bij (te verwachten) korte lengte van de Payload.

Het maken van de Subflows gaat als volgt:

Maak een functie-node aan en plaats daar het volgende Javascript programma in:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const Now = new Date();
let NowTime = ("0" + Now.getHours()).slice(-2) + ":"
                + ("0" + Now.getMinutes()).slice(-2) + ":"
                + ("0" + Now.getSeconds()).slice(-2) ;


msgState = { topic:'state', 
             payload: "@ " + NowTime + ": "+ msg.topic,
             shape: "dot",
             color: "grey"
};

node.send( [msg, msgState] );

node.done;

Selecteer deze functie node en kies dan in het hamburger menu (zo worden de drie streepjes rechtsboven genoemd)
Flows --> Selection to Subflow.

De zojuist gemaakte functie is nu in een Subflow geplaatst. Kijk in de linker kolom bovenaan.
Houd de muis boven de nieuwe subflow tot het optie-scherm uitklapt en klik op wijzigen.

Afbeeldingslocatie: https://tweakers.net/i/GC3ACNaQq8-CARJiX0vOKan0_sE=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/tcFPrlwP1wSxMBEdp7Jm4cjo.jpg?f=user_large

Wijzig de instellingen als volgt:

Afbeeldingslocatie: https://tweakers.net/i/8i4EV6t19UglmRckpxVRsMPsVXo=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/nUbqvKLzDyxldVgOYvDwItgx.jpg?f=user_large

Op overeenkomstige wijze heb ik een Subflow gemaakt om naast de naam van het bericht (het Topic) ook de inhoud (de Payload) te tonen. Deze is vrijwel identiek aan de hiervoor beschreven Subflow. Alleen is de payload aan de state-tekst toegevoegd.

Maak opnieuw een functie-node met de volgende Javascript code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const Now = new Date();
let NowTime = ("0" + Now.getHours()).slice(-2) + ":"
                + ("0" + Now.getMinutes()).slice(-2) + ":"
                + ("0" + Now.getSeconds()).slice(-2) ;

msgState = { topic:'state', 
             payload: "@ " + NowTime + ": "+ msg.topic + ": " + msg.payload,
             shape: "dot",
             color: "grey"
};

node.send( [msg, msgState] );

node.done;

Selecteer de gemaakte functie node, maak er via het hamburger menu opnieuw een (andere) Subflow van met één input node, één output node en een status node. Om in een flow zo min mogelijk ruimte in de nemen heb ik deze Subflow slechts 'Show' genoemd.

In het voorbeeld moeten de twee Nodes geactiveerd worden met een Inject Node.

Dit is de Inject Node voor het testen:

Afbeeldingslocatie: https://tweakers.net/i/luiYEK4Y84UjvZKktEI4aQuSlxM=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/AqDO71eKAHNghmkcMOOPezoW.jpg?f=user_large

Als het allemaal volgens plan is gegaan moet dit het resultaat zijn.

Afbeeldingslocatie: https://tweakers.net/i/tlfFEDf5Vtlb1jKb7vkIr4J9ap8=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/FbFxR34TqIpfcK29AnXEJbeK.jpg?f=user_large

[ Voor 111% gewijzigd door MJ de Bruijn op 29-11-2025 20:00 ]


  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 16:40

Een waakhond kijkt of alles goed werkt



In een operationele omgeving moeten sommige flows periodiek een handeling uitvoeren.
Wanneer dit niet (meer) goed gaat is het plezierig om daarover te worden geïnformeerd.
Ikzelf gebruik hiervoor e-mail en soms (bij urgente gevallen) een alarmbel die via Home Assistant wordt aangestuurd.
Natuurlijk kun je hiervoor ook een relais van een Multiplus of een Cerbo gebruiken om een bel te laten rinkelen.
Dit bewaken gaat via een methode die ik Watchdog noem.

Voor zo'n Watchdog functie gebruik ik een Trigger Node.
Zolang de Trigger Node nieuwe berichten ontvangt zal deze niets doen. Echter als de Trigger Node gedurende een (instelbare) tijd geen berichten meer ontvangt zal deze een speciaal bericht doorsturen. Dit kan een E-mail zijn of een start-bericht voor een attentie- of een alarm-procedure.

Afbeeldingslocatie: https://tweakers.net/i/jOEzHJML2MsT1FQ6br26KZUa5qA=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/lQKD1xdgw5of8asE6K9BQEro.jpg?f=user_large

De Trigger Node hiervan wordt als volgt ingesteld:

Afbeeldingslocatie: https://tweakers.net/i/KBy8MuzXmB6N6ggcbRbnBUzUWx8=/x800/filters:strip_icc():strip_exif()/f/image/9PR7LVMwmUOOwM9l8yVrTkUJ.jpg?f=fotoalbum_large

Als alle voorgaande handelingen (deze zijn niet in dit voorbeeld opgenomen) goed gaan komt iedere tien seconden een bericht binnen en wordt de timer steeds opnieuw ingesteld.
Maar, als er een minuut lang geen nieuwe berichten binnenkomen zal de Trigger Node actief worden en een bericht verzenden op de onderste uitgang.
Via een Link Out Node wordt deze gestuurd naar een E-mail node en een andere Flow die alarmen afhandelt.

Een andere methode

Een andere methode is om gebruik te maken van een apart start-bericht en een apart stop-bericht Een Trigger Node wordt dan gestart door een binnenkomend bericht en kan worden gereset/gestopt door een specifiek soort (ander) bericht.

Hierbij kan worden bezien of een bepaalde Flow binnen een bepaalde periode een relevant bericht verstuurt.

Neem dit voorbeeld:

Afbeeldingslocatie: https://tweakers.net/i/Yv3Tv7Y7pKXNaobVVcntjWG_b_8=/800x/filters:strip_icc():strip_exif()/f/image/oioZbqbxSUrK24AsWNk9IWkJ.jpg?f=fotoalbum_large

Ook hier is er een functie Node (of een hele serie andere Nodes) die regelmatig een resultaat produceert. Er moet bijvoorbeeld tenminste één keer per uur extern gegevens worden opgehaald en die gegevens moeten inhoud hebben.
Als de gegevens niet kunnen worden opgehaald, of als er iets anders fout gaat, is het resultaat NULL.

De Switch node onderzoekt de payload en stelt vast of deze NULL is of niet.

Afbeeldingslocatie: https://tweakers.net/i/bu5appprrOk2C31jGpDnKAe_rVM=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/69mE8Gfihi2X8R72NOJeubQj.jpg?f=user_large

Als de Switch Node inderdaad NULL is zal de Trigger Node worden geactiveerd. Deze gaat 65 minuten wachten. Deze tijd is instelbaar.

In de tussentijd gaan andere processen gewoon door en zal het systeem bijvoorbeeld proberen de benodigde gegevens alsnog op te halen, wellicht iedere minuut of om het kwartier, of een uur later.
Als dit succesvol is zal de Switch Node dit vaststellen en een bericht sturen via de onderste uitgang ('otherwise') . Dit bericht activeert een Change Node die de waarde reset in het bericht activeert ('true'). Wanneer dit bericht, met msg.reset = true, bij de Trigger Node binnenkomt zal deze worden gereset en weer gaan slapen.

Afbeeldingslocatie: https://tweakers.net/i/ZGJc0Givf9Pc9_EiWKlbJ3UjI90=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/tbl2ApJSi5wbdPABGXUGsADB.jpg?f=user_large

Echter, als er geen msg.reset binnenkomt zal de Trigger Node na 65 minuten een bericht uitsturen via de onderste uitgang. Hiermee kan (via een Link Out Node) een E-mail bericht worden gezonden of een Alarm procedure worden gestart.

Voor de controle kan in de Switch Node natuurlijk een heel ander soort vergelijking worden toegepast. Ook kan de reset op een andere plaats inde flow worden geactiveerd.

[ Voor 100% gewijzigd door MJ de Bruijn op 29-11-2025 20:01 ]


  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 16:40

Palette beheren - uitbreidingen van Node Red



Voor Node Red zijn veel uitbreidingen van de functionaliteit beschikbaar. Deze kunnen worden toegevoegd aan het zogenaamde Palette. Dat is de kolom aan de linkerzijde van het scherm waarin de beschikbare Nodes worden aangeboden.

Als je een Palette op het oog hebt, bijvoorbeeld omdat dit benodigd is voor een toepassing die je wilt maken, moet je gebruik maken van de Palette Manager. Deze vindt je onder het hamburger-menu (zo wordt dat genoemd) rechtsboven in het scherm.
Afbeeldingslocatie: https://tweakers.net/i/GX0kxNxqBh-yoB-ByPiBUpYtWoA=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/Xc39lxO9OgqxmZIThpJUwkMY.jpg?f=user_large

Je krijgt dan een 'User Settings' scherm te zien waarin je het gewenste Palette kunt opzoeken.
Afbeeldingslocatie: https://tweakers.net/i/Z0NyhUXA0cPRc0ltGIltpqEQQMA=/800x/filters:strip_icc():strip_exif()/f/image/55aTlDO4z2jHeHS4xjS2cxn8.jpg?f=fotoalbum_large

Selecteer het gewenste Palette en klik op Install. In dit voorbeeld heb ik gekozen voor een palette dat informatie geeft over het platform waar de software op draait. In geval van een Victron installatie zal dat bijvoorbeeld een Cerbo zijn.

Als dit succesvol is gegaan vind je de nieuwe nodes in de kolom aan de linkerzijde van het scherm.
Afbeeldingslocatie: https://tweakers.net/i/X1UB5Gl_a0Db0vUCqVHRE5iB1rU=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/uXh8tr2trjKWy3uB5d0N9Coz.jpg?f=user_large

Voor een toepassing hiervan, zie het volgende topic.


  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 16:40

Informatie over het Operating System

Soms is het interessant om te weten hoe je 'hardware' functioneert, bijvoorbeeld om te zien of er een hoge belasting is of gewoon omdat je nieuwsgierig bent.
Node Red heeft een uitbreiding die dit voor je regelt: 'node-red-contrib-os'. Dit is een Palette uitbreiding.
Hoe je dit installeert lees je hier: Palette beheren - Uitbreidingen van Node Red

Ik heb de informatie-nodes aan elkaar geknoopt. Ik noem dit 'Flow CPU'.

Afbeeldingslocatie: https://tweakers.net/i/WApzjFhq9CNyXNljiKLanf1LXG8=/800x/filters:strip_icc():strip_exif()/f/image/f1bRLN35u9PJ4KgCtXdEsSaY.jpg?f=fotoalbum_large

Je sleept de gewenste Nodes naar je canvas en... daar zijn ze dan. Je kunt er niets aan instellen. Als je ze activeert met een input-bericht leveren ze hun informatie af in een output-bericht. Dat is alles.

Om de resultaten verzameld te kunnen gebruiken verzamel ik de uitvoer van iedere Node eerst in de context global geheugenruimte.
Afbeeldingslocatie: https://tweakers.net/i/XEC0AeTk3yN6x3eyuoEksFUFzyA=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/mfZy9UJju3UH7JRl9Eia5Auo.jpg?f=user_large

Ik gebruik hiervoor een bepaalde groepering. Zo'n groepering wordt bepaald door de naam. Punten zijn de scheidings-tekens.
In dit voorbeeld schrijf is naar global.Trace.CPU.OS.
Trace is hier de hoofd-groep. Ik verzamel meerdere series resultaten van verwerkingen onder deze groep. De verzamel-groep van de systeem-informatie heb ik CPU genoemd. Alle individuele items zijn daaronder opgenomen.
Afbeeldingslocatie: https://tweakers.net/i/2PrtdPbCakY1D2W5zVNqcwjanqY=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/zkicXj5D9XTVr1jPxRJ9gKw2.jpg?f=user_large

Ik heb aldus voor de zeven informatie-Nodes zeven stuks set global.Trace.CPU.xxx gemaakt. Zie de Flow hierboven als voorbeeld.
Om het resultaat eenvoudige te kunnen verwerken haal ik het totaal-resultaat op met een Change Node (zie Node 'change: 2 rules'):

Afbeeldingslocatie: https://tweakers.net/i/Xj_zIXt4-Qht_uf0tClm75vS67E=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/mtC7e5YjbHTka4TncTDdt6FF.jpg?f=user_large

Omdat ik hier alleen de Hoofd-groep (Trace) met de sub-groep (CPU) ophaal worden de zeven detail-groepen als één geheel opgehaald.

Met een (standaard beschikbare) JSON Node formatteer ik het resultaat tot een overzichtelijke uitvoer.

Afbeeldingslocatie: https://tweakers.net/i/aDixp8p3IvCUn7AEsJuCv59gzWY=/fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():strip_exif()/f/image/GJFNgTGAZYvBXXh4J1iagwTC.jpg?f=user_large

Het resultaat zend ik naar een Debug-Node om rechts in het Debug-scherm te tonen. Helaas beperkt dit zich tot maximaal zo'n 1000 tekens.
Daarom stuur ik dit ook via een link out node naar een Flow die het resulaat als een e-mail naar mijzelf stuurt.

Afbeeldingslocatie: https://tweakers.net/i/iPvAvlr1j32-doVi9GlnnZ-PFpA=/x800/filters:strip_icc():strip_exif()/f/image/oWb7xpmVrmFgzKHVgyMcVzgu.jpg?f=fotoalbum_large

Dit is de Flow CPU:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
[
    {
        "id": "39d049ad8f43d331",
        "type": "tab",
        "label": "CPU",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "d4fb5b97af7c2748",
        "type": "OS",
        "z": "39d049ad8f43d331",
        "name": "",
        "x": 274,
        "y": 112,
        "wires": [
            [
                "33ca50d2c7ee5d3c"
            ]
        ]
    },
    {
        "id": "e2bae797ee6d384d",
        "type": "Drives",
        "z": "39d049ad8f43d331",
        "name": "",
        "x": 274,
        "y": 256,
        "wires": [
            [
                "9babce14bdf39283"
            ]
        ]
    },
    {
        "id": "21ffcdbddca1bcf1",
        "type": "Uptime",
        "z": "39d049ad8f43d331",
        "name": "",
        "x": 284,
        "y": 208,
        "wires": [
            [
                "60356f35936784c5"
            ]
        ]
    },
    {
        "id": "04b847bb55b75c14",
        "type": "CPUs",
        "z": "39d049ad8f43d331",
        "name": "",
        "x": 274,
        "y": 304,
        "wires": [
            [
                "d0639ce848fae88c"
            ]
        ]
    },
    {
        "id": "59cf15347c8aacf8",
        "type": "Loadavg",
        "z": "39d049ad8f43d331",
        "name": "",
        "x": 284,
        "y": 160,
        "wires": [
            [
                "fe5c0be152ed4602"
            ]
        ]
    },
    {
        "id": "880d6b17efac3841",
        "type": "Memory",
        "z": "39d049ad8f43d331",
        "name": "",
        "scale": "Byte",
        "x": 284,
        "y": 352,
        "wires": [
            [
                "f9e0facc9f3a58d9"
            ]
        ]
    },
    {
        "id": "29060d904642a765",
        "type": "NetworkIntf",
        "z": "39d049ad8f43d331",
        "name": "",
        "x": 294,
        "y": 400,
        "wires": [
            [
                "489ff608773065ee"
            ]
        ]
    },
    {
        "id": "64282beb51f26ae5",
        "type": "inject",
        "z": "39d049ad8f43d331",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 116,
        "y": 112,
        "wires": [
            [
                "d4fb5b97af7c2748"
            ]
        ]
    },
    {
        "id": "33ca50d2c7ee5d3c",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.OS",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 506,
        "y": 112,
        "wires": [
            [
                "59cf15347c8aacf8"
            ]
        ]
    },
    {
        "id": "fe5c0be152ed4602",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.LoadAvg",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 526,
        "y": 160,
        "wires": [
            [
                "21ffcdbddca1bcf1"
            ]
        ]
    },
    {
        "id": "60356f35936784c5",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.Uptime",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 520,
        "y": 208,
        "wires": [
            [
                "e2bae797ee6d384d"
            ]
        ]
    },
    {
        "id": "9babce14bdf39283",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.Drives",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 520,
        "y": 256,
        "wires": [
            [
                "04b847bb55b75c14"
            ]
        ]
    },
    {
        "id": "d0639ce848fae88c",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.CPUs",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 520,
        "y": 304,
        "wires": [
            [
                "880d6b17efac3841"
            ]
        ]
    },
    {
        "id": "f9e0facc9f3a58d9",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.Memory",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 530,
        "y": 352,
        "wires": [
            [
                "29060d904642a765"
            ]
        ]
    },
    {
        "id": "489ff608773065ee",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Trace.CPU.Network",
                "pt": "global",
                "to": "payload",
                "tot": "msg",
                "dc": true
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 530,
        "y": 400,
        "wires": [
            [
                "961b20ea3680fd37"
            ]
        ]
    },
    {
        "id": "961b20ea3680fd37",
        "type": "change",
        "z": "39d049ad8f43d331",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "Trace.CPU",
                "tot": "global",
                "dc": true
            },
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Victron CPU",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 304,
        "y": 448,
        "wires": [
            [
                "664f8c78650ed342"
            ]
        ]
    },
    {
        "id": "f8560d60adc50a77",
        "type": "debug",
        "z": "39d049ad8f43d331",
        "name": "CPU",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 450,
        "y": 496,
        "wires": []
    },
    {
        "id": "664f8c78650ed342",
        "type": "json",
        "z": "39d049ad8f43d331",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": true,
        "x": 274,
        "y": 496,
        "wires": [
            [
                "f8560d60adc50a77",
                "64746de41bdb0cf1"
            ]
        ]
    },
    {
        "id": "64746de41bdb0cf1",
        "type": "link out",
        "z": "39d049ad8f43d331",
        "name": "CPU to Email",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 417,
        "y": 544,
        "wires": []
    }
]

[ Voor 71% gewijzigd door MJ de Bruijn op 01-12-2025 12:54 ]