load demo rule chains improvements
This commit is contained in:
parent
e19bd433ad
commit
c32a2ac064
@ -1,135 +0,0 @@
|
|||||||
{
|
|
||||||
"ruleChain": {
|
|
||||||
"additionalInfo": null,
|
|
||||||
"name": "Root Rule Chain",
|
|
||||||
"firstRuleNodeId": null,
|
|
||||||
"root": true,
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": null
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"firstNodeIndex": 6,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 824,
|
|
||||||
"layoutY": 156
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode",
|
|
||||||
"name": "Save Timeseries",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"defaultTTL": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 52
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode",
|
|
||||||
"name": "Save Client Attributes",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"scope": "CLIENT_SCOPE",
|
|
||||||
"notifyDevice": "false"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 347,
|
|
||||||
"layoutY": 149
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode",
|
|
||||||
"name": "Message Type Switch",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"version": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 266
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.action.TbLogNode",
|
|
||||||
"name": "Log RPC from Device",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 379
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.action.TbLogNode",
|
|
||||||
"name": "Log Other",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 468
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode",
|
|
||||||
"name": "RPC Call Request",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"timeoutInSeconds": 60
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"description": "Process incoming messages from devices with the alarm rules defined in the device profile. Dispatch all incoming messages with \"Success\" relation type.",
|
|
||||||
"layoutX": 204,
|
|
||||||
"layoutY": 240
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.profile.TbDeviceProfileNode",
|
|
||||||
"name": "Device Profile Node",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"persistAlarmRulesState": false,
|
|
||||||
"fetchAlarmRulesStateOnStart": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"connections": [
|
|
||||||
{
|
|
||||||
"fromIndex": 6,
|
|
||||||
"toIndex": 2,
|
|
||||||
"type": "Success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 4,
|
|
||||||
"type": "Other"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 1,
|
|
||||||
"type": "Post attributes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 0,
|
|
||||||
"type": "Post telemetry"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 3,
|
|
||||||
"type": "RPC Request from Device"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 5,
|
|
||||||
"type": "RPC Request to Device"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"ruleChainConnections": null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,135 +0,0 @@
|
|||||||
{
|
|
||||||
"ruleChain": {
|
|
||||||
"additionalInfo": null,
|
|
||||||
"name": "Thermostat",
|
|
||||||
"firstRuleNodeId": null,
|
|
||||||
"root": false,
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": null
|
|
||||||
},
|
|
||||||
"metadata": {
|
|
||||||
"firstNodeIndex": 6,
|
|
||||||
"nodes": [
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 824,
|
|
||||||
"layoutY": 156
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNode",
|
|
||||||
"name": "Save Timeseries",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"defaultTTL": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 52
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.telemetry.TbMsgAttributesNode",
|
|
||||||
"name": "Save Client Attributes",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"scope": "CLIENT_SCOPE",
|
|
||||||
"notifyDevice": "false"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 347,
|
|
||||||
"layoutY": 149
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.filter.TbMsgTypeSwitchNode",
|
|
||||||
"name": "Message Type Switch",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"version": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 266
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.action.TbLogNode",
|
|
||||||
"name": "Log RPC from Device",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 379
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.action.TbLogNode",
|
|
||||||
"name": "Log Other",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"jsScript": "return '\\nIncoming message:\\n' + JSON.stringify(msg) + '\\nIncoming metadata:\\n' + JSON.stringify(metadata);"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"layoutX": 825,
|
|
||||||
"layoutY": 468
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.rpc.TbSendRPCRequestNode",
|
|
||||||
"name": "RPC Call Request",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"timeoutInSeconds": 60
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"additionalInfo": {
|
|
||||||
"description": "Process incoming messages from devices with the alarm rules defined in the device profile. Dispatch all incoming messages with \"Success\" relation type.",
|
|
||||||
"layoutX": 204,
|
|
||||||
"layoutY": 240
|
|
||||||
},
|
|
||||||
"type": "org.thingsboard.rule.engine.profile.TbDeviceProfileNode",
|
|
||||||
"name": "Device Profile Node",
|
|
||||||
"debugMode": false,
|
|
||||||
"configuration": {
|
|
||||||
"persistAlarmRulesState": false,
|
|
||||||
"fetchAlarmRulesStateOnStart": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"connections": [
|
|
||||||
{
|
|
||||||
"fromIndex": 6,
|
|
||||||
"toIndex": 2,
|
|
||||||
"type": "Success"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 4,
|
|
||||||
"type": "Other"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 1,
|
|
||||||
"type": "Post attributes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 0,
|
|
||||||
"type": "Post telemetry"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 3,
|
|
||||||
"type": "RPC Request from Device"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromIndex": 2,
|
|
||||||
"toIndex": 5,
|
|
||||||
"type": "RPC Request to Device"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"ruleChainConnections": null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.asset.Asset;
|
|||||||
import org.thingsboard.server.common.data.asset.AssetInfo;
|
import org.thingsboard.server.common.data.asset.AssetInfo;
|
||||||
import org.thingsboard.server.common.data.asset.AssetSearchQuery;
|
import org.thingsboard.server.common.data.asset.AssetSearchQuery;
|
||||||
import org.thingsboard.server.common.data.audit.ActionType;
|
import org.thingsboard.server.common.data.audit.ActionType;
|
||||||
|
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||||
import org.thingsboard.server.common.data.id.AssetId;
|
import org.thingsboard.server.common.data.id.AssetId;
|
||||||
import org.thingsboard.server.common.data.id.CustomerId;
|
import org.thingsboard.server.common.data.id.CustomerId;
|
||||||
@ -51,6 +52,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.dao.asset.BaseAssetService.TB_SERVICE_QUEUE;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@TbCoreComponent
|
@TbCoreComponent
|
||||||
@RequestMapping("/api")
|
@RequestMapping("/api")
|
||||||
@ -89,6 +92,10 @@ public class AssetController extends BaseController {
|
|||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Asset saveAsset(@RequestBody Asset asset) throws ThingsboardException {
|
public Asset saveAsset(@RequestBody Asset asset) throws ThingsboardException {
|
||||||
try {
|
try {
|
||||||
|
if (TB_SERVICE_QUEUE.equals(asset.getType())) {
|
||||||
|
throw new ThingsboardException("Unable to save asset with type " + TB_SERVICE_QUEUE, ThingsboardErrorCode.BAD_REQUEST_PARAMS);
|
||||||
|
}
|
||||||
|
|
||||||
asset.setTenantId(getCurrentUser().getTenantId());
|
asset.setTenantId(getCurrentUser().getTenantId());
|
||||||
|
|
||||||
checkEntity(asset.getId(), asset, Resource.ASSET);
|
checkEntity(asset.getId(), asset, Resource.ASSET);
|
||||||
|
|||||||
@ -210,23 +210,9 @@ public class InstallScripts {
|
|||||||
|
|
||||||
|
|
||||||
public void loadDemoRuleChains(TenantId tenantId) throws Exception {
|
public void loadDemoRuleChains(TenantId tenantId) throws Exception {
|
||||||
Path ruleChainsDir = Paths.get(getDataDir(), JSON_DIR, DEMO_DIR, RULE_CHAINS_DIR);
|
|
||||||
try {
|
try {
|
||||||
JsonNode thermostatRuleChainJson = objectMapper.readTree(ruleChainsDir.resolve("thermostat_rule_chain.json").toFile());
|
createDefaultRuleChains(tenantId);
|
||||||
RuleChain thermostatRuleChain = objectMapper.treeToValue(thermostatRuleChainJson.get("ruleChain"), RuleChain.class);
|
createDefaultRuleChain(tenantId, "Thermostat");
|
||||||
RuleChainMetaData ruleChainMetaData = objectMapper.treeToValue(thermostatRuleChainJson.get("metadata"), RuleChainMetaData.class);
|
|
||||||
thermostatRuleChain.setTenantId(tenantId);
|
|
||||||
thermostatRuleChain = ruleChainService.saveRuleChain(thermostatRuleChain);
|
|
||||||
ruleChainMetaData.setRuleChainId(thermostatRuleChain.getId());
|
|
||||||
ruleChainService.saveRuleChainMetaData(new TenantId(EntityId.NULL_UUID), ruleChainMetaData);
|
|
||||||
|
|
||||||
JsonNode rootChainJson = objectMapper.readTree(ruleChainsDir.resolve("root_rule_chain.json").toFile());
|
|
||||||
RuleChain rootChain = objectMapper.treeToValue(rootChainJson.get("ruleChain"), RuleChain.class);
|
|
||||||
RuleChainMetaData rootChainMetaData = objectMapper.treeToValue(rootChainJson.get("metadata"), RuleChainMetaData.class);
|
|
||||||
rootChain.setTenantId(tenantId);
|
|
||||||
rootChain = ruleChainService.saveRuleChain(rootChain);
|
|
||||||
rootChainMetaData.setRuleChainId(rootChain.getId());
|
|
||||||
ruleChainService.saveRuleChainMetaData(new TenantId(EntityId.NULL_UUID), rootChainMetaData);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Unable to load dashboard from json", e);
|
log.error("Unable to load dashboard from json", e);
|
||||||
throw new RuntimeException("Unable to load dashboard from json", e);
|
throw new RuntimeException("Unable to load dashboard from json", e);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user