Commit cd5a9962d722dfef531c51786f17fc6ca8d03a3d

Authored by ww
1 parent 94a40ca1

perf: 删除已生成的规则链节点

@@ -2,2211 +2,4 @@ import { NodeItemConfigType } from '/@/views/rule/designer/types/node'; @@ -2,2211 +2,4 @@ import { NodeItemConfigType } from '/@/views/rule/designer/types/node';
2 2
3 export const components: Partial< 3 export const components: Partial<
4 NodeItemConfigType & { id: { id: string }; createdTime: number; actions: any } 4 NodeItemConfigType & { id: { id: string }; createdTime: number; actions: any }
5 ->[] = [  
6 - {  
7 - id: {  
8 - id: '2e2312d0-66f3-11ed-9971-afda5db1badc',  
9 - },  
10 - createdTime: 1668743015549,  
11 - type: 'FLOW',  
12 - scope: 'TENANT',  
13 - name: 'acknowledge',  
14 - clazz: 'org.thingsboard.rule.engine.flow.TbAckNode',  
15 - configurationDescriptor: {  
16 - nodeDefinition: {  
17 - details:  
18 - "After acknowledgement, the message is pushed to related rule nodes. Useful if you don't care what happens to this message next.",  
19 - description: 'Acknowledges the incoming message',  
20 - inEnabled: true,  
21 - outEnabled: true,  
22 - relationTypes: ['Success', 'Failure'],  
23 - customRelations: false,  
24 - ruleChainNode: false,  
25 - defaultConfiguration: {  
26 - version: 0,  
27 - },  
28 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
29 - configDirective: 'tbNodeEmptyConfig',  
30 - icon: '',  
31 - iconUrl: '',  
32 - docUrl: '',  
33 - },  
34 - },  
35 - actions: null,  
36 - },  
37 - {  
38 - id: {  
39 - id: '2e2bec70-66f3-11ed-9971-afda5db1badc',  
40 - },  
41 - createdTime: 1668743015607,  
42 - type: 'FLOW',  
43 - scope: 'TENANT',  
44 - name: 'checkpoint',  
45 - clazz: 'org.thingsboard.rule.engine.flow.TbCheckpointNode',  
46 - configurationDescriptor: {  
47 - nodeDefinition: {  
48 - details:  
49 - 'After successful transfer incoming message is automatically acknowledged. Queue name is configurable.',  
50 - description: 'transfers the message to another queue',  
51 - inEnabled: true,  
52 - outEnabled: true,  
53 - relationTypes: ['Success', 'Failure'],  
54 - customRelations: false,  
55 - ruleChainNode: false,  
56 - defaultConfiguration: {  
57 - queueName: 'HighPriority',  
58 - },  
59 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
60 - configDirective: 'tbActionNodeCheckPointConfig',  
61 - icon: '',  
62 - iconUrl: '',  
63 - docUrl: '',  
64 - },  
65 - },  
66 - actions: null,  
67 - },  
68 - {  
69 - id: {  
70 - id: '2e6e73b0-66f3-11ed-9971-afda5db1badc',  
71 - },  
72 - createdTime: 1668743016043,  
73 - type: 'FLOW',  
74 - scope: 'TENANT',  
75 - name: 'rule chain',  
76 - clazz: 'org.thingsboard.rule.engine.flow.TbRuleChainInputNode',  
77 - configurationDescriptor: {  
78 - nodeDefinition: {  
79 - details:  
80 - 'Allows to nest the rule chain similar to single rule node. The incoming message is forwarded to the input node of the specified target rule chain. The target rule chain may produce multiple labeled outputs. You may use the outputs to forward the results of processing to other rule nodes.',  
81 - description: 'transfers the message to another rule chain',  
82 - inEnabled: true,  
83 - outEnabled: true,  
84 - relationTypes: ['Failure'],  
85 - customRelations: true,  
86 - ruleChainNode: true,  
87 - defaultConfiguration: {  
88 - ruleChainId: null,  
89 - },  
90 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
91 - configDirective: 'tbFlowNodeRuleChainInputConfig',  
92 - icon: '',  
93 - iconUrl: '',  
94 - docUrl: '',  
95 - },  
96 - },  
97 - actions: null,  
98 - },  
99 - {  
100 - id: {  
101 - id: '2e9387e0-66f3-11ed-9971-afda5db1badc',  
102 - },  
103 - createdTime: 1668743016286,  
104 - type: 'FLOW',  
105 - scope: 'TENANT',  
106 - name: 'output',  
107 - clazz: 'org.thingsboard.rule.engine.flow.TbRuleChainOutputNode',  
108 - configurationDescriptor: {  
109 - nodeDefinition: {  
110 - details:  
111 - 'Produces output of the rule chain processing. The output is forwarded to the caller rule chain, as an output of the corresponding "input" rule node. The output rule node name corresponds to the relation type of the output message, and it is used to forward messages to other rule nodes in the caller rule chain. ',  
112 - description: 'transfers the message to the caller rule chain',  
113 - inEnabled: true,  
114 - outEnabled: false,  
115 - relationTypes: ['Success', 'Failure'],  
116 - customRelations: false,  
117 - ruleChainNode: false,  
118 - defaultConfiguration: {  
119 - version: 0,  
120 - },  
121 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
122 - configDirective: 'tbFlowNodeRuleChainOutputConfig',  
123 - icon: '',  
124 - iconUrl: '',  
125 - docUrl: '',  
126 - },  
127 - },  
128 - actions: null,  
129 - },  
130 - {  
131 - id: {  
132 - id: '2c9769c0-66f3-11ed-9971-afda5db1badc',  
133 - },  
134 - createdTime: 0,  
135 - type: 'ENRICHMENT',  
136 - scope: 'TENANT',  
137 - name: 'customer attributes',  
138 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetCustomerAttributeNode',  
139 - configurationDescriptor: {  
140 - nodeDefinition: {  
141 - details:  
142 - 'If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.',  
143 - description:  
144 - 'Add Originators Customer Attributes or Latest Telemetry into Message Metadata',  
145 - inEnabled: true,  
146 - outEnabled: true,  
147 - relationTypes: ['Success', 'Failure'],  
148 - customRelations: false,  
149 - ruleChainNode: false,  
150 - defaultConfiguration: {  
151 - attrMapping: {  
152 - temperature: 'tempo',  
153 - },  
154 - telemetry: false,  
155 - },  
156 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
157 - configDirective: 'tbEnrichmentNodeCustomerAttributesConfig',  
158 - icon: '',  
159 - iconUrl: '',  
160 - docUrl: '',  
161 - },  
162 - },  
163 - actions: null,  
164 - },  
165 - {  
166 - id: {  
167 - id: '2cab3fe0-66f3-11ed-9971-afda5db1badc',  
168 - },  
169 - createdTime: 0,  
170 - type: 'ENRICHMENT',  
171 - scope: 'TENANT',  
172 - name: 'originator telemetry',  
173 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetTelemetryNode',  
174 - configurationDescriptor: {  
175 - nodeDefinition: {  
176 - details:  
177 - 'The node allows you to select fetch mode: <b>FIRST/LAST/ALL</b> to fetch telemetry of certain time range that are added into Message metadata without any prefix. If selected fetch mode <b>ALL</b> Telemetry will be added like array into Message Metadata where <b>key</b> is Timestamp and <b>value</b> is value of Telemetry.</br>If selected fetch mode <b>FIRST</b> or <b>LAST</b> Telemetry will be added like string without Timestamp.</br>Also, the rule node allows you to select telemetry sampling order: <b>ASC</b> or <b>DESC</b>. </br>Aggregation feature allows you to fetch aggregated telemetry as a single value by <b>AVG, COUNT, SUM, MIN, MAX, NONE</b>. </br><b>Note</b>: The maximum size of the fetched array is 1000 records.\n ',  
178 - description:  
179 - 'Add Message Originator Telemetry for selected time range into Message Metadata\n',  
180 - inEnabled: true,  
181 - outEnabled: true,  
182 - relationTypes: ['Success', 'Failure'],  
183 - customRelations: false,  
184 - ruleChainNode: false,  
185 - defaultConfiguration: {  
186 - startInterval: 2,  
187 - endInterval: 1,  
188 - startIntervalPattern: '',  
189 - endIntervalPattern: '',  
190 - useMetadataIntervalPatterns: false,  
191 - startIntervalTimeUnit: 'MINUTES',  
192 - endIntervalTimeUnit: 'MINUTES',  
193 - fetchMode: 'FIRST',  
194 - orderBy: 'ASC',  
195 - aggregation: 'NONE',  
196 - limit: 1000,  
197 - latestTsKeyNames: [],  
198 - },  
199 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
200 - configDirective: 'tbEnrichmentNodeGetTelemetryFromDatabase',  
201 - icon: '',  
202 - iconUrl: '',  
203 - docUrl: '',  
204 - },  
205 - },  
206 - actions: null,  
207 - },  
208 - {  
209 - id: {  
210 - id: '0696ddf0-adc0-11ed-9e64-ef7bdf80a49e',  
211 - },  
212 - createdTime: 0,  
213 - type: 'ENRICHMENT',  
214 - scope: 'TENANT',  
215 - name: 'originator fields',  
216 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetOriginatorFieldsNode',  
217 - configurationDescriptor: {  
218 - nodeDefinition: {  
219 - details:  
220 - 'Will fetch fields values specified in mapping. If specified field is not part of originator fields it will be ignored.',  
221 - description: 'Add Message Originator fields values into Message Metadata',  
222 - inEnabled: true,  
223 - outEnabled: true,  
224 - relationTypes: ['Success', 'Failure'],  
225 - customRelations: false,  
226 - ruleChainNode: false,  
227 - defaultConfiguration: {  
228 - fieldsMapping: {  
229 - name: 'originatorName',  
230 - type: 'originatorType',  
231 - },  
232 - },  
233 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
234 - configDirective: 'tbEnrichmentNodeOriginatorFieldsConfig',  
235 - icon: '',  
236 - iconUrl: '',  
237 - docUrl: '',  
238 - },  
239 - },  
240 - actions: null,  
241 - },  
242 - {  
243 - id: {  
244 - id: '2d490680-66f3-11ed-9971-afda5db1badc',  
245 - },  
246 - createdTime: 0,  
247 - type: 'ENRICHMENT',  
248 - scope: 'TENANT',  
249 - name: 'calculate delta',  
250 - clazz: 'org.thingsboard.rule.engine.metadata.CalculateDeltaNode',  
251 - configurationDescriptor: {  
252 - nodeDefinition: {  
253 - details:  
254 - "Calculates delta and period based on the previous time-series reading and current data. Delta calculation is done in scope of the message originator, e.g. device, asset or customer. If there is input key, the output relation will be 'Success' unless delta is negative and corresponding configuration parameter is set. If there is no input value key in the incoming message, the output relation will be 'Other'.",  
255 - description:  
256 - "Calculates and adds 'delta' value into message based on the incoming and previous value",  
257 - inEnabled: true,  
258 - outEnabled: true,  
259 - relationTypes: ['Success', 'Failure', 'Other'],  
260 - customRelations: false,  
261 - ruleChainNode: false,  
262 - defaultConfiguration: {  
263 - inputValueKey: 'pulseCounter',  
264 - outputValueKey: 'delta',  
265 - useCache: true,  
266 - addPeriodBetweenMsgs: false,  
267 - periodValueKey: 'periodInMs',  
268 - round: null,  
269 - tellFailureIfDeltaIsNegative: true,  
270 - },  
271 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
272 - configDirective: 'tbEnrichmentNodeCalculateDeltaConfig',  
273 - icon: '',  
274 - iconUrl: '',  
275 - docUrl: '',  
276 - },  
277 - },  
278 - actions: null,  
279 - },  
280 - {  
281 - id: {  
282 - id: '2d9b1e20-66f3-11ed-9971-afda5db1badc',  
283 - },  
284 - createdTime: 0,  
285 - type: 'ENRICHMENT',  
286 - scope: 'TENANT',  
287 - name: 'tenant attributes',  
288 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetTenantAttributeNode',  
289 - configurationDescriptor: {  
290 - nodeDefinition: {  
291 - details:  
292 - 'If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.',  
293 - description: 'Add Originators Tenant Attributes or Latest Telemetry into Message Metadata',  
294 - inEnabled: true,  
295 - outEnabled: true,  
296 - relationTypes: ['Success', 'Failure'],  
297 - customRelations: false,  
298 - ruleChainNode: false,  
299 - defaultConfiguration: {  
300 - attrMapping: {  
301 - temperature: 'tempo',  
302 - },  
303 - telemetry: false,  
304 - },  
305 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
306 - configDirective: 'tbEnrichmentNodeTenantAttributesConfig',  
307 - icon: '',  
308 - iconUrl: '',  
309 - docUrl: '',  
310 - },  
311 - },  
312 - actions: null,  
313 - },  
314 - {  
315 - id: {  
316 - id: '2da4e220-66f3-11ed-9971-afda5db1badc',  
317 - },  
318 - createdTime: 0,  
319 - type: 'ENRICHMENT',  
320 - scope: 'TENANT',  
321 - name: 'related device attributes',  
322 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetDeviceAttrNode',  
323 - configurationDescriptor: {  
324 - nodeDefinition: {  
325 - details:  
326 - 'If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ',  
327 - description:  
328 - 'Add Originators Related Device Attributes and Latest Telemetry value into Message Metadata',  
329 - inEnabled: true,  
330 - outEnabled: true,  
331 - relationTypes: ['Success', 'Failure'],  
332 - customRelations: false,  
333 - ruleChainNode: false,  
334 - defaultConfiguration: {  
335 - clientAttributeNames: [],  
336 - sharedAttributeNames: [],  
337 - serverAttributeNames: [],  
338 - latestTsKeyNames: [],  
339 - tellFailureIfAbsent: true,  
340 - getLatestValueWithTs: false,  
341 - deviceRelationsQuery: {  
342 - direction: 'FROM',  
343 - maxLevel: 1,  
344 - relationType: 'Contains',  
345 - deviceTypes: ['default'],  
346 - fetchLastLevelOnly: false,  
347 - },  
348 - },  
349 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
350 - configDirective: 'tbEnrichmentNodeDeviceAttributesConfig',  
351 - icon: '',  
352 - iconUrl: '',  
353 - docUrl: '',  
354 - },  
355 - },  
356 - actions: null,  
357 - },  
358 - {  
359 - id: {  
360 - id: '2dd67970-66f3-11ed-9971-afda5db1badc',  
361 - },  
362 - createdTime: 0,  
363 - type: 'ENRICHMENT',  
364 - scope: 'TENANT',  
365 - name: 'related attributes',  
366 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetRelatedAttributeNode',  
367 - configurationDescriptor: {  
368 - nodeDefinition: {  
369 - details:  
370 - 'Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used for attributes enrichment, other entities are discarded. If Attributes enrichment configured, server scope attributes are added into Message metadata. If Latest Telemetry enrichment configured, latest telemetry added into metadata. To access those attributes in other nodes this template can be used <code>metadata.temperature</code>.',  
371 - description:  
372 - 'Add Originators Related Entity Attributes or Latest Telemetry into Message Metadata',  
373 - inEnabled: true,  
374 - outEnabled: true,  
375 - relationTypes: ['Success', 'Failure'],  
376 - customRelations: false,  
377 - ruleChainNode: false,  
378 - defaultConfiguration: {  
379 - attrMapping: {  
380 - temperature: 'tempo',  
381 - },  
382 - relationsQuery: {  
383 - direction: 'FROM',  
384 - maxLevel: 1,  
385 - filters: [  
386 - {  
387 - relationType: 'Contains',  
388 - entityTypes: [],  
389 - },  
390 - ],  
391 - fetchLastLevelOnly: false,  
392 - },  
393 - telemetry: false,  
394 - },  
395 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
396 - configDirective: 'tbEnrichmentNodeRelatedAttributesConfig',  
397 - icon: '',  
398 - iconUrl: '',  
399 - docUrl: '',  
400 - },  
401 - },  
402 - actions: null,  
403 - },  
404 - {  
405 - id: {  
406 - id: '2e8afc60-66f3-11ed-9971-afda5db1badc',  
407 - },  
408 - createdTime: 1668743016230,  
409 - type: 'ENRICHMENT',  
410 - scope: 'TENANT',  
411 - name: 'tenant details',  
412 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetTenantDetailsNode',  
413 - configurationDescriptor: {  
414 - nodeDefinition: {  
415 - details:  
416 - 'If checkbox: <b>Add selected details to the message metadata</b> is selected, existing fields will be added to the message metadata instead of message data.<br><br><b>Note:</b> only Device, Asset, and Entity View type are allowed.<br><br>If the originator of the message is not assigned to Tenant, or originator type is not supported - Message will be forwarded to <b>Failure</b> chain, otherwise, <b>Success</b> chain will be used.',  
417 - description: 'Adds fields from Tenant details to the message body or metadata',  
418 - inEnabled: true,  
419 - outEnabled: true,  
420 - relationTypes: ['Success', 'Failure'],  
421 - customRelations: false,  
422 - ruleChainNode: false,  
423 - defaultConfiguration: {  
424 - detailsList: [],  
425 - addToMetadata: false,  
426 - },  
427 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
428 - configDirective: 'tbEnrichmentNodeEntityDetailsConfig',  
429 - icon: '',  
430 - iconUrl: '',  
431 - docUrl: '',  
432 - },  
433 - },  
434 - actions: null,  
435 - },  
436 - {  
437 - id: {  
438 - id: '2edb8d60-66f3-11ed-9971-afda5db1badc',  
439 - },  
440 - createdTime: 1668743016758,  
441 - type: 'ENRICHMENT',  
442 - scope: 'TENANT',  
443 - name: 'originator attributes',  
444 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetAttributesNode',  
445 - configurationDescriptor: {  
446 - nodeDefinition: {  
447 - details:  
448 - 'If Attributes enrichment configured, <b>CLIENT/SHARED/SERVER</b> attributes are added into Message metadata with specific prefix: <i>cs/shared/ss</i>. Latest telemetry value added into metadata without prefix. To access those attributes in other nodes this template can be used <code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ',  
449 - description: 'Add Message Originator Attributes or Latest Telemetry into Message Metadata',  
450 - inEnabled: true,  
451 - outEnabled: true,  
452 - relationTypes: ['Success', 'Failure'],  
453 - customRelations: false,  
454 - ruleChainNode: false,  
455 - defaultConfiguration: {  
456 - clientAttributeNames: [],  
457 - sharedAttributeNames: [],  
458 - serverAttributeNames: [],  
459 - latestTsKeyNames: [],  
460 - tellFailureIfAbsent: true,  
461 - getLatestValueWithTs: false,  
462 - },  
463 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
464 - configDirective: 'tbEnrichmentNodeOriginatorAttributesConfig',  
465 - icon: '',  
466 - iconUrl: '',  
467 - docUrl: '',  
468 - },  
469 - },  
470 - actions: null,  
471 - },  
472 - {  
473 - id: {  
474 - id: '2ee5c690-66f3-11ed-9971-afda5db1badc',  
475 - },  
476 - createdTime: 1668743016825,  
477 - type: 'ENRICHMENT',  
478 - scope: 'TENANT',  
479 - name: 'customer details',  
480 - clazz: 'org.thingsboard.rule.engine.metadata.TbGetCustomerDetailsNode',  
481 - configurationDescriptor: {  
482 - nodeDefinition: {  
483 - details:  
484 - 'If checkbox: <b>Add selected details to the message metadata</b> is selected, existing fields will be added to the message metadata instead of message data.<br><br><b>Note:</b> only Device, Asset, and Entity View type are allowed.<br><br>If the originator of the message is not assigned to Customer, or originator type is not supported - Message will be forwarded to <b>Failure</b> chain, otherwise, <b>Success</b> chain will be used.',  
485 - description: 'Adds fields from Customer details to the message body or metadata',  
486 - inEnabled: true,  
487 - outEnabled: true,  
488 - relationTypes: ['Success', 'Failure'],  
489 - customRelations: false,  
490 - ruleChainNode: false,  
491 - defaultConfiguration: {  
492 - detailsList: [],  
493 - addToMetadata: false,  
494 - },  
495 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
496 - configDirective: 'tbEnrichmentNodeEntityDetailsConfig',  
497 - icon: '',  
498 - iconUrl: '',  
499 - docUrl: '',  
500 - },  
501 - },  
502 - actions: null,  
503 - },  
504 - {  
505 - id: {  
506 - id: '2cbddd80-66f3-11ed-9971-afda5db1badc',  
507 - },  
508 - createdTime: 1668743013208,  
509 - type: 'EXTERNAL',  
510 - scope: 'TENANT',  
511 - name: 'alarm notice',  
512 - clazz: 'org.thingsboard.rule.engine.notice.AlarmNoticeNode',  
513 - configurationDescriptor: {  
514 - nodeDefinition: {  
515 - details: 'notice method include sms,email and so on.',  
516 - description: 'while device alarm, notice some people.',  
517 - inEnabled: true,  
518 - outEnabled: true,  
519 - relationTypes: ['Success', 'Failure'],  
520 - customRelations: false,  
521 - ruleChainNode: false,  
522 - defaultConfiguration: {  
523 - host: 'localhost',  
524 - },  
525 - uiResources: [],  
526 - configDirective: '',  
527 - icon: 'sms',  
528 - iconUrl: '',  
529 - docUrl: '',  
530 - },  
531 - },  
532 - actions: null,  
533 - },  
534 - {  
535 - id: {  
536 - id: '04ab88b0-adc0-11ed-9e64-ef7bdf80a49e',  
537 - },  
538 - createdTime: 0,  
539 - type: 'EXTERNAL',  
540 - scope: 'TENANT',  
541 - name: 'mqtt',  
542 - clazz: 'org.thingsboard.rule.engine.mqtt.TbMqttNode',  
543 - configurationDescriptor: {  
544 - nodeDefinition: {  
545 - details: 'Will publish message payload to the MQTT broker with QoS <b>AT_LEAST_ONCE</b>.',  
546 - description: 'Publish messages to the MQTT broker',  
547 - inEnabled: true,  
548 - outEnabled: true,  
549 - relationTypes: ['Success', 'Failure'],  
550 - customRelations: false,  
551 - ruleChainNode: false,  
552 - defaultConfiguration: {  
553 - topicPattern: 'my-topic',  
554 - host: null,  
555 - port: 1883,  
556 - connectTimeoutSec: 10,  
557 - clientId: null,  
558 - appendClientIdSuffix: false,  
559 - cleanSession: true,  
560 - ssl: false,  
561 - credentials: {  
562 - type: 'anonymous',  
563 - },  
564 - },  
565 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
566 - configDirective: 'tbActionNodeMqttConfig',  
567 - icon: 'material-symbols:call-split',  
568 - iconUrl: '',  
569 - docUrl: '',  
570 - },  
571 - },  
572 - actions: null,  
573 - },  
574 - {  
575 - id: {  
576 - id: '2ce7aca0-66f3-11ed-9971-afda5db1badc',  
577 - },  
578 - createdTime: 0,  
579 - type: 'EXTERNAL',  
580 - scope: 'TENANT',  
581 - name: 'gcp pubsub',  
582 - clazz: 'org.thingsboard.rule.engine.gcp.pubsub.TbPubSubNode',  
583 - configurationDescriptor: {  
584 - nodeDefinition: {  
585 - details:  
586 - 'Will publish message payload to the Google Cloud Platform PubSub topic. Outbound message will contain response fields (<code>messageId</code> in the Message Metadata from the GCP PubSub. <b>messageId</b> field can be accessed with <code>metadata.messageId</code>.',  
587 - description: 'Publish message to the Google Cloud PubSub',  
588 - inEnabled: true,  
589 - outEnabled: true,  
590 - relationTypes: ['Success', 'Failure'],  
591 - customRelations: false,  
592 - ruleChainNode: false,  
593 - defaultConfiguration: {  
594 - projectId: 'my-google-cloud-project-id',  
595 - topicName: 'my-pubsub-topic-name',  
596 - messageAttributes: {},  
597 - serviceAccountKey: null,  
598 - serviceAccountKeyFileName: null,  
599 - },  
600 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
601 - configDirective: 'tbActionNodePubSubConfig',  
602 - icon: '',  
603 - iconUrl:  
604 - 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+Cjx0aXRsZT5DbG91ZCBQdWJTdWI8L3RpdGxlPgo8Zz4KPHBhdGggZD0iTTEyNi40Nyw1OC4xMmwtMjYuMy00NS43NEExMS41NiwxMS41NiwwLDAsMCw5MC4zMSw2LjVIMzcuN2ExMS41NSwxMS41NSwwLDAsMC05Ljg2LDUuODhMMS41Myw1OGExMS40OCwxMS40OCwwLDAsMCwwLDExLjQ0bDI2LjMsNDZhMTEuNzcsMTEuNzcsMCwwLDAsOS44Niw2LjA5SDkwLjNhMTEuNzMsMTEuNzMsMCwwLDAsOS44Ny02LjA2bDI2LjMtNDUuNzRBMTEuNzMsMTEuNzMsMCwwLDAsMTI2LjQ3LDU4LjEyWiIgc3R5bGU9ImZpbGw6ICM3MzViMmYiLz4KPHBhdGggZD0iTTg5LjIyLDQ3Ljc0LDgzLjM2LDQ5bC0xNC42LTE0LjZMNjQuMDksNDMuMSw2MS41NSw1My4ybDQuMjksNC4yOUw1Ny42LDU5LjE4LDQ2LjMsNDcuODhsLTcuNjcsNy4zOEw1Mi43Niw2OS4zN2wtMTUsMTEuOUw3OCwxMjEuNUg5MC4zYTExLjczLDExLjczLDAsMCwwLDkuODctNi4wNmwyMC43Mi0zNloiIHN0eWxlPSJvcGFjaXR5OiAwLjA3MDAwMDAwMDI5ODAyMztpc29sYXRpb246IGlzb2xhdGUiLz4KPHBhdGggZD0iTTgyLjg2LDQ3YTUuMzIsNS4zMiwwLDEsMS0xLjk1LDcuMjdBNS4zMiw1LjMyLDAsMCwxLDgyLjg2LDQ3IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNMzkuODIsNTYuMThhNS4zMiw1LjMyLDAsMSwxLDcuMjctMS45NSw1LjMyLDUuMzIsMCwwLDEtNy4yNywxLjk1IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNNjkuMzIsODguODVBNS4zMiw1LjMyLDAsMSwxLDY0LDgzLjUyYTUuMzIsNS4zMiwwLDAsMSw1LjMyLDUuMzIiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxnPgo8cGF0aCBkPSJNNjQsNTIuOTRhMTEuMDYsMTEuMDYsMCwwLDEsMi40Ni4yOFYzOS4xNUg2MS41NFY1My4yMkExMS4wNiwxMS4wNiwwLDAsMSw2NCw1Mi45NFoiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxwYXRoIGQ9Ik03NC41Nyw2Ny4yNmExMSwxMSwwLDAsMS0yLjQ3LDQuMjVsMTIuMTksNywyLjQ2LTQuMjZaIiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNNTMuNDMsNjcuMjZsLTEyLjE4LDcsMi40Niw0LjI2LDEyLjE5LTdBMTEsMTEsMCwwLDEsNTMuNDMsNjcuMjZaIiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8L2c+CjxwYXRoIGQ9Ik03Mi42LDY0QTguNiw4LjYsMCwxLDEsNjQsNTUuNCw4LjYsOC42LDAsMCwxLDcyLjYsNjQiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxwYXRoIGQ9Ik0zOS4xLDcwLjU3YTYuNzYsNi43NiwwLDEsMS0yLjQ3LDkuMjMsNi43Niw2Ljc2LDAsMCwxLDIuNDctOS4yMyIgc3R5bGU9ImZpbGw6ICNmZmYiLz4KPHBhdGggZD0iTTgyLjE0LDgyLjI3YTYuNzYsNi43NiwwLDEsMSw5LjIzLTIuNDcsNi43NSw2Ljc1LDAsMCwxLTkuMjMsMi40NyIgc3R5bGU9ImZpbGw6ICNmZmYiLz4KPHBhdGggZD0iTTcwLjc2LDM5LjE1QTYuNzYsNi43NiwwLDEsMSw2NCwzMi4zOWE2Ljc2LDYuNzYsMCwwLDEsNi43Niw2Ljc2IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8L2c+Cjwvc3ZnPgo=',  
605 - docUrl: '',  
606 - },  
607 - },  
608 - actions: null,  
609 - },  
610 - {  
611 - id: {  
612 - id: '2d2c2fb0-66f3-11ed-9971-afda5db1badc',  
613 - },  
614 - createdTime: 0,  
615 - type: 'EXTERNAL',  
616 - scope: 'TENANT',  
617 - name: 'send sms',  
618 - clazz: 'org.thingsboard.rule.engine.sms.TbSendSmsNode',  
619 - configurationDescriptor: {  
620 - nodeDefinition: {  
621 - details:  
622 - 'Will send SMS message by populating target phone numbers and sms message fields using values derived from message metadata.',  
623 - description: 'Sends SMS message via SMS provider.',  
624 - inEnabled: true,  
625 - outEnabled: true,  
626 - relationTypes: ['Success', 'Failure'],  
627 - customRelations: false,  
628 - ruleChainNode: false,  
629 - defaultConfiguration: {  
630 - numbersToTemplate: '${userPhone}',  
631 - smsMessageTemplate: 'Device ${deviceName} has high temperature ${temp}',  
632 - useSystemSmsSettings: true,  
633 - smsProviderConfiguration: null,  
634 - },  
635 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
636 - configDirective: 'tbActionNodeSendSmsConfig',  
637 - icon: 'sms',  
638 - iconUrl: '',  
639 - docUrl: '',  
640 - },  
641 - },  
642 - actions: null,  
643 - },  
644 - {  
645 - id: {  
646 - id: '2d88a790-66f3-11ed-9971-afda5db1badc',  
647 - },  
648 - createdTime: 0,  
649 - type: 'EXTERNAL',  
650 - scope: 'TENANT',  
651 - name: 'azure iot hub',  
652 - clazz: 'org.thingsboard.rule.engine.mqtt.azure.TbAzureIotHubNode',  
653 - configurationDescriptor: {  
654 - nodeDefinition: {  
655 - details: 'Will publish message payload to the Azure IoT Hub with QoS <b>AT_LEAST_ONCE</b>.',  
656 - description: 'Publish messages to the Azure IoT Hub',  
657 - inEnabled: true,  
658 - outEnabled: true,  
659 - relationTypes: ['Success', 'Failure'],  
660 - customRelations: false,  
661 - ruleChainNode: false,  
662 - defaultConfiguration: {  
663 - topicPattern: 'devices/<device_id>/messages/events/',  
664 - host: '<iot-hub-name>.azure-devices.net',  
665 - port: 8883,  
666 - connectTimeoutSec: 10,  
667 - clientId: null,  
668 - appendClientIdSuffix: false,  
669 - cleanSession: true,  
670 - ssl: true,  
671 - credentials: {  
672 - type: 'sas',  
673 - caCert: null,  
674 - cert: null,  
675 - privateKey: null,  
676 - password: null,  
677 - sasKey: null,  
678 - },  
679 - },  
680 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
681 - configDirective: 'tbActionNodeAzureIotHubConfig',  
682 - icon: '',  
683 - iconUrl: '',  
684 - docUrl: '',  
685 - },  
686 - },  
687 - actions: null,  
688 - },  
689 - {  
690 - id: {  
691 - id: '08ab17f0-adc0-11ed-9e64-ef7bdf80a49e',  
692 - },  
693 - createdTime: 0,  
694 - type: 'EXTERNAL',  
695 - scope: 'TENANT',  
696 - name: 'rest api call',  
697 - clazz: 'org.thingsboard.rule.engine.rest.TbRestApiCallNode',  
698 - configurationDescriptor: {  
699 - nodeDefinition: {  
700 - details:  
701 - 'Will invoke REST API call <code>GET | POST | PUT | DELETE</code> to external REST server. Message payload added into Request body. Configured attributes can be added into Headers from Message Metadata. Outbound message will contain response fields (<code>status</code>, <code>statusCode</code>, <code>statusReason</code> and response <code>headers</code>) in the Message Metadata. Response body saved in outbound Message payload. For example <b>statusCode</b> field can be accessed with <code>metadata.statusCode</code>.<br/><b>Note-</b> if you use system proxy properties, the next system proxy properties should be added: "http.proxyHost" and "http.proxyPort" or "https.proxyHost" and "https.proxyPort" or "socksProxyHost" and "socksProxyPort",and if your proxy with auth, the next ones should be added: "tb.proxy.user" and "tb.proxy.password" to the thingsboard.conf file.',  
702 - description: 'Invoke REST API calls to external REST server',  
703 - inEnabled: true,  
704 - outEnabled: true,  
705 - relationTypes: ['Success', 'Failure'],  
706 - customRelations: false,  
707 - ruleChainNode: false,  
708 - defaultConfiguration: {  
709 - restEndpointUrlPattern: 'http://localhost/api',  
710 - requestMethod: 'POST',  
711 - headers: {  
712 - 'Content-Type': 'application/json',  
713 - },  
714 - useSimpleClientHttpFactory: false,  
715 - readTimeoutMs: 0,  
716 - maxParallelRequestsCount: 0,  
717 - useRedisQueueForMsgPersistence: false,  
718 - trimQueue: false,  
719 - maxQueueSize: 0,  
720 - enableProxy: false,  
721 - useSystemProxyProperties: false,  
722 - proxyHost: null,  
723 - proxyPort: 0,  
724 - proxyUser: null,  
725 - proxyPassword: null,  
726 - proxyScheme: null,  
727 - credentials: {  
728 - type: 'anonymous',  
729 - },  
730 - ignoreRequestBody: false,  
731 - },  
732 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
733 - configDirective: 'tbActionNodeRestApiCallConfig',  
734 - icon: '',  
735 - iconUrl:  
736 - 'data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB2ZXJzaW9uPSIxLjEiIHk9IjBweCIgeD0iMHB4Ij48ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTQ5NzUgMCAwIC45NDk3NSAxNy4xMiAyNi40OTIpIj48cGF0aCBkPSJtMTY5LjExIDEwOC41NGMtOS45MDY2IDAuMDczNC0xOS4wMTQgNi41NzI0LTIyLjAxNCAxNi40NjlsLTY5Ljk5MyAyMzEuMDhjLTMuNjkwNCAxMi4xODEgMy4yODkyIDI1LjIyIDE1LjQ2OSAyOC45MSAyLjIyNTkgMC42NzQ4MSA0LjQ5NjkgMSA2LjcyODUgMSA5Ljk3MjEgMCAxOS4xNjUtNi41MTUzIDIyLjE4Mi0xNi40NjdhNi41MjI0IDYuNTIyNCAwIDAgMCAwLjAwMiAtMC4wMDJsNjkuOTktMjMxLjA3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMCAtMC4wMDJjMy42ODU1LTEyLjE4MS0zLjI4Ny0yNS4yMjUtMTUuNDcxLTI4LjkxMi0yLjI4MjUtMC42OTE0NS00LjYxMTYtMS4wMTY5LTYuODk4NC0xem04NC45ODggMGMtOS45MDQ4IDAuMDczNC0xOS4wMTggNi41Njc1LTIyLjAxOCAxNi40NjlsLTY5Ljk4NiAyMzEuMDhjLTMuNjg5OCAxMi4xNzkgMy4yODUzIDI1LjIxNyAxNS40NjUgMjguOTA4IDIuMjI5NyAwLjY3NjQ3IDQuNTAwOCAxLjAwMiA2LjczMjQgMS4wMDIgOS45NzIxIDAgMTkuMTY1LTYuNTE1MyAyMi4xODItMTYuNDY3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMC4wMDIgLTAuMDAybDY5Ljk4OC0yMzEuMDdjMy42OTA4LTEyLjE4MS0zLjI4NTItMjUuMjIzLTE1LjQ2Ny0yOC45MTItMi4yODE0LTAuNjkyMzEtNC42MTA4LTEuMDE4OS02Ljg5ODQtMS4wMDJ6bS0yMTcuMjkgNDIuMjNjLTEyLjcyOS0wLjAwMDg3LTIzLjE4OCAxMC40NTYtMjMuMTg4IDIzLjE4NiAwLjAwMSAxMi43MjggMTAuNDU5IDIzLjE4NiAyMy4xODggMjMuMTg2IDEyLjcyNy0wLjAwMSAyMy4xODMtMTAuNDU5IDIzLjE4NC0yMy4xODYgMC4wMDA4NzYtMTIuNzI4LTEwLjQ1Ni0yMy4xODUtMjMuMTg0LTIzLjE4NnptMCAxNDYuNjRjLTEyLjcyNy0wLjAwMDg3LTIzLjE4NiAxMC40NTUtMjMuMTg4IDIzLjE4NC0wLjAwMDg3MyAxMi43MjkgMTAuNDU4IDIzLjE4OCAyMy4xODggMjMuMTg4IDEyLjcyOC0wLjAwMSAyMy4xODQtMTAuNDYgMjMuMTg0LTIzLjE4OC0wLjAwMS0xMi43MjYtMTAuNDU3LTIzLjE4My0yMy4xODQtMjMuMTg0em0yNzAuNzkgNDIuMjExYy0xMi43MjcgMC0yMy4xODQgMTAuNDU3LTIzLjE4NCAyMy4xODRzMTAuNDU1IDIzLjE4OCAyMy4xODQgMjMuMTg4aDE1NC45OGMxMi43MjkgMCAyMy4xODYtMTAuNDYgMjMuMTg2LTIzLjE4OCAwLjAwMS0xMi43MjgtMTAuNDU4LTIzLjE4NC0yMy4xODYtMjMuMTg0eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzc2IDAgMCAxLjAzNzYgLTcuNTY3NiAtMTQuOTI1KSIgc3Ryb2tlLXdpZHRoPSIxLjI2OTMiLz48L2c+PC9zdmc+',  
737 - docUrl: '',  
738 - },  
739 - },  
740 - actions: null,  
741 - },  
742 - {  
743 - id: {  
744 - id: '09e9d980-adc0-11ed-9e64-ef7bdf80a49e',  
745 - },  
746 - createdTime: 0,  
747 - type: 'EXTERNAL',  
748 - scope: 'TENANT',  
749 - name: 'kafka',  
750 - clazz: 'org.thingsboard.rule.engine.kafka.TbKafkaNode',  
751 - configurationDescriptor: {  
752 - nodeDefinition: {  
753 - details:  
754 - 'Will send record via Kafka producer to Kafka server. Outbound message will contain response fields (<code>offset</code>, <code>partition</code>, <code>topic</code>) from the Kafka in the Message Metadata. For example <b>partition</b> field can be accessed with <code>metadata.partition</code>.',  
755 - description: 'Publish messages to Kafka server',  
756 - inEnabled: true,  
757 - outEnabled: true,  
758 - relationTypes: ['Success', 'Failure'],  
759 - customRelations: false,  
760 - ruleChainNode: false,  
761 - defaultConfiguration: {  
762 - topicPattern: 'my-topic',  
763 - bootstrapServers: 'localhost:9092',  
764 - retries: 0,  
765 - batchSize: 16384,  
766 - linger: 0,  
767 - bufferMemory: 33554432,  
768 - acks: '-1',  
769 - keySerializer: 'org.apache.kafka.common.serialization.StringSerializer',  
770 - valueSerializer: 'org.apache.kafka.common.serialization.StringSerializer',  
771 - otherProperties: {},  
772 - addMetadataKeyValuesAsKafkaHeaders: false,  
773 - kafkaHeadersCharset: 'UTF-8',  
774 - },  
775 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
776 - configDirective: 'tbActionNodeKafkaConfig',  
777 - icon: '',  
778 - iconUrl:  
779 - 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzOCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIwMS44MTYgMjMwLjIxNmMtMTYuMTg2IDAtMzAuNjk3IDcuMTcxLTQwLjYzNCAxOC40NjFsLTI1LjQ2My0xOC4wMjZjMi43MDMtNy40NDIgNC4yNTUtMTUuNDMzIDQuMjU1LTIzLjc5NyAwLTguMjE5LTEuNDk4LTE2LjA3Ni00LjExMi0yMy40MDhsMjUuNDA2LTE3LjgzNWM5LjkzNiAxMS4yMzMgMjQuNDA5IDE4LjM2NSA0MC41NDggMTguMzY1IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI5Ljg3OS0yNC4zMDktNTQuMTg0LTU0LjE4NC01NC4xODQtMjkuODc1IDAtNTQuMTg0IDI0LjMwNS01NC4xODQgNTQuMTg0IDAgNS4zNDguODA4IDEwLjUwNSAyLjI1OCAxNS4zODlsLTI1LjQyMyAxNy44NDRjLTEwLjYyLTEzLjE3NS0yNS45MTEtMjIuMzc0LTQzLjMzMy0yNS4xODJ2LTMwLjY0YzI0LjU0NC01LjE1NSA0My4wMzctMjYuOTYyIDQzLjAzNy01My4wMTlDMTI0LjE3MSAyNC4zMDUgOTkuODYyIDAgNjkuOTg3IDAgNDAuMTEyIDAgMTUuODAzIDI0LjMwNSAxNS44MDMgNTQuMTg0YzAgMjUuNzA4IDE4LjAxNCA0Ny4yNDYgNDIuMDY3IDUyLjc2OXYzMS4wMzhDMjUuMDQ0IDE0My43NTMgMCAxNzIuNDAxIDAgMjA2Ljg1NGMwIDM0LjYyMSAyNS4yOTIgNjMuMzc0IDU4LjM1NSA2OC45NHYzMi43NzRjLTI0LjI5OSA1LjM0MS00Mi41NTIgMjcuMDExLTQyLjU1MiA1Mi44OTQgMCAyOS44NzkgMjQuMzA5IDU0LjE4NCA1NC4xODQgNTQuMTg0IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI1Ljg4My0xOC4yNTMtNDcuNTUzLTQyLjU1Mi01Mi44OTR2LTMyLjc3NWE2OS45NjUgNjkuOTY1IDAgMCAwIDQyLjYtMjQuNzc2bDI1LjYzMyAxOC4xNDNjLTEuNDIzIDQuODQtMi4yMiA5Ljk0Ni0yLjIyIDE1LjI0IDAgMjkuODc5IDI0LjMwOSA1NC4xODQgNTQuMTg0IDU0LjE4NCAyOS44NzUgMCA1NC4xODQtMjQuMzA1IDU0LjE4NC01NC4xODQgMC0yOS44NzktMjQuMzA5LTU0LjE4NC01NC4xODQtNTQuMTg0em0wLTEyNi42OTVjMTQuNDg3IDAgMjYuMjcgMTEuNzg4IDI2LjI3IDI2LjI3MXMtMTEuNzgzIDI2LjI3LTI2LjI3IDI2LjI3LTI2LjI3LTExLjc4Ny0yNi4yNy0yNi4yN2MwLTE0LjQ4MyAxMS43ODMtMjYuMjcxIDI2LjI3LTI2LjI3MXptLTE1OC4xLTQ5LjMzN2MwLTE0LjQ4MyAxMS43ODQtMjYuMjcgMjYuMjcxLTI2LjI3czI2LjI3IDExLjc4NyAyNi4yNyAyNi4yN2MwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3em01Mi41NDEgMzA3LjI3OGMwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3YzAtMTQuNDgzIDExLjc4NC0yNi4yNyAyNi4yNzEtMjYuMjdzMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3em0tMjYuMjcyLTExNy45N2MtMjAuMjA1IDAtMzYuNjQyLTE2LjQzNC0zNi42NDItMzYuNjM4IDAtMjAuMjA1IDE2LjQzNy0zNi42NDIgMzYuNjQyLTM2LjY0MiAyMC4yMDQgMCAzNi42NDEgMTYuNDM3IDM2LjY0MSAzNi42NDIgMCAyMC4yMDQtMTYuNDM3IDM2LjYzOC0zNi42NDEgMzYuNjM4em0xMzEuODMxIDY3LjE3OWMtMTQuNDg3IDAtMjYuMjctMTEuNzg4LTI2LjI3LTI2LjI3MXMxMS43ODMtMjYuMjcgMjYuMjctMjYuMjcgMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3YzAgMTQuNDgzLTExLjc4MyAyNi4yNzEtMjYuMjcgMjYuMjcxeiIvPjwvc3ZnPg==',  
780 - docUrl: '',  
781 - },  
782 - },  
783 - actions: null,  
784 - },  
785 - {  
786 - id: {  
787 - id: '2e0614f0-66f3-11ed-9971-afda5db1badc',  
788 - },  
789 - createdTime: 0,  
790 - type: 'EXTERNAL',  
791 - scope: 'TENANT',  
792 - name: 'aws sns',  
793 - clazz: 'org.thingsboard.rule.engine.aws.sns.TbSnsNode',  
794 - configurationDescriptor: {  
795 - nodeDefinition: {  
796 - details:  
797 - 'Will publish message payload to the AWS SNS topic. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>) in the Message Metadata from the AWS SNS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.',  
798 - description: 'Publish message to the AWS SNS',  
799 - inEnabled: true,  
800 - outEnabled: true,  
801 - relationTypes: ['Success', 'Failure'],  
802 - customRelations: false,  
803 - ruleChainNode: false,  
804 - defaultConfiguration: {  
805 - topicArnPattern: 'arn:aws:sns:us-east-1:123456789012:MyNewTopic',  
806 - accessKeyId: null,  
807 - secretAccessKey: null,  
808 - region: 'us-east-1',  
809 - },  
810 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
811 - configDirective: 'tbActionNodeSnsConfig',  
812 - icon: '',  
813 - iconUrl:  
814 - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+',  
815 - docUrl: '',  
816 - },  
817 - },  
818 - actions: null,  
819 - },  
820 - {  
821 - id: {  
822 - id: '2e0f3cb0-66f3-11ed-9971-afda5db1badc',  
823 - },  
824 - createdTime: 0,  
825 - type: 'EXTERNAL',  
826 - scope: 'TENANT',  
827 - name: 'send email',  
828 - clazz: 'org.thingsboard.rule.engine.mail.TbSendEmailNode',  
829 - configurationDescriptor: {  
830 - nodeDefinition: {  
831 - details:  
832 - 'Expects messages with <b>SEND_EMAIL</b> type. Node works only with messages that where created using <code>to Email</code> transformation Node, please connect this Node with <code>to Email</code> Node using <code>Successful</code> chain.',  
833 - description: 'Sends email message via SMTP server.',  
834 - inEnabled: true,  
835 - outEnabled: true,  
836 - relationTypes: ['Success', 'Failure'],  
837 - customRelations: false,  
838 - ruleChainNode: false,  
839 - defaultConfiguration: {  
840 - useSystemSmtpSettings: true,  
841 - smtpHost: 'localhost',  
842 - smtpPort: 25,  
843 - username: null,  
844 - password: null,  
845 - smtpProtocol: 'smtp',  
846 - timeout: 10000,  
847 - enableTls: false,  
848 - tlsVersion: 'TLSv1.2',  
849 - enableProxy: false,  
850 - proxyHost: null,  
851 - proxyPort: null,  
852 - proxyUser: null,  
853 - proxyPassword: null,  
854 - },  
855 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
856 - configDirective: 'tbActionNodeSendEmailConfig',  
857 - icon: 'send',  
858 - iconUrl: '',  
859 - docUrl: '',  
860 - },  
861 - },  
862 - actions: null,  
863 - },  
864 - {  
865 - id: {  
866 - id: '2e3b55c0-66f3-11ed-9971-afda5db1badc',  
867 - },  
868 - createdTime: 1668743015708,  
869 - type: 'EXTERNAL',  
870 - scope: 'TENANT',  
871 - name: 'rabbitmq',  
872 - clazz: 'org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode',  
873 - configurationDescriptor: {  
874 - nodeDefinition: {  
875 - details: 'Will publish message payload to RabbitMQ queue.',  
876 - description: 'Publish messages to the RabbitMQ',  
877 - inEnabled: true,  
878 - outEnabled: true,  
879 - relationTypes: ['Success', 'Failure'],  
880 - customRelations: false,  
881 - ruleChainNode: false,  
882 - defaultConfiguration: {  
883 - exchangeNamePattern: '',  
884 - routingKeyPattern: '',  
885 - messageProperties: null,  
886 - host: 'localhost',  
887 - port: 5672,  
888 - virtualHost: '/',  
889 - username: 'guest',  
890 - password: 'guest',  
891 - automaticRecoveryEnabled: false,  
892 - connectionTimeout: 60000,  
893 - handshakeTimeout: 10000,  
894 - clientProperties: {},  
895 - },  
896 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
897 - configDirective: 'tbActionNodeRabbitMqConfig',  
898 - icon: '',  
899 - iconUrl:  
900 - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZlcnNpb249IjEuMSIgeT0iMHB4IiB4PSIwcHgiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIHN0cm9rZS13aWR0aD0iLjg0OTU2IiBkPSJtODYwLjQ3IDQxNi4zMmgtMjYyLjAxYy0xMi45MTMgMC0yMy42MTgtMTAuNzA0LTIzLjYxOC0yMy42MTh2LTI3Mi43MWMwLTIwLjMwNS0xNi4yMjctMzYuMjc2LTM2LjI3Ni0zNi4yNzZoLTkzLjc5MmMtMjAuMzA1IDAtMzYuMjc2IDE2LjIyNy0zNi4yNzYgMzYuMjc2djI3MC44NGMtMC4yNTQ4NyAxNC4xMDMtMTEuNDY5IDI1LjU3Mi0yNS43NDIgMjUuNTcybC04NS42MzYgMC42Nzk2NWMtMTQuMTAzIDAtMjUuNTcyLTExLjQ2OS0yNS41NzItMjUuNTcybDAuNjc5NjUtMjcxLjUyYzAtMjAuMzA1LTE2LjIyNy0zNi4yNzYtMzYuMjc2LTM2LjI3NmgtOTMuNTM3Yy0yMC4zMDUgMC0zNi4yNzYgMTYuMjI3LTM2LjI3NiAzNi4yNzZ2NzYzLjg0YzAgMTguMDk2IDE0Ljc4MiAzMi40NTMgMzIuNDUzIDMyLjQ1M2g3MjIuODFjMTguMDk2IDAgMzIuNDUzLTE0Ljc4MiAzMi40NTMtMzIuNDUzdi00MzUuMzFjLTEuMTg5NC0xOC4xODEtMTUuMjkyLTMyLjE5OC0zMy4zODgtMzIuMTk4em0tMTIyLjY4IDI4Ny4wN2MwIDIzLjYxOC0xOC44NiA0Mi40NzgtNDIuNDc4IDQyLjQ3OGgtNzMuOTk3Yy0yMy42MTggMC00Mi40NzgtMTguODYtNDIuNDc4LTQyLjQ3OHYtNzQuMjUyYzAtMjMuNjE4IDE4Ljg2LTQyLjQ3OCA0Mi40NzgtNDIuNDc4aDczLjk5N2MyMy42MTggMCA0Mi40NzggMTguODYgNDIuNDc4IDQyLjQ3OHoiLz48L3N2Zz4=',  
901 - docUrl: '',  
902 - },  
903 - },  
904 - actions: null,  
905 - },  
906 - {  
907 - id: {  
908 - id: '2e76ff30-66f3-11ed-9971-afda5db1badc',  
909 - },  
910 - createdTime: 1668743016099,  
911 - type: 'EXTERNAL',  
912 - scope: 'TENANT',  
913 - name: 'aws sqs',  
914 - clazz: 'org.thingsboard.rule.engine.aws.sqs.TbSqsNode',  
915 - configurationDescriptor: {  
916 - nodeDefinition: {  
917 - details:  
918 - 'Will publish message payload and metadata attributes to the AWS SQS queue. Outbound message will contain response fields (<code>messageId</code>, <code>requestId</code>, <code>messageBodyMd5</code>, <code>messageAttributesMd5</code>, <code>sequenceNumber</code>) in the Message Metadata from the AWS SQS. For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.',  
919 - description: 'Publish messages to the AWS SQS',  
920 - inEnabled: true,  
921 - outEnabled: true,  
922 - relationTypes: ['Success', 'Failure'],  
923 - customRelations: false,  
924 - ruleChainNode: false,  
925 - defaultConfiguration: {  
926 - queueType: 'STANDARD',  
927 - queueUrlPattern: 'https://sqs.us-east-1.amazonaws.com/123456789012/my-queue-name',  
928 - delaySeconds: 0,  
929 - messageAttributes: {},  
930 - accessKeyId: null,  
931 - secretAccessKey: null,  
932 - region: 'us-east-1',  
933 - },  
934 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
935 - configDirective: 'tbActionNodeSqsConfig',  
936 - icon: '',  
937 - iconUrl:  
938 - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+',  
939 - docUrl: '',  
940 - },  
941 - },  
942 - actions: null,  
943 - },  
944 - {  
945 - id: {  
946 - id: '2bfefa50-66f3-11ed-9971-afda5db1badc',  
947 - },  
948 - createdTime: 0,  
949 - type: 'ACTION',  
950 - scope: 'TENANT',  
951 - name: 'create alarm',  
952 - clazz: 'org.thingsboard.rule.engine.action.TbCreateAlarmNode',  
953 - configurationDescriptor: {  
954 - nodeDefinition: {  
955 - details:  
956 - "Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not created, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'metadata' will contains one of those properties 'isNewAlarm/isExistingAlarm'. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",  
957 - description: 'Create or Update Alarm',  
958 - inEnabled: true,  
959 - outEnabled: true,  
960 - relationTypes: ['Created', 'Updated', 'False', 'Failure'],  
961 - customRelations: false,  
962 - ruleChainNode: false,  
963 - defaultConfiguration: {  
964 - alarmType: 'General Alarm',  
965 - alarmDetailsBuildJs:  
966 - 'var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n //remove prevAlarmDetails from metadata\n delete metadata.prevAlarmDetails;\n //now metadata is the same as it comes IN this rule node\n}\n\n\nreturn details;',  
967 - severity: 'CRITICAL',  
968 - propagate: false,  
969 - propagateToOwner: false,  
970 - propagateToTenant: false,  
971 - useMessageAlarmData: false,  
972 - overwriteAlarmDetails: false,  
973 - dynamicSeverity: false,  
974 - relationTypes: [],  
975 - },  
976 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
977 - configDirective: 'tbActionNodeCreateAlarmConfig',  
978 - icon: 'notifications_active',  
979 - iconUrl: '',  
980 - docUrl: '',  
981 - },  
982 - },  
983 - actions: null,  
984 - },  
985 - {  
986 - id: {  
987 - id: '2c8d3090-66f3-11ed-9971-afda5db1badc',  
988 - },  
989 - createdTime: 0,  
990 - type: 'ACTION',  
991 - scope: 'TENANT',  
992 - name: 'push to edge',  
993 - clazz: 'org.thingsboard.rule.engine.edge.TbMsgPushToEdgeNode',  
994 - configurationDescriptor: {  
995 - nodeDefinition: {  
996 - details:  
997 - "Push messages from cloud to edge. Message originator must be assigned to particular edge or message originator is <b>EDGE</b> entity itself. This node used only on cloud instances to push messages from cloud to edge. Once message arrived into this node it’s going to be converted into edge event and saved to the database. Node doesn't push messages directly to edge, but stores event(s) in the edge queue. <br>Supports next originator types:<br><code>DEVICE</code><br><code>ASSET</code><br><code>ENTITY_VIEW</code><br><code>DASHBOARD</code><br><code>TENANT</code><br><code>CUSTOMER</code><br><code>EDGE</code><br><br>As well node supports next message types:<br><code>POST_TELEMETRY_REQUEST</code><br><code>POST_ATTRIBUTES_REQUEST</code><br><code>ATTRIBUTES_UPDATED</code><br><code>ATTRIBUTES_DELETED</code><br><code>ALARM</code><br><br>Message will be routed via <b>Failure</b> route if node was not able to save edge event to database or unsupported originator type/message type arrived. In case successful storage edge event to database message will be routed via <b>Success</b> route.",  
998 - description: 'Push messages from cloud to edge',  
999 - inEnabled: true,  
1000 - outEnabled: true,  
1001 - relationTypes: ['Success', 'Failure'],  
1002 - customRelations: false,  
1003 - ruleChainNode: false,  
1004 - defaultConfiguration: {  
1005 - scope: 'SERVER_SCOPE',  
1006 - },  
1007 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1008 - configDirective: 'tbActionNodePushToEdgeConfig',  
1009 - icon: 'material-symbols:cloud-download',  
1010 - iconUrl: '',  
1011 - docUrl: '',  
1012 - },  
1013 - },  
1014 - actions: null,  
1015 - },  
1016 - {  
1017 - id: {  
1018 - id: '2ca0dfa0-66f3-11ed-9971-afda5db1badc',  
1019 - },  
1020 - createdTime: 0,  
1021 - type: 'ACTION',  
1022 - scope: 'TENANT',  
1023 - name: 'generator',  
1024 - clazz: 'org.thingsboard.rule.engine.debug.TbMsgGeneratorNode',  
1025 - configurationDescriptor: {  
1026 - nodeDefinition: {  
1027 - details:  
1028 - 'Generates messages with configurable period. Javascript function used for message generation.',  
1029 - description: 'Periodically generates messages',  
1030 - inEnabled: false,  
1031 - outEnabled: true,  
1032 - relationTypes: ['Success', 'Failure'],  
1033 - customRelations: false,  
1034 - ruleChainNode: false,  
1035 - defaultConfiguration: {  
1036 - msgCount: 0,  
1037 - periodInSeconds: 1,  
1038 - originatorId: null,  
1039 - originatorType: null,  
1040 - jsScript:  
1041 - 'var msg = { temp: 42, humidity: 77 };\nvar metadata = { data: 40 };\nvar msgType = "POST_TELEMETRY_REQUEST";\n\nreturn { msg: msg, metadata: metadata, msgType: msgType };',  
1042 - },  
1043 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1044 - configDirective: 'tbActionNodeGeneratorConfig',  
1045 - icon: 'material-symbols:repeat',  
1046 - iconUrl: '',  
1047 - docUrl: '',  
1048 - },  
1049 - },  
1050 - actions: null,  
1051 - },  
1052 - {  
1053 - id: {  
1054 - id: '2cd4c0e0-66f3-11ed-9971-afda5db1badc',  
1055 - },  
1056 - createdTime: 0,  
1057 - type: 'ACTION',  
1058 - scope: 'TENANT',  
1059 - name: 'assign to customer',  
1060 - clazz: 'org.thingsboard.rule.engine.action.TbAssignToCustomerNode',  
1061 - configurationDescriptor: {  
1062 - nodeDefinition: {  
1063 - details:  
1064 - "Finds target Customer by customer name pattern and then assign Originator Entity to this customer. Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.",  
1065 - description: 'Assign Message Originator Entity to Customer',  
1066 - inEnabled: true,  
1067 - outEnabled: true,  
1068 - relationTypes: ['Success', 'Failure'],  
1069 - customRelations: false,  
1070 - ruleChainNode: false,  
1071 - defaultConfiguration: {  
1072 - customerNamePattern: '',  
1073 - customerCacheExpiration: 300,  
1074 - createCustomerIfNotExists: false,  
1075 - },  
1076 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1077 - configDirective: 'tbActionNodeAssignToCustomerConfig',  
1078 - icon: 'material-symbols:add-circle',  
1079 - iconUrl: '',  
1080 - docUrl: '',  
1081 - },  
1082 - },  
1083 - actions: null,  
1084 - },  
1085 - {  
1086 - id: {  
1087 - id: '9d96e4d0-7f70-11ed-9d61-1d4a6209e103',  
1088 - },  
1089 - createdTime: 0,  
1090 - type: 'ACTION',  
1091 - scope: 'TENANT',  
1092 - name: 'unassign from customer',  
1093 - clazz: 'org.thingsboard.rule.engine.action.TbUnassignFromCustomerNode',  
1094 - configurationDescriptor: {  
1095 - nodeDefinition: {  
1096 - details:  
1097 - 'Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.',  
1098 - description: 'Unassign Message Originator Entity from Customer',  
1099 - inEnabled: true,  
1100 - outEnabled: true,  
1101 - relationTypes: ['Success', 'Failure'],  
1102 - customRelations: false,  
1103 - ruleChainNode: false,  
1104 - defaultConfiguration: {  
1105 - customerNamePattern: '',  
1106 - customerCacheExpiration: 300,  
1107 - },  
1108 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1109 - configDirective: 'tbActionNodeUnAssignToCustomerConfig',  
1110 - icon: 'ic:baseline-remove-circle',  
1111 - iconUrl: '',  
1112 - docUrl: '',  
1113 - },  
1114 - },  
1115 - actions: null,  
1116 - },  
1117 - {  
1118 - id: {  
1119 - id: 'db534ed0-6b02-11ed-b551-5975494187f2',  
1120 - },  
1121 - createdTime: 0,  
1122 - type: 'ACTION',  
1123 - scope: 'TENANT',  
1124 - name: 'save timeseries',  
1125 - clazz: 'org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode',  
1126 - configurationDescriptor: {  
1127 - nodeDefinition: {  
1128 - details:  
1129 - "Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type. Timestamp in milliseconds will be taken from metadata.ts, otherwise 'now' message timestamp will be applied. Allows stopping updating values for incoming keys in the latest ts_kv table if 'skipLatestPersistence' is set to true.\n <br/>Enable 'useServerTs' param to use the timestamp of the message processing instead of the timestamp from the message. Useful for all sorts of sequential processing if you merge messages from multiple sources (devices, assets, etc).\n<br/>In the case of sequential processing, the platform guarantees that the messages are processed in the order of their submission to the queue. However, the timestamp of the messages originated by multiple devices/servers may be unsynchronized long before they are pushed to the queue. The DB layer has certain optimizations to ignore the updates of the \"attributes\" and \"latest values\" tables if the new record has a timestamp that is older than the previous record. So, to make sure that all the messages will be processed correctly, one should enable this parameter for sequential message processing scenarios.",  
1130 - description: 'Saves timeseries data',  
1131 - inEnabled: true,  
1132 - outEnabled: true,  
1133 - relationTypes: ['Success', 'Failure'],  
1134 - customRelations: false,  
1135 - ruleChainNode: false,  
1136 - defaultConfiguration: {  
1137 - defaultTTL: 0,  
1138 - skipLatestPersistence: false,  
1139 - useServerTs: false,  
1140 - },  
1141 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1142 - configDirective: 'tbActionNodeTimeseriesConfig',  
1143 - icon: 'material-symbols:file-upload',  
1144 - iconUrl: '',  
1145 - docUrl: '',  
1146 - },  
1147 - },  
1148 - actions: null,  
1149 - },  
1150 - {  
1151 - id: {  
1152 - id: '2d232f00-66f3-11ed-9971-afda5db1badc',  
1153 - },  
1154 - createdTime: 0,  
1155 - type: 'ACTION',  
1156 - scope: 'TENANT',  
1157 - name: 'gps geofencing events',  
1158 - clazz: 'org.thingsboard.rule.engine.geo.TbGpsGeofencingActionNode',  
1159 - configurationDescriptor: {  
1160 - nodeDefinition: {  
1161 - details:  
1162 - 'Extracts latitude and longitude parameters from incoming message and returns different events based on configuration parameters',  
1163 - description: 'Produces incoming messages using GPS based geofencing',  
1164 - inEnabled: true,  
1165 - outEnabled: true,  
1166 - relationTypes: ['Success', 'Entered', 'Left', 'Inside', 'Outside', 'Failure'],  
1167 - customRelations: false,  
1168 - ruleChainNode: false,  
1169 - defaultConfiguration: {  
1170 - latitudeKeyName: 'latitude',  
1171 - longitudeKeyName: 'longitude',  
1172 - perimeterType: 'POLYGON',  
1173 - fetchPerimeterInfoFromMessageMetadata: true,  
1174 - perimeterKeyName: 'ss_perimeter',  
1175 - polygonsDefinition: null,  
1176 - centerLatitude: null,  
1177 - centerLongitude: null,  
1178 - range: null,  
1179 - rangeUnit: null,  
1180 - minInsideDuration: 1,  
1181 - minOutsideDuration: 1,  
1182 - minInsideDurationTimeUnit: 'MINUTES',  
1183 - minOutsideDurationTimeUnit: 'MINUTES',  
1184 - },  
1185 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1186 - configDirective: 'tbActionNodeGpsGeofencingConfig',  
1187 - icon: '',  
1188 - iconUrl: '',  
1189 - docUrl: '',  
1190 - },  
1191 - },  
1192 - actions: null,  
1193 - },  
1194 - {  
1195 - id: {  
1196 - id: '2d522e40-66f3-11ed-9971-afda5db1badc',  
1197 - },  
1198 - createdTime: 0,  
1199 - type: 'ACTION',  
1200 - scope: 'TENANT',  
1201 - name: 'device profile',  
1202 - clazz: 'org.thingsboard.rule.engine.profile.TbDeviceProfileNode',  
1203 - configurationDescriptor: {  
1204 - nodeDefinition: {  
1205 - details:  
1206 - "Create and clear alarms based on alarm rules defined in device profile. The output relation type is either 'Alarm Created', 'Alarm Updated', 'Alarm Severity Updated' and 'Alarm Cleared' or simply 'Success' if no alarms were affected.",  
1207 - description: 'Process device messages based on device profile settings',  
1208 - inEnabled: true,  
1209 - outEnabled: true,  
1210 - relationTypes: [  
1211 - 'Alarm Created',  
1212 - 'Alarm Updated',  
1213 - 'Alarm Severity Updated',  
1214 - 'Alarm Cleared',  
1215 - 'Success',  
1216 - 'Failure',  
1217 - ],  
1218 - customRelations: true,  
1219 - ruleChainNode: false,  
1220 - defaultConfiguration: {  
1221 - persistAlarmRulesState: false,  
1222 - fetchAlarmRulesStateOnStart: false,  
1223 - },  
1224 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1225 - configDirective: 'tbDeviceProfileConfig',  
1226 - icon: '',  
1227 - iconUrl: '',  
1228 - docUrl: '',  
1229 - },  
1230 - },  
1231 - actions: null,  
1232 - },  
1233 - {  
1234 - id: {  
1235 - id: '2d5ae0d0-66f3-11ed-9971-afda5db1badc',  
1236 - },  
1237 - createdTime: 0,  
1238 - type: 'ACTION',  
1239 - scope: 'TENANT',  
1240 - name: 'rpc call reply',  
1241 - clazz: 'org.thingsboard.rule.engine.rpc.TbSendRPCReplyNode',  
1242 - configurationDescriptor: {  
1243 - nodeDefinition: {  
1244 - details: 'Expects messages with any message type. Will forward message body to the device.',  
1245 - description: 'Sends reply to RPC call from device',  
1246 - inEnabled: true,  
1247 - outEnabled: true,  
1248 - relationTypes: ['Success', 'Failure'],  
1249 - customRelations: false,  
1250 - ruleChainNode: false,  
1251 - defaultConfiguration: {  
1252 - serviceIdMetaDataAttribute: 'serviceId',  
1253 - sessionIdMetaDataAttribute: 'sessionId',  
1254 - requestIdMetaDataAttribute: 'requestId',  
1255 - },  
1256 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1257 - configDirective: 'tbActionNodeRpcReplyConfig',  
1258 - icon: 'material-symbols:call-merge',  
1259 - iconUrl: '',  
1260 - docUrl: '',  
1261 - },  
1262 - },  
1263 - actions: null,  
1264 - },  
1265 - {  
1266 - id: {  
1267 - id: '2d91f660-66f3-11ed-9971-afda5db1badc',  
1268 - },  
1269 - createdTime: 0,  
1270 - type: 'ACTION',  
1271 - scope: 'TENANT',  
1272 - name: 'copy to view',  
1273 - clazz: 'org.thingsboard.rule.engine.action.TbCopyAttributesToEntityViewNode',  
1274 - configurationDescriptor: {  
1275 - nodeDefinition: {  
1276 - details:  
1277 - 'Copy attributes from asset/device to related entity view according to entity view configuration. \n Copy will be done only for attributes that are between start and end dates and according to attribute keys configuration. \nChanges message originator to related entity view and produces new messages according to count of updated entity views',  
1278 - description:  
1279 - 'Copy attributes from asset/device to entity view and changes message originator to related entity view',  
1280 - inEnabled: true,  
1281 - outEnabled: true,  
1282 - relationTypes: ['Success', 'Failure'],  
1283 - customRelations: false,  
1284 - ruleChainNode: false,  
1285 - defaultConfiguration: {  
1286 - version: 0,  
1287 - },  
1288 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1289 - configDirective: 'tbNodeEmptyConfig',  
1290 - icon: 'content_copy',  
1291 - iconUrl: '',  
1292 - docUrl: '',  
1293 - },  
1294 - },  
1295 - actions: null,  
1296 - },  
1297 - {  
1298 - id: {  
1299 - id: '2daf1b50-66f3-11ed-9971-afda5db1badc',  
1300 - },  
1301 - createdTime: 0,  
1302 - type: 'ACTION',  
1303 - scope: 'TENANT',  
1304 - name: 'log',  
1305 - clazz: 'org.thingsboard.rule.engine.action.TbLogNode',  
1306 - configurationDescriptor: {  
1307 - nodeDefinition: {  
1308 - details:  
1309 - "Transform incoming Message with configured JS function to String and log final value into Thingsboard log file. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",  
1310 - description: 'Log incoming messages using JS script for transformation Message into String',  
1311 - inEnabled: true,  
1312 - outEnabled: true,  
1313 - relationTypes: ['Success', 'Failure'],  
1314 - customRelations: false,  
1315 - ruleChainNode: false,  
1316 - defaultConfiguration: {  
1317 - jsScript:  
1318 - "return 'Incoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);",  
1319 - },  
1320 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1321 - configDirective: 'tbActionNodeLogConfig',  
1322 - icon: 'menu',  
1323 - iconUrl: '',  
1324 - docUrl: '',  
1325 - },  
1326 - },  
1327 - actions: null,  
1328 - },  
1329 - {  
1330 - id: {  
1331 - id: '2dcbcb10-66f3-11ed-9971-afda5db1badc',  
1332 - },  
1333 - createdTime: 0,  
1334 - type: 'ACTION',  
1335 - scope: 'TENANT',  
1336 - name: 'save to custom table',  
1337 - clazz: 'org.thingsboard.rule.engine.action.TbSaveToCustomCassandraTableNode',  
1338 - configurationDescriptor: {  
1339 - nodeDefinition: {  
1340 - details:  
1341 - 'Administrator should set the custom table name without prefix: <b>cs_tb_</b>. <br>Administrator can configure the mapping between the Message field names and Table columns name.<br><b>Note:</b>If the mapping key is <b>$entity_id</b>, that is identified by the Message Originator, then to the appropriate column name(mapping value) will be write the message originator id.<br><br>If specified message field does not exist or is not a JSON Primitive, the outbound message will be routed via <b>failure</b> chain, otherwise, the message will be routed via <b>success</b> chain.',  
1342 - description:  
1343 - 'Node stores data from incoming Message payload to the Cassandra database into the predefined custom table that should have <b>cs_tb_</b> prefix, to avoid the data insertion to the common TB tables.<br><b>Note:</b> rule node can be used only for Cassandra DB.',  
1344 - inEnabled: true,  
1345 - outEnabled: true,  
1346 - relationTypes: ['Success', 'Failure'],  
1347 - customRelations: false,  
1348 - ruleChainNode: false,  
1349 - defaultConfiguration: {  
1350 - tableName: '',  
1351 - fieldsMapping: {  
1352 - '': '',  
1353 - },  
1354 - },  
1355 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1356 - configDirective: 'tbActionNodeCustomTableConfig',  
1357 - icon: 'material-symbols:file-upload',  
1358 - iconUrl: '',  
1359 - docUrl: '',  
1360 - },  
1361 - },  
1362 - actions: null,  
1363 - },  
1364 - {  
1365 - id: {  
1366 - id: '09c317a0-adc0-11ed-9e64-ef7bdf80a49e',  
1367 - },  
1368 - createdTime: 0,  
1369 - type: 'ACTION',  
1370 - scope: 'TENANT',  
1371 - name: 'clear alarm',  
1372 - clazz: 'org.thingsboard.rule.engine.action.TbClearAlarmNode',  
1373 - configurationDescriptor: {  
1374 - nodeDefinition: {  
1375 - details:  
1376 - "Details - JS function that creates JSON object based on incoming message. This object will be added into Alarm.details field.\nNode output:\nIf alarm was not cleared, original message is returned. Otherwise new Message returned with type 'ALARM', Alarm object in 'msg' property and 'metadata' will contains 'isClearedAlarm' property. Message payload can be accessed via <code>msg</code> property. For example <code>'temperature = ' + msg.temperature ;</code>. Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",  
1377 - description: 'Clear Alarm',  
1378 - inEnabled: true,  
1379 - outEnabled: true,  
1380 - relationTypes: ['Cleared', 'False', 'Failure'],  
1381 - customRelations: false,  
1382 - ruleChainNode: false,  
1383 - defaultConfiguration: {  
1384 - alarmType: 'General Alarm',  
1385 - alarmDetailsBuildJs:  
1386 - 'var details = {};\nif (metadata.prevAlarmDetails) {\n details = JSON.parse(metadata.prevAlarmDetails);\n //remove prevAlarmDetails from metadata\n delete metadata.prevAlarmDetails;\n //now metadata is the same as it comes IN this rule node\n}\n\n\nreturn details;',  
1387 - },  
1388 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1389 - configDirective: 'tbActionNodeClearAlarmConfig',  
1390 - icon: 'notifications_off',  
1391 - iconUrl: '',  
1392 - docUrl: '',  
1393 - },  
1394 - },  
1395 - actions: null,  
1396 - },  
1397 - {  
1398 - id: {  
1399 - id: '2e484e10-66f3-11ed-9971-afda5db1badc',  
1400 - },  
1401 - createdTime: 0,  
1402 - type: 'ACTION',  
1403 - scope: 'TENANT',  
1404 - name: 'delete relation',  
1405 - clazz: 'org.thingsboard.rule.engine.action.TbDeleteRelationNode',  
1406 - configurationDescriptor: {  
1407 - nodeDefinition: {  
1408 - details:  
1409 - 'If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.',  
1410 - description:  
1411 - "Finds target Entity by entity name pattern and then delete a relation to Originator Entity by type and direction if 'Delete single entity' is set to true, otherwise rule node will delete all relations to the originator of the message by type and direction.",  
1412 - inEnabled: true,  
1413 - outEnabled: true,  
1414 - relationTypes: ['Success', 'Failure'],  
1415 - customRelations: false,  
1416 - ruleChainNode: false,  
1417 - defaultConfiguration: {  
1418 - direction: 'FROM',  
1419 - relationType: 'Contains',  
1420 - entityType: null,  
1421 - entityNamePattern: '',  
1422 - entityTypePattern: null,  
1423 - entityCacheExpiration: 300,  
1424 - deleteForSingleEntity: true,  
1425 - },  
1426 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1427 - configDirective: 'tbActionNodeDeleteRelationConfig',  
1428 - icon: 'ic:baseline-remove-circle',  
1429 - iconUrl: '',  
1430 - docUrl: '',  
1431 - },  
1432 - },  
1433 - actions: null,  
1434 - },  
1435 - {  
1436 - id: {  
1437 - id: '2e5cc070-66f3-11ed-9971-afda5db1badc',  
1438 - },  
1439 - createdTime: 1668743015927,  
1440 - type: 'ACTION',  
1441 - scope: 'TENANT',  
1442 - name: 'delay (deprecated)',  
1443 - clazz: 'org.thingsboard.rule.engine.delay.TbMsgDelayNode',  
1444 - configurationDescriptor: {  
1445 - nodeDefinition: {  
1446 - details:  
1447 - 'Delays messages for a configurable period. Please note, this node acknowledges the message from the current queue (message will be removed from queue). Deprecated because the acknowledged message still stays in memory (to be delayed) and this does not guarantee that message will be processed even if the "retry failures and timeouts" processing strategy will be chosen.',  
1448 - description: 'Delays incoming message (deprecated)',  
1449 - inEnabled: true,  
1450 - outEnabled: true,  
1451 - relationTypes: ['Success', 'Failure'],  
1452 - customRelations: false,  
1453 - ruleChainNode: false,  
1454 - defaultConfiguration: {  
1455 - periodInSeconds: 60,  
1456 - maxPendingMsgs: 1000,  
1457 - periodInSecondsPattern: null,  
1458 - useMetadataPeriodInSecondsPatterns: false,  
1459 - },  
1460 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1461 - configDirective: 'tbActionNodeMsgDelayConfig',  
1462 - icon: 'material-symbols:pause',  
1463 - iconUrl: '',  
1464 - docUrl: '',  
1465 - },  
1466 - },  
1467 - actions: null,  
1468 - },  
1469 - {  
1470 - id: {  
1471 - id: '2e657300-66f3-11ed-9971-afda5db1badc',  
1472 - },  
1473 - createdTime: 1668743015984,  
1474 - type: 'ACTION',  
1475 - scope: 'TENANT',  
1476 - name: 'message count',  
1477 - clazz: 'org.thingsboard.rule.engine.action.TbMsgCountNode',  
1478 - configurationDescriptor: {  
1479 - nodeDefinition: {  
1480 - details:  
1481 - 'Count incoming messages for specified interval and produces POST_TELEMETRY_REQUEST msg with messages count',  
1482 - description: 'Count incoming messages',  
1483 - inEnabled: true,  
1484 - outEnabled: true,  
1485 - relationTypes: ['Success', 'Failure'],  
1486 - customRelations: false,  
1487 - ruleChainNode: false,  
1488 - defaultConfiguration: {  
1489 - telemetryPrefix: 'messageCount',  
1490 - interval: 1,  
1491 - },  
1492 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1493 - configDirective: 'tbActionNodeMsgCountConfig',  
1494 - icon: 'material-symbols:functions',  
1495 - iconUrl: '',  
1496 - docUrl: '',  
1497 - },  
1498 - },  
1499 - actions: null,  
1500 - },  
1501 - {  
1502 - id: {  
1503 - id: '875e0aa0-b1ce-11ed-bbe5-792dfa3f674a',  
1504 - },  
1505 - createdTime: 1676973611082,  
1506 - type: 'ACTION',  
1507 - scope: 'TENANT',  
1508 - name: 'save event',  
1509 - clazz: 'org.thingsboard.rule.engine.yunteng.event.TkMsgEventNode',  
1510 - configurationDescriptor: {  
1511 - nodeDefinition: {  
1512 - details: "Saves entity event . Expects messages with 'POST_EVENT_REQUEST' message type",  
1513 - description: 'Saves device event data',  
1514 - inEnabled: true,  
1515 - outEnabled: true,  
1516 - relationTypes: ['Success', 'Failure'],  
1517 - customRelations: false,  
1518 - ruleChainNode: false,  
1519 - defaultConfiguration: {  
1520 - useServerTs: true,  
1521 - },  
1522 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1523 - configDirective: 'tkMsgEventNodeConfiguration',  
1524 - icon: 'material-symbols:file-upload',  
1525 - iconUrl: '',  
1526 - docUrl: '',  
1527 - },  
1528 - },  
1529 - actions: null,  
1530 - },  
1531 - {  
1532 - id: {  
1533 - id: '2e9e3640-66f3-11ed-9971-afda5db1badc',  
1534 - },  
1535 - createdTime: 1668743016356,  
1536 - type: 'ACTION',  
1537 - scope: 'TENANT',  
1538 - name: 'rpc call request',  
1539 - clazz: 'org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode',  
1540 - configurationDescriptor: {  
1541 - nodeDefinition: {  
1542 - details:  
1543 - 'Expects messages with "method" and "params". Will forward response from device to next nodes.If the RPC call request is originated by REST API call from user, will forward the response to user immediately.',  
1544 - description: 'Sends RPC call to device',  
1545 - inEnabled: true,  
1546 - outEnabled: true,  
1547 - relationTypes: ['Success', 'Failure'],  
1548 - customRelations: false,  
1549 - ruleChainNode: false,  
1550 - defaultConfiguration: {  
1551 - timeoutInSeconds: 60,  
1552 - },  
1553 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1554 - configDirective: 'tbActionNodeRpcRequestConfig',  
1555 - icon: 'material-symbols:call-made',  
1556 - iconUrl: '',  
1557 - docUrl: '',  
1558 - },  
1559 - },  
1560 - actions: null,  
1561 - },  
1562 - {  
1563 - id: {  
1564 - id: '2eb28190-66f3-11ed-9971-afda5db1badc',  
1565 - },  
1566 - createdTime: 1668743016489,  
1567 - type: 'ACTION',  
1568 - scope: 'TENANT',  
1569 - name: 'synchronization start',  
1570 - clazz: 'org.thingsboard.rule.engine.transaction.TbSynchronizationBeginNode',  
1571 - configurationDescriptor: {  
1572 - nodeDefinition: {  
1573 - details:  
1574 - 'This node should be used together with "synchronization end" node. \n This node will put messages into queue based on message originator id. \nSubsequent messages will not be processed until the previous message processing is completed or timeout event occurs.\nSize of the queue per originator and timeout values are configurable on a system level',  
1575 - description: 'This Node is now deprecated. Use "Checkpoint" instead.',  
1576 - inEnabled: true,  
1577 - outEnabled: true,  
1578 - relationTypes: ['Success', 'Failure'],  
1579 - customRelations: false,  
1580 - ruleChainNode: false,  
1581 - defaultConfiguration: {  
1582 - version: 0,  
1583 - },  
1584 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1585 - configDirective: 'tbNodeEmptyConfig',  
1586 - icon: '',  
1587 - iconUrl: '',  
1588 - docUrl: '',  
1589 - },  
1590 - },  
1591 - actions: null,  
1592 - },  
1593 - {  
1594 - id: {  
1595 - id: '2ebcbac0-66f3-11ed-9971-afda5db1badc',  
1596 - },  
1597 - createdTime: 1668743016556,  
1598 - type: 'ACTION',  
1599 - scope: 'TENANT',  
1600 - name: 'synchronization end',  
1601 - clazz: 'org.thingsboard.rule.engine.transaction.TbSynchronizationEndNode',  
1602 - configurationDescriptor: {  
1603 - nodeDefinition: {  
1604 - details: '',  
1605 - description: 'This Node is now deprecated. Use "Checkpoint" instead.',  
1606 - inEnabled: true,  
1607 - outEnabled: true,  
1608 - relationTypes: ['Success', 'Failure'],  
1609 - customRelations: false,  
1610 - ruleChainNode: false,  
1611 - defaultConfiguration: {  
1612 - version: 0,  
1613 - },  
1614 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1615 - configDirective: 'tbNodeEmptyConfig',  
1616 - icon: '',  
1617 - iconUrl: '',  
1618 - docUrl: '',  
1619 - },  
1620 - },  
1621 - actions: null,  
1622 - },  
1623 - {  
1624 - id: {  
1625 - id: '2ec5e280-66f3-11ed-9971-afda5db1badc',  
1626 - },  
1627 - createdTime: 1668743016616,  
1628 - type: 'ACTION',  
1629 - scope: 'TENANT',  
1630 - name: 'save attributes',  
1631 - clazz: 'org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode',  
1632 - configurationDescriptor: {  
1633 - nodeDefinition: {  
1634 - details:  
1635 - "Saves entity attributes based on configurable scope parameter. Expects messages with 'POST_ATTRIBUTES_REQUEST' message type",  
1636 - description: 'Saves attributes data',  
1637 - inEnabled: true,  
1638 - outEnabled: true,  
1639 - relationTypes: ['Success', 'Failure'],  
1640 - customRelations: false,  
1641 - ruleChainNode: false,  
1642 - defaultConfiguration: {  
1643 - scope: 'SERVER_SCOPE',  
1644 - notifyDevice: false,  
1645 - },  
1646 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1647 - configDirective: 'tbActionNodeAttributesConfig',  
1648 - icon: 'material-symbols:file-upload',  
1649 - iconUrl: '',  
1650 - docUrl: '',  
1651 - },  
1652 - },  
1653 - actions: null,  
1654 - },  
1655 - {  
1656 - id: {  
1657 - id: '2ed12d20-66f3-11ed-9971-afda5db1badc',  
1658 - },  
1659 - createdTime: 0,  
1660 - type: 'ACTION',  
1661 - scope: 'TENANT',  
1662 - name: 'create relation',  
1663 - clazz: 'org.thingsboard.rule.engine.action.TbCreateRelationNode',  
1664 - configurationDescriptor: {  
1665 - nodeDefinition: {  
1666 - details:  
1667 - 'If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.',  
1668 - description:  
1669 - "Finds target Entity by entity name pattern and (entity type pattern for Asset, Device) and then create a relation to Originator Entity by type and direction. If Selected entity type: Asset, Device or Customer will create new Entity if it doesn't exist and selected checkbox 'Create new entity if not exists'.<br> In case that relation from the message originator to the selected entity not exist and If selected checkbox 'Remove current relations', before creating the new relation all existed relations to message originator by type and direction will be removed.<br> If relation from the message originator to the selected entity created and If selected checkbox 'Change originator to related entity', outbound message will be processed as a message from this entity.",  
1670 - inEnabled: true,  
1671 - outEnabled: true,  
1672 - relationTypes: ['Success', 'Failure'],  
1673 - customRelations: false,  
1674 - ruleChainNode: false,  
1675 - defaultConfiguration: {  
1676 - direction: 'FROM',  
1677 - relationType: 'Contains',  
1678 - entityType: null,  
1679 - entityNamePattern: '',  
1680 - entityTypePattern: null,  
1681 - entityCacheExpiration: 300,  
1682 - createEntityIfNotExists: false,  
1683 - changeOriginatorToRelatedEntity: false,  
1684 - removeCurrentRelations: false,  
1685 - },  
1686 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1687 - configDirective: 'tbActionNodeCreateRelationConfig',  
1688 - icon: 'material-symbols:add-circle',  
1689 - iconUrl: '',  
1690 - docUrl: '',  
1691 - },  
1692 - },  
1693 - actions: null,  
1694 - },  
1695 - {  
1696 - id: {  
1697 - id: '2cb55200-66f3-11ed-9971-afda5db1badc',  
1698 - },  
1699 - createdTime: 0,  
1700 - type: 'FILTER',  
1701 - scope: 'TENANT',  
1702 - name: 'script',  
1703 - clazz: 'org.thingsboard.rule.engine.filter.TbJsFilterNode',  
1704 - configurationDescriptor: {  
1705 - nodeDefinition: {  
1706 - details:  
1707 - "Evaluate incoming Message with configured JS condition. If <b>True</b> - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.",  
1708 - description: 'Filter incoming messages using JS script',  
1709 - inEnabled: true,  
1710 - outEnabled: true,  
1711 - relationTypes: ['True', 'False', 'Failure'],  
1712 - customRelations: false,  
1713 - ruleChainNode: false,  
1714 - defaultConfiguration: {  
1715 - jsScript: 'return msg.temperature > 20;',  
1716 - },  
1717 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1718 - configDirective: 'tbFilterNodeScriptConfig',  
1719 - icon: '',  
1720 - iconUrl: '',  
1721 - docUrl: '',  
1722 - },  
1723 - },  
1724 - actions: null,  
1725 - },  
1726 - {  
1727 - id: {  
1728 - id: '2cf34560-66f3-11ed-9971-afda5db1badc',  
1729 - },  
1730 - createdTime: 1668743013558,  
1731 - type: 'FILTER',  
1732 - scope: 'TENANT',  
1733 - name: 'scene react',  
1734 - clazz: 'org.thingsboard.rule.engine.yunteng.scene.TbSceneReactNode',  
1735 - configurationDescriptor: {  
1736 - nodeDefinition: {  
1737 - details: '基于业务场景,实现设备的交互控制。',  
1738 - description: '基于业务场景,实现设备的交互控制。',  
1739 - inEnabled: true,  
1740 - outEnabled: true,  
1741 - relationTypes: ['Message', 'Alarm Created', 'Alarm Updated', 'RPC Request', 'Failure'],  
1742 - customRelations: false,  
1743 - ruleChainNode: false,  
1744 - defaultConfiguration: {  
1745 - alarmStatusList: ['ACTIVE_ACK', 'ACTIVE_UNACK'],  
1746 - },  
1747 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1748 - configDirective: 'tbSceneReactNodeConfig',  
1749 - icon: '',  
1750 - iconUrl: '',  
1751 - docUrl: '',  
1752 - },  
1753 - },  
1754 - actions: null,  
1755 - },  
1756 - {  
1757 - id: {  
1758 - id: '2d104340-66f3-11ed-9971-afda5db1badc',  
1759 - },  
1760 - createdTime: 0,  
1761 - type: 'FILTER',  
1762 - scope: 'TENANT',  
1763 - name: 'check existence fields',  
1764 - clazz: 'org.thingsboard.rule.engine.filter.TbCheckMessageNode',  
1765 - configurationDescriptor: {  
1766 - nodeDefinition: {  
1767 - details:  
1768 - "If selected checkbox 'Check that all selected keys are present'\" and all keys in message data and metadata are exist - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.\nElse if the checkbox is not selected, and at least one of the keys from data or metadata of the message exists - send Message via <b>True</b> chain, otherwise, <b>False</b> chain is used. ",  
1769 - description: 'Checks the existence of the selected keys from message data and metadata.',  
1770 - inEnabled: true,  
1771 - outEnabled: true,  
1772 - relationTypes: ['True', 'False', 'Failure'],  
1773 - customRelations: false,  
1774 - ruleChainNode: false,  
1775 - defaultConfiguration: {  
1776 - messageNames: [],  
1777 - metadataNames: [],  
1778 - checkAllKeys: true,  
1779 - },  
1780 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1781 - configDirective: 'tbFilterNodeCheckMessageConfig',  
1782 - icon: '',  
1783 - iconUrl: '',  
1784 - docUrl: '',  
1785 - },  
1786 - },  
1787 - actions: null,  
1788 - },  
1789 - {  
1790 - id: {  
1791 - id: '2d191ce0-66f3-11ed-9971-afda5db1badc',  
1792 - },  
1793 - createdTime: 0,  
1794 - type: 'FILTER',  
1795 - scope: 'TENANT',  
1796 - name: 'originator type switch',  
1797 - clazz: 'org.thingsboard.rule.engine.filter.TbOriginatorTypeSwitchNode',  
1798 - configurationDescriptor: {  
1799 - nodeDefinition: {  
1800 - details:  
1801 - "Routes messages to chain according to the originator type ('Device', 'Asset', etc.).",  
1802 - description: 'Route incoming messages by Message Originator Type',  
1803 - inEnabled: true,  
1804 - outEnabled: true,  
1805 - relationTypes: [  
1806 - 'Device',  
1807 - 'Asset',  
1808 - 'Alarm',  
1809 - 'Entity View',  
1810 - 'Tenant',  
1811 - 'Customer',  
1812 - 'User',  
1813 - 'Dashboard',  
1814 - 'Rule chain',  
1815 - 'Rule node',  
1816 - 'Failure',  
1817 - ],  
1818 - customRelations: false,  
1819 - ruleChainNode: false,  
1820 - defaultConfiguration: {  
1821 - version: 0,  
1822 - },  
1823 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1824 - configDirective: 'tbNodeEmptyConfig',  
1825 - icon: '',  
1826 - iconUrl: '',  
1827 - docUrl: '',  
1828 - },  
1829 - },  
1830 - actions: null,  
1831 - },  
1832 - {  
1833 - id: {  
1834 - id: '07b4f820-adc0-11ed-9e64-ef7bdf80a49e',  
1835 - },  
1836 - createdTime: 0,  
1837 - type: 'FILTER',  
1838 - scope: 'TENANT',  
1839 - name: 'check relation',  
1840 - clazz: 'org.thingsboard.rule.engine.filter.TbCheckRelationNode',  
1841 - configurationDescriptor: {  
1842 - nodeDefinition: {  
1843 - details:  
1844 - 'If at least one relation exists - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.',  
1845 - description:  
1846 - "Checks the relation from the selected entity to the originator of the message by type and direction if 'Check for single entity' is set to true, otherwise rule node will check if exist any relation to the originator of the message by type and direction.",  
1847 - inEnabled: true,  
1848 - outEnabled: true,  
1849 - relationTypes: ['True', 'False', 'Failure'],  
1850 - customRelations: false,  
1851 - ruleChainNode: false,  
1852 - defaultConfiguration: {  
1853 - direction: 'FROM',  
1854 - entityId: null,  
1855 - entityType: null,  
1856 - relationType: 'Contains',  
1857 - checkForSingleEntity: true,  
1858 - },  
1859 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1860 - configDirective: 'tbFilterNodeCheckRelationConfig',  
1861 - icon: '',  
1862 - iconUrl: '',  
1863 - docUrl: '',  
1864 - },  
1865 - },  
1866 - actions: null,  
1867 - },  
1868 - {  
1869 - id: {  
1870 - id: '2d6d0940-66f3-11ed-9971-afda5db1badc',  
1871 - },  
1872 - createdTime: 0,  
1873 - type: 'FILTER',  
1874 - scope: 'TENANT',  
1875 - name: 'message type',  
1876 - clazz: 'org.thingsboard.rule.engine.filter.TbMsgTypeFilterNode',  
1877 - configurationDescriptor: {  
1878 - nodeDefinition: {  
1879 - details:  
1880 - 'If incoming MessageType is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.',  
1881 - description: 'Filter incoming messages by Message Type',  
1882 - inEnabled: true,  
1883 - outEnabled: true,  
1884 - relationTypes: ['True', 'False', 'Failure'],  
1885 - customRelations: false,  
1886 - ruleChainNode: false,  
1887 - defaultConfiguration: {  
1888 - messageTypes: [  
1889 - 'POST_ATTRIBUTES_REQUEST',  
1890 - 'POST_TELEMETRY_REQUEST',  
1891 - 'TO_SERVER_RPC_REQUEST',  
1892 - ],  
1893 - },  
1894 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1895 - configDirective: 'tbFilterNodeMessageTypeConfig',  
1896 - icon: '',  
1897 - iconUrl: '',  
1898 - docUrl: '',  
1899 - },  
1900 - },  
1901 - actions: null,  
1902 - },  
1903 - {  
1904 - id: {  
1905 - id: '2dc31880-66f3-11ed-9971-afda5db1badc',  
1906 - },  
1907 - createdTime: 0,  
1908 - type: 'FILTER',  
1909 - scope: 'TENANT',  
1910 - name: 'originator type',  
1911 - clazz: 'org.thingsboard.rule.engine.filter.TbOriginatorTypeFilterNode',  
1912 - configurationDescriptor: {  
1913 - nodeDefinition: {  
1914 - details:  
1915 - 'If Originator Type of incoming message is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.',  
1916 - description: 'Filter incoming messages by message Originator Type',  
1917 - inEnabled: true,  
1918 - outEnabled: true,  
1919 - relationTypes: ['True', 'False', 'Failure'],  
1920 - customRelations: false,  
1921 - ruleChainNode: false,  
1922 - defaultConfiguration: {  
1923 - originatorTypes: ['DEVICE'],  
1924 - },  
1925 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1926 - configDirective: 'tbFilterNodeOriginatorTypeConfig',  
1927 - icon: '',  
1928 - iconUrl: '',  
1929 - docUrl: '',  
1930 - },  
1931 - },  
1932 - actions: null,  
1933 - },  
1934 - {  
1935 - id: {  
1936 - id: '2ddfc840-66f3-11ed-9971-afda5db1badc',  
1937 - },  
1938 - createdTime: 0,  
1939 - type: 'FILTER',  
1940 - scope: 'TENANT',  
1941 - name: 'message type switch',  
1942 - clazz: 'org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode',  
1943 - configurationDescriptor: {  
1944 - nodeDefinition: {  
1945 - details:  
1946 - 'Sends messages with message types <b>"Post attributes", "Post telemetry", "RPC Request"</b> etc. via corresponding chain, otherwise <b>Other</b> chain is used.',  
1947 - description: 'Route incoming messages by Message Type',  
1948 - inEnabled: true,  
1949 - outEnabled: true,  
1950 - relationTypes: [  
1951 - 'Post event',  
1952 - 'Post attributes',  
1953 - 'Post telemetry',  
1954 - 'RPC Request from Device',  
1955 - 'RPC Request to Device',  
1956 - 'RPC Queued',  
1957 - 'RPC Sent',  
1958 - 'RPC Delivered',  
1959 - 'RPC Successful',  
1960 - 'RPC Timeout',  
1961 - 'RPC Expired',  
1962 - 'RPC Failed',  
1963 - 'RPC Deleted',  
1964 - 'Activity Event',  
1965 - 'Inactivity Event',  
1966 - 'Connect Event',  
1967 - 'Disconnect Event',  
1968 - 'Entity Created',  
1969 - 'Entity Updated',  
1970 - 'Entity Deleted',  
1971 - 'Entity Assigned',  
1972 - 'Entity Unassigned',  
1973 - 'Attributes Updated',  
1974 - 'Attributes Deleted',  
1975 - 'Alarm Acknowledged',  
1976 - 'Alarm Cleared',  
1977 - 'Other',  
1978 - 'Entity Assigned From Tenant',  
1979 - 'Entity Assigned To Tenant',  
1980 - 'Timeseries Updated',  
1981 - 'Timeseries Deleted',  
1982 - 'Failure',  
1983 - ],  
1984 - customRelations: false,  
1985 - ruleChainNode: false,  
1986 - defaultConfiguration: {  
1987 - version: 0,  
1988 - },  
1989 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
1990 - configDirective: 'tbNodeEmptyConfig',  
1991 - icon: '',  
1992 - iconUrl: '',  
1993 - docUrl: '',  
1994 - },  
1995 - },  
1996 - actions: null,  
1997 - },  
1998 - {  
1999 - id: {  
2000 - id: '2e534a90-66f3-11ed-9971-afda5db1badc',  
2001 - },  
2002 - createdTime: 1668743015865,  
2003 - type: 'FILTER',  
2004 - scope: 'TENANT',  
2005 - name: 'switch',  
2006 - clazz: 'org.thingsboard.rule.engine.filter.TbJsSwitchNode',  
2007 - configurationDescriptor: {  
2008 - nodeDefinition: {  
2009 - details:  
2010 - "Node executes configured JS script. Script should return array of next Chain names where Message should be routed. If Array is empty - message not routed to next Node. Message payload can be accessed via <code>msg</code> property. For example <code>msg.temperature < 10;</code><br/>Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>Message type can be accessed via <code>msgType</code> property.",  
2011 - description: 'Route incoming Message to one or multiple output chains',  
2012 - inEnabled: true,  
2013 - outEnabled: true,  
2014 - relationTypes: ['Failure'],  
2015 - customRelations: true,  
2016 - ruleChainNode: false,  
2017 - defaultConfiguration: {  
2018 - jsScript:  
2019 - "function nextRelation(metadata, msg) {\n return ['one','nine'];\n}\nif(msgType === 'POST_TELEMETRY_REQUEST') {\n return ['two'];\n}\nreturn nextRelation(metadata, msg);",  
2020 - },  
2021 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
2022 - configDirective: 'tbFilterNodeSwitchConfig',  
2023 - icon: '',  
2024 - iconUrl: '',  
2025 - docUrl: '',  
2026 - },  
2027 - },  
2028 - actions: null,  
2029 - },  
2030 - {  
2031 - id: {  
2032 - id: '2e81ad90-66f3-11ed-9971-afda5db1badc',  
2033 - },  
2034 - createdTime: 1668743016169,  
2035 - type: 'FILTER',  
2036 - scope: 'TENANT',  
2037 - name: 'gps geofencing filter',  
2038 - clazz: 'org.thingsboard.rule.engine.geo.TbGpsGeofencingFilterNode',  
2039 - configurationDescriptor: {  
2040 - nodeDefinition: {  
2041 - details:  
2042 - "Extracts latitude and longitude parameters from incoming message and returns 'True' if they are inside configured perimeters, 'False' otherwise.",  
2043 - description: 'Filter incoming messages by GPS based geofencing',  
2044 - inEnabled: true,  
2045 - outEnabled: true,  
2046 - relationTypes: ['True', 'False', 'Failure'],  
2047 - customRelations: false,  
2048 - ruleChainNode: false,  
2049 - defaultConfiguration: {  
2050 - latitudeKeyName: 'latitude',  
2051 - longitudeKeyName: 'longitude',  
2052 - perimeterType: 'POLYGON',  
2053 - fetchPerimeterInfoFromMessageMetadata: true,  
2054 - perimeterKeyName: 'ss_perimeter',  
2055 - polygonsDefinition: null,  
2056 - centerLatitude: null,  
2057 - centerLongitude: null,  
2058 - range: null,  
2059 - rangeUnit: null,  
2060 - },  
2061 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
2062 - configDirective: 'tbFilterNodeGpsGeofencingConfig',  
2063 - icon: '',  
2064 - iconUrl: '',  
2065 - docUrl: '',  
2066 - },  
2067 - },  
2068 - actions: null,  
2069 - },  
2070 - {  
2071 - id: {  
2072 - id: '2ea7ac20-66f3-11ed-9971-afda5db1badc',  
2073 - },  
2074 - createdTime: 1668743016418,  
2075 - type: 'FILTER',  
2076 - scope: 'TENANT',  
2077 - name: 'check alarm status',  
2078 - clazz: 'org.thingsboard.rule.engine.filter.TbCheckAlarmStatusNode',  
2079 - configurationDescriptor: {  
2080 - nodeDefinition: {  
2081 - details:  
2082 - 'If the alarm status matches the specified one - msg is success if does not match - msg is failure.',  
2083 - description: 'Checks alarm status.',  
2084 - inEnabled: true,  
2085 - outEnabled: true,  
2086 - relationTypes: ['True', 'False', 'Failure'],  
2087 - customRelations: false,  
2088 - ruleChainNode: false,  
2089 - defaultConfiguration: {  
2090 - alarmStatusList: ['ACTIVE_ACK', 'ACTIVE_UNACK'],  
2091 - },  
2092 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
2093 - configDirective: 'tbFilterNodeCheckAlarmStatusConfig',  
2094 - icon: '',  
2095 - iconUrl: '',  
2096 - docUrl: '',  
2097 - },  
2098 - },  
2099 - actions: null,  
2100 - },  
2101 - {  
2102 - id: {  
2103 - id: '2c825b20-66f3-11ed-9971-afda5db1badc',  
2104 - },  
2105 - createdTime: 0,  
2106 - type: 'TRANSFORMATION',  
2107 - scope: 'TENANT',  
2108 - name: 'change originator',  
2109 - clazz: 'org.thingsboard.rule.engine.transform.TbChangeOriginatorNode',  
2110 - configurationDescriptor: {  
2111 - nodeDefinition: {  
2112 - details:  
2113 - 'Related Entity found using configured relation direction and Relation Type. If multiple Related Entities are found, only first Entity is used as new Originator, other entities are discarded.<br/>Alarm Originator found only in case original Originator is <code>Alarm</code> entity.',  
2114 - description: 'Change Message Originator To Tenant/Customer/Related Entity/Alarm Originator',  
2115 - inEnabled: true,  
2116 - outEnabled: true,  
2117 - relationTypes: ['Success', 'Failure'],  
2118 - customRelations: false,  
2119 - ruleChainNode: false,  
2120 - defaultConfiguration: {  
2121 - originatorSource: 'CUSTOMER',  
2122 - relationsQuery: {  
2123 - direction: 'FROM',  
2124 - maxLevel: 1,  
2125 - filters: [  
2126 - {  
2127 - relationType: 'Contains',  
2128 - entityTypes: [],  
2129 - },  
2130 - ],  
2131 - fetchLastLevelOnly: false,  
2132 - },  
2133 - },  
2134 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
2135 - configDirective: 'tbTransformationNodeChangeOriginatorConfig',  
2136 - icon: 'find_replace',  
2137 - iconUrl: '',  
2138 - docUrl: '',  
2139 - },  
2140 - },  
2141 - actions: null,  
2142 - },  
2143 - {  
2144 - id: {  
2145 - id: '2d06a650-66f3-11ed-9971-afda5db1badc',  
2146 - },  
2147 - createdTime: 0,  
2148 - type: 'TRANSFORMATION',  
2149 - scope: 'TENANT',  
2150 - name: 'script',  
2151 - clazz: 'org.thingsboard.rule.engine.transform.TbTransformMsgNode',  
2152 - configurationDescriptor: {  
2153 - nodeDefinition: {  
2154 - details:  
2155 - 'JavaScript function receive 3 input parameters <br/> <code>metadata</code> - is a Message metadata.<br/><code>msg</code> - is a Message payload.<br/><code>msgType</code> - is a Message type.<br/>Should return the following structure:<br/><code>{ msg: <i style="color: #666;">new payload</i>,<br/>&nbsp&nbsp&nbspmetadata: <i style="color: #666;">new metadata</i>,<br/>&nbsp&nbsp&nbspmsgType: <i style="color: #666;">new msgType</i> }</code><br/>All fields in resulting object are optional and will be taken from original message if not specified.',  
2156 - description: 'Change Message payload, Metadata or Message type using JavaScript',  
2157 - inEnabled: true,  
2158 - outEnabled: true,  
2159 - relationTypes: ['Success', 'Failure'],  
2160 - customRelations: false,  
2161 - ruleChainNode: false,  
2162 - defaultConfiguration: {  
2163 - jsScript: 'return {msg: msg, metadata: metadata, msgType: msgType};',  
2164 - },  
2165 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
2166 - configDirective: 'tbTransformationNodeScriptConfig',  
2167 - icon: '',  
2168 - iconUrl: '',  
2169 - docUrl: '',  
2170 - },  
2171 - },  
2172 - actions: null,  
2173 - },  
2174 - {  
2175 - id: {  
2176 - id: '2e183d60-66f3-11ed-9971-afda5db1badc',  
2177 - },  
2178 - createdTime: 0,  
2179 - type: 'TRANSFORMATION',  
2180 - scope: 'TENANT',  
2181 - name: 'to email',  
2182 - clazz: 'org.thingsboard.rule.engine.mail.TbMsgToEmailNode',  
2183 - configurationDescriptor: {  
2184 - nodeDefinition: {  
2185 - details:  
2186 - "Transforms message to email message by populating email fields using values derived from message metadata. Set 'SEND_EMAIL' output message type.",  
2187 - description: 'Transforms message to email message',  
2188 - inEnabled: true,  
2189 - outEnabled: true,  
2190 - relationTypes: ['Success', 'Failure'],  
2191 - customRelations: false,  
2192 - ruleChainNode: false,  
2193 - defaultConfiguration: {  
2194 - fromTemplate: 'info@testmail.org',  
2195 - toTemplate: '${userEmail}',  
2196 - ccTemplate: null,  
2197 - bccTemplate: null,  
2198 - subjectTemplate: 'Device ${deviceType} temperature high',  
2199 - bodyTemplate: 'Device ${deviceName} has high temperature ${temp}',  
2200 - isHtmlTemplate: null,  
2201 - mailBodyType: 'false',  
2202 - },  
2203 - uiResources: ['static/rulenode/rulenode-core-config.js'],  
2204 - configDirective: 'tbTransformationNodeToEmailConfig',  
2205 - icon: 'email',  
2206 - iconUrl: '',  
2207 - docUrl: '',  
2208 - },  
2209 - },  
2210 - actions: null,  
2211 - },  
2212 -]; 5 +>[] = [];