Merge branch 'master' of github.com:thingsboard/thingsboard
This commit is contained in:
commit
8371fc60b4
@ -18,8 +18,8 @@
|
||||
"resources": [],
|
||||
"templateHtml": "<div style=\"height: 100%; overflow-y: auto;\" id=\"device-terminal\"></div>",
|
||||
"templateCss": ".cmd .cursor.blink {\n -webkit-animation-name: terminal-underline;\n -moz-animation-name: terminal-underline;\n -ms-animation-name: terminal-underline;\n animation-name: terminal-underline;\n}\n.terminal .inverted, .cmd .inverted {\n border-bottom-color: #aaa;\n}\n",
|
||||
"controllerScript": "var requestTimeout = 500;\n\nself.onInit = function() {\n var subscription = self.ctx.defaultSubscription;\n var rpcEnabled = subscription.rpcEnabled;\n var deviceName = 'Simulated';\n var prompt;\n if (subscription.targetDeviceName && subscription.targetDeviceName.length) {\n deviceName = subscription.targetDeviceName;\n }\n if (self.ctx.settings.requestTimeout) {\n requestTimeout = self.ctx.settings.requestTimeout;\n }\n var greetings = 'Welcome to ThingsBoard RPC debug terminal.\\n\\n';\n if (!rpcEnabled) {\n greetings += 'Target device is not set!\\n\\n';\n prompt = '';\n } else {\n greetings += 'Current target device for RPC commands: [[b;#fff;]' + deviceName + ']\\n\\n';\n greetings += 'Please type [[b;#fff;]\\'help\\'] to see usage.\\n';\n prompt = '[[b;#8bc34a;]' + deviceName +']> ';\n }\n \n var terminal = $('#device-terminal', self.ctx.$container).terminal(\n function(command) {\n if (command !== '') {\n try {\n var localCommand = command.trim();\n if (localCommand === 'help') {\n printUsage(this);\n } else {\n var cmdObj = $.terminal.parse_command(localCommand);\n if (cmdObj.args.length > 1) {\n this.error(\"Wrong number of arguments!\");\n this.echo(' ');\n } else {\n var params;\n if (cmdObj.args.length && cmdObj.args[0]) {\n try {\n params = JSON.parse(cmdObj.args[0]);\n } catch (e) {\n params = cmdObj.args[0];\n }\n }\n performRpc(this, cmdObj.name, params);\n }\n }\n } catch(e) {\n this.error(new String(e));\n }\n } else {\n this.echo('');\n }\n }, {\n greetings: greetings,\n prompt: prompt,\n enabled: rpcEnabled\n });\n \n \n \n if (!rpcEnabled) {\n terminal.error('No RPC target detected!').pause();\n }\n}\n\n\nfunction printUsage(terminal) {\n var commandsListText = '\\n[[b;#fff;]Usage:]\\n';\n commandsListText += ' <method> [params body]]\\n\\n';\n commandsListText += '[[b;#fff;]Example 1:]\\n'; \n commandsListText += ' myRemoteMethod1 myText\\n\\n'; \n commandsListText += '[[b;#fff;]Example 2:]\\n'; \n commandsListText += ' myOtherRemoteMethod \"{\\\\\"key1\\\\\": 2, \\\\\"key2\\\\\": \\\\\"myVal\\\\\"}\"\\n'; \n terminal.echo(new String(commandsListText));\n}\n\nfunction performRpc(terminal, method, params) {\n terminal.pause();\n self.ctx.controlApi.sendTwoWayCommand(method, params, requestTimeout).subscribe(\n function success(responseBody) {\n terminal.echo(JSON.stringify(responseBody));\n terminal.echo(' ');\n terminal.resume();\n },\n function fail() {\n var errorText = self.ctx.defaultSubscription.rpcErrorText;\n terminal.error(errorText);\n terminal.echo(' ');\n terminal.resume();\n }\n );\n}\n\n \nself.onDestroy = function() {\n}\n",
|
||||
"settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"Settings\",\n \"properties\": {\n \"requestTimeout\": {\n \"title\": \"RPC request timeout (ms)\",\n \"type\": \"number\",\n \"default\": 500\n }\n },\n \"required\": [\"requestTimeout\"]\n },\n \"form\": [\n \"requestTimeout\"\n ]\n}",
|
||||
"controllerScript": "var requestTimeout = 500;\nvar multiParams = false;\n\nself.onInit = function() {\n var subscription = self.ctx.defaultSubscription;\n var utils = self.ctx.$scope.$injector.get(self.ctx.servicesMap.get('utils'));\n var rpcEnabled = subscription.rpcEnabled;\n var deviceName = 'Simulated';\n var prompt;\n if (subscription.targetDeviceName && subscription.targetDeviceName.length) {\n deviceName = subscription.targetDeviceName;\n }\n if (self.ctx.settings.requestTimeout) {\n requestTimeout = self.ctx.settings.requestTimeout;\n }\n if (self.ctx.settings.multiParams) {\n multiParams = self.ctx.settings.multiParams;\n }\n var greetings = 'Welcome to ThingsBoard RPC debug terminal.\\n\\n';\n if (!rpcEnabled) {\n greetings += 'Target device is not set!\\n\\n';\n prompt = '';\n } else {\n greetings += 'Current target device for RPC commands: [[b;#fff;]' + deviceName + ']\\n\\n';\n greetings += 'Please type [[b;#fff;]\\'help\\'] to see usage.\\n';\n prompt = '[[b;#8bc34a;]' + deviceName +']> ';\n }\n \n var terminal = $('#device-terminal', self.ctx.$container).terminal(\n function(command) {\n if (command !== '') {\n try {\n var localCommand = command.trim();\n var requestUUID = utils.guid();\n if (localCommand === 'help') {\n printUsage(this);\n } else {\n var cmdObj = $.terminal.parse_command(localCommand);\n if (cmdObj.args) {\n if (!multiParams && cmdObj.args.length > 1) {\n this.error(\"Wrong number of arguments!\");\n this.echo(' ');\n }\n else {\n if (cmdObj.args.length) {\n var params = getMultiParams(cmdObj.args);\n }\n performRpc(this, cmdObj.name, params, requestUUID);\n }\n }\n }\n } catch(e) {\n this.error(new String(e));\n }\n } else {\n this.echo('');\n }\n }, {\n greetings: greetings,\n prompt: prompt,\n enabled: rpcEnabled\n });\n \n \n \n if (!rpcEnabled) {\n terminal.error('No RPC target detected!').pause();\n }\n}\n\n\nfunction printUsage(terminal) {\n var commandsListText = '\\n[[b;#fff;]Usage:]\\n';\n commandsListText += ' <method> [params body]]\\n\\n';\n commandsListText += '[[b;#fff;]Example 1 (multiParams===false):]\\n'; \n commandsListText += ' myRemoteMethod1 myText\\n\\n'; \n commandsListText += '[[b;#fff;]Example 2 (multiParams===false):]\\n'; \n commandsListText += ' myOtherRemoteMethod \"{\\\\\"key1\\\\\":2,\\\\\"key2\\\\\":\\\\\"myVal\\\\\"}\"\\n\\n'; \n commandsListText += '[[b;#fff;]Example 3 (multiParams===true)]\\n'; \n commandsListText += ' <method> [params body] = \"all the string after the method, including spaces\"]\\n';\n commandsListText += ' myOtherRemoteMethod \"{\\\\\"key1\\\\\": \"battery level\", \\\\\"key2\\\\\": \\\\\"myVal\\\\\"}\"\\n'; \n terminal.echo(new String(commandsListText));\n}\n\nfunction performRpc(terminal, method, params, requestUUID) {\n terminal.pause();\n self.ctx.controlApi.sendTwoWayCommand(method, params, requestTimeout, requestUUID).subscribe(\n function success(responseBody) {\n terminal.echo(JSON.stringify(responseBody));\n terminal.echo(' ');\n terminal.resume();\n },\n function fail() {\n var errorText = self.ctx.defaultSubscription.rpcErrorText;\n terminal.error(errorText);\n terminal.echo(' ');\n terminal.resume();\n }\n );\n}\n\nfunction getMultiParams(cmdObj) {\n var params = \"\";\n cmdObj.forEach((element) => {\n try {\n params += \" \" + JSON.strigify(JSON.parse(element));\n } catch (e) {\n params += \" \" + element;\n }\n })\n return params.trim();\n}\n\n \nself.onDestroy = function() {\n}",
|
||||
"settingsSchema": "{\n \"schema\": {\n \"type\": \"object\",\n \"title\": \"Settings\",\n \"properties\": {\n \"requestTimeout\": {\n \"title\": \"RPC request timeout (ms)\",\n \"type\": \"number\",\n \"default\": 500\n },\n \"multiParams\": {\n \"title\": \"RPC params All line\",\n \"type\": \"boolean\",\n \"default\": false\n }\n },\n \"required\": [\"requestTimeout\"]\n },\n \"form\": [\n \"requestTimeout\",\n \"multiParams\"\n ]\n}",
|
||||
"dataKeySettingsSchema": "{}\n",
|
||||
"defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#010101\",\"color\":\"rgba(255, 254, 254, 0.87)\",\"padding\":\"0px\",\"settings\":{\"parseGpioStatusFunction\":\"return body[pin] === 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\":\"RPC debug terminal\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"showLegend\":false,\"actions\":{}}"
|
||||
}
|
||||
|
||||
@ -25,8 +25,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.thingsboard.rule.engine.api.RpcError;
|
||||
import org.thingsboard.rule.engine.api.msg.DeviceAttributesEventNotificationMsg;
|
||||
import org.thingsboard.rule.engine.api.msg.DeviceEdgeUpdateMsg;
|
||||
import org.thingsboard.rule.engine.api.msg.DeviceCredentialsUpdateNotificationMsg;
|
||||
import org.thingsboard.rule.engine.api.msg.DeviceEdgeUpdateMsg;
|
||||
import org.thingsboard.rule.engine.api.msg.DeviceNameOrTypeUpdateMsg;
|
||||
import org.thingsboard.server.actors.ActorSystemContext;
|
||||
import org.thingsboard.server.actors.TbActorCtx;
|
||||
@ -73,7 +73,6 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToDeviceRpcResponseM
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToServerRpcResponseMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToTransportUpdateCredentialsProto;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.TsKvProto;
|
||||
import org.thingsboard.server.service.rpc.FromDeviceRpcResponse;
|
||||
import org.thingsboard.server.service.rpc.FromDeviceRpcResponseActorMsg;
|
||||
@ -164,8 +163,14 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
void processRpcRequest(TbActorCtx context, ToDeviceRpcRequestActorMsg msg) {
|
||||
ToDeviceRpcRequest request = msg.getMsg();
|
||||
ToDeviceRpcRequestBody body = request.getBody();
|
||||
ToDeviceRpcRequestMsg rpcRequest = ToDeviceRpcRequestMsg.newBuilder().setRequestId(
|
||||
rpcSeq++).setMethodName(body.getMethod()).setParams(body.getParams()).build();
|
||||
ToDeviceRpcRequestMsg rpcRequest = ToDeviceRpcRequestMsg.newBuilder()
|
||||
.setRequestId(rpcSeq++)
|
||||
.setMethodName(body.getMethod())
|
||||
.setParams(body.getParams())
|
||||
.setExpirationTime(request.getExpirationTime())
|
||||
.setRequestIdMSB(request.getId().getMostSignificantBits())
|
||||
.setRequestIdLSB(request.getId().getLeastSignificantBits())
|
||||
.build();
|
||||
|
||||
long timeout = request.getExpirationTime() - System.currentTimeMillis();
|
||||
if (timeout <= 0) {
|
||||
@ -258,8 +263,14 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
|
||||
sentOneWayIds.add(entry.getKey());
|
||||
systemContext.getTbCoreDeviceRpcService().processRpcResponseFromDeviceActor(new FromDeviceRpcResponse(request.getId(), null, null));
|
||||
}
|
||||
ToDeviceRpcRequestMsg rpcRequest = ToDeviceRpcRequestMsg.newBuilder().setRequestId(
|
||||
entry.getKey()).setMethodName(body.getMethod()).setParams(body.getParams()).build();
|
||||
ToDeviceRpcRequestMsg rpcRequest = ToDeviceRpcRequestMsg.newBuilder()
|
||||
.setRequestId(entry.getKey())
|
||||
.setMethodName(body.getMethod())
|
||||
.setParams(body.getParams())
|
||||
.setExpirationTime(request.getExpirationTime())
|
||||
.setRequestIdMSB(request.getId().getMostSignificantBits())
|
||||
.setRequestIdLSB(request.getId().getLeastSignificantBits())
|
||||
.build();
|
||||
sendToTransport(rpcRequest, sessionId, nodeId);
|
||||
};
|
||||
}
|
||||
|
||||
@ -40,7 +40,6 @@ import org.thingsboard.server.common.data.id.DeviceId;
|
||||
import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.id.UUIDBased;
|
||||
import org.thingsboard.server.common.data.rpc.RpcRequest;
|
||||
import org.thingsboard.server.common.data.rpc.ToDeviceRpcRequestBody;
|
||||
import org.thingsboard.server.common.msg.rpc.ToDeviceRpcRequest;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
@ -97,22 +96,17 @@ public class RpcController extends BaseController {
|
||||
private DeferredResult<ResponseEntity> handleDeviceRPCRequest(boolean oneWay, DeviceId deviceId, String requestBody) throws ThingsboardException {
|
||||
try {
|
||||
JsonNode rpcRequestBody = jsonMapper.readTree(requestBody);
|
||||
RpcRequest cmd = new RpcRequest(rpcRequestBody.get("method").asText(),
|
||||
jsonMapper.writeValueAsString(rpcRequestBody.get("params")));
|
||||
|
||||
if (rpcRequestBody.has("timeout")) {
|
||||
cmd.setTimeout(rpcRequestBody.get("timeout").asLong());
|
||||
}
|
||||
ToDeviceRpcRequestBody body = new ToDeviceRpcRequestBody(rpcRequestBody.get("method").asText(), jsonMapper.writeValueAsString(rpcRequestBody.get("params")));
|
||||
SecurityUser currentUser = getCurrentUser();
|
||||
TenantId tenantId = currentUser.getTenantId();
|
||||
final DeferredResult<ResponseEntity> response = new DeferredResult<>();
|
||||
long timeout = cmd.getTimeout() != null ? cmd.getTimeout() : defaultTimeout;
|
||||
long timeout = rpcRequestBody.has("timeout") ? rpcRequestBody.get("timeout").asLong() : defaultTimeout;
|
||||
long expTime = System.currentTimeMillis() + Math.max(minTimeout, timeout);
|
||||
ToDeviceRpcRequestBody body = new ToDeviceRpcRequestBody(cmd.getMethodName(), cmd.getRequestData());
|
||||
UUID rpcRequestUUID = rpcRequestBody.has("requestUUID") ? UUID.fromString(rpcRequestBody.get("requestUUID").asText()) : UUID.randomUUID();
|
||||
accessValidator.validate(currentUser, Operation.RPC_CALL, deviceId, new HttpValidationCallback(response, new FutureCallback<DeferredResult<ResponseEntity>>() {
|
||||
@Override
|
||||
public void onSuccess(@Nullable DeferredResult<ResponseEntity> result) {
|
||||
ToDeviceRpcRequest rpcRequest = new ToDeviceRpcRequest(UUID.randomUUID(),
|
||||
ToDeviceRpcRequest rpcRequest = new ToDeviceRpcRequest(rpcRequestUUID,
|
||||
tenantId,
|
||||
deviceId,
|
||||
oneWay,
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
transport.lwm2m.security.key_store=lwm2m/credentials/serverKeyStore.jks
|
||||
transport.lwm2m.security.key_store_password=server
|
||||
edges.enabled=true
|
||||
transport.lwm2m.bootstrap.security.alias=server
|
||||
@ -1,28 +0,0 @@
|
||||
/**
|
||||
* Copyright © 2016-2021 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.common.data.rpc;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Andrew Shvayka
|
||||
*/
|
||||
@Data
|
||||
public class RpcRequest {
|
||||
private final String methodName;
|
||||
private final String requestData;
|
||||
private Long timeout;
|
||||
}
|
||||
@ -318,6 +318,9 @@ message ToDeviceRpcRequestMsg {
|
||||
int32 requestId = 1;
|
||||
string methodName = 2;
|
||||
string params = 3;
|
||||
int64 expirationTime = 4;
|
||||
int64 requestIdMSB = 5;
|
||||
int64 requestIdLSB = 6;
|
||||
}
|
||||
|
||||
message ToDeviceRpcResponseMsg {
|
||||
|
||||
@ -69,8 +69,8 @@ export interface WidgetSubscriptionApi {
|
||||
}
|
||||
|
||||
export interface RpcApi {
|
||||
sendOneWayCommand: (method: string, params?: any, timeout?: number) => Observable<any>;
|
||||
sendTwoWayCommand: (method: string, params?: any, timeout?: number) => Observable<any>;
|
||||
sendOneWayCommand: (method: string, params?: any, timeout?: number, requestUUID?: string) => Observable<any>;
|
||||
sendTwoWayCommand: (method: string, params?: any, timeout?: number, requestUUID?: string) => Observable<any>;
|
||||
}
|
||||
|
||||
export interface IWidgetUtils {
|
||||
@ -298,8 +298,8 @@ export interface IWidgetSubscription {
|
||||
onResetTimewindow(): void;
|
||||
updateTimewindowConfig(newTimewindow: Timewindow): void;
|
||||
|
||||
sendOneWayCommand(method: string, params?: any, timeout?: number): Observable<any>;
|
||||
sendTwoWayCommand(method: string, params?: any, timeout?: number): Observable<any>;
|
||||
sendOneWayCommand(method: string, params?: any, timeout?: number, requestUUID?: string): Observable<any>;
|
||||
sendTwoWayCommand(method: string, params?: any, timeout?: number, requestUUID?: string): Observable<any>;
|
||||
clearRpcError(): void;
|
||||
|
||||
subscribe(): void;
|
||||
|
||||
@ -38,12 +38,14 @@ import {
|
||||
import { HttpErrorResponse } from '@angular/common/http';
|
||||
import {
|
||||
calculateIntervalStartEndTime,
|
||||
calculateTsOffset, ComparisonDuration,
|
||||
calculateTsOffset,
|
||||
ComparisonDuration,
|
||||
createSubscriptionTimewindow,
|
||||
createTimewindowForComparison,
|
||||
isHistoryTypeTimewindow,
|
||||
SubscriptionTimewindow,
|
||||
Timewindow, timewindowTypeChanged,
|
||||
Timewindow,
|
||||
timewindowTypeChanged,
|
||||
toHistoryTimewindow,
|
||||
WidgetTimewindow
|
||||
} from '@app/shared/models/time/time.models';
|
||||
@ -642,12 +644,12 @@ export class WidgetSubscription implements IWidgetSubscription {
|
||||
}
|
||||
}
|
||||
|
||||
sendOneWayCommand(method: string, params?: any, timeout?: number): Observable<any> {
|
||||
return this.sendCommand(true, method, params, timeout);
|
||||
sendOneWayCommand(method: string, params?: any, timeout?: number, requestUUID?: string): Observable<any> {
|
||||
return this.sendCommand(true, method, params, timeout, requestUUID);
|
||||
}
|
||||
|
||||
sendTwoWayCommand(method: string, params?: any, timeout?: number): Observable<any> {
|
||||
return this.sendCommand(false, method, params, timeout);
|
||||
sendTwoWayCommand(method: string, params?: any, timeout?: number, requestUUID?: string): Observable<any> {
|
||||
return this.sendCommand(false, method, params, timeout, requestUUID);
|
||||
}
|
||||
|
||||
clearRpcError(): void {
|
||||
@ -656,7 +658,7 @@ export class WidgetSubscription implements IWidgetSubscription {
|
||||
this.callbacks.onRpcErrorCleared(this);
|
||||
}
|
||||
|
||||
sendCommand(oneWayElseTwoWay: boolean, method: string, params?: any, timeout?: number): Observable<any> {
|
||||
sendCommand(oneWayElseTwoWay: boolean, method: string, params?: any, timeout?: number, requestUUID?: string): Observable<any> {
|
||||
if (!this.rpcEnabled) {
|
||||
return throwError(new Error('Rpc disabled!'));
|
||||
} else {
|
||||
@ -667,7 +669,8 @@ export class WidgetSubscription implements IWidgetSubscription {
|
||||
}
|
||||
const requestBody: any = {
|
||||
method,
|
||||
params
|
||||
params,
|
||||
requestUUID
|
||||
};
|
||||
if (timeout && timeout > 0) {
|
||||
requestBody.timeout = timeout;
|
||||
|
||||
@ -32,12 +32,7 @@ import {
|
||||
import { UtilsService } from '@core/services/utils.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { ResourcesService } from '../services/resources.service';
|
||||
import {
|
||||
toWidgetInfo,
|
||||
toWidgetType,
|
||||
toWidgetTypeDetails,
|
||||
WidgetInfo
|
||||
} from '@app/modules/home/models/widget-component.models';
|
||||
import { toWidgetInfo, toWidgetTypeDetails, WidgetInfo } from '@app/modules/home/models/widget-component.models';
|
||||
import { filter, map, mergeMap, tap } from 'rxjs/operators';
|
||||
import { WidgetTypeId } from '@shared/models/id/widget-type-id';
|
||||
import { NULL_UUID } from '@shared/models/id/has-uuid';
|
||||
|
||||
@ -27,7 +27,8 @@ import {
|
||||
WidgetControllerDescriptor,
|
||||
WidgetType,
|
||||
widgetType,
|
||||
WidgetTypeDescriptor, WidgetTypeDetails,
|
||||
WidgetTypeDescriptor,
|
||||
WidgetTypeDetails,
|
||||
WidgetTypeParameters
|
||||
} from '@shared/models/widget.models';
|
||||
import { Timewindow, WidgetTimewindow } from '@shared/models/time/time.models';
|
||||
@ -188,16 +189,16 @@ export class WidgetContext {
|
||||
};
|
||||
|
||||
controlApi: RpcApi = {
|
||||
sendOneWayCommand: (method, params, timeout) => {
|
||||
sendOneWayCommand: (method, params, timeout, requestUUID) => {
|
||||
if (this.defaultSubscription) {
|
||||
return this.defaultSubscription.sendOneWayCommand(method, params, timeout);
|
||||
return this.defaultSubscription.sendOneWayCommand(method, params, timeout, requestUUID);
|
||||
} else {
|
||||
return of(null);
|
||||
}
|
||||
},
|
||||
sendTwoWayCommand: (method, params, timeout) => {
|
||||
sendTwoWayCommand: (method, params, timeout, requestUUID) => {
|
||||
if (this.defaultSubscription) {
|
||||
return this.defaultSubscription.sendTwoWayCommand(method, params, timeout);
|
||||
return this.defaultSubscription.sendTwoWayCommand(method, params, timeout, requestUUID);
|
||||
} else {
|
||||
return of(null);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user