node-red-contrib-event-calc 3.3.6 → 3.3.15

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,516 @@
1
+ [
2
+ {
3
+ "id": "opcua-alarm-flow",
4
+ "type": "tab",
5
+ "label": "OPC UA Alarm Example",
6
+ "disabled": false,
7
+ "info": "Demonstrates the event-alarm node with an OPC UA Alarm Simulation Server.\n\nPrerequisites:\n1. Install node-red-contrib-opcua\n2. Run the alarm_sim_server.py (pip install asyncua)\n3. Deploy this flow\n\nThe flow reads ActiveState_Id from 6 simulated alarms via OPC UA,\npushes them into the event cache, and uses event-alarm nodes to\ntrack the full alarm lifecycle (Raised > Ack > Cleared > Resolved)."
8
+ },
9
+ {
10
+ "id": "alarm-cache",
11
+ "type": "event-cache",
12
+ "name": "Alarm Cache",
13
+ "maxEntries": "10000",
14
+ "ttl": "0"
15
+ },
16
+ {
17
+ "id": "comment-opcua-title",
18
+ "type": "comment",
19
+ "z": "opcua-alarm-flow",
20
+ "name": "OPC UA Alarm Simulation - Event Alarm Demo",
21
+ "info": "Connect to opc.tcp://localhost:4840/freeopcua/server/\nReads ActiveState_Id for each alarm and feeds into event-alarm nodes.\n\nAlarm lifecycle outputs:\n Output 1: Raised (Active + Unacknowledged)\n Output 2: Acknowledged (Active + Acknowledged)\n Output 3: Cleared (Inactive + Unacknowledged)\n Output 4: Resolved (lifecycle complete)",
22
+ "x": 250,
23
+ "y": 40,
24
+ "wires": []
25
+ },
26
+ {
27
+ "id": "comment-sim-section",
28
+ "type": "comment",
29
+ "z": "opcua-alarm-flow",
30
+ "name": "--- Simulated OPC UA Inputs (use inject buttons to simulate) ---",
31
+ "info": "These inject nodes simulate the OPC UA ActiveState_Id values.\nReplace with actual OPC-UA-Client nodes for real use.",
32
+ "x": 280,
33
+ "y": 80,
34
+ "wires": []
35
+ },
36
+ {
37
+ "id": "inject-pump-active",
38
+ "type": "inject",
39
+ "z": "opcua-alarm-flow",
40
+ "name": "Pump P1A ACTIVE",
41
+ "props": [
42
+ { "p": "topic", "v": "opcua/AlarmSimulation/PumpTrip_P1A/ActiveState_Id", "vt": "str" },
43
+ { "p": "payload", "v": "true", "vt": "bool" }
44
+ ],
45
+ "repeat": "",
46
+ "crontab": "",
47
+ "once": false,
48
+ "onceDelay": 0.1,
49
+ "x": 150,
50
+ "y": 140,
51
+ "wires": [["event-in-alarms"]]
52
+ },
53
+ {
54
+ "id": "inject-pump-inactive",
55
+ "type": "inject",
56
+ "z": "opcua-alarm-flow",
57
+ "name": "Pump P1A INACTIVE",
58
+ "props": [
59
+ { "p": "topic", "v": "opcua/AlarmSimulation/PumpTrip_P1A/ActiveState_Id", "vt": "str" },
60
+ { "p": "payload", "v": "false", "vt": "bool" }
61
+ ],
62
+ "repeat": "",
63
+ "crontab": "",
64
+ "once": false,
65
+ "onceDelay": 0.1,
66
+ "x": 160,
67
+ "y": 180,
68
+ "wires": [["event-in-alarms"]]
69
+ },
70
+ {
71
+ "id": "inject-breaker-active",
72
+ "type": "inject",
73
+ "z": "opcua-alarm-flow",
74
+ "name": "Breaker MCC3 ACTIVE",
75
+ "props": [
76
+ { "p": "topic", "v": "opcua/AlarmSimulation/BreakerFault_MCC3/ActiveState_Id", "vt": "str" },
77
+ { "p": "payload", "v": "true", "vt": "bool" }
78
+ ],
79
+ "repeat": "",
80
+ "crontab": "",
81
+ "once": false,
82
+ "onceDelay": 0.1,
83
+ "x": 160,
84
+ "y": 240,
85
+ "wires": [["event-in-alarms"]]
86
+ },
87
+ {
88
+ "id": "inject-breaker-inactive",
89
+ "type": "inject",
90
+ "z": "opcua-alarm-flow",
91
+ "name": "Breaker MCC3 INACTIVE",
92
+ "props": [
93
+ { "p": "topic", "v": "opcua/AlarmSimulation/BreakerFault_MCC3/ActiveState_Id", "vt": "str" },
94
+ { "p": "payload", "v": "false", "vt": "bool" }
95
+ ],
96
+ "repeat": "",
97
+ "crontab": "",
98
+ "once": false,
99
+ "onceDelay": 0.1,
100
+ "x": 170,
101
+ "y": 280,
102
+ "wires": [["event-in-alarms"]]
103
+ },
104
+ {
105
+ "id": "inject-thickener-active",
106
+ "type": "inject",
107
+ "z": "opcua-alarm-flow",
108
+ "name": "Thickener Level ACTIVE",
109
+ "props": [
110
+ { "p": "topic", "v": "opcua/AlarmSimulation/HighLevel_Thickener/ActiveState_Id", "vt": "str" },
111
+ { "p": "payload", "v": "true", "vt": "bool" }
112
+ ],
113
+ "repeat": "",
114
+ "crontab": "",
115
+ "once": false,
116
+ "onceDelay": 0.1,
117
+ "x": 160,
118
+ "y": 340,
119
+ "wires": [["event-in-alarms"]]
120
+ },
121
+ {
122
+ "id": "inject-thickener-inactive",
123
+ "type": "inject",
124
+ "z": "opcua-alarm-flow",
125
+ "name": "Thickener Level INACTIVE",
126
+ "props": [
127
+ { "p": "topic", "v": "opcua/AlarmSimulation/HighLevel_Thickener/ActiveState_Id", "vt": "str" },
128
+ { "p": "payload", "v": "false", "vt": "bool" }
129
+ ],
130
+ "repeat": "",
131
+ "crontab": "",
132
+ "once": false,
133
+ "onceDelay": 0.1,
134
+ "x": 170,
135
+ "y": 380,
136
+ "wires": [["event-in-alarms"]]
137
+ },
138
+ {
139
+ "id": "inject-vibration-active",
140
+ "type": "inject",
141
+ "z": "opcua-alarm-flow",
142
+ "name": "Screen 2 Vibration ACTIVE",
143
+ "props": [
144
+ { "p": "topic", "v": "opcua/AlarmSimulation/VibrationHigh_Screen2/ActiveState_Id", "vt": "str" },
145
+ { "p": "payload", "v": "true", "vt": "bool" }
146
+ ],
147
+ "repeat": "",
148
+ "crontab": "",
149
+ "once": false,
150
+ "onceDelay": 0.1,
151
+ "x": 170,
152
+ "y": 440,
153
+ "wires": [["event-in-alarms"]]
154
+ },
155
+ {
156
+ "id": "inject-vibration-inactive",
157
+ "type": "inject",
158
+ "z": "opcua-alarm-flow",
159
+ "name": "Screen 2 Vibration INACTIVE",
160
+ "props": [
161
+ { "p": "topic", "v": "opcua/AlarmSimulation/VibrationHigh_Screen2/ActiveState_Id", "vt": "str" },
162
+ { "p": "payload", "v": "false", "vt": "bool" }
163
+ ],
164
+ "repeat": "",
165
+ "crontab": "",
166
+ "once": false,
167
+ "onceDelay": 0.1,
168
+ "x": 180,
169
+ "y": 480,
170
+ "wires": [["event-in-alarms"]]
171
+ },
172
+ {
173
+ "id": "inject-estop-active",
174
+ "type": "inject",
175
+ "z": "opcua-alarm-flow",
176
+ "name": "Conveyor 7 EStop ACTIVE",
177
+ "props": [
178
+ { "p": "topic", "v": "opcua/AlarmSimulation/EStop_Conveyor7/ActiveState_Id", "vt": "str" },
179
+ { "p": "payload", "v": "true", "vt": "bool" }
180
+ ],
181
+ "repeat": "",
182
+ "crontab": "",
183
+ "once": false,
184
+ "onceDelay": 0.1,
185
+ "x": 170,
186
+ "y": 540,
187
+ "wires": [["event-in-alarms"]]
188
+ },
189
+ {
190
+ "id": "inject-estop-inactive",
191
+ "type": "inject",
192
+ "z": "opcua-alarm-flow",
193
+ "name": "Conveyor 7 EStop INACTIVE",
194
+ "props": [
195
+ { "p": "topic", "v": "opcua/AlarmSimulation/EStop_Conveyor7/ActiveState_Id", "vt": "str" },
196
+ { "p": "payload", "v": "false", "vt": "bool" }
197
+ ],
198
+ "repeat": "",
199
+ "crontab": "",
200
+ "once": false,
201
+ "onceDelay": 0.1,
202
+ "x": 170,
203
+ "y": 580,
204
+ "wires": [["event-in-alarms"]]
205
+ },
206
+ {
207
+ "id": "inject-magnetite-active",
208
+ "type": "inject",
209
+ "z": "opcua-alarm-flow",
210
+ "name": "Magnetite Level ACTIVE",
211
+ "props": [
212
+ { "p": "topic", "v": "opcua/AlarmSimulation/MagnetiteLevel_Low/ActiveState_Id", "vt": "str" },
213
+ { "p": "payload", "v": "true", "vt": "bool" }
214
+ ],
215
+ "repeat": "",
216
+ "crontab": "",
217
+ "once": false,
218
+ "onceDelay": 0.1,
219
+ "x": 160,
220
+ "y": 640,
221
+ "wires": [["event-in-alarms"]]
222
+ },
223
+ {
224
+ "id": "inject-magnetite-inactive",
225
+ "type": "inject",
226
+ "z": "opcua-alarm-flow",
227
+ "name": "Magnetite Level INACTIVE",
228
+ "props": [
229
+ { "p": "topic", "v": "opcua/AlarmSimulation/MagnetiteLevel_Low/ActiveState_Id", "vt": "str" },
230
+ { "p": "payload", "v": "false", "vt": "bool" }
231
+ ],
232
+ "repeat": "",
233
+ "crontab": "",
234
+ "once": false,
235
+ "onceDelay": 0.1,
236
+ "x": 170,
237
+ "y": 680,
238
+ "wires": [["event-in-alarms"]]
239
+ },
240
+ {
241
+ "id": "event-in-alarms",
242
+ "type": "event-in",
243
+ "z": "opcua-alarm-flow",
244
+ "name": "Push to Cache",
245
+ "cache": "alarm-cache",
246
+ "topicSource": "msg",
247
+ "topicPattern": "",
248
+ "x": 470,
249
+ "y": 400,
250
+ "wires": [[]]
251
+ },
252
+ {
253
+ "id": "comment-alarm-section",
254
+ "type": "comment",
255
+ "z": "opcua-alarm-flow",
256
+ "name": "--- Event Alarm Nodes (one per alarm) ---",
257
+ "info": "Each event-alarm node monitors one ActiveState_Id topic.\nCondition: active == true triggers the alarm.\nOutputs: Raised | Acknowledged | Cleared | Resolved",
258
+ "x": 800,
259
+ "y": 80,
260
+ "wires": []
261
+ },
262
+ {
263
+ "id": "alarm-pump",
264
+ "type": "event-alarm",
265
+ "z": "opcua-alarm-flow",
266
+ "name": "Pump P1A Trip",
267
+ "cache": "alarm-cache",
268
+ "conditionId": "PumpTrip_P1A",
269
+ "conditionName": "Heavy Media Pump P1A Trip",
270
+ "inputMappings": [
271
+ { "name": "active", "topic": "opcua/AlarmSimulation/PumpTrip_P1A/ActiveState_Id" }
272
+ ],
273
+ "condition": "active == true",
274
+ "severity": "800",
275
+ "outputTopic": "alarm/PumpTrip_P1A",
276
+ "x": 780,
277
+ "y": 160,
278
+ "wires": [["debug-raised"], ["debug-acked"], ["debug-cleared"], ["debug-resolved"]]
279
+ },
280
+ {
281
+ "id": "alarm-breaker",
282
+ "type": "event-alarm",
283
+ "z": "opcua-alarm-flow",
284
+ "name": "Breaker MCC3 Fault",
285
+ "cache": "alarm-cache",
286
+ "conditionId": "BreakerFault_MCC3",
287
+ "conditionName": "MCC3 Main Breaker Fault",
288
+ "inputMappings": [
289
+ { "name": "active", "topic": "opcua/AlarmSimulation/BreakerFault_MCC3/ActiveState_Id" }
290
+ ],
291
+ "condition": "active == true",
292
+ "severity": "900",
293
+ "outputTopic": "alarm/BreakerFault_MCC3",
294
+ "x": 790,
295
+ "y": 260,
296
+ "wires": [["debug-raised"], ["debug-acked"], ["debug-cleared"], ["debug-resolved"]]
297
+ },
298
+ {
299
+ "id": "alarm-thickener",
300
+ "type": "event-alarm",
301
+ "z": "opcua-alarm-flow",
302
+ "name": "Thickener Level High",
303
+ "cache": "alarm-cache",
304
+ "conditionId": "HighLevel_Thickener",
305
+ "conditionName": "Thickener Overflow Level High",
306
+ "inputMappings": [
307
+ { "name": "active", "topic": "opcua/AlarmSimulation/HighLevel_Thickener/ActiveState_Id" }
308
+ ],
309
+ "condition": "active == true",
310
+ "severity": "600",
311
+ "outputTopic": "alarm/HighLevel_Thickener",
312
+ "x": 790,
313
+ "y": 360,
314
+ "wires": [["debug-raised"], ["debug-acked"], ["debug-cleared"], ["debug-resolved"]]
315
+ },
316
+ {
317
+ "id": "alarm-vibration",
318
+ "type": "event-alarm",
319
+ "z": "opcua-alarm-flow",
320
+ "name": "Screen 2 Vibration High",
321
+ "cache": "alarm-cache",
322
+ "conditionId": "VibrationHigh_Screen2",
323
+ "conditionName": "Screen 2 Vibration Alarm High",
324
+ "inputMappings": [
325
+ { "name": "active", "topic": "opcua/AlarmSimulation/VibrationHigh_Screen2/ActiveState_Id" }
326
+ ],
327
+ "condition": "active == true",
328
+ "severity": "500",
329
+ "outputTopic": "alarm/VibrationHigh_Screen2",
330
+ "x": 800,
331
+ "y": 460,
332
+ "wires": [["debug-raised"], ["debug-acked"], ["debug-cleared"], ["debug-resolved"]]
333
+ },
334
+ {
335
+ "id": "alarm-estop",
336
+ "type": "event-alarm",
337
+ "z": "opcua-alarm-flow",
338
+ "name": "Conveyor 7 EStop",
339
+ "cache": "alarm-cache",
340
+ "conditionId": "EStop_Conveyor7",
341
+ "conditionName": "Conveyor 7 Emergency Stop",
342
+ "inputMappings": [
343
+ { "name": "active", "topic": "opcua/AlarmSimulation/EStop_Conveyor7/ActiveState_Id" }
344
+ ],
345
+ "condition": "active == true",
346
+ "severity": "1000",
347
+ "outputTopic": "alarm/EStop_Conveyor7",
348
+ "x": 790,
349
+ "y": 560,
350
+ "wires": [["debug-raised"], ["debug-acked"], ["debug-cleared"], ["debug-resolved"]]
351
+ },
352
+ {
353
+ "id": "alarm-magnetite",
354
+ "type": "event-alarm",
355
+ "z": "opcua-alarm-flow",
356
+ "name": "Magnetite Level Low",
357
+ "cache": "alarm-cache",
358
+ "conditionId": "MagnetiteLevel_Low",
359
+ "conditionName": "Magnetite Storage Tank Level Low",
360
+ "inputMappings": [
361
+ { "name": "active", "topic": "opcua/AlarmSimulation/MagnetiteLevel_Low/ActiveState_Id" }
362
+ ],
363
+ "condition": "active == true",
364
+ "severity": "400",
365
+ "outputTopic": "alarm/MagnetiteLevel_Low",
366
+ "x": 790,
367
+ "y": 660,
368
+ "wires": [["debug-raised"], ["debug-acked"], ["debug-cleared"], ["debug-resolved"]]
369
+ },
370
+ {
371
+ "id": "comment-ack-section",
372
+ "type": "comment",
373
+ "z": "opcua-alarm-flow",
374
+ "name": "--- Acknowledge Controls ---",
375
+ "info": "Send ack or ack_all actions to alarm nodes",
376
+ "x": 800,
377
+ "y": 740,
378
+ "wires": []
379
+ },
380
+ {
381
+ "id": "inject-ack-pump",
382
+ "type": "inject",
383
+ "z": "opcua-alarm-flow",
384
+ "name": "ACK Pump P1A",
385
+ "props": [
386
+ { "p": "payload.action", "v": "ack", "vt": "str" },
387
+ { "p": "payload.source", "v": "opcua/AlarmSimulation/PumpTrip_P1A/ActiveState_Id", "vt": "str" }
388
+ ],
389
+ "repeat": "",
390
+ "crontab": "",
391
+ "once": false,
392
+ "onceDelay": 0.1,
393
+ "x": 610,
394
+ "y": 780,
395
+ "wires": [["alarm-pump"]]
396
+ },
397
+ {
398
+ "id": "inject-ack-breaker",
399
+ "type": "inject",
400
+ "z": "opcua-alarm-flow",
401
+ "name": "ACK Breaker MCC3",
402
+ "props": [
403
+ { "p": "payload.action", "v": "ack", "vt": "str" },
404
+ { "p": "payload.source", "v": "opcua/AlarmSimulation/BreakerFault_MCC3/ActiveState_Id", "vt": "str" }
405
+ ],
406
+ "repeat": "",
407
+ "crontab": "",
408
+ "once": false,
409
+ "onceDelay": 0.1,
410
+ "x": 620,
411
+ "y": 820,
412
+ "wires": [["alarm-breaker"]]
413
+ },
414
+ {
415
+ "id": "inject-ack-all-pump",
416
+ "type": "inject",
417
+ "z": "opcua-alarm-flow",
418
+ "name": "ACK ALL (Pump)",
419
+ "props": [
420
+ { "p": "payload.action", "v": "ack_all", "vt": "str" }
421
+ ],
422
+ "repeat": "",
423
+ "crontab": "",
424
+ "once": false,
425
+ "onceDelay": 0.1,
426
+ "x": 610,
427
+ "y": 860,
428
+ "wires": [["alarm-pump"]]
429
+ },
430
+ {
431
+ "id": "inject-list-pump",
432
+ "type": "inject",
433
+ "z": "opcua-alarm-flow",
434
+ "name": "LIST alarms (Pump)",
435
+ "props": [
436
+ { "p": "payload.action", "v": "list", "vt": "str" }
437
+ ],
438
+ "repeat": "",
439
+ "crontab": "",
440
+ "once": false,
441
+ "onceDelay": 0.1,
442
+ "x": 620,
443
+ "y": 900,
444
+ "wires": [["alarm-pump"]]
445
+ },
446
+ {
447
+ "id": "comment-debug-section",
448
+ "type": "comment",
449
+ "z": "opcua-alarm-flow",
450
+ "name": "--- Debug Outputs ---",
451
+ "info": "Each output shows a different alarm lifecycle state",
452
+ "x": 1080,
453
+ "y": 80,
454
+ "wires": []
455
+ },
456
+ {
457
+ "id": "debug-raised",
458
+ "type": "debug",
459
+ "z": "opcua-alarm-flow",
460
+ "name": "RAISED (Active+Unacked)",
461
+ "active": true,
462
+ "tosidebar": true,
463
+ "console": false,
464
+ "tostatus": true,
465
+ "statusVal": "payload.condition_name",
466
+ "statusType": "msg",
467
+ "x": 1100,
468
+ "y": 140,
469
+ "wires": []
470
+ },
471
+ {
472
+ "id": "debug-acked",
473
+ "type": "debug",
474
+ "z": "opcua-alarm-flow",
475
+ "name": "ACKNOWLEDGED (Active+Acked)",
476
+ "active": true,
477
+ "tosidebar": true,
478
+ "console": false,
479
+ "tostatus": true,
480
+ "statusVal": "payload.condition_name",
481
+ "statusType": "msg",
482
+ "x": 1110,
483
+ "y": 200,
484
+ "wires": []
485
+ },
486
+ {
487
+ "id": "debug-cleared",
488
+ "type": "debug",
489
+ "z": "opcua-alarm-flow",
490
+ "name": "CLEARED (Inactive+Unacked)",
491
+ "active": true,
492
+ "tosidebar": true,
493
+ "console": false,
494
+ "tostatus": true,
495
+ "statusVal": "payload.condition_name",
496
+ "statusType": "msg",
497
+ "x": 1110,
498
+ "y": 260,
499
+ "wires": []
500
+ },
501
+ {
502
+ "id": "debug-resolved",
503
+ "type": "debug",
504
+ "z": "opcua-alarm-flow",
505
+ "name": "RESOLVED (Lifecycle Complete)",
506
+ "active": true,
507
+ "tosidebar": true,
508
+ "console": false,
509
+ "tostatus": true,
510
+ "statusVal": "payload.condition_name",
511
+ "statusType": "msg",
512
+ "x": 1120,
513
+ "y": 320,
514
+ "wires": []
515
+ }
516
+ ]