Browse Source

Update docs for rule nodes with TBEL scripts. Fix TBEL transform script.

pull/7687/head
Igor Kulikov 4 years ago
parent
commit
046d313581
  1. 2
      application/src/main/java/org/thingsboard/server/service/script/RuleNodeTbelScriptEngine.java
  2. 3
      ui-ngx/src/assets/help/en_US/rulenode/clear_alarm_node_script_fn.md
  3. 13
      ui-ngx/src/assets/help/en_US/rulenode/create_alarm_node_script_fn.md
  4. 15
      ui-ngx/src/assets/help/en_US/rulenode/tbel/clear_alarm_node_script_fn.md
  5. 2
      ui-ngx/src/assets/help/en_US/rulenode/tbel/create_alarm_node_script_fn.md
  6. 12
      ui-ngx/src/assets/help/en_US/rulenode/tbel/filter_node_script_fn.md
  7. 10
      ui-ngx/src/assets/help/en_US/rulenode/tbel/generator_node_script_fn.md
  8. 2
      ui-ngx/src/assets/help/en_US/rulenode/tbel/log_node_script_fn.md
  9. 10
      ui-ngx/src/assets/help/en_US/rulenode/tbel/switch_node_script_fn.md
  10. 14
      ui-ngx/src/assets/help/en_US/rulenode/tbel/transformation_node_script_fn.md

2
application/src/main/java/org/thingsboard/server/service/script/RuleNodeTbelScriptEngine.java

@ -64,7 +64,7 @@ public class RuleNodeTbelScriptEngine extends RuleNodeScriptEngine<TbelInvokeSer
List<TbMsg> 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);
}

3
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`.<br>
```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}
```

13
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 <code>temperature</code> 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;
}
}

15
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.<br>
[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function generating **Alarm Details** object to update existing one. Used for storing additional parameters inside Alarm.<br>
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`.<br>
```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 <code>temperature</code> 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;
}
}

2
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.<br>
[TBEL{:target="_blank"}](${siteBaseUrl}/docs/user-guide/tbel/) function generating **Alarm Details** object. Used for storing additional parameters inside Alarm.<br>
For example you can save attribute name/value pair from Original Message payload or Metadata.
**Parameters:**

12
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 <strong>False</strong> chain:
</ul>
```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;
}
}

10
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';

2
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:**

10
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:
</ul>
```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'];

14
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}
];
```
<br>

Loading…
Cancel
Save