aplcachetf-thingsboard-parameters.json

18 lines | 23.255 kB Blame History Raw Download
{
  "org.thingsboard.server.dao.rule.BaseRuleChainService.lambda$getRuleChainNodes$0": {
    "[{\"SYS_TENANT_ID\":{\"SYS_TENANT_ID\":{\"r\":\"@org.thingsboard.server.common.data.id.TenantId\"},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},{\"log\":{\"r\":\"@ch.qos.logback.classic.Logger\"},\"serialVersionUID\":\"2807343040519543363\",\"CONTAINS_TYPE\":\"Contains\",\"MANAGES_TYPE\":\"Manages\",\"from\":{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"to\":{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"type\":\"Contains\",\"typeGroup\":\"RULE_CHAIN\",\"additionalInfoBytes\":[\"110\",\"117\",\"108\",\"108\"]}]": 2
  },
  "org.thingsboard.server.dao.relation.BaseRelationService.saveRelation": {
    "[{\"SYS_TENANT_ID\":{\"SYS_TENANT_ID\":{\"r\":\"@org.thingsboard.server.common.data.id.TenantId\"},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},{\"log\":{\"r\":\"@ch.qos.logback.classic.Logger\"},\"serialVersionUID\":\"2807343040519543363\",\"CONTAINS_TYPE\":\"Contains\",\"MANAGES_TYPE\":\"Manages\",\"from\":{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"to\":{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"type\":\"Contains\",\"typeGroup\":\"RULE_CHAIN\"}]": 9
  },
  "org.thingsboard.server.dao.util.mapping.JacksonUtil.fromString": {
    "[\"{\\\"description\\\":\\\"Demo device that is used in Raspberry Pi GPIO control sample application\\\"}\",{\"r\":\"@java.lang.Class\"}]": 3,
    "[\"{\\\"type\\\":\\\"rpc\\\",\\\"sizeX\\\":4,\\\"sizeY\\\":2,\\\"resources\\\":[],\\\"templateHtml\\\":\\\"\\u003cfieldset class\\u003d\\\\\\\"gpio-panel\\\\\\\" ng-disabled\\u003d\\\\\\\"!rpcEnabled || executingRpcRequest\\\\\\\" style\\u003d\\\\\\\"height: 100%;\\\\\\\"\\u003e\\\\n    \\u003csection class\\u003d\\\\\\\"gpio-row\\\\\\\" layout\\u003d\\\\\\\"row\\\\\\\" ng-repeat\\u003d\\\\\\\"row in rows track by $index\\\\\\\" \\\\n            ng-style\\u003d\\\\\\\"{\\u0027height\\u0027: prefferedRowHeight+\\u0027px\\u0027}\\\\\\\"\\u003e\\\\n        \\u003csection flex layout\\u003d\\\\\\\"row\\\\\\\" ng-repeat\\u003d\\\\\\\"cell in row track by $index\\\\\\\"\\u003e\\\\n            \\u003csection layout\\u003d\\\\\\\"row\\\\\\\" flex ng-if\\u003d\\\\\\\"cell\\\\\\\" layout-align\\u003d\\\\\\\"{{$index\\u003d\\u003d\\u003d0 ? \\u0027end center\\u0027 : \\u0027start center\\u0027}}\\\\\\\"\\u003e\\\\n                \\u003cspan class\\u003d\\\\\\\"gpio-left-label\\\\\\\" ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d0\\\\\\\"\\u003e{{ cell.label }}\\u003c/span\\u003e\\\\n                \\u003csection layout\\u003d\\\\\\\"row\\\\\\\" class\\u003d\\\\\\\"switch-panel\\\\\\\" layout-align\\u003d\\\\\\\"start center\\\\\\\" ng-class\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d0 ? \\u0027col-0\\u0027 : \\u0027col-1\\u0027\\\\\\\"\\\\n                      ng-style\\u003d\\\\\\\"{\\u0027height\\u0027: prefferedRowHeight+\\u0027px\\u0027, \\u0027backgroundColor\\u0027: \\u0027{{ switchPanelBackgroundColor }}\\u0027}\\\\\\\"\\u003e\\\\n                    \\u003cspan class\\u003d\\\\\\\"pin\\\\\\\" ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d0\\\\\\\"\\u003e{{cell.pin}}\\u003c/span\\u003e\\\\n                    \\u003cspan flex ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d1\\\\\\\"\\u003e\\u003c/span\\u003e\\\\n                    \\u003cmd-switch\\\\n                        aria-label\\u003d\\\\\\\"{{ cell.label }}\\\\\\\"\\\\n                        ng-disabled\\u003d\\\\\\\"!rpcEnabled || executingRpcRequest\\\\\\\"\\\\n                        ng-model\\u003d\\\\\\\"cell.enabled\\\\\\\" \\\\n                        ng-change\\u003d\\\\\\\"cell.enabled \\u003d !cell.enabled\\\\\\\" \\\\n                        ng-click\\u003d\\\\\\\"gpioClick($event, cell)\\\\\\\"\\u003e\\\\n                    \\u003c/md-switch\\u003e\\\\n                    \\u003cspan flex ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d0\\\\\\\"\\u003e\\u003c/span\\u003e\\\\n                    \\u003cspan class\\u003d\\\\\\\"pin\\\\\\\" ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d1\\\\\\\"\\u003e{{cell.pin}}\\u003c/span\\u003e\\\\n                \\u003c/section\\u003e\\\\n                \\u003cspan class\\u003d\\\\\\\"gpio-right-label\\\\\\\" ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d1\\\\\\\"\\u003e{{ cell.label }}\\u003c/span\\u003e\\\\n            \\u003c/section\\u003e\\\\n            \\u003csection layout\\u003d\\\\\\\"row\\\\\\\" flex ng-if\\u003d\\\\\\\"!cell\\\\\\\"\\u003e\\\\n                \\u003cspan flex ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d0\\\\\\\"\\u003e\\u003c/span\\u003e\\\\n                \\u003cspan class\\u003d\\\\\\\"switch-panel\\\\\\\"\\\\n                      ng-style\\u003d\\\\\\\"{\\u0027height\\u0027: prefferedRowHeight+\\u0027px\\u0027, \\u0027backgroundColor\\u0027: \\u0027{{ switchPanelBackgroundColor }}\\u0027}\\\\\\\"\\u003e\\u003c/span\\u003e\\\\n                \\u003cspan flex ng-show\\u003d\\\\\\\"$index\\u003d\\u003d\\u003d1\\\\\\\"\\u003e\\u003c/span\\u003e\\\\n            \\u003c/section\\u003e\\\\n        \\u003c/section\\u003e\\\\n    \\u003c/section\\u003e                            \\\\n    \\u003cspan class\\u003d\\\\\\\"error\\\\\\\" style\\u003d\\\\\\\"position: absolute; bottom: 5px;\\\\\\\" ng-show\\u003d\\\\\\\"rpcErrorText\\\\\\\"\\u003e{{rpcErrorText}}\\u003c/span\\u003e\\\\n    \\u003cmd-progress-linear ng-show\\u003d\\\\\\\"executingRpcRequest\\\\\\\" style\\u003d\\\\\\\"position: absolute; bottom: 0;\\\\\\\" md-mode\\u003d\\\\\\\"indeterminate\\\\\\\"\\u003e\\u003c/md-progress-linear\\u003e    \\\\n\\u003c/fieldset\\u003e\\\",\\\"templateCss\\\":\\\".error {\\\\n    font-size: 14px !important;\\\\n    color: maroon;/*rgb(250,250,250);*/\\\\n    background-color: transparent;\\\\n    padding: 6px;\\\\n}\\\\n\\\\n.error span {\\\\n    margin: auto;\\\\n}\\\\n\\\\n.gpio-panel {\\\\n    padding-top: 10px;\\\\n    white-space: nowrap;\\\\n}\\\\n\\\\n.switch-panel {\\\\n    margin: 0;\\\\n    height: 32px;\\\\n    width: 66px;\\\\n    min-width: 66px;\\\\n}\\\\n\\\\n.switch-panel md-switch {\\\\n    margin: 0;\\\\n    width: 36px;\\\\n    min-width: 36px;\\\\n}\\\\n\\\\n.switch-panel md-switch \\u003e div.md-container {\\\\n    margin: 0;\\\\n}\\\\n\\\\n.switch-panel.col-0 md-switch {\\\\n    padding-left: 8px;\\\\n    padding-right: 4px;\\\\n}\\\\n\\\\n.switch-panel.col-1 md-switch {\\\\n    padding-left: 4px;\\\\n    padding-right: 8px;\\\\n}\\\\n\\\\n.gpio-row {\\\\n    height: 32px;\\\\n}\\\\n\\\\n.pin {\\\\n    margin-top: auto;\\\\n    margin-bottom: auto;\\\\n    color: white;\\\\n    font-size: 12px;\\\\n    width: 16px;\\\\n    min-width: 16px;\\\\n}\\\\n\\\\n.switch-panel.col-0 .pin {\\\\n    margin-left: auto;\\\\n    padding-left: 2px;\\\\n    text-align: right;\\\\n}\\\\n\\\\n.switch-panel.col-1 .pin {\\\\n    margin-right: auto;\\\\n    \\\\n    text-align: left;\\\\n}\\\\n\\\\n.gpio-left-label {\\\\n    margin-right: 8px;\\\\n}\\\\n\\\\n.gpio-right-label {\\\\n    margin-left: 8px;\\\\n}\\\",\\\"controllerScript\\\":\\\"self.onInit \\u003d function() {\\\\n    \\\\n    var i, gpio;\\\\n    var scope \\u003d self.ctx.$scope;\\\\n    var settings \\u003d self.ctx.settings;\\\\n    scope.gpioList \\u003d [];\\\\n    for (var g \\u003d 0; g \\u003c settings.gpioList.length; g++) {\\\\n        gpio \\u003d settings.gpioList[g];\\\\n        scope.gpioList.push(\\\\n            {\\\\n                row: gpio.row,\\\\n                col: gpio.col,\\\\n                pin: gpio.pin,\\\\n                label: gpio.label,\\\\n                enabled: false\\\\n            }\\\\n        );\\\\n    }\\\\n\\\\n    scope.requestTimeout \\u003d settings.requestTimeout || 1000;\\\\n\\\\n    scope.switchPanelBackgroundColor \\u003d settings.switchPanelBackgroundColor || tinycolor(\\u0027green\\u0027).lighten(2).toRgbString();\\\\n\\\\n    scope.gpioStatusRequest \\u003d {\\\\n        method: \\\\\\\"getGpioStatus\\\\\\\",\\\\n        paramsBody: \\\\\\\"{}\\\\\\\"\\\\n    };\\\\n    \\\\n    if (settings.gpioStatusRequest) {\\\\n        scope.gpioStatusRequest.method \\u003d settings.gpioStatusRequest.method || scope.gpioStatusRequest.method;\\\\n        scope.gpioStatusRequest.paramsBody \\u003d settings.gpioStatusRequest.paramsBody || scope.gpioStatusRequest.paramsBody;\\\\n    }\\\\n    \\\\n    scope.gpioStatusChangeRequest \\u003d {\\\\n        method: \\\\\\\"setGpioStatus\\\\\\\",\\\\n        paramsBody: \\\\\\\"{\\\\\\\\n   \\\\\\\\\\\\\\\"pin\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"{$pin}\\\\\\\\\\\\\\\",\\\\\\\\n   \\\\\\\\\\\\\\\"enabled\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"{$enabled}\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\"\\\\n    };\\\\n    \\\\n    if (settings.gpioStatusChangeRequest) {\\\\n        scope.gpioStatusChangeRequest.method \\u003d settings.gpioStatusChangeRequest.method || scope.gpioStatusChangeRequest.method;\\\\n        scope.gpioStatusChangeRequest.paramsBody \\u003d settings.gpioStatusChangeRequest.paramsBody || scope.gpioStatusChangeRequest.paramsBody;\\\\n    }\\\\n    \\\\n    scope.parseGpioStatusFunction \\u003d \\\\\\\"return body[pin] \\u003d\\u003d\\u003d true;\\\\\\\";\\\\n    \\\\n    if (settings.parseGpioStatusFunction \\u0026\\u0026 settings.parseGpioStatusFunction.length \\u003e 0) {\\\\n        scope.parseGpioStatusFunction \\u003d settings.parseGpioStatusFunction;\\\\n    }\\\\n    \\\\n    scope.parseGpioStatusFunction \\u003d new Function(\\\\\\\"body, pin\\\\\\\", scope.parseGpioStatusFunction);\\\\n    \\\\n    function requestGpioStatus() {\\\\n        self.ctx.controlApi.sendTwoWayCommand(scope.gpioStatusRequest.method, \\\\n                            scope.gpioStatusRequest.paramsBody, \\\\n                            scope.requestTimeout)\\\\n            .then(\\\\n                function success(responseBody) {\\\\n                    for (var g \\u003d 0; g \\u003c scope.gpioList.length; g++) {\\\\n                        var gpio \\u003d scope.gpioList[g];\\\\n                        var enabled \\u003d scope.parseGpioStatusFunction.apply(this, [responseBody, gpio.pin]);\\\\n                        gpio.enabled \\u003d enabled;                        \\\\n                    }\\\\n                }\\\\n            );\\\\n    }\\\\n    \\\\n    function changeGpioStatus(gpio) {\\\\n        var pin \\u003d gpio.pin + \\u0027\\u0027;\\\\n        var enabled \\u003d !gpio.enabled;\\\\n        enabled \\u003d enabled \\u003d\\u003d\\u003d true ? \\u0027true\\u0027 : \\u0027false\\u0027;\\\\n        var paramsBody \\u003d scope.gpioStatusChangeRequest.paramsBody;\\\\n        var requestBody \\u003d JSON.parse(paramsBody.replace(\\\\\\\"\\\\\\\\\\\\\\\"{$pin}\\\\\\\\\\\\\\\"\\\\\\\", pin).replace(\\\\\\\"\\\\\\\\\\\\\\\"{$enabled}\\\\\\\\\\\\\\\"\\\\\\\", enabled));\\\\n        self.ctx.controlApi.sendTwoWayCommand(scope.gpioStatusChangeRequest.method, \\\\n                                    requestBody, scope.requestTimeout)\\\\n                    .then(\\\\n                        function success(responseBody) {\\\\n                            var enabled \\u003d scope.parseGpioStatusFunction.apply(this, [responseBody, gpio.pin]);\\\\n                            gpio.enabled \\u003d enabled;\\\\n                        }\\\\n                    );\\\\n    }\\\\n    \\\\n    scope.gpioCells \\u003d {};\\\\n    var rowCount \\u003d 0;\\\\n    for (i \\u003d 0; i \\u003c scope.gpioList.length; i++) {\\\\n        gpio \\u003d scope.gpioList[i];\\\\n        scope.gpioCells[gpio.row+\\u0027_\\u0027+gpio.col] \\u003d gpio;\\\\n        rowCount \\u003d Math.max(rowCount, gpio.row+1);\\\\n    }\\\\n    \\\\n    scope.prefferedRowHeight \\u003d 32;\\\\n    scope.rows \\u003d [];\\\\n    for (i \\u003d 0; i \\u003c rowCount; i++) {\\\\n        var row \\u003d [];\\\\n        for (var c \\u003d0; c\\u003c2;c++) {\\\\n            if (scope.gpioCells[i+\\u0027_\\u0027+c]) {\\\\n                row[c] \\u003d scope.gpioCells[i+\\u0027_\\u0027+c];\\\\n            } else {\\\\n                row[c] \\u003d null;\\\\n            }\\\\n        }\\\\n        scope.rows.push(row);\\\\n    }\\\\n\\\\n    scope.gpioClick \\u003d function($event, gpio) {\\\\n        changeGpioStatus(gpio);\\\\n    };\\\\n\\\\n    requestGpioStatus();    \\\\n    \\\\n    self.onResize();\\\\n}\\\\n\\\\nself.onResize \\u003d function() {\\\\n    var scope \\u003d self.ctx.$scope;\\\\n    var rowCount \\u003d scope.rows.length;\\\\n    var prefferedRowHeight \\u003d (self.ctx.height - 35)/rowCount;\\\\n    prefferedRowHeight \\u003d Math.min(32, prefferedRowHeight);\\\\n    prefferedRowHeight \\u003d Math.max(12, prefferedRowHeight);\\\\n    scope.prefferedRowHeight \\u003d prefferedRowHeight;\\\\n    var ratio \\u003d prefferedRowHeight/32;\\\\n    var switches \\u003d $(\\u0027md-switch\\u0027, self.ctx.$container);\\\\n    switches.css(\\u0027height\\u0027, 30*ratio+\\u0027px\\u0027);\\\\n    switches.css(\\u0027width\\u0027, 36*ratio+\\u0027px\\u0027);\\\\n    switches.css(\\u0027min-width\\u0027, 36*ratio+\\u0027px\\u0027);\\\\n    $(\\u0027.md-container\\u0027, switches).css(\\u0027height\\u0027, 24*ratio+\\u0027px\\u0027);\\\\n    $(\\u0027.md-container\\u0027, switches).css(\\u0027width\\u0027, 36*ratio+\\u0027px\\u0027);\\\\n    var bars \\u003d $(\\u0027.md-bar\\u0027, self.ctx.$container);\\\\n    bars.css(\\u0027height\\u0027, 14*ratio+\\u0027px\\u0027);\\\\n    bars.css(\\u0027width\\u0027, 34*ratio+\\u0027px\\u0027);\\\\n    var thumbs \\u003d $(\\u0027.md-thumb\\u0027, self.ctx.$container);\\\\n    thumbs.css(\\u0027height\\u0027, 20*ratio+\\u0027px\\u0027);\\\\n    thumbs.css(\\u0027width\\u0027, 20*ratio+\\u0027px\\u0027);\\\\n    \\\\n    var leftLabels \\u003d $(\\u0027.gpio-left-label\\u0027, self.ctx.$container);\\\\n    leftLabels.css(\\u0027font-size\\u0027, 16*ratio+\\u0027px\\u0027);\\\\n    var rightLabels \\u003d $(\\u0027.gpio-right-label\\u0027, self.ctx.$container);\\\\n    rightLabels.css(\\u0027font-size\\u0027, 16*ratio+\\u0027px\\u0027);\\\\n    var pins \\u003d $(\\u0027.pin\\u0027, self.ctx.$container);\\\\n    var pinsFontSize \\u003d Math.max(9, 12*ratio);\\\\n    pins.css(\\u0027font-size\\u0027, pinsFontSize+\\u0027px\\u0027);    \\\\n}\\\\n\\\\nself.onDestroy \\u003d function() {\\\\n}\\\\n\\\",\\\"settingsSchema\\\":\\\"{\\\\n    \\\\\\\"schema\\\\\\\": {\\\\n        \\\\\\\"type\\\\\\\": \\\\\\\"object\\\\\\\",\\\\n        \\\\\\\"title\\\\\\\": \\\\\\\"Settings\\\\\\\",\\\\n        \\\\\\\"properties\\\\\\\": {\\\\n            \\\\\\\"gpioList\\\\\\\": {\\\\n                \\\\\\\"title\\\\\\\": \\\\\\\"Gpio switches\\\\\\\",\\\\n                \\\\\\\"type\\\\\\\": \\\\\\\"array\\\\\\\",\\\\n                \\\\\\\"minItems\\\\\\\" : 1,\\\\n                \\\\\\\"items\\\\\\\": {\\\\n                    \\\\\\\"title\\\\\\\": \\\\\\\"Gpio switch\\\\\\\",\\\\n                    \\\\\\\"type\\\\\\\": \\\\\\\"object\\\\\\\",\\\\n                    \\\\\\\"properties\\\\\\\": {\\\\n                        \\\\\\\"pin\\\\\\\": {\\\\n                            \\\\\\\"title\\\\\\\": \\\\\\\"Pin\\\\\\\",\\\\n                            \\\\\\\"type\\\\\\\": \\\\\\\"number\\\\\\\"\\\\n                        },\\\\n                        \\\\\\\"label\\\\\\\": {\\\\n                            \\\\\\\"title\\\\\\\": \\\\\\\"Label\\\\\\\",\\\\n                            \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\"\\\\n                        },\\\\n                        \\\\\\\"row\\\\\\\": {\\\\n                            \\\\\\\"title\\\\\\\": \\\\\\\"Row\\\\\\\",\\\\n                            \\\\\\\"type\\\\\\\": \\\\\\\"number\\\\\\\"\\\\n                        },\\\\n                        \\\\\\\"col\\\\\\\": {\\\\n                            \\\\\\\"title\\\\\\\": \\\\\\\"Column\\\\\\\",\\\\n                            \\\\\\\"type\\\\\\\": \\\\\\\"number\\\\\\\"\\\\n                        }\\\\n                    },\\\\n                    \\\\\\\"required\\\\\\\": [\\\\\\\"pin\\\\\\\", \\\\\\\"label\\\\\\\", \\\\\\\"row\\\\\\\", \\\\\\\"col\\\\\\\"]\\\\n                }\\\\n            },\\\\n            \\\\\\\"requestTimeout\\\\\\\": {\\\\n                \\\\\\\"title\\\\\\\": \\\\\\\"RPC request timeout\\\\\\\",\\\\n                \\\\\\\"type\\\\\\\": \\\\\\\"number\\\\\\\",\\\\n                \\\\\\\"default\\\\\\\": 500\\\\n            },\\\\n            \\\\\\\"switchPanelBackgroundColor\\\\\\\": {\\\\n                \\\\\\\"title\\\\\\\": \\\\\\\"Switches panel background color\\\\\\\",\\\\n                \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\",\\\\n                \\\\\\\"default\\\\\\\": \\\\\\\"#008a00\\\\\\\"\\\\n            },\\\\n            \\\\\\\"gpioStatusRequest\\\\\\\": {\\\\n                \\\\\\\"title\\\\\\\": \\\\\\\"GPIO status request\\\\\\\",\\\\n                \\\\\\\"type\\\\\\\": \\\\\\\"object\\\\\\\",\\\\n                 \\\\\\\"properties\\\\\\\": {\\\\n                    \\\\\\\"method\\\\\\\": {\\\\n                        \\\\\\\"title\\\\\\\": \\\\\\\"Method name\\\\\\\",\\\\n                        \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\",\\\\n                        \\\\\\\"default\\\\\\\": \\\\\\\"getGpioStatus\\\\\\\"\\\\n                    },\\\\n                    \\\\\\\"paramsBody\\\\\\\": {\\\\n                      \\\\\\\"title\\\\\\\": \\\\\\\"Method body\\\\\\\",\\\\n                      \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\",\\\\n                      \\\\\\\"default\\\\\\\": \\\\\\\"{}\\\\\\\"\\\\n                    }\\\\n                },\\\\n                \\\\\\\"required\\\\\\\": [\\\\\\\"method\\\\\\\", \\\\\\\"paramsBody\\\\\\\"]\\\\n            },\\\\n            \\\\\\\"gpioStatusChangeRequest\\\\\\\": {\\\\n                \\\\\\\"title\\\\\\\": \\\\\\\"GPIO status change request\\\\\\\",\\\\n                \\\\\\\"type\\\\\\\": \\\\\\\"object\\\\\\\",\\\\n                 \\\\\\\"properties\\\\\\\": {\\\\n                    \\\\\\\"method\\\\\\\": {\\\\n                        \\\\\\\"title\\\\\\\": \\\\\\\"Method name\\\\\\\",\\\\n                        \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\",\\\\n                        \\\\\\\"default\\\\\\\": \\\\\\\"setGpioStatus\\\\\\\"\\\\n                    },\\\\n                    \\\\\\\"paramsBody\\\\\\\": {\\\\n                      \\\\\\\"title\\\\\\\": \\\\\\\"Method body\\\\\\\",\\\\n                      \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\",\\\\n                      \\\\\\\"default\\\\\\\": \\\\\\\"{\\\\\\\\n   \\\\\\\\\\\\\\\"pin\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"{$pin}\\\\\\\\\\\\\\\",\\\\\\\\n   \\\\\\\\\\\\\\\"enabled\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"{$enabled}\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\"\\\\n                    }\\\\n                },\\\\n                \\\\\\\"required\\\\\\\": [\\\\\\\"method\\\\\\\", \\\\\\\"paramsBody\\\\\\\"]\\\\n            },\\\\n            \\\\\\\"parseGpioStatusFunction\\\\\\\": {\\\\n                \\\\\\\"title\\\\\\\": \\\\\\\"Parse gpio status function\\\\\\\",\\\\n                \\\\\\\"type\\\\\\\": \\\\\\\"string\\\\\\\",\\\\n                \\\\\\\"default\\\\\\\": \\\\\\\"return body[pin] \\u003d\\u003d\\u003d true;\\\\\\\"\\\\n            } \\\\n        },\\\\n        \\\\\\\"required\\\\\\\": [\\\\\\\"gpioList\\\\\\\", \\\\n                     \\\\\\\"requestTimeout\\\\\\\",\\\\n                     \\\\\\\"switchPanelBackgroundColor\\\\\\\",\\\\n                     \\\\\\\"gpioStatusRequest\\\\\\\",\\\\n                     \\\\\\\"gpioStatusChangeRequest\\\\\\\",\\\\n                     \\\\\\\"parseGpioStatusFunction\\\\\\\"]\\\\n    },\\\\n    \\\\\\\"form\\\\\\\": [\\\\n        \\\\\\\"gpioList\\\\\\\",\\\\n        \\\\\\\"requestTimeout\\\\\\\",\\\\n        {\\\\n            \\\\\\\"key\\\\\\\": \\\\\\\"switchPanelBackgroundColor\\\\\\\",\\\\n            \\\\\\\"type\\\\\\\": \\\\\\\"color\\\\\\\"\\\\n        },\\\\n        {\\\\n            \\\\\\\"key\\\\\\\": \\\\\\\"gpioStatusRequest\\\\\\\",\\\\n            \\\\\\\"items\\\\\\\": [\\\\n                \\\\\\\"gpioStatusRequest.method\\\\\\\",\\\\n                {\\\\n                    \\\\\\\"key\\\\\\\": \\\\\\\"gpioStatusRequest.paramsBody\\\\\\\",\\\\n                    \\\\\\\"type\\\\\\\": \\\\\\\"json\\\\\\\"\\\\n                }\\\\n            ]\\\\n        },\\\\n        {\\\\n            \\\\\\\"key\\\\\\\": \\\\\\\"gpioStatusChangeRequest\\\\\\\",\\\\n            \\\\\\\"items\\\\\\\": [\\\\n                \\\\\\\"gpioStatusChangeRequest.method\\\\\\\",\\\\n                {\\\\n                    \\\\\\\"key\\\\\\\": \\\\\\\"gpioStatusChangeRequest.paramsBody\\\\\\\",\\\\n                    \\\\\\\"type\\\\\\\": \\\\\\\"json\\\\\\\"\\\\n                }\\\\n            ]\\\\n        },\\\\n        {\\\\n            \\\\\\\"key\\\\\\\": \\\\\\\"parseGpioStatusFunction\\\\\\\",\\\\n            \\\\\\\"type\\\\\\\": \\\\\\\"javascript\\\\\\\"\\\\n        }\\\\n    ]\\\\n}\\\",\\\"dataKeySettingsSchema\\\":\\\"{}\\\\n\\\",\\\"defaultConfig\\\":\\\"{\\\\\\\"targetDeviceAliases\\\\\\\":[],\\\\\\\"showTitle\\\\\\\":true,\\\\\\\"backgroundColor\\\\\\\":\\\\\\\"#fff\\\\\\\",\\\\\\\"color\\\\\\\":\\\\\\\"rgba(0, 0, 0, 0.87)\\\\\\\",\\\\\\\"padding\\\\\\\":\\\\\\\"0px\\\\\\\",\\\\\\\"settings\\\\\\\":{\\\\\\\"parseGpioStatusFunction\\\\\\\":\\\\\\\"return body[pin] \\u003d\\u003d\\u003d true;\\\\\\\",\\\\\\\"gpioStatusChangeRequest\\\\\\\":{\\\\\\\"method\\\\\\\":\\\\\\\"setGpioStatus\\\\\\\",\\\\\\\"paramsBody\\\\\\\":\\\\\\\"{\\\\\\\\n   \\\\\\\\\\\\\\\"pin\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"{$pin}\\\\\\\\\\\\\\\",\\\\\\\\n   \\\\\\\\\\\\\\\"enabled\\\\\\\\\\\\\\\": \\\\\\\\\\\\\\\"{$enabled}\\\\\\\\\\\\\\\"\\\\\\\\n}\\\\\\\"},\\\\\\\"requestTimeout\\\\\\\":500,\\\\\\\"switchPanelBackgroundColor\\\\\\\":\\\\\\\"#b71c1c\\\\\\\",\\\\\\\"gpioStatusRequest\\\\\\\":{\\\\\\\"method\\\\\\\":\\\\\\\"getGpioStatus\\\\\\\",\\\\\\\"paramsBody\\\\\\\":\\\\\\\"{}\\\\\\\"},\\\\\\\"gpioList\\\\\\\":[{\\\\\\\"pin\\\\\\\":1,\\\\\\\"label\\\\\\\":\\\\\\\"GPIO 1\\\\\\\",\\\\\\\"row\\\\\\\":0,\\\\\\\"col\\\\\\\":0,\\\\\\\"_uniqueKey\\\\\\\":0},{\\\\\\\"pin\\\\\\\":2,\\\\\\\"label\\\\\\\":\\\\\\\"GPIO 2\\\\\\\",\\\\\\\"row\\\\\\\":0,\\\\\\\"col\\\\\\\":1,\\\\\\\"_uniqueKey\\\\\\\":1},{\\\\\\\"pin\\\\\\\":3,\\\\\\\"label\\\\\\\":\\\\\\\"GPIO 3\\\\\\\",\\\\\\\"row\\\\\\\":1,\\\\\\\"col\\\\\\\":0,\\\\\\\"_uniqueKey\\\\\\\":2}]},\\\\\\\"title\\\\\\\":\\\\\\\"Basic GPIO Control\\\\\\\"}\\\"}\",{\"r\":\"@java.lang.Class\"}]": 5
  },
  "org.thingsboard.server.dao.sql.relation.JpaRelationDao.saveRelation": {
    "[{\"SYS_TENANT_ID\":{\"SYS_TENANT_ID\":{\"r\":\"@org.thingsboard.server.common.data.id.TenantId\"},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},{\"log\":{\"r\":\"@ch.qos.logback.classic.Logger\"},\"serialVersionUID\":\"2807343040519543363\",\"CONTAINS_TYPE\":\"Contains\",\"MANAGES_TYPE\":\"Manages\",\"from\":{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"to\":{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"type\":\"Contains\",\"typeGroup\":\"RULE_CHAIN\"}]": 11
  },
  "org.thingsboard.server.dao.sql.relation.JpaRelationDao.findAllByFrom": {
    "[{\"SYS_TENANT_ID\":{\"SYS_TENANT_ID\":{\"r\":\"@org.thingsboard.server.common.data.id.TenantId\"},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},{\"serialVersionUID\":\"1\",\"id\":{\"r\":\"@java.util.UUID\"}},\"RULE_NODE\"]": 3
  }
}