diff --git a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeTbelScriptEngine.java b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeTbelScriptEngine.java index 2b1734b197..08b2d5e245 100644 --- a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeTbelScriptEngine.java +++ b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeTbelScriptEngine.java @@ -64,7 +64,7 @@ public class RuleNodeTbelScriptEngine extends RuleNodeScriptEngine res = new ArrayList<>(); for (Object resObject : (Collection) result) { if (resObject instanceof Map) { - res.add(unbindMsg((Map) result, msg)); + res.add(unbindMsg((Map) resObject, msg)); } else { return wrongResultType(resObject); } diff --git a/ui-ngx/src/assets/help/en_US/rulenode/clear_alarm_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/clear_alarm_node_script_fn.md index 74e4c83828..eed5cb2f07 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/clear_alarm_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/clear_alarm_node_script_fn.md @@ -22,9 +22,10 @@ Current Alarm Details can be accessed via `metadata.prevAlarmDetails`.
```javascript var details = {}; if (metadata.prevAlarmDetails) { + details = JSON.parse(metadata.prevAlarmDetails); // remove prevAlarmDetails from metadata delete metadata.prevAlarmDetails; - details = JSON.parse(metadata.prevAlarmDetails); + //now metadata is the same as it comes IN this rule node } {:copy-code} ``` diff --git a/ui-ngx/src/assets/help/en_US/rulenode/create_alarm_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/create_alarm_node_script_fn.md index c6c2fe2481..36bdd21d16 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/create_alarm_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/create_alarm_node_script_fn.md @@ -22,10 +22,11 @@ is a raw String field, and it needs to be converted into object using this const ```javascript var details = {}; -if (metadata.prevAlarmDetails) { - // remove prevAlarmDetails from metadata - delete metadata.prevAlarmDetails; +if (metadata.prevAlarmDetails != null) { details = JSON.parse(metadata.prevAlarmDetails); + // remove prevAlarmDetails from metadata + metadata.remove('prevAlarmDetails'); + //now metadata is the same as it comes IN this rule node } {:copy-code} ``` @@ -44,11 +45,11 @@ Also put temperature attribute from inbound Message payload into Al ```javascript var details = {temperature: msg.temperature, count: 1}; -if (metadata.prevAlarmDetails) { +if (metadata.prevAlarmDetails != null) { var prevDetails = JSON.parse(metadata.prevAlarmDetails); // remove prevAlarmDetails from metadata - delete metadata.prevAlarmDetails; - if (prevDetails.count) { + metadata.remove('prevAlarmDetails'); + if (prevDetails.count != null) { details.count = prevDetails.count + 1; } } diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/clear_alarm_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/clear_alarm_node_script_fn.md index 2acf8b7041..311086e785 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/clear_alarm_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/clear_alarm_node_script_fn.md @@ -5,7 +5,7 @@ *function Details(msg, metadata, msgType): any* -JavaScript function generating **Alarm Details** object to update existing one. Used for storing additional parameters inside Alarm.
+[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function generating **Alarm Details** object to update existing one. Used for storing additional parameters inside Alarm.
For example you can save attribute name/value pair from Original Message payload or Metadata. **Parameters:** @@ -21,10 +21,11 @@ Current Alarm Details can be accessed via `metadata.prevAlarmDetails`.
```javascript var details = {}; -if (metadata.prevAlarmDetails) { - // remove prevAlarmDetails from metadata - delete metadata.prevAlarmDetails; +if (metadata.prevAlarmDetails != null) { details = JSON.parse(metadata.prevAlarmDetails); + // remove prevAlarmDetails from metadata + metadata.remove('prevAlarmDetails'); + //now metadata is the same as it comes IN this rule node } {:copy-code} ``` @@ -43,11 +44,11 @@ Also put temperature attribute from inbound Message payload into Al ```javascript var details = {temperature: msg.temperature, count: 1}; -if (metadata.prevAlarmDetails) { +if (metadata.prevAlarmDetails != null) { var prevDetails = JSON.parse(metadata.prevAlarmDetails); // remove prevAlarmDetails from metadata - delete metadata.prevAlarmDetails; - if (prevDetails.count) { + metadata.remove('prevAlarmDetails'); + if (prevDetails.count != null) { details.count = prevDetails.count + 1; } } diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/create_alarm_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/create_alarm_node_script_fn.md index 6bf6a23239..afc9051590 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/create_alarm_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/create_alarm_node_script_fn.md @@ -5,7 +5,7 @@ *function Details(msg, metadata, msgType): any* -JavaScript function generating **Alarm Details** object. Used for storing additional parameters inside Alarm.
+[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function generating **Alarm Details** object. Used for storing additional parameters inside Alarm.
For example you can save attribute name/value pair from Original Message payload or Metadata. **Parameters:** diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/filter_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/filter_node_script_fn.md index 1a64a2d119..4435acaeff 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/filter_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/filter_node_script_fn.md @@ -5,7 +5,7 @@ *function Filter(msg, metadata, msgType): boolean* -JavaScript function defines a boolean expression based on the incoming Message and Metadata. +[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function defines a boolean expression based on the incoming Message and Metadata. **Parameters:** @@ -37,14 +37,14 @@ Example of the rule chain configuration: * Same as above, but checks that the message has 'temperature' field to **avoid failures** on unexpected messages: ```javascript -return typeof msg.temperature !== 'undefined' && msg.temperature > 20; +return msg.temperature != null && msg.temperature > 20; {:copy-code} ``` * Forward all messages with type `ATTRIBUTES_UPDATED` to the **True** chain and all other messages to the **False** chain: ```javascript -if (msgType === 'ATTRIBUTES_UPDATED') { +if (msgType == 'ATTRIBUTES_UPDATED') { return true; } else { return false; @@ -61,10 +61,10 @@ Otherwise send message to the False chain: ```javascript -if (msgType === 'POST_TELEMETRY_REQUEST') { - if (metadata.deviceType === 'vehicle') { +if (msgType == 'POST_TELEMETRY_REQUEST') { + if (metadata.deviceType == 'vehicle') { return msg.humidity > 50; - } else if (metadata.deviceType === 'controller') { + } else if (metadata.deviceType == 'controller') { return msg.temperature > 20 && msg.humidity > 60; } } diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/generator_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/generator_node_script_fn.md index ac8b6abf56..7618ac4090 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/generator_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/generator_node_script_fn.md @@ -5,7 +5,7 @@ *function Generate(prevMsg, prevMetadata, prevMsgType): {msg: object, metadata: object, msgType: string}* -JavaScript function generating new Message using previous Message payload, Metadata and Message type as input arguments. +[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function generating new Message using previous Message payload, Metadata and Message type as input arguments. **Parameters:** @@ -78,16 +78,14 @@ var temperature = lower; // Get previous values -if (typeof prevMetadata !== 'undefined' && - typeof prevMetadata.isDecrement !== 'undefined') { +if (prevMetadata != null && prevMetadata.isDecrement != null) { isDecrement = prevMetadata.isDecrement; } -if (typeof prevMsg !== 'undefined' && - typeof prevMsg.temperature !== 'undefined') { +if (prevMsg != null && prevMsg.temperature != null) { temperature = prevMsg.temperature; } -if (isDecrement === 'true') { +if (isDecrement == 'true') { temperature--; if (temperature <= lower) { isDecrement = 'false'; diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/log_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/log_node_script_fn.md index 402de1955e..bab38ad46f 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/log_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/log_node_script_fn.md @@ -5,7 +5,7 @@ *function toString(msg, metadata, msgType): string* -JavaScript function transforming incoming Message to String for further logging to the server log file. +[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function transforming incoming Message to String for further logging to the server log file. **Parameters:** diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/switch_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/switch_node_script_fn.md index 7e8d964059..7fd3b7447b 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/switch_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/switch_node_script_fn.md @@ -5,7 +5,7 @@ *function Switch(msg, metadata, msgType): string[]* -JavaScript function computing **an array of Link names** to forward the incoming Message. +[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function computing **an array of Link names** to forward the incoming Message. **Parameters:** @@ -72,16 +72,16 @@ Example of the rule chain configuration: ```javascript -if (msgType === 'POST_TELEMETRY_REQUEST') { +if (msgType == 'POST_TELEMETRY_REQUEST') { if (msg.temperature < 18) { return ['Low Temperature Telemetry']; } else { return ['Normal Temperature Telemetry']; } -} else if (msgType === 'POST_ATTRIBUTES_REQUEST') { - if (msg.currentState === 'IDLE') { +} else if (msgType == 'POST_ATTRIBUTES_REQUEST') { + if (msg.currentState == 'IDLE') { return ['Idle State', 'Update State Attribute']; - } else if (msg.currentState === 'RUNNING') { + } else if (msg.currentState == 'RUNNING') { return ['Running State', 'Update State Attribute']; } else { return ['Unknown State']; diff --git a/ui-ngx/src/assets/help/en_US/rulenode/tbel/transformation_node_script_fn.md b/ui-ngx/src/assets/help/en_US/rulenode/tbel/transformation_node_script_fn.md index eb28bbe6d6..44ada19967 100644 --- a/ui-ngx/src/assets/help/en_US/rulenode/tbel/transformation_node_script_fn.md +++ b/ui-ngx/src/assets/help/en_US/rulenode/tbel/transformation_node_script_fn.md @@ -5,7 +5,7 @@ *function Transform(msg, metadata, msgType): {msg: object, metadata: object, msgType: string}* -The JavaScript function to transform input Message payload, Metadata and/or Message type to the output message. +The [TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function to transform input Message payload, Metadata and/or Message type to the output message. **Parameters:** @@ -32,7 +32,7 @@ All fields in resulting object are optional and will be taken from original mess * Add sum of two fields ('a' and 'b') as a new field ('sum') of existing message: ```javascript -if(typeof msg.a !== "undefined" && typeof msg.b !== "undefined"){ +if(msg.a != null && msg.b != null){ msg.sum = msg.a + msg.b; } return {msg: msg}; @@ -41,7 +41,7 @@ return {msg: msg}; * Transform value of the 'temperature' field from °F to °C: ```javascript -msg.temperature = (msg.temperature - 32) * 5 / 9; +msg.temperature = toFixed((msg.temperature - 32) * 5 / 9, 1); return {msg: msg}; ``` @@ -49,7 +49,7 @@ return {msg: msg}; ```javascript var newMsg = { - count: Object.keys(msg).length + count: msg.size() }; return {msg: newMsg}; ``` @@ -73,9 +73,9 @@ var sum = msg.a + msg.b; var diff = msg.a - msg.b; return [ - {msg: {sum: sum}, metadata: metadata, msgType: msgType}, - {msg: {difference: diff}, metadata: metadata, msgType: msgType} - ]; + {msg: {sum: sum}, metadata: metadata, msgType: msgType}, + {msg: {difference: diff}, metadata: metadata, msgType: msgType} + ]; ```