Merge pull request #11062 from maxunbearable/fix/3906-removed-opcua-asyncio
Removed 'OPCUA ASYNCIO' Connector Type
This commit is contained in:
commit
a562def1c8
@ -2134,7 +2134,7 @@
|
|||||||
"padding": "0px",
|
"padding": "0px",
|
||||||
"settings": {
|
"settings": {
|
||||||
"useMarkdownTextFunction": false,
|
"useMarkdownTextFunction": false,
|
||||||
"markdownTextPattern": "<div style=\"width: 100%; height: 100%; padding: 0;\" fxFlex fxLayout=\"column\">\r\n <mat-tab-group [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab label=\"All\" value=\"gateway_devices_0\"></mat-tab>\r\n <mat-tab label=\"MQTT\" value=\"gateway_devices_1\"></mat-tab>\r\n <mat-tab label=\"MODBUS\" value=\"gateway_devices_2\"></mat-tab>\r\n <mat-tab label=\"GRPC\" value=\"gateway_devices_3\"></mat-tab>\r\n <mat-tab label=\"OPCUA\" value=\"gateway_devices_4\"> </mat-tab>\r\n <mat-tab label=\"OPCUA ASYNCIO\" value=\"gateway_devices_5\"></mat-tab>\r\n <mat-tab label=\"BLE\" value=\"gateway_devices_6\"></mat-tab>\r\n <mat-tab label=\"REQUEST\" value=\"gateway_devices_7\"></mat-tab>\r\n <mat-tab label=\"CAN\" value=\"gateway_devices_8\"></mat-tab>\r\n <mat-tab label=\"BACNET\" value=\"gateway_devices_9\"></mat-tab>\r\n <mat-tab label=\"ODBC\" value=\"gateway_devices_10\"></mat-tab>\r\n <mat-tab label=\"REST\" value=\"gateway_devices_11\"></mat-tab>\r\n <mat-tab label=\"SNMP\" value=\"gateway_devices_12\"></mat-tab>\r\n <mat-tab label=\"FTP\" value=\"gateway_devices_13\"></mat-tab>\r\n <mat-tab label=\"SOCKET\" value=\"gateway_devices_14\"></mat-tab>\r\n <mat-tab label=\"XMPP\" value=\"gateway_devices_15\"></mat-tab>\r\n <mat-tab label=\"OCCP\" value=\"gateway_devices_16\"></mat-tab>\r\n <mat-tab label=\"CUSTOM\" value=\"gateway_devices_17\"></mat-tab>\r\n </mat-tab-group><tb-dashboard-state *ngIf=\"selectedTabIndex == 1\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_1\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 2\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_2\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 3\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_3\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 4\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_4\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 5\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_5\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 6\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_6\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 7\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_7\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 8\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_8\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 9\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_9\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 10\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_10\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 11\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_11\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 12\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_12\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 13\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_13\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 14\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_14\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 15\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_15\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 16\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_16\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 17\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_17\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"!selectedTabIndex\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_0\"></tb-dashboard-state>\r\n</div>\r\n",
|
"markdownTextPattern": "<div style=\"width: 100%; height: 100%; padding: 0;\" fxFlex fxLayout=\"column\">\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 6\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_6\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 7\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_7\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 8\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_8\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 9\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_9\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 10\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_10\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 11\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_11\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 12\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_12\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 13\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_13\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 14\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_14\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 15\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_15\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 16\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_16\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"selectedTabIndex == 17\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_17\"></tb-dashboard-state>\r\n <tb-dashboard-state *ngIf=\"!selectedTabIndex\" [ctx]=\"ctx\" fxFlex syncParentStateParams=\"true\" stateId=\"gateway_devices_0\"></tb-dashboard-state>\r\n</div>\r\n",
|
||||||
"applyDefaultMarkdownStyle": false,
|
"applyDefaultMarkdownStyle": false,
|
||||||
"markdownCss": ".mat-mdc-form-field-subscript-wrapper {\n display: none !important;\n}"
|
"markdownCss": ".mat-mdc-form-field-subscript-wrapper {\n display: none !important;\n}"
|
||||||
},
|
},
|
||||||
@ -2996,172 +2996,6 @@
|
|||||||
"id": "bb27723a-989c-2327-5808-b56d490b93ab",
|
"id": "bb27723a-989c-2327-5808-b56d490b93ab",
|
||||||
"typeFullFqn": "system.cards.entities_table"
|
"typeFullFqn": "system.cards.entities_table"
|
||||||
},
|
},
|
||||||
"e3a9539d-2ccb-96e0-2afa-36f93e40233d": {
|
|
||||||
"type": "latest",
|
|
||||||
"sizeX": 7.5,
|
|
||||||
"sizeY": 6.5,
|
|
||||||
"config": {
|
|
||||||
"timewindow": {
|
|
||||||
"displayValue": "",
|
|
||||||
"selectedTab": 0,
|
|
||||||
"realtime": {
|
|
||||||
"realtimeType": 1,
|
|
||||||
"interval": 1000,
|
|
||||||
"timewindowMs": 86400000,
|
|
||||||
"quickInterval": "CURRENT_DAY"
|
|
||||||
},
|
|
||||||
"history": {
|
|
||||||
"historyType": 0,
|
|
||||||
"interval": 1000,
|
|
||||||
"timewindowMs": 60000,
|
|
||||||
"fixedTimewindow": {
|
|
||||||
"startTimeMs": 1684327643501,
|
|
||||||
"endTimeMs": 1684414043501
|
|
||||||
},
|
|
||||||
"quickInterval": "CURRENT_DAY"
|
|
||||||
},
|
|
||||||
"aggregation": {
|
|
||||||
"type": "NONE",
|
|
||||||
"limit": 200
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"showTitle": true,
|
|
||||||
"backgroundColor": "rgb(255, 255, 255)",
|
|
||||||
"color": "rgba(0, 0, 0, 0.87)",
|
|
||||||
"padding": "4px",
|
|
||||||
"settings": {
|
|
||||||
"entitiesTitle": "Devices",
|
|
||||||
"enableSearch": true,
|
|
||||||
"enableSelectColumnDisplay": true,
|
|
||||||
"enableStickyHeader": true,
|
|
||||||
"enableStickyAction": true,
|
|
||||||
"reserveSpaceForHiddenAction": "true",
|
|
||||||
"displayEntityName": true,
|
|
||||||
"entityNameColumnTitle": "Device Name",
|
|
||||||
"displayEntityLabel": false,
|
|
||||||
"displayEntityType": false,
|
|
||||||
"displayPagination": true,
|
|
||||||
"defaultPageSize": 10,
|
|
||||||
"defaultSortOrder": "entityName",
|
|
||||||
"useRowStyleFunction": false
|
|
||||||
},
|
|
||||||
"title": "Devices",
|
|
||||||
"dropShadow": true,
|
|
||||||
"enableFullscreen": true,
|
|
||||||
"titleStyle": {
|
|
||||||
"fontSize": "16px",
|
|
||||||
"fontWeight": 400,
|
|
||||||
"padding": "5px 10px 5px 10px"
|
|
||||||
},
|
|
||||||
"useDashboardTimewindow": false,
|
|
||||||
"showLegend": false,
|
|
||||||
"datasources": [
|
|
||||||
{
|
|
||||||
"type": "entity",
|
|
||||||
"name": null,
|
|
||||||
"entityAliasId": "a75d9031-ba51-8da4-81be-de65061b72f4",
|
|
||||||
"filterId": "3931abd5-2205-9386-6ea9-8e8a8131bb9d",
|
|
||||||
"dataKeys": [
|
|
||||||
{
|
|
||||||
"name": "type",
|
|
||||||
"type": "entityField",
|
|
||||||
"label": "Device Type",
|
|
||||||
"color": "#2196f3",
|
|
||||||
"settings": {},
|
|
||||||
"_hash": 0.3129929097366162,
|
|
||||||
"aggregationType": null,
|
|
||||||
"units": null,
|
|
||||||
"decimals": null,
|
|
||||||
"funcBody": null,
|
|
||||||
"usePostProcessing": null,
|
|
||||||
"postFuncBody": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "active",
|
|
||||||
"type": "attribute",
|
|
||||||
"label": "Status",
|
|
||||||
"color": "#4caf50",
|
|
||||||
"settings": {
|
|
||||||
"columnWidth": "0px",
|
|
||||||
"useCellStyleFunction": false,
|
|
||||||
"useCellContentFunction": true,
|
|
||||||
"cellContentFunction": "let cssClass;\r\nswitch (value) {\r\n case \"Active\":\r\n cssClass = \"status status-active\";\r\n break;\r\n case \"Inactive\":\r\n default:\r\n cssClass = \"status status-inactive\";\r\n break;\r\n }\r\n \r\n return `<span class='${cssClass}'>${value}</span>`;",
|
|
||||||
"defaultColumnVisibility": "visible",
|
|
||||||
"columnSelectionToDisplay": "enabled"
|
|
||||||
},
|
|
||||||
"_hash": 0.5969880627410065,
|
|
||||||
"aggregationType": null,
|
|
||||||
"units": null,
|
|
||||||
"decimals": null,
|
|
||||||
"funcBody": null,
|
|
||||||
"usePostProcessing": true,
|
|
||||||
"postFuncBody": "return value == 'true' ? \"Active\": \"Inactive\";"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "connectorName",
|
|
||||||
"type": "attribute",
|
|
||||||
"label": "Connector Name",
|
|
||||||
"color": "#f44336",
|
|
||||||
"settings": {},
|
|
||||||
"_hash": 0.012483045440007778,
|
|
||||||
"aggregationType": null,
|
|
||||||
"units": null,
|
|
||||||
"decimals": null,
|
|
||||||
"funcBody": null,
|
|
||||||
"usePostProcessing": null,
|
|
||||||
"postFuncBody": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "connectorType",
|
|
||||||
"type": "attribute",
|
|
||||||
"label": "Connector Type",
|
|
||||||
"color": "#ffc107",
|
|
||||||
"settings": {},
|
|
||||||
"_hash": 0.6004192233378134,
|
|
||||||
"aggregationType": null,
|
|
||||||
"units": null,
|
|
||||||
"decimals": null,
|
|
||||||
"funcBody": null,
|
|
||||||
"usePostProcessing": null,
|
|
||||||
"postFuncBody": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"alarmFilterConfig": {
|
|
||||||
"statusList": [
|
|
||||||
"ACTIVE"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"displayTimewindow": true,
|
|
||||||
"showTitleIcon": false,
|
|
||||||
"titleTooltip": "",
|
|
||||||
"widgetStyle": {},
|
|
||||||
"widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-active {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-inactive {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n",
|
|
||||||
"pageSize": 1024,
|
|
||||||
"noDataDisplayMessage": "",
|
|
||||||
"enableDataExport": false,
|
|
||||||
"actions": {
|
|
||||||
"actionCellButton": [
|
|
||||||
{
|
|
||||||
"name": "Show Device Info",
|
|
||||||
"icon": "info",
|
|
||||||
"useShowWidgetActionFunction": null,
|
|
||||||
"showWidgetActionFunction": "return true;",
|
|
||||||
"type": "custom",
|
|
||||||
"customFunction": "const url = `${window.location.origin + widgetContext.utils.getEntityDetailsPageURL(entityId.id, entityId.entityType)}`;\nwindow.open(url, '_blank');",
|
|
||||||
"openInSeparateDialog": false,
|
|
||||||
"openInPopover": false,
|
|
||||||
"id": "94de7690-f91d-b032-6771-85af99abd749"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"row": 0,
|
|
||||||
"col": 0,
|
|
||||||
"id": "e3a9539d-2ccb-96e0-2afa-36f93e40233d",
|
|
||||||
"typeFullFqn": "system.cards.entities_table"
|
|
||||||
},
|
|
||||||
"cf2eba6b-44f6-9cc2-6089-35c735f54898": {
|
"cf2eba6b-44f6-9cc2-6089-35c735f54898": {
|
||||||
"type": "latest",
|
"type": "latest",
|
||||||
"sizeX": 7.5,
|
"sizeX": 7.5,
|
||||||
@ -5632,33 +5466,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"gateway_devices_5": {
|
|
||||||
"name": "gateway_devices_opcua_async",
|
|
||||||
"root": false,
|
|
||||||
"layouts": {
|
|
||||||
"main": {
|
|
||||||
"widgets": {
|
|
||||||
"e3a9539d-2ccb-96e0-2afa-36f93e40233d": {
|
|
||||||
"sizeX": 24,
|
|
||||||
"sizeY": 11,
|
|
||||||
"row": 0,
|
|
||||||
"col": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gridSettings": {
|
|
||||||
"backgroundColor": "#eeeeee",
|
|
||||||
"columns": 24,
|
|
||||||
"margin": 0,
|
|
||||||
"outerMargin": true,
|
|
||||||
"backgroundSizeMode": "100%",
|
|
||||||
"autoFillHeight": false,
|
|
||||||
"backgroundImageUrl": null,
|
|
||||||
"mobileAutoFillHeight": false,
|
|
||||||
"mobileRowHeight": 70
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"gateway_devices_6": {
|
"gateway_devices_6": {
|
||||||
"name": "gateway_devices_ble",
|
"name": "gateway_devices_ble",
|
||||||
"root": false,
|
"root": false,
|
||||||
|
|||||||
@ -447,9 +447,6 @@
|
|||||||
</button>
|
</button>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
<ng-template [ngSwitchCase]="ConnectorType.OPCUA_ASYNCIO">
|
|
||||||
<ng-container *ngTemplateOutlet="OPCUAForm"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template [ngSwitchCase]="ConnectorType.OPCUA" #OPCUAForm>
|
<ng-template [ngSwitchCase]="ConnectorType.OPCUA" #OPCUAForm>
|
||||||
<mat-form-field >
|
<mat-form-field >
|
||||||
<mat-label>{{ 'gateway.rpc.method' | translate }}</mat-label>
|
<mat-label>{{ 'gateway.rpc.method' | translate }}</mat-label>
|
||||||
|
|||||||
@ -273,7 +273,6 @@ export class GatewayServiceRPCConnectorComponent implements OnInit, OnDestroy, C
|
|||||||
})
|
})
|
||||||
break;
|
break;
|
||||||
case ConnectorType.OPCUA:
|
case ConnectorType.OPCUA:
|
||||||
case ConnectorType.OPCUA_ASYNCIO:
|
|
||||||
formGroup = this.fb.group({
|
formGroup = this.fb.group({
|
||||||
method: [null, [Validators.required, Validators.pattern(noLeadTrailSpacesRegex)]],
|
method: [null, [Validators.required, Validators.pattern(noLeadTrailSpacesRegex)]],
|
||||||
arguments: this.fb.array([]),
|
arguments: this.fb.array([]),
|
||||||
@ -396,7 +395,6 @@ export class GatewayServiceRPCConnectorComponent implements OnInit, OnDestroy, C
|
|||||||
delete value.httpHeaders;
|
delete value.httpHeaders;
|
||||||
break;
|
break;
|
||||||
case ConnectorType.OPCUA:
|
case ConnectorType.OPCUA:
|
||||||
case ConnectorType.OPCUA_ASYNCIO:
|
|
||||||
this.clearFromArrayByName("arguments");
|
this.clearFromArrayByName("arguments");
|
||||||
value.arguments.forEach(value => {
|
value.arguments.forEach(value => {
|
||||||
this.addOCPUAArguments(value)
|
this.addOCPUAArguments(value)
|
||||||
|
|||||||
@ -150,7 +150,6 @@ export class GatewayServiceRPCComponent implements OnInit {
|
|||||||
case ConnectorType.BACNET:
|
case ConnectorType.BACNET:
|
||||||
case ConnectorType.CAN:
|
case ConnectorType.CAN:
|
||||||
case ConnectorType.OPCUA:
|
case ConnectorType.OPCUA:
|
||||||
case ConnectorType.OPCUA_ASYNCIO:
|
|
||||||
return params.method;
|
return params.method;
|
||||||
case ConnectorType.BLE:
|
case ConnectorType.BLE:
|
||||||
case ConnectorType.OCPP:
|
case ConnectorType.OCPP:
|
||||||
|
|||||||
@ -125,7 +125,6 @@ export enum ConnectorType {
|
|||||||
MODBUS = 'modbus',
|
MODBUS = 'modbus',
|
||||||
GRPC = 'grpc',
|
GRPC = 'grpc',
|
||||||
OPCUA = 'opcua',
|
OPCUA = 'opcua',
|
||||||
OPCUA_ASYNCIO = 'opcua_asyncio',
|
|
||||||
BLE = 'ble',
|
BLE = 'ble',
|
||||||
REQUEST = 'request',
|
REQUEST = 'request',
|
||||||
CAN = 'can',
|
CAN = 'can',
|
||||||
@ -145,7 +144,6 @@ export const GatewayConnectorDefaultTypesTranslatesMap = new Map<ConnectorType,
|
|||||||
[ConnectorType.MODBUS, 'MODBUS'],
|
[ConnectorType.MODBUS, 'MODBUS'],
|
||||||
[ConnectorType.GRPC, 'GRPC'],
|
[ConnectorType.GRPC, 'GRPC'],
|
||||||
[ConnectorType.OPCUA, 'OPCUA'],
|
[ConnectorType.OPCUA, 'OPCUA'],
|
||||||
[ConnectorType.OPCUA_ASYNCIO, 'OPCUA ASYNCIO'],
|
|
||||||
[ConnectorType.BLE, 'BLE'],
|
[ConnectorType.BLE, 'BLE'],
|
||||||
[ConnectorType.REQUEST, 'REQUEST'],
|
[ConnectorType.REQUEST, 'REQUEST'],
|
||||||
[ConnectorType.CAN, 'CAN'],
|
[ConnectorType.CAN, 'CAN'],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user