From d076917986c841c413b39c99ff75aae887119e51 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 20 Oct 2022 13:49:05 +0300 Subject: [PATCH 001/120] gateway list gateway docker comand --- .../widget_bundles/gateway_widgets.json | 20 ++- .../gateway-command-dialog.component.html | 85 +++++++++++ .../gateway-command-dialog.component.ts | 93 ++++++++++++ .../gateway/gateway-list-table-config.ts | 142 ++++++++++++++++++ .../gateway/gateway-list.component.html | 33 ++++ .../gateway/gateway-list.component.scss | 55 +++++++ .../gateway/gateway-list.component.ts | 75 +++++++++ .../home/components/home-components.module.ts | 3 + .../shared-home-components.module.ts | 7 +- .../assets/locale/locale.constant-en_US.json | 9 +- 10 files changed, 518 insertions(+), 4 deletions(-) create mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html create mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts create mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts create mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html create mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss create mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index dc86c0f003..c81b564960 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -62,6 +62,24 @@ "settingsDirective": "tb-gateway-config-single-device-widget-settings", "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"gatewayTitle\":\"Gateway configuration (Single device)\"},\"title\":\"Gateway configuration (Single device)\"}" } - } + }, + { + "alias": "gateway_list", + "name": "Gateway list", + "image": null, + "description": null, + "descriptor": { + "type": "static", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "", + "templateCss": " .tb-entity-table {\r\n padding: 0 !important;\r\n }", + "controllerScript": "self.onInit = function() {\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "settingsDirective": "tb-gateway-list-widget-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"cardHtml\":\"
HTML code here
\",\"cardCss\":\".card {\\n font-weight: bold;\\n font-size: 32px;\\n color: #999;\\n width: 100%;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\"},\"title\":\"Gateway list\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + }, ] } \ No newline at end of file diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html new file mode 100644 index 0000000000..d5040b8714 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html @@ -0,0 +1,85 @@ + +
+ +

gateway.command

+ + +
+ + +
+
+
+ gateway.linux-macos +
+
{{ linuxCode }}
+ +
+ gateway.windows +
+
{{ windowsCode }}
+ +
+
+
+
+ +
+
diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts new file mode 100644 index 0000000000..7c742e4e01 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts @@ -0,0 +1,93 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2022 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { Component, Inject, OnInit } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { DialogComponent } from '@app/shared/components/dialog.component'; +import { TranslateService } from '@ngx-translate/core'; +import {Device, DeviceCredentials} from "@shared/models/device.models"; +import {ActionNotificationShow} from "@core/notification/notification.actions"; + +export interface GatewayCommandDialogData { + device: Device, + credentials: DeviceCredentials +} + +@Component({ + selector: 'tb-gateway-command-dialog', + templateUrl: './gateway-command-dialog.component.html', + styleUrls: [] +}) +export class GatewayCommandDialogComponent extends DialogComponent implements OnInit { + linuxCode: string; + windowsCode: string; + + constructor(protected router: Router, + protected store: Store, + private translate: TranslateService, + @Inject(MAT_DIALOG_DATA) public data: GatewayCommandDialogData, + public dialogRef: MatDialogRef,) { + super(store, router, dialogRef); + const ACCESS_TOKEN = data.credentials.credentialsId; + this.linuxCode = "docker run -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v " + + "~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -e accessToken=" + + ACCESS_TOKEN + + " --restart always thingsboard/tb-gateway"; + this.windowsCode = "docker run -it -v %HOMEPATH%/tb-gateway/config:/thingsboard_gateway/config -v " + + "%HOMEPATH%/tb-gateway/extensions:/thingsboard_gateway/extensions -v %HOMEPATH%/tb-gateway/logs:/thingsboard_gateway/logs " + + "--name tb-gateway -e host=thingsboard.cloud -p 1883 -e accessToken=" + + ACCESS_TOKEN + + " --restart always thingsboard/tb-gateway"; + + } + + ngOnInit(): void { + } + + close(): void { + this.dialogRef.close(); + } + + onDockerCodeCopied() { + this.store.dispatch(new ActionNotificationShow( + { + message: this.translate.instant('gateway.command-copied-message'), + type: 'success', + target: 'dockerCommandDialogContent', + duration: 1200, + verticalPosition: 'bottom', + horizontalPosition: 'left' + })); + } +} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts new file mode 100644 index 0000000000..da45dce83d --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts @@ -0,0 +1,142 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2022 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { + DateEntityTableColumn, + EntityTableColumn, + EntityTableConfig +} from '@home/models/entity/entities-table-config.models'; +import {EntityTypeResource} from '@shared/models/entity-type.models'; +import {TranslateService} from '@ngx-translate/core'; +import {DatePipe} from '@angular/common'; +import {Direction} from '@shared/models/page/sort-order'; +import {MatDialog} from '@angular/material/dialog'; +import {TimePageLink} from '@shared/models/page/page-link'; +import {Observable} from 'rxjs'; +import {PageData} from '@shared/models/page/page-data'; +import {UtilsService} from '@core/services/utils.service'; +import {DeviceService} from "@core/http/device.service"; +import {AttributeService} from "@core/http/attribute.service"; +import {Device} from "@shared/models/device.models"; +import { + GatewayCommandDialogComponent, + GatewayCommandDialogData +} from "@home/components/gateway/gateway-command-dialog.component"; +import {ActionNotificationShow} from "@core/notification/notification.actions"; +import {Store} from "@ngrx/store"; +import {AppState} from "@core/core.state"; +import {map} from "rxjs/operators"; + +export class GatewayListTableConfig extends EntityTableConfig { + + constructor(protected store: Store, + private deviceService: DeviceService, + private attributeService: AttributeService, + private datePipe: DatePipe, + private translate: TranslateService, + private utils: UtilsService, + private dialog: MatDialog, + updateOnInit = true, + pageMode = false) { + super(); + this.loadDataOnInit = updateOnInit; + this.tableTitle = ''; + this.useTimePageLink = false; + this.pageMode = pageMode; + this.detailsPanelEnabled = false; + this.selectionEnabled = false; + this.searchEnabled = true; + this.addEnabled = false; + this.entitiesDeleteEnabled = false; + this.actionsColumnTitle = ''; + this.entityTranslations = { + noEntities: 'gateway.no-gateway-found', + search: 'gateway.gateway-search' + }; + this.entityResources = {} as EntityTypeResource; + + this.entitiesFetchFunction = pageLink => this.fetchGateways(pageLink); + + this.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC}; + + this.columns.push( + new DateEntityTableColumn('createdTime', 'gateway.created-time', this.datePipe, '150px')); + + this.columns.push( + new EntityTableColumn('entityName', 'gateway.gateway-name', '20%', + (entity => this.utils.customTranslation(entity.name, entity.name)) + ) + ); + + this.cellActionDescriptors.push( + { + name: this.translate.instant('gateway.command'), + icon: 'vpn_key', + isEnabled: () => true, + onAction: ($event, entity) => this.showGatewayDockerCommand(entity) + } + ); + } + + showGatewayDockerCommand(entity: Device) { + this.deviceService.getDeviceCredentials(entity.id.id).subscribe(credentials => { + this.dialog.open + (GatewayCommandDialogComponent, + { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + credentials: credentials, + device: entity + } + }).afterClosed().subscribe( + (res) => { + if (res) { + this.updateData(); + } + } + ); + }, error => { + const messageToShow = `
${error}
`; + this.store.dispatch(new ActionNotificationShow({message: messageToShow, type: 'error'})); + }) + } + + fetchGateways(pageLink: TimePageLink): Observable> { + return this.deviceService.getUserDevices(pageLink).pipe( + map(pageData => { + pageData.data = pageData.data.filter(device => device.additionalInfo.gateway); + pageData.totalElements = pageData.data.length; + return pageData; + }) + ); + } +} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html new file mode 100644 index 0000000000..35cde6d91b --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html @@ -0,0 +1,33 @@ + + diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss new file mode 100644 index 0000000000..0ad3466e17 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss @@ -0,0 +1,55 @@ +/** + * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * + * Copyright © 2016-2022 ThingsBoard, Inc. All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of ThingsBoard, Inc. and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to ThingsBoard, Inc. + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * + * Dissemination of this information or reproduction of this material is strictly forbidden + * unless prior written permission is obtained from COMPANY. + * + * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, + * managers or contractors who have executed Confidentiality and Non-disclosure agreements + * explicitly covering such access. + * + * The copyright notice above does not evidence any actual or intended publication + * or disclosure of this source code, which includes + * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, + * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT + * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, + * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. + * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION + * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, + * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ +:host { + width: 100%; + height: 100%; + display: block; + .tb-table-widget { + .table-container { + position: relative; + } + .mat-table { + .mat-row { + &.invisible { + visibility: hidden; + } + } + } + span.no-data-found { + position: absolute; + top: 60px; + bottom: 0; + left: 0; + right: 0; + } + } +} + diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts new file mode 100644 index 0000000000..73214a56ec --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts @@ -0,0 +1,75 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2022 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import {Component, OnInit} from '@angular/core'; +import {UtilsService} from '@core/services/utils.service'; +import {TranslateService} from '@ngx-translate/core'; +import {DeviceService} from '@core/http/device.service'; +import {AttributeService} from '@core/http/attribute.service'; +import {GatewayListTableConfig} from "@home/components/gateway/gateway-list-table-config"; +import {DatePipe} from "@angular/common"; +import {MatDialog} from "@angular/material/dialog"; +import {Store} from "@ngrx/store"; +import {AppState} from "@core/core.state"; + +@Component({ + selector: 'tb-gateway-list', + templateUrl: './gateway-list.component.html', + styleUrls: ['./gateway-list.component.scss'] +}) + + +export class GatewayListComponent implements OnInit { + gatewayListTableConfig: GatewayListTableConfig; + + constructor( + protected store: Store, + private utils: UtilsService, + private translate: TranslateService, + private datePipe: DatePipe, + private deviceService: DeviceService, + private attributeService: AttributeService, + private dialog: MatDialog, + ) { + } + + ngOnInit(): void { + this.gatewayListTableConfig = new GatewayListTableConfig( + this.store, + this.deviceService, + this.attributeService, + this.datePipe, + this.translate, + this.utils, + this.dialog + ); + } +} diff --git a/ui-ngx/src/app/modules/home/components/home-components.module.ts b/ui-ngx/src/app/modules/home/components/home-components.module.ts index 7cfcf269de..466967da74 100644 --- a/ui-ngx/src/app/modules/home/components/home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/home-components.module.ts @@ -173,6 +173,7 @@ import { RateLimitsDetailsDialogComponent } from '@home/components/profile/tenan import { AssetProfileComponent } from '@home/components/profile/asset-profile.component'; import { AssetProfileDialogComponent } from '@home/components/profile/asset-profile-dialog.component'; import { AssetProfileAutocompleteComponent } from '@home/components/profile/asset-profile-autocomplete.component'; +import { GatewayListComponent } from "@home/components/gateway/gateway-list.component"; @NgModule({ declarations: @@ -195,6 +196,7 @@ import { AssetProfileAutocompleteComponent } from '@home/components/profile/asse RelationFiltersComponent, AlarmTableHeaderComponent, AlarmTableComponent, + GatewayListComponent, AttributeTableComponent, AddAttributeDialogComponent, EditAttributeValuePanelComponent, @@ -342,6 +344,7 @@ import { AssetProfileAutocompleteComponent } from '@home/components/profile/asse RelationTableComponent, RelationFiltersComponent, AlarmTableComponent, + GatewayListComponent, AttributeTableComponent, AliasesEntitySelectComponent, AliasesEntityAutocompleteComponent, diff --git a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts index 4052958e86..5ba9dc8dc5 100644 --- a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts @@ -18,6 +18,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedModule } from '@app/shared/shared.module'; import { AlarmDetailsDialogComponent } from '@home/components/alarm/alarm-details-dialog.component'; +import { GatewayCommandDialogComponent } from "@home/components/gateway/gateway-command-dialog.component"; import { SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; @NgModule({ @@ -26,14 +27,16 @@ import { SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; ], declarations: [ - AlarmDetailsDialogComponent + AlarmDetailsDialogComponent, + GatewayCommandDialogComponent ], imports: [ CommonModule, SharedModule ], exports: [ - AlarmDetailsDialogComponent + AlarmDetailsDialogComponent, + GatewayCommandDialogComponent ] }) export class SharedHomeComponentsModule { } diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 434535a785..1af245c05e 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2364,6 +2364,8 @@ }, "gateway": { "add-entry": "Add configuration", + "command": "Docker commands", + "command-copied-message": "Docker command has been copied to clipboard", "connector-add": "Add new connector", "connector-enabled": "Enable connector", "connector-name": "Connector name", @@ -2371,8 +2373,10 @@ "connector-type": "Connector type", "connector-type-required": "Connector type is required.", "connectors": "Connectors configuration", + "copy-command": "Copy docker command", "create-new-gateway": "Create a new gateway", "create-new-gateway-text": "Are you sure you want create a new gateway with name: '{{gatewayName}}'?", + "created-time": "Created time", "delete": "Delete configuration", "download-tip": "Download configuration file", "gateway": "Gateway", @@ -2380,8 +2384,10 @@ "gateway-name": "Gateway name", "gateway-name-required": "Gateway name is required.", "gateway-saved": "Gateway configuration successfully saved.", + "gateway-search": "Gateway search", "json-parse": "Not valid JSON.", "json-required": "Field cannot be empty.", + "linux-macos": "Linux/MacOS", "no-connectors": "No connectors", "no-data": "No configurations", "no-gateway-found": "No gateway found.", @@ -2434,7 +2440,8 @@ "tls-path-private-key": "Path to private key on gateway", "toggle-fullscreen": "Toggle fullscreen", "transformer-json-config": "Configuration JSON*", - "update-config": "Add/update configuration JSON" + "update-config": "Add/update configuration JSON", + "windows": "Windows" }, "grid": { "delete-item-title": "Are you sure you want to delete this item?", From c82bcbafd7553bd34011b348dd5683cbf8b0e16a Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 20 Oct 2022 14:05:35 +0300 Subject: [PATCH 002/120] device service getUserDevices --- ui-ngx/proxy.conf.js | 4 ++-- ui-ngx/src/app/core/http/device.service.ts | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ui-ngx/proxy.conf.js b/ui-ngx/proxy.conf.js index 12485801c0..71d572b924 100644 --- a/ui-ngx/proxy.conf.js +++ b/ui-ngx/proxy.conf.js @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const forwardUrl = "http://localhost:8080"; -const wsForwardUrl = "ws://localhost:8080"; +const forwardUrl = "https://thingsboard.cloud/"; +const wsForwardUrl = "wss://thingsboard.cloud/"; const ruleNodeUiforwardUrl = forwardUrl; const PROXY_CONFIG = { diff --git a/ui-ngx/src/app/core/http/device.service.ts b/ui-ngx/src/app/core/http/device.service.ts index 6cb4a4bf07..1f4d480899 100644 --- a/ui-ngx/src/app/core/http/device.service.ts +++ b/ui-ngx/src/app/core/http/device.service.ts @@ -42,6 +42,11 @@ export class DeviceService { private http: HttpClient ) { } + public getUserDevices(pageLink: PageLink, type: string = '', config?: RequestConfig): Observable> { + return this.http.get>(`/api/user/devices${pageLink.toQuery()}&type=${type}`, + defaultHttpOptionsFromConfig(config)); + } + public getTenantDeviceInfos(pageLink: PageLink, type: string = '', config?: RequestConfig): Observable> { return this.http.get>(`/api/tenant/deviceInfos${pageLink.toQuery()}&type=${type}`, From 468242802b1a4a9d4b79f71deed11af3ce84e8a6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 2 Nov 2022 12:16:02 +0200 Subject: [PATCH 003/120] gateway list bundle fix --- .../main/data/json/system/widget_bundles/gateway_widgets.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index c81b564960..ef844d6162 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -80,6 +80,7 @@ "dataKeySettingsSchema": "{}", "settingsDirective": "tb-gateway-list-widget-settings", "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"cardHtml\":\"
HTML code here
\",\"cardCss\":\".card {\\n font-weight: bold;\\n font-size: 32px;\\n color: #999;\\n width: 100%;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\"},\"title\":\"Gateway list\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" - }, + } + } ] } \ No newline at end of file From 45c983b28c38497dfce929e5db8182b33238b870 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 2 Nov 2022 16:01:50 +0200 Subject: [PATCH 004/120] gateway list CE endpoint fix --- ui-ngx/src/app/core/http/device.service.ts | 4 ++-- .../home/components/gateway/gateway-list-table-config.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ui-ngx/src/app/core/http/device.service.ts b/ui-ngx/src/app/core/http/device.service.ts index 1f4d480899..c4a63083c8 100644 --- a/ui-ngx/src/app/core/http/device.service.ts +++ b/ui-ngx/src/app/core/http/device.service.ts @@ -42,8 +42,8 @@ export class DeviceService { private http: HttpClient ) { } - public getUserDevices(pageLink: PageLink, type: string = '', config?: RequestConfig): Observable> { - return this.http.get>(`/api/user/devices${pageLink.toQuery()}&type=${type}`, + public getTenantDevices(pageLink: PageLink, config?: RequestConfig): Observable> { + return this.http.get>(`/api/tenant/devices${pageLink.toQuery()}`, defaultHttpOptionsFromConfig(config)); } diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts index da45dce83d..9bd8be109f 100644 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts @@ -54,8 +54,11 @@ import {ActionNotificationShow} from "@core/notification/notification.actions"; import {Store} from "@ngrx/store"; import {AppState} from "@core/core.state"; import {map} from "rxjs/operators"; +import {getCurrentAuthUser} from "@core/auth/auth.selectors"; +import {Authority} from "@shared/models/authority.enum"; export class GatewayListTableConfig extends EntityTableConfig { + private authUser = getCurrentAuthUser(this.store); constructor(protected store: Store, private deviceService: DeviceService, @@ -131,7 +134,11 @@ export class GatewayListTableConfig extends EntityTableConfig> { - return this.deviceService.getUserDevices(pageLink).pipe( + let request = this.deviceService.getTenantDevices(pageLink); + if (this.authUser.authority === Authority.CUSTOMER_USER) { + request = this.deviceService.getCustomerDeviceInfos(this.authUser.customerId, pageLink); + } + return request.pipe( map(pageData => { pageData.data = pageData.data.filter(device => device.additionalInfo.gateway); pageData.totalElements = pageData.data.length; From d4ae9329dcd501f30a088779335886e54d4394fe Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 16 Nov 2022 14:24:43 +0200 Subject: [PATCH 005/120] gateway list modal window update --- ui-ngx/proxy.conf.js | 4 +-- .../gateway-command-dialog.component.html | 12 ++++++-- .../gateway-command-dialog.component.ts | 30 +++++++++++++++++-- .../gateway/gateway-list-table-config.ts | 5 ++-- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/ui-ngx/proxy.conf.js b/ui-ngx/proxy.conf.js index 71d572b924..12485801c0 100644 --- a/ui-ngx/proxy.conf.js +++ b/ui-ngx/proxy.conf.js @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const forwardUrl = "https://thingsboard.cloud/"; -const wsForwardUrl = "wss://thingsboard.cloud/"; +const forwardUrl = "http://localhost:8080"; +const wsForwardUrl = "ws://localhost:8080"; const ruleNodeUiforwardUrl = forwardUrl; const PROXY_CONFIG = { diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html index d5040b8714..34d37d73ea 100644 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html @@ -44,8 +44,12 @@
-
- gateway.linux-macos + + gateway.windows + gateway.linux-macos + +
+
{{ linuxCode }}
- gateway.windows +
+
+
{{ windowsCode }}
+
+
+
+ +
+
{{ windowsCode }}
+ +
+
+
diff --git a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.ts new file mode 100644 index 0000000000..d61925c687 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.ts @@ -0,0 +1,110 @@ +/// +/// Copyright © 2016-2022 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. +/// + +import {Component, Input, OnInit} from '@angular/core'; +import { + FormControl, +} from '@angular/forms'; +import {Router} from "@angular/router"; +import {Store} from "@ngrx/store"; +import {AppState} from "@core/core.state"; +import {TranslateService} from "@ngx-translate/core"; +import {ActionNotificationShow} from "@core/notification/notification.actions"; +import {DeviceService} from "@core/http/device.service"; + +enum OsType { + linux = 'linux', + macos = 'macos', + windows = 'win' +} + +@Component({ + selector: 'tb-gateway-command', + templateUrl: './device-gateway-command.component.html', + styleUrls: [] +}) + +export class DeviceGatewayCommandComponent implements OnInit { + + @Input() + token: string; + + @Input() + deviceId: string; + + linuxCode: string; + windowsCode: string; + selectedOSControll: FormControl; + osTypes = OsType; + + constructor(protected router: Router, + protected store: Store, + private translate: TranslateService, + private deviceService: DeviceService) { + } + + + ngOnInit(): void { + const HOST = window.location.hostname; + if (this.deviceId) { + this.deviceService.getDeviceCredentials(this.deviceId).subscribe(credentials=>{ + this.token = credentials.credentialsId; + this.createRunCode(HOST); + }) + } + this.selectedOSControll = new FormControl(''); + // @ts-ignore + const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, + macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], + windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + if (macosPlatforms.indexOf(platform) !== -1) { + this.selectedOSControll.setValue(OsType.macos); + } else if (windowsPlatforms.indexOf(platform) !== -1) { + this.selectedOSControll.setValue(OsType.windows); + } else if (/Linux/.test(platform)) { + this.selectedOSControll.setValue(OsType.linux); + } + this.createRunCode(HOST); + } + + createRunCode(HOST) { + this.linuxCode = "docker run -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v " + + "~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -e host=" + + HOST + + " -e port=1883 -e accessToken=" + + this.token + + " --restart always thingsboard/tb-gateway"; + this.windowsCode = "docker run -it -v %HOMEPATH%/tb-gateway/config:/thingsboard_gateway/config -v " + + "%HOMEPATH%/tb-gateway/extensions:/thingsboard_gateway/extensions -v %HOMEPATH%/tb-gateway/logs:/thingsboard_gateway/logs " + + "--name tb-gateway -e host=" + + HOST + + " -e port=1883 -e accessToken=" + + this.token + + " --restart always thingsboard/tb-gateway"; + } + + onDockerCodeCopied() { + this.store.dispatch(new ActionNotificationShow( + { + message: this.translate.instant('gateway.command-copied-message'), + type: 'success', + target: 'dockerCommandDialogContent', + duration: 1200, + verticalPosition: 'bottom', + horizontalPosition: 'left' + })); + } +} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html index 34d37d73ea..b6ba116379 100644 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html @@ -43,42 +43,7 @@
-
- - gateway.windows - gateway.linux-macos - -
- -
-
{{ linuxCode }}
- -
-
-
- -
-
{{ windowsCode }}
- -
-
-
+
+
From 1917e15fac70f69d02926866bef528b682e9da92 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 5 Dec 2022 19:02:46 +0200 Subject: [PATCH 009/120] gateway Docker command mark 1 --- .../device-gateway-command.component.html | 15 ++++---- .../device-gateway-command.component.ts | 6 ++++ .../gateway/gateway-list-table-config.ts | 35 ++++++++----------- .../gateway/gateway-list.component.ts | 3 ++ .../home/pages/device/device.component.html | 12 ++++--- 5 files changed, 40 insertions(+), 31 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html index 6b395fc4bf..d1482f32d0 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html @@ -15,13 +15,16 @@ limitations under the License. --> -
- - gateway.windows - gateway.linux-macos - +
+ In order to run ThingsBoard IoT gateway (ThingsBoard IoT gateway) in docker with credentials for this device you can use the following commands. +
+ + gateway.windows + gateway.linux-macos + +
+
-
{{ linuxCode }}
- - device.description - -
- + +
+ + device.description + + +
From b34a7ff46b60c18fdfb3ed18ca560343d42d5d2c Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 5 Dec 2022 19:26:18 +0200 Subject: [PATCH 010/120] json update --- .../main/data/json/system/widget_bundles/gateway_widgets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index ef844d6162..bf94b2c5b5 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -78,7 +78,7 @@ "controllerScript": "self.onInit = function() {\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}", - "settingsDirective": "tb-gateway-list-widget-settings", + "settingsDirective": "", "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"cardHtml\":\"
HTML code here
\",\"cardCss\":\".card {\\n font-weight: bold;\\n font-size: 32px;\\n color: #999;\\n width: 100%;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\"},\"title\":\"Gateway list\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" } } From e2a0b23523a6cc47b7b0ba671263c2293c52c491 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 5 Dec 2022 19:28:01 +0200 Subject: [PATCH 011/120] update --- ui-ngx/src/app/core/http/device.service.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ui-ngx/src/app/core/http/device.service.ts b/ui-ngx/src/app/core/http/device.service.ts index c4a63083c8..6cb4a4bf07 100644 --- a/ui-ngx/src/app/core/http/device.service.ts +++ b/ui-ngx/src/app/core/http/device.service.ts @@ -42,11 +42,6 @@ export class DeviceService { private http: HttpClient ) { } - public getTenantDevices(pageLink: PageLink, config?: RequestConfig): Observable> { - return this.http.get>(`/api/tenant/devices${pageLink.toQuery()}`, - defaultHttpOptionsFromConfig(config)); - } - public getTenantDeviceInfos(pageLink: PageLink, type: string = '', config?: RequestConfig): Observable> { return this.http.get>(`/api/tenant/deviceInfos${pageLink.toQuery()}&type=${type}`, From 1cb7a4de55581c261d22fa5450cf82976894449b Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 5 Dec 2022 19:30:10 +0200 Subject: [PATCH 012/120] update --- .../home/components/device/device-gateway-command.component.html | 1 - 1 file changed, 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html index d1482f32d0..64c60ba8fa 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html @@ -39,7 +39,6 @@
-
{{ windowsCode }}
+
+
+
+ COAP + 1. Setup: + 2. Send command: (based on CoAP cli) +
+
{{ coapCode }}
+ +
JSON example: {{'[{"temperature": 40}, {"isRainy": true}]'}}
+
+
+
+ HTTP + 1. Setup: + 2. Send command: +
+
{{ httpCode }}
+ +
+
+ + diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss new file mode 100644 index 0000000000..e3fc24d4dc --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss @@ -0,0 +1,56 @@ +/** + * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * + * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of ThingsBoard, Inc. and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to ThingsBoard, Inc. + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * + * Dissemination of this information or reproduction of this material is strictly forbidden + * unless prior written permission is obtained from COMPANY. + * + * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, + * managers or contractors who have executed Confidentiality and Non-disclosure agreements + * explicitly covering such access. + * + * The copyright notice above does not evidence any actual or intended publication + * or disclosure of this source code, which includes + * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, + * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT + * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, + * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. + * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION + * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, + * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ +:host { + + mat-button-toggle-group, .protocol-title { + margin-bottom: 20px; + } + + span { + margin-bottom: 10px; + } + + .protocol-toggle { + width: fit-content; + } + + .help-title { + padding-bottom: 5px; + } + + .protocol-send-command { + width: 100%; + } + + .pre-wrap { + white-space: pre-wrap; + } +} diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts new file mode 100644 index 0000000000..853084ae32 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts @@ -0,0 +1,113 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { Component, Input, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { TranslateService } from '@ngx-translate/core'; +import { ActionNotificationShow } from '@core/notification/notification.actions'; +import { helpBaseUrl } from '@shared/models/constants'; + +@Component({ + selector: 'tb-device-example-command', + templateUrl: './device-example-command.component.html', + styleUrls: ['./device-example-command.component.scss'] +}) + +export class DeviceExampleCommandComponent implements OnInit { + + @Input() + token: string; + + helpLink: string = helpBaseUrl + '/docs/reference/protocols/'; + + mqttCode: string; + + coapCode: string; + + httpCode: string; + + mqttSetup: string; + + coapSetup: string; + + httpSetup: string; + + protocolCtrl: FormControl; + + constructor(protected router: Router, + protected store: Store, + private translate: TranslateService) { + } + + + ngOnInit(): void { + const HOST = window.location.hostname; + this.mqttCode = `mosquitto_pub -d -q 1 -h ${HOST} -t "v1/devices/me/telemetry" -u "${this.token}" -m "{"temperature":42}"`; + this.coapCode = `cat telemetry-data.json | coap post coap://${HOST}/api/v1/${this.token}/telemetry`; + this.httpCode = `curl -v -X POST --data "{"temperature":42,"humidity":73}" http://${HOST}/api/v1/${this.token}/telemetry --header "Content-Type:application/json"`; + + this.protocolCtrl = new FormControl('mqtt'); + const mqttLink = ' Mqtt Guide'; + + // @ts-ignore + const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, + macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], + windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + if (macosPlatforms.indexOf(platform) !== -1) { + this.mqttSetup = 'brew install mosquitto-clients'; + this.coapSetup = 'npm install coap-cli -g'; + this.httpSetup = 'brew install curl'; + } else if (windowsPlatforms.indexOf(platform) !== -1) { + this.mqttSetup = mqttLink; + this.coapSetup = 'npm install coap-cli -g'; + this.httpSetup = 'not required, available by default in windows 10+'; + } else if (/Linux/.test(platform)) { + this.mqttSetup = 'sudo apt-get install mosquitto-clients'; + this.coapSetup = 'npm install coap-cli -g'; + this.httpSetup = 'sudo apt-get install curl'; + } + } + + onDockerCodeCopied() { + this.store.dispatch(new ActionNotificationShow( + { + message: this.translate.instant('gateway.command-copied-message'), + type: 'success', + target: 'dockerCommandDialogContent', + duration: 1200, + verticalPosition: 'bottom', + horizontalPosition: 'left' + })); + } +} diff --git a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html deleted file mode 100644 index 64c60ba8fa..0000000000 --- a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html +++ /dev/null @@ -1,55 +0,0 @@ - -
- In order to run ThingsBoard IoT gateway (ThingsBoard IoT gateway) in docker with credentials for this device you can use the following commands. -
- - gateway.windows - gateway.linux-macos - -
-
-
-
-
{{ linuxCode }}
- -
-
-
-
-
{{ windowsCode }}
- -
-
-
diff --git a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.ts deleted file mode 100644 index 40c7375571..0000000000 --- a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.ts +++ /dev/null @@ -1,116 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import {Component, Input, OnInit} from '@angular/core'; -import { - FormControl, -} from '@angular/forms'; -import {Router} from "@angular/router"; -import {Store} from "@ngrx/store"; -import {AppState} from "@core/core.state"; -import {TranslateService} from "@ngx-translate/core"; -import {ActionNotificationShow} from "@core/notification/notification.actions"; -import {DeviceService} from "@core/http/device.service"; -import {helpBaseUrl} from "@shared/models/constants"; - -enum OsType { - linux = 'linux', - macos = 'macos', - windows = 'win' -} - -@Component({ - selector: 'tb-gateway-command', - templateUrl: './device-gateway-command.component.html', - styleUrls: [] -}) - -export class DeviceGatewayCommandComponent implements OnInit { - - @Input() - token: string; - - @Input() - deviceId: string; - - linuxCode: string; - windowsCode: string; - selectedOSControll: FormControl; - osTypes = OsType; - helpLink: string = helpBaseUrl + '/docs/iot-gateway/install/docker-installation/'; - - constructor(protected router: Router, - protected store: Store, - private translate: TranslateService, - private deviceService: DeviceService) { - } - - - ngOnInit(): void { - const HOST = window.location.hostname; - if (this.deviceId) { - this.deviceService.getDeviceCredentials(this.deviceId).subscribe(credentials=>{ - this.token = credentials.credentialsId; - this.createRunCode(HOST); - }) - } - this.selectedOSControll = new FormControl(''); - // @ts-ignore - const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, - macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], - windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; - if (macosPlatforms.indexOf(platform) !== -1) { - this.selectedOSControll.setValue(OsType.macos); - } else if (windowsPlatforms.indexOf(platform) !== -1) { - this.selectedOSControll.setValue(OsType.windows); - } else if (/Linux/.test(platform)) { - this.selectedOSControll.setValue(OsType.linux); - } - this.createRunCode(HOST); - } - - createRunCode(HOST) { - this.linuxCode = "docker run -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v " + - "~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -e host=" + - HOST + - " -e port=1883 -e accessToken=" + - this.token + - " --restart always thingsboard/tb-gateway"; - this.windowsCode = "docker run -it -v %HOMEPATH%/tb-gateway/config:/thingsboard_gateway/config -v " + - "%HOMEPATH%/tb-gateway/extensions:/thingsboard_gateway/extensions -v %HOMEPATH%/tb-gateway/logs:/thingsboard_gateway/logs " + - "--name tb-gateway -e host=" + - HOST + - " -e port=1883 -e accessToken=" + - this.token + - " --restart always thingsboard/tb-gateway"; - } - - goToDocumentationPage() { - window.open(this.helpLink, '_blank'); - } - - onDockerCodeCopied() { - this.store.dispatch(new ActionNotificationShow( - { - message: this.translate.instant('gateway.command-copied-message'), - type: 'success', - target: 'dockerCommandDialogContent', - duration: 1200, - verticalPosition: 'bottom', - horizontalPosition: 'left' - })); - } -} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html deleted file mode 100644 index 6318b74537..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html +++ /dev/null @@ -1,41 +0,0 @@ - - - -

gateway.command

- - -
- - -
- -
- -
- diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts deleted file mode 100644 index 60bf9c1e21..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts +++ /dev/null @@ -1,58 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import {Component, Inject, OnInit} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {Store} from '@ngrx/store'; -import {AppState} from '@core/core.state'; -import {Router} from '@angular/router'; -import {DialogComponent} from '@app/shared/components/dialog.component'; -import {TranslateService} from '@ngx-translate/core'; -import {Device, DeviceCredentials} from "@shared/models/device.models"; - -export interface GatewayCommandDialogData { - device: Device, - credentials: DeviceCredentials -} - -enum OsType { - linux = 'linux', - macos = 'macos', - windows = 'win' -} - -@Component({ - selector: 'tb-gateway-command-dialog', - templateUrl: './gateway-command-dialog.component.html', - styleUrls: [] -}) -export class GatewayCommandDialogComponent extends DialogComponent implements OnInit { - - constructor(protected router: Router, - protected store: Store, - @Inject(MAT_DIALOG_DATA) public data: GatewayCommandDialogData, - public dialogRef: MatDialogRef,) { - super(store, router, dialogRef); - } - - ngOnInit() { - } - - close(): void { - this.dialogRef.close(); - } - -} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts deleted file mode 100644 index 00ff31343e..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts +++ /dev/null @@ -1,130 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import { - DateEntityTableColumn, - EntityTableColumn, - EntityTableConfig -} from '@home/models/entity/entities-table-config.models'; -import {EntityType, EntityTypeResource} from '@shared/models/entity-type.models'; -import {TranslateService} from '@ngx-translate/core'; -import {DatePipe} from '@angular/common'; -import {Direction} from '@shared/models/page/sort-order'; -import {MatDialog} from '@angular/material/dialog'; -import {TimePageLink} from '@shared/models/page/page-link'; -import {Observable} from 'rxjs'; -import {emptyPageData, PageData} from '@shared/models/page/page-data'; -import {UtilsService} from '@core/services/utils.service'; -import {DeviceService} from "@core/http/device.service"; -import {AttributeService} from "@core/http/attribute.service"; -import {Device} from "@shared/models/device.models"; -import { - GatewayCommandDialogComponent, - GatewayCommandDialogData -} from "@home/components/gateway/gateway-command-dialog.component"; -import {ActionNotificationShow} from "@core/notification/notification.actions"; -import {Store} from "@ngrx/store"; -import {AppState} from "@core/core.state"; -import {map} from "rxjs/operators"; -import {EntityService} from "@core/http/entity.service"; - -export class GatewayListTableConfig extends EntityTableConfig { - - constructor(protected store: Store, - private deviceService: DeviceService, - private attributeService: AttributeService, - private entityService: EntityService, - private datePipe: DatePipe, - private translate: TranslateService, - private utils: UtilsService, - private dialog: MatDialog, - updateOnInit = true) { - super(); - this.loadDataOnInit = updateOnInit; - this.tableTitle = 'Gateway list'; - this.useTimePageLink = false; - this.pageMode = false; - this.displayPagination = false; - this.detailsPanelEnabled = false; - this.selectionEnabled = false; - this.searchEnabled = false; - this.addEnabled = false; - this.entitiesDeleteEnabled = false; - this.actionsColumnTitle = ''; - this.entityTranslations = { - noEntities: 'gateway.no-gateway-found', - search: 'gateway.gateway-search' - }; - this.entityResources = {} as EntityTypeResource; - - this.entitiesFetchFunction = () => this.fetchGateways(); - - this.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC}; - - this.columns.push( - new DateEntityTableColumn('createdTime', 'gateway.created-time', this.datePipe, '150px')); - - this.columns.push( - new EntityTableColumn('entityName', 'gateway.gateway-name', '20%', - (entity => this.utils.customTranslation(entity.name, entity.name)) - ) - ); - - this.cellActionDescriptors.push( - { - name: this.translate.instant('gateway.command'), - icon: 'vpn_key', - isEnabled: () => true, - onAction: ($event, entity) => this.showGatewayDockerCommand(entity) - } - ); - } - - showGatewayDockerCommand(entity: Device) { - this.deviceService.getDeviceCredentials(entity.id.id).subscribe(credentials => { - this.dialog.open - (GatewayCommandDialogComponent, - { - disableClose: true, - panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], - data: { - credentials: credentials, - device: entity - } - }).afterClosed().subscribe( - (res) => { - if (res) { - this.updateData(); - } - } - ); - }, error => { - const messageToShow = `
${error}
`; - this.store.dispatch(new ActionNotificationShow({message: messageToShow, type: 'error'})); - }) - } - - fetchGateways(): Observable> { - return this.entityService.getEntitiesByNameFilter(EntityType.DEVICE, "", -1).pipe( - map((array: Array) => { - const pageData = emptyPageData(); - pageData.data = array.filter(device => device.additionalInfo?.gateway); - pageData.totalPages = 1; - pageData.totalElements = array.length; - return pageData; - })) - } -} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html deleted file mode 100644 index 7190c87ead..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html +++ /dev/null @@ -1,18 +0,0 @@ - - diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss deleted file mode 100644 index 09f06ae6b5..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright © 2016-2022 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. - */ -:host { - width: 100%; - height: 100%; - display: block; - .tb-table-widget { - .table-container { - position: relative; - } - .mat-table { - .mat-row { - &.invisible { - visibility: hidden; - } - } - } - span.no-data-found { - position: absolute; - top: 60px; - bottom: 0; - left: 0; - right: 0; - } - } -} - diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts deleted file mode 100644 index 14e95234a2..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import {Component, OnInit} from '@angular/core'; -import {UtilsService} from '@core/services/utils.service'; -import {TranslateService} from '@ngx-translate/core'; -import {DeviceService} from '@core/http/device.service'; -import {AttributeService} from '@core/http/attribute.service'; -import {GatewayListTableConfig} from "@home/components/gateway/gateway-list-table-config"; -import {DatePipe} from "@angular/common"; -import {MatDialog} from "@angular/material/dialog"; -import {Store} from "@ngrx/store"; -import {AppState} from "@core/core.state"; -import {EntityService} from "@core/http/entity.service"; - -@Component({ - selector: 'tb-gateway-list', - templateUrl: './gateway-list.component.html', - styleUrls: ['./gateway-list.component.scss'] -}) - - -export class GatewayListComponent implements OnInit { - gatewayListTableConfig: GatewayListTableConfig; - - constructor( - protected store: Store, - private utils: UtilsService, - private translate: TranslateService, - private datePipe: DatePipe, - private deviceService: DeviceService, - private entityService: EntityService, - private attributeService: AttributeService, - private dialog: MatDialog, - ) { - } - - ngOnInit(): void { - this.gatewayListTableConfig = new GatewayListTableConfig( - this.store, - this.deviceService, - this.attributeService, - this.entityService, - this.datePipe, - this.translate, - this.utils, - this.dialog - ); - } -} diff --git a/ui-ngx/src/app/modules/home/components/home-components.module.ts b/ui-ngx/src/app/modules/home/components/home-components.module.ts index 2b9a446e20..7a91645e31 100644 --- a/ui-ngx/src/app/modules/home/components/home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/home-components.module.ts @@ -178,7 +178,6 @@ import { modulesMap } from '@modules/common/modules-map'; import { AlarmAssigneePanelComponent } from '@home/components/alarm/alarm-assignee-panel.component'; import { RouterTabsComponent } from '@home/components/router-tabs.component'; import { SendNotificationButtonComponent } from '@home/components/notification/send-notification-button.component'; -import { GatewayListComponent } from "@home/components/gateway/gateway-list.component"; @NgModule({ declarations: @@ -203,7 +202,6 @@ import { GatewayListComponent } from "@home/components/gateway/gateway-list.comp AlarmTableHeaderComponent, AlarmTableComponent, AlarmAssigneePanelComponent, - GatewayListComponent, AttributeTableComponent, AddAttributeDialogComponent, EditAttributeValuePanelComponent, @@ -354,7 +352,6 @@ import { GatewayListComponent } from "@home/components/gateway/gateway-list.comp RelationFiltersComponent, AlarmTableComponent, AlarmAssigneePanelComponent, - GatewayListComponent, AttributeTableComponent, AliasesEntitySelectComponent, AliasesEntityAutocompleteComponent, diff --git a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts index 912fcfb52e..45ee713d10 100644 --- a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts @@ -18,7 +18,6 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedModule } from '@app/shared/shared.module'; import { AlarmDetailsDialogComponent } from '@home/components/alarm/alarm-details-dialog.component'; -import { GatewayCommandDialogComponent } from "@home/components/gateway/gateway-command-dialog.component"; import { SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; import { DeviceCredentialsModule } from "@home/components/device/device-credentials.module"; import { AlarmCommentComponent } from '@home/components/alarm/alarm-comment.component'; @@ -35,7 +34,6 @@ import { AlarmAssigneeComponent } from '@home/components/alarm/alarm-assignee.co AlarmCommentComponent, AlarmCommentDialogComponent, AlarmAssigneeComponent - GatewayCommandDialogComponent ], imports: [ CommonModule, @@ -47,7 +45,6 @@ import { AlarmAssigneeComponent } from '@home/components/alarm/alarm-assignee.co AlarmCommentComponent, AlarmCommentDialogComponent, AlarmAssigneeComponent - GatewayCommandDialogComponent ] }) export class SharedHomeComponentsModule { } diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html index c1485cf450..52a31314e2 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html @@ -29,7 +29,7 @@
- + check @@ -178,9 +178,17 @@ +
+ + + + +
-
+
@@ -195,10 +203,11 @@
+ (click)="add()">{{ (deviceCredentials ? 'action.close': 'action.add') | translate }}
diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss index 0fe18467fd..e3fbd3c7c6 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss @@ -37,6 +37,10 @@ } :host ::ng-deep { + .commands-container { + padding: 24px; + } + .mat-mdc-dialog-content { display: flex; flex-direction: column; diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index 77916d379c..80aa438e2d 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -24,6 +24,8 @@ import { Router } from '@angular/router'; import { createDeviceProfileConfiguration, createDeviceProfileTransportConfiguration, + Device, + DeviceCredentials, DeviceProfile, DeviceProfileInfo, DeviceProfileType, @@ -57,9 +59,9 @@ import { deepTrim } from '@core/utils'; styleUrls: ['./device-wizard-dialog.component.scss'] }) export class DeviceWizardDialogComponent extends - DialogComponent implements OnDestroy, ErrorStateMatcher { + DialogComponent implements OnDestroy, ErrorStateMatcher { - @ViewChild('addDeviceWizardStepper', {static: true}) addDeviceWizardStepper: MatStepper; + @ViewChild('addDeviceWizardStepper') addDeviceWizardStepper: MatStepper; selectedIndex = 0; @@ -69,7 +71,7 @@ export class DeviceWizardDialogComponent extends entityType = EntityType; - deviceTransportTypes = Object.values(DeviceTransportType); + deviceTransportTypes = Object.values(DeviceTransportType) as DeviceTransportType[]; deviceTransportTypeTranslations = deviceTransportTypeTranslationMap; @@ -91,6 +93,10 @@ export class DeviceWizardDialogComponent extends serviceType = ServiceType.TB_RULE_ENGINE; + device: Device; + + deviceCredentials: DeviceCredentials; + private subscriptions: Subscription[] = []; private currentDeviceProfileTransportType = DeviceTransportType.DEFAULT; @@ -98,7 +104,7 @@ export class DeviceWizardDialogComponent extends protected router: Router, @Inject(MAT_DIALOG_DATA) public data: AddEntityDialogData>, @SkipSelf() private errorStateMatcher: ErrorStateMatcher, - public dialogRef: MatDialogRef, + public dialogRef: MatDialogRef, private deviceProfileService: DeviceProfileService, private deviceService: DeviceService, private breakpointObserver: BreakpointObserver, @@ -263,13 +269,15 @@ export class DeviceWizardDialogComponent extends } add(): void { - if (this.allValid()) { + if (this.deviceCredentials) { + this.dialogRef.close(this.device); + } else if (this.allValid()) { this.createDeviceProfile().pipe( mergeMap(profileId => this.createDevice(profileId)), - mergeMap(device => this.saveCredentials(device)) + mergeMap(device => this.saveCredentials(device)), ).subscribe( - (created) => { - this.dialogRef.close(created); + (device) => { + this.device = device; } ); } @@ -326,7 +334,7 @@ export class DeviceWizardDialogComponent extends } } - private createDevice(profileId): Observable> { + private createDevice(profileId): Observable { const device = { name: this.deviceWizardFormGroup.get('name').value, label: this.deviceWizardFormGroup.get('label').value, @@ -349,10 +357,10 @@ export class DeviceWizardDialogComponent extends this.addDeviceWizardStepper.selectedIndex = 0; return throwError(e); }) - ); + ) as Observable; } - private saveCredentials(device: BaseData): Observable { + private saveCredentials(device: Device): Observable { if (this.credentialsFormGroup.get('setCredential').value) { return this.deviceService.getDeviceCredentials(device.id.id).pipe( mergeMap( @@ -370,9 +378,16 @@ export class DeviceWizardDialogComponent extends ); } ), - map(() => true)); + map(() => device)); + } else { + return this.deviceService.getDeviceCredentials(device.id.id).pipe( + map((deviceCredentials) => { + this.deviceCredentials = deviceCredentials; + return device; + }) + ); } - return of(true); + return of(device); } allValid(): boolean { diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html new file mode 100644 index 0000000000..711897ce4d --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html @@ -0,0 +1,70 @@ + +
+ In order to run ThingsBoard IoT gateway (ThingsBoard IoT gateway) in docker with credentials for this device you can use the following commands. +
+ + gateway.windows + gateway.linux-macos + +
+
+
+
+
{{ linuxCode }}
+ +
+
+
+
+
{{ windowsCode }}
+ +
+
+
diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts new file mode 100644 index 0000000000..ab0548e273 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts @@ -0,0 +1,125 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { Component, Input, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { TranslateService } from '@ngx-translate/core'; +import { ActionNotificationShow } from '@core/notification/notification.actions'; +import { DeviceService } from '@core/http/device.service'; +import { helpBaseUrl } from '@shared/models/constants'; + +enum OsType { + linux = 'linux', + macos = 'macos', + windows = 'win' +} + +@Component({ + selector: 'tb-gateway-command', + templateUrl: './device-gateway-command.component.html', + styleUrls: [] +}) + +export class DeviceGatewayCommandComponent implements OnInit { + + @Input() + token: string; + + @Input() + deviceId: string; + + linuxCode: string; + windowsCode: string; + selectedOSCControl: FormControl; + osTypes = OsType; + helpLink: string = helpBaseUrl + '/docs/iot-gateway/install/docker-installation/'; + + constructor(protected router: Router, + protected store: Store, + private translate: TranslateService, + private deviceService: DeviceService) { + } + + + ngOnInit(): void { + const HOST = window.location.hostname; + if (this.deviceId) { + this.deviceService.getDeviceCredentials(this.deviceId).subscribe(credentials => { + this.token = credentials.credentialsId; + this.createRunCode(HOST); + }); + } + this.selectedOSCControl = new FormControl(''); + // @ts-ignore + const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, + macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], + windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + if (macosPlatforms.indexOf(platform) !== -1) { + this.selectedOSCControl.setValue(OsType.macos); + } else if (windowsPlatforms.indexOf(platform) !== -1) { + this.selectedOSCControl.setValue(OsType.windows); + } else if (/Linux/.test(platform)) { + this.selectedOSCControl.setValue(OsType.linux); + } + this.createRunCode(HOST); + } + + createRunCode(HOST) { + this.linuxCode = 'docker run -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v ' + + '~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -e host=' + + HOST + + ' -e port=1883 -e accessToken=' + + this.token + + ' --restart always thingsboard/tb-gateway'; + this.windowsCode = 'docker run -it -v %HOMEPATH%/tb-gateway/config:/thingsboard_gateway/config -v ' + + '%HOMEPATH%/tb-gateway/extensions:/thingsboard_gateway/extensions -v %HOMEPATH%/tb-gateway/logs:/thingsboard_gateway/logs ' + + '--name tb-gateway -e host=' + + HOST + + ' -e port=1883 -e accessToken=' + + this.token + + ' --restart always thingsboard/tb-gateway'; + } + + onDockerCodeCopied() { + this.store.dispatch(new ActionNotificationShow( + { + message: this.translate.instant('gateway.command-copied-message'), + type: 'success', + target: 'dockerCommandDialogContent', + duration: 1200, + verticalPosition: 'bottom', + horizontalPosition: 'left' + })); + } +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html new file mode 100644 index 0000000000..6c1300ece4 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -0,0 +1,683 @@ + +
+ +

gateway.gateway-configuration

+ + +
+ + +
+ + +
+ + {{ 'gateway.remote-configuration' | translate }} + + + {{ 'gateway.remote-shell' | translate }} + + + gateway.thingsboard-host + + + {{ 'gateway.thingsboard-host-required' | translate }} + + + + gateway.thingsboard-port + + + {{'gateway.thingsboard-port-required' | translate }} + + + {{'gateway.thingsboard-port-min' | translate }} + + + {{'gateway.thingsboard-port-max' | translate }} + + + {{'gateway.thingsboard-port-pattern' | translate }} + + + +
+
+ + + security.security + +
+ + + {{ securityType.value | translate }} + + + + security.access-token + + + {{'security.access-token-required' | translate}} + + + + security.clientId + + + {{'security.clientId-required' | translate}} + + + + security.username + + + {{'security.username-required' | translate}} + + + + security.password + + + {{'security.password-required' | translate}} + + + + + + + + +
+
+
+
+
+ +
+ + +
+ + gateway.logs.date-format + + + {{'gateway.logs.date-format-required' | translate }} + + + + gateway.logs.log-format + + + {{'gateway.logs.log-format-required' | translate }} + + + + + {{'gateway.logs.remote' | translate}} + {{'gateway.logs.local' | translate}} + +
+ + {{ 'gateway.logs.remote-logs' | translate }} + + + gateway.logs.level + + {{logLevel}} + + +
+
+ + + {{ logConfig }} + + +
+ + gateway.logs.level + + {{logLevel}} + + + + gateway.logs.file-path + + + {{'gateway.logs.file-path-required' | translate }} + + + + gateway.logs.saving-period + + + {{'gateway.logs.saving-period-required' | translate }} + + + {{'gateway.logs.saving-period-min' | translate }} + + + + + + + {{period.value | translate}} + + + + + gateway.logs.backup-count + + + {{'gateway.logs.backup-count-required' | translate }} + + + {{'gateway.logs.backup-count-min' | translate }} + + +
+
+
+
+
+
+
+ +
+ + + + gateway.storage + +
+ + + {{ storageType.value | translate }} + + + + gateway.storage-read-record-count + + + {{'gateway.storage-read-record-count-required' | translate}} + + + {{'gateway.storage-read-record-count-min' | translate}} + + + {{'gateway.storage-read-record-count-pattern' | translate}} + + + + gateway.storage-max-records + + + {{'gateway.storage-max-records-required' | translate}} + + + {{'gateway.storage-max-records-min' | translate}} + + + {{'gateway.storage-max-records-pattern' | translate}} + + + + gateway.storage-data-folder-path + + + {{'gateway.storage-data-folder-path-required' | translate}} + + + + gateway.storage-max-files + + + {{'gateway.storage-max-files-required' | translate}} + + + {{'gateway.storage-max-files-min' | translate}} + + + {{'gateway.storage-max-files-pattern' | translate}} + + + + gateway.storage-max-read-record-count + + + {{'gateway.storage-max-read-record-count-required' | translate}} + + + {{'gateway.storage-max-read-record-count-min' | translate}} + + + {{'gateway.storage-max-read-record-count-pattern' | translate}} + + + + gateway.storage-max-file-records + + + {{'gateway.storage-max-records-required' | translate}} + + + {{'gateway.storage-max-records-min' | translate}} + + + {{'gateway.storage-max-records-pattern' | translate}} + + + + gateway.storage-path + + + {{'gateway.storage-path-required' | translate}} + + + + gateway.messages-ttl-check-in-hours + + + {{'gateway.messages-ttl-check-in-hours-required' | translate}} + + + {{'gateway.messages-ttl-check-in-hours-min' | translate}} + + + {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} + + + + gateway.messages-ttl-in-days + + + {{'gateway.messages-ttl-in-days-required' | translate}} + + + {{'gateway.messages-ttl-in-days-min' | translate}} + + + {{'gateway.messages-ttl-in-days-pattern' | translate}} + + +
+
+
+
+
+ +
+ + +
+ + {{ 'gateway.grpc' | translate }} + + + {{ 'gateway.permit-without-calls' | translate }} + + + gateway.server-port + + + {{'gateway.thingsboard-port-required' | translate }} + + + {{'gateway.thingsboard-port-min' | translate }} + + + {{'gateway.thingsboard-port-max' | translate }} + + + {{'gateway.thingsboard-port-pattern' | translate }} + + + + gateway.grpc-keep-alive-timeout + + + {{'gateway.grpc-keep-alive-timeout-required' | translate }} + + + {{'gateway.grpc-keep-alive-timeout-min' | translate }} + + + {{'gateway.grpc-keep-alive-timeout-pattern' | translate }} + + + + gateway.grpc-keep-alive + + + {{'gateway.grpc-keep-alive-required' | translate }} + + + {{'gateway.grpc-keep-alive-min' | translate }} + + + {{'gateway.grpc-keep-alive-pattern' | translate }} + + + + gateway.grpc-min-time-between-pings + + + {{'gateway.grpc-min-time-between-pings-required' | translate }} + + + {{'gateway.grpc-min-time-between-pings-min' | translate }} + + + {{'gateway.grpc-min-time-between-pings-pattern' | translate }} + + + + gateway.grpc-max-pings-without-data + + + {{'gateway.grpc-max-pings-without-data-required' | translate }} + + + {{'gateway.grpc-max-pings-without-data-min' | translate }} + + + {{'gateway.grpc-max-pings-without-data-pattern' | translate }} + + + + gateway.grpc-min-ping-interval-without-data + + + {{'gateway.grpc-min-ping-interval-without-data-required' | translate }} + + + {{'gateway.grpc-min-ping-interval-without-data-min' | translate }} + + + {{'gateway.grpc-min-ping-interval-without-data-pattern' | translate }} + + +
+
+
+
+
+ +
+ + +
+ + {{ 'gateway.statistics.statistics' | translate }} + + + gateway.statistics.send-period + + + {{'gateway.statistics.send-period-required' | translate }} + + + {{'gateway.statistics.send-period-min' | translate }} + + + {{'gateway.statistics.send-period-pattern' | translate }} + + + + gateway.statistics.check-connectors-configuration + + + {{'gateway.statistics.check-connectors-configuration-required' | translate }} + + + {{'gateway.statistics.check-connectors-configuration-min' | translate }} + + + {{'gateway.statistics.check-connectors-configuration-pattern' | translate }} + + +
+
+ + + gateway.statistics.statistics + +
+
+ + + gateway.statistics.attribute-name + + + {{'gateway.statistics.attribute-name-required' | translate }} + + + + gateway.statistics.timeout + + + {{'gateway.statistics.timeout-required' | translate }} + + + {{'gateway.statistics.timeout-min' | translate }} + + + {{'gateway.statistics.timeout-pattern' | translate }} + + + + gateway.statistics.command + + + {{'gateway.statistics.command-required' | translate }} + + + + +
+ +
+
+
+
+
+ +
+ + + + + + {{ 'gateway.checking-device-activity' | translate }} + + + +
+ + gateway.inactivity-timeout-seconds + + + {{'gateway.inactivity-timeout-seconds-required' | translate }} + + + {{'gateway.inactivity-timeout-seconds-min' | translate }} + + + + gateway.inactivity-check-period-seconds + + + {{'gateway.inactivity-check-period-seconds-required' | translate }} + + + {{'gateway.inactivity-check-period-seconds-min' | translate }} + + +
+
+ + + gateway.advanced + +
+ + gateway.min-pack-send-delay + + + {{ 'gateway.min-pack-send-delay-required' | translate }} + + + {{ 'gateway.min-pack-send-delay-min' | translate }} + + + + gateway.mqtt-qos + + + {{ 'gateway.mqtt-qos-required' | translate}} + + + {{ 'gateway.mqtt-qos-range' | translate}} + + + {{ 'gateway.mqtt-qos-range' | translate}} + + +
+
+ +
+
+
+
+
+
+ + + +
+
diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss new file mode 100644 index 0000000000..d6bcdf6e8a --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss @@ -0,0 +1,166 @@ +/** + * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * + * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of ThingsBoard, Inc. and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to ThingsBoard, Inc. + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * + * Dissemination of this information or reproduction of this material is strictly forbidden + * unless prior written permission is obtained from COMPANY. + * + * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, + * managers or contractors who have executed Confidentiality and Non-disclosure agreements + * explicitly covering such access. + * + * The copyright notice above does not evidence any actual or intended publication + * or disclosure of this source code, which includes + * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, + * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT + * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, + * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. + * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION + * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, + * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ +:host { + width: 100%; + height: 100%; + display: block; + + .mat-toolbar { + background: transparent; + color: rgba(0, 0, 0, .87) !important; + } + + .mat-content { + .expansion-panel-header { + font-weight: 600; + color: rgba(0, 0, 0, .87) !important; + } + + mat-slide-toggle { + margin-bottom: 16px; + } + + mat-form-field { + margin-right: 15px; + } + + .block-title { + font-size: 20px; + font-weight: 400; + padding-top: 16px; + } + + .hover-cursor { + cursor: pointer; + } + } + + .security-toggle-group { + padding-bottom: 0; + background: transparent !important; + margin-bottom: 15px; + border: none; + + .mat-button-toggle { + border-radius: 15px; + border: 1px solid rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, .05); + margin: 5px; + color: rgba(0, 0, 0, .2); + font-weight: 500; + } + + .mat-button-toggle-checked { + border-radius: 15px; + border: 1px solid #305680; + background: white; + color: #305680; + } + + ::ng-deep span { + text-transform: capitalize; + line-height: 20px; + font-size: 13px; + padding: 5px 25px; + } + + ::ng-deep .mat-button-toggle-ripple { + border-radius: 15px; + } + + ::ng-deep .mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay { + opacity: 0 !important; + } + } + + .logs-label { + font-weight: 500; + margin-bottom: 10px; + } + + .logs-toggle-group { + border: none; + border-radius: 15px; + background: rgba(0, 0, 0, .05); + color: rgba(0, 0, 0, .2); + font-weight: 500; + + .mat-button-toggle { + border: none; + background: rgba(0, 0, 0, .0); + color: rgba(0, 0, 0, .2); + font-weight: 500; + } + + .mat-button-toggle-checked { + border-radius: 15px; + color: white; + background: #305680; + } + + ::ng-deep span { + line-height: 20px; + font-size: 13px; + padding: 5px 25px; + } + + ::ng-deep .mat-button-toggle-ripple { + border-radius: 15px; + } + + ::ng-deep .mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay { + opacity: 0 !important; + } + } + + .first-capital { + text-transform: capitalize; + } + + ::ng-deep.mat-tab-label-active { + color: white; + opacity: 1; + } + + ::ng-deep.mat-tab-label, ::ng-deep.mat-tab-label-active { + min-width: 50px !important; + padding: 3px !important; + margin: 3px !important; + flex-grow: 1; + } + + ::ng-deep.mat-ink-bar { + height: 100%; + z-index: -10; + border-radius: 5px; + } +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts new file mode 100644 index 0000000000..2fd02f60b7 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -0,0 +1,521 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { Component, Input, OnInit } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { EntityId } from '@shared/models/id/entity-id'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { base64toObj, base64toString, objToBase64, stringToBase64 } from '@core/utils'; +import { AttributeService } from '@core/http/attribute.service'; +import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { + GatewayRemoteConfigurationDialogComponent, + GatewayRemoteConfigurationDialogData +} from '@shared/components/dialog/gateway-remote-configuration-dialog'; +import { DeviceService } from '@core/http/device.service'; + +export enum StorageTypes { + MEMORY = 'memory', + FILE = 'file', + SQLITE = 'sqlite' +} + +export enum GatewayLogLevel { + none = 'NONE', + critical = 'CRITICAL', + error = 'ERROR', + warning = 'WARNING', + info = 'INFO', + debug = 'DEBUG' +} + +export enum LogSavingPeriod { + days = 'd', + hours = 'h', + minutes = 'm', + seconds = 's' +} + +export enum LocalLogsConfigs { + service = 'service', + connector = 'connector', + converter = 'converter', + tb_connection = 'tb_connection', + storage = 'storage', + extension = 'extension' +} + +export const logSavingPeriodTranslations = new Map( + [ + [LogSavingPeriod.days, 'gateway.logs.days'], + [LogSavingPeriod.hours, 'gateway.logs.hours'], + [LogSavingPeriod.minutes, 'gateway.logs.minutes'], + [LogSavingPeriod.seconds, 'gateway.logs.seconds'] + ] +); + +export const storageTypesTranslations = new Map( + [ + [StorageTypes.MEMORY, 'gateway.storage-types.memory-storage'], + [StorageTypes.FILE, 'gateway.storage-types.file-storage'], + [StorageTypes.SQLITE, 'gateway.storage-types.sqlite'] + ] +); + +export enum SecurityTypes { + ACCESS_TOKEN = 'accessToken', + USERNAME_PASSWORD = 'usernamePassword', + TLS_ACCESS_TOKEN = 'tlsAccessToken', + TLS_PRIVATE_KEY = 'tlsPrivateKey' +} + +export const securityTypesTranslationsMap = new Map( + [ + [SecurityTypes.ACCESS_TOKEN, 'gateway.security-types.access-token'], + [SecurityTypes.USERNAME_PASSWORD, 'gateway.security-types.username-password'], + [SecurityTypes.TLS_ACCESS_TOKEN, 'gateway.security-types.tls-access-token'], + [SecurityTypes.TLS_PRIVATE_KEY, 'gateway.security-types.tls-private-key'], + ] +); + +@Component({ + selector: 'tb-gateway-configuration', + templateUrl: './gateway-configuration.component.html', + styleUrls: ['./gateway-configuration.component.scss'] +}) +export class GatewayConfigurationComponent implements OnInit { + + gatewayConfigGroup: FormGroup; + + storageTypes = storageTypesTranslations; + + logSavingPeriods = logSavingPeriodTranslations; + + securityTypes = securityTypesTranslationsMap; + + gatewayLogLevel = Object.values(GatewayLogLevel); + + localLogsConfigs = Object.values(LocalLogsConfigs); + + @Input() + device: EntityId; + + @Input() + dialogRef: MatDialogRef; + + logSelector: FormControl; + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + public dialog: MatDialog) { + } + + ngOnInit() { + this.gatewayConfigGroup = this.fb.group({ + thingsboard: this.fb.group({ + host: ['thingsboard.cloud', [Validators.required]], + port: [1883, [Validators.required, Validators.min(1), Validators.max(65535), Validators.pattern(/^-?[0-9]+$/)]], + remoteShell: [false, []], + remoteConfiguration: [true, []], + statistics: this.fb.group({ + enable: [true, []], + statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], + checkConnectorsConfigurationInSeconds: [60, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + handleDeviceRenaming: [false, []], + commands: this.fb.array([], []) + }), + maxPayloadSizeBytes: [1024, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + minPackSendDelayMS: [200, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], + minPackSizeToSend: [500, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + handleDeviceRenaming: [true, []], + checkingDeviceActivity: this.fb.group({ + checkDeviceInactivity: [false, []], + inactivityTimeoutSeconds: [200, [Validators.min(1)]], + inactivityCheckPeriodSeconds: [500, [Validators.min(1)]] + }), + security: this.fb.group({ + type: [SecurityTypes.ACCESS_TOKEN, [Validators.required]], + accessToken: [null, [Validators.required]], + clientId: [null, []], + username: [null, []], + password: [null, []], + caCert: [null, []], + cert: [null, []], + privateKey: [null, []], + }), + qos: [1, [Validators.min(0), Validators.max(2), Validators.required]] + }), + storage: this.fb.group({ + type: [StorageTypes.MEMORY, [Validators.required]], + read_records_count: [100, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]], + max_records_count: [100000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]], + data_folder_path: ['./data/', []], + max_file_count: [10, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + max_read_records_count: [10, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + max_records_per_file: [10000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + data_file_path: ['./data/data.db', []], + messages_ttl_check_in_hours: [1, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + messages_ttl_in_days: [7, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + + }), + grpc: this.fb.group({ + enabled: [false, []], + serverPort: [9595, [Validators.required, Validators.min(1), Validators.max(65535), Validators.pattern(/^-?[0-9]+$/)]], + keepAliveTimeMs: [10000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + keepAliveTimeoutMs: [5000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + keepalivePermitWithoutCalls: [true, []], + maxPingsWithoutData: [0, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], + minTimeBetweenPingsMs: [10000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + minPingIntervalWithoutDataMs: [5000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + }), + connectors: this.fb.array([]), + logs: this.fb.group({ + dateFormat: ['%Y-%m-%d %H:%M:%S', [Validators.required]], + logFormat: ['%(asctime)s - |%(levelname)s| - [%(filename)s] - %(module)s - %(funcName)s - %(lineno)d - %(message)s', + [Validators.required]], + type: ['remote', [Validators.required]], + remote: this.fb.group({ + enabled: [false], + logLevel: [GatewayLogLevel.info, [Validators.required]], + }), + local: this.fb.group({}) + }) + }); + + this.gatewayConfigGroup.get('thingsboard.remoteConfiguration').valueChanges.subscribe(enabled => { + if (!enabled) { + this.openConfigurationConfirmDialog(); + } + }); + + this.logSelector = this.fb.control(LocalLogsConfigs.service); + + for (const localLogsConfigsKey of Object.keys(LocalLogsConfigs)) { + this.addLocalLogConfig(localLogsConfigsKey, {}); + } + + const checkingDeviceActivityGroup = this.gatewayConfigGroup.get('thingsboard.checkingDeviceActivity') as FormGroup; + checkingDeviceActivityGroup.get('checkDeviceInactivity').valueChanges.subscribe(enabled => { + checkingDeviceActivityGroup.updateValueAndValidity(); + if (enabled) { + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setValidators([Validators.min(1), Validators.required]); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setValidators([Validators.min(1), Validators.required]); + } else { + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').clearValidators(); + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setErrors(null); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').clearValidators(); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setErrors(null); + } + }); + + const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; + securityGroup.get('type').valueChanges.subscribe(type => { + this.removeAllSecurityValidators(); + if (type === SecurityTypes.ACCESS_TOKEN) { + securityGroup.get('accessToken').addValidators([Validators.required]); + securityGroup.get('accessToken').updateValueAndValidity(); + } else if (type === SecurityTypes.TLS_PRIVATE_KEY) { + securityGroup.get('caCert').addValidators([Validators.required]); + securityGroup.get('caCert').updateValueAndValidity(); + securityGroup.get('privateKey').addValidators([Validators.required]); + securityGroup.get('privateKey').updateValueAndValidity(); + securityGroup.get('cert').addValidators([Validators.required]); + securityGroup.get('cert').updateValueAndValidity(); + } else if (type === SecurityTypes.TLS_ACCESS_TOKEN) { + securityGroup.get('accessToken').addValidators([Validators.required]); + securityGroup.get('accessToken').updateValueAndValidity(); + securityGroup.get('caCert').addValidators([Validators.required]); + securityGroup.get('caCert').updateValueAndValidity(); + } else if (type === SecurityTypes.USERNAME_PASSWORD) { + securityGroup.get('clientId').addValidators([Validators.required]); + securityGroup.get('clientId').updateValueAndValidity(); + securityGroup.get('username').addValidators([Validators.required]); + securityGroup.get('username').updateValueAndValidity(); + securityGroup.get('password').addValidators([Validators.required]); + securityGroup.get('password').updateValueAndValidity(); + } + securityGroup.updateValueAndValidity(); + }); + + const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; + storageGroup.get('type').valueChanges.subscribe(type => { + this.removeAllStorageValidators(); + if (type === StorageTypes.MEMORY) { + storageGroup.get('read_records_count').addValidators( + [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]); + storageGroup.get('max_records_count').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + } else if (type === StorageTypes.FILE) { + storageGroup.get('data_folder_path').addValidators([Validators.required]); + storageGroup.get('max_file_count').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('max_read_records_count').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('max_records_per_file').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + } else if (type === StorageTypes.SQLITE) { + storageGroup.get('data_file_path').addValidators([Validators.required]); + storageGroup.get('messages_ttl_check_in_hours').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('messages_ttl_in_days').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + } + }); + + this.fetchConfigAttribute(this.device); + } + + fetchConfigAttribute(entityId: EntityId) { + this.attributeService.getEntityAttributes(entityId, AttributeScope.SHARED_SCOPE, + ['configuration', 'RemoteLoggingLevel']).subscribe(attributes => { + if (attributes.length) { + const configuration = attributes.find(attribute => attribute.key === 'configuration').value; + const remoteLoggingLevel = attributes.find(attribute => attribute.key === 'RemoteLoggingLevel').value; + if (configuration) { + const configObj = base64toObj(configuration).thingsboard; + configObj.logs = this.logsBase64ToObj(configObj.logs); + if (configObj.thingsboard.statistics && configObj.thingsboard.statistics.commands) { + for (const command of Object.values(configObj.thingsboard.statistics.commands)) { + this.addCommand(command); + } + delete configObj.thingsboard.statistics.commands; + } + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + this.gatewayConfigGroup.markAsDirty(); + if (!configObj.thingsboard.remoteConfiguration) { + this.gatewayConfigGroup.disable({emitEvent: false}); + } + } + if (remoteLoggingLevel) { + const remoteLogsFormGroup = this.gatewayConfigGroup.get('logs.remote'); + remoteLogsFormGroup.patchValue({ + enabled: remoteLoggingLevel !== GatewayLogLevel.none, + logLevel: remoteLoggingLevel + }, {emitEvent: false}); + remoteLogsFormGroup.markAsDirty(); + } + } + }); + } + + logsBase64ToObj(logs64: string) { + const logsString = base64toString(logs64).split('"').join(''); + const logsObject = {}; + logsString.split('logger_').forEach((split, index) => { + if (index > 0) { + const key = split.split(']')[0]; + if (LocalLogsConfigs[key]) { + const logLevel = split.split('=')[1].replace('}}handlers', ''); + logsObject[key] = { + logLevel + }; + } + } + }); + logsString.split('handler_').forEach((split, index) => { + if (index > 0) { + const key = split.split('Handler]')[0]; + if (LocalLogsConfigs[key]) { + const args = split.split('args=(')[1].split(','); + logsObject[key].filePath = args[0].replace(`/${key}.log`, ''); + logsObject[key].savingPeriod = args[1].replace(' ', ''); + logsObject[key].savingTime = +args[2]; + logsObject[key].backupCount = +args[3]; + } + } + }); + const formatArgs = logsString.split('format=')[1].split('}}datefmt='); + const logFormat = formatArgs[0]; + const dateFormat = formatArgs[1]; + + return {local: logsObject, logFormat, dateFormat}; + } + + addCommand(command?): void { + const data = command || {}; + const commandsFormArray = this.commandFormArray(); + const commandFormGroup = this.fb.group({ + attributeName: [data.attributeName || null, [Validators.required]], + command: [data.command || null, [Validators.required]], + timeout: [data.timeout || null, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + }); + commandsFormArray.push(commandFormGroup); + } + + addLocalLogConfig(name, config): void { + const localLogsFormGroup = this.gatewayConfigGroup.get('logs.local') as FormGroup; + const configGroup = this.fb.group({ + logLevel: [config.logLevel || GatewayLogLevel.info, [Validators.required]], + filePath: [config.filePath || './data', [Validators.required]], + backupCount: [config.backupCount || 7, [Validators.required, Validators.min(0)]], + savingTime: [config.savingTime || 3, [Validators.required, Validators.min(0)]], + savingPeriod: [config.savingPeriod || LogSavingPeriod.days, [Validators.required]] + }); + localLogsFormGroup.addControl(name, configGroup); + } + + getLogFormGroup(value: string): FormGroup { + return this.gatewayConfigGroup.get(`logs.local.${value}`) as FormGroup; + } + + commandFormArray(): FormArray { + return this.gatewayConfigGroup.get('thingsboard.statistics.commands') as FormArray; + } + + removeCommandControl(index: number): void { + this.commandFormArray().removeAt(index); + } + + removeAllSecurityValidators(): void { + const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; + for (const controlsKey in securityGroup.controls) { + if (controlsKey !== 'type') { + securityGroup.controls[controlsKey].clearValidators(); + securityGroup.controls[controlsKey].setErrors(null); + securityGroup.controls[controlsKey].updateValueAndValidity(); + } + } + } + + removeAllStorageValidators(): void { + const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; + for (const storageKey in storageGroup.controls) { + if (storageKey !== 'type') { + storageGroup.controls[storageKey].clearValidators(); + storageGroup.controls[storageKey].setErrors(null); + storageGroup.controls[storageKey].updateValueAndValidity(); + } + } + } + + removeEmpty(obj) { + return Object.fromEntries( + Object.entries(obj) + .filter(([_, v]) => v != null) + .map(([k, v]) => [k, v === Object(v) ? this.removeEmpty(v) : v]) + ); + } + + generateLogsFile(logsObj): string { + const line = '[loggers]}}' + + 'keys=root, service, connector, converter, tb_connection, storage, extension}}' + + '[handlers]}}' + + 'keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler}}' + + '[formatters]}}' + + 'keys=LogFormatter}}' + + '[logger_root]}}' + + 'level=ERROR}}' + + 'handlers=consoleHandler}}' + + '[logger_database]}}' + + 'level=INFO}}' + + 'handlers=databaseHandler}}' + + 'formatter=LogFormatter}}' + + 'qualname=database}}'; + + let loggerLine = ''; + let handlerLine = ''; + + for (const key of Object.keys(logsObj.local)) { + loggerLine += `[logger_${key}]}}` + + `level=${logsObj.local[key].logLevel}}}` + + `handlers=${key}Handler}}` + + `formatter=LogFormatter}}` + + `qualname=${key}}}`; + handlerLine += `[handler_${key}Handler]}}` + + `level=${logsObj.local[key].logLevel}}}` + + `class=thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler}}` + + `formatter=LogFormatter}}` + + `args=("${logsObj.local[key].filePath}/${key}.log", ${logsObj.local[key].savingPeriod},` + + ` ${logsObj.local[key].savingTime}, ${logsObj.local[key].backupCount},)}}`; + } + + const logerEnding = `[formatter_LogFormatter]}}` + + `format="${logsObj.logFormat}"}}` + + `datefmt="${logsObj.dateFormat}"`; + + return line + loggerLine + handlerLine + logerEnding; + } + + saveConfig(): void { + const value = this.removeEmpty(this.gatewayConfigGroup.value); + const attributes = []; + attributes.push({ + key: 'RemoteLoggingLevel', + value: value.logs.remote.logLevel + }); + delete value.connectors; + value.logs = stringToBase64(this.generateLogsFile(value.logs)); + const configuration = objToBase64({thingsboard: value}); + attributes.push({ + key: 'configuration', + value: configuration + }); + this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributes).subscribe(_ => { + if (this.dialogRef) { + this.dialogRef.close(); + } + }); + } + + cancel(): void { + if (this.dialogRef) { + this.dialogRef.close(); + } + } + + private openConfigurationConfirmDialog(): void { + this.deviceService.getDevice(this.device.id).subscribe(gateway => { + this.dialog.open + (GatewayRemoteConfigurationDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + gatewayName: gateway.name + } + }).afterClosed().subscribe( + (res) => { + if (!res) { + this.gatewayConfigGroup.get('thingsboard.remoteConfiguration').setValue(true, {emitEvent: false}); + } + } + ); + }); + + + } +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html new file mode 100644 index 0000000000..f14ae4294d --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html @@ -0,0 +1,143 @@ + +
+ +

gateway.connectors

+ + +
+
+
+ + + + + {{generatePanelTitle(connectorControl)}} + + +
+ + + {{ (connectorControl.get('active').value ? 'gateway.connectors-active' : 'gateway.connectors-inactive') | translate }} + + + gateway.connector-name + + + {{'gateway.connector-name-required' | translate }} + + + + gateway.connector-configuration + + + {{'gateway.connector-configuration-required' | translate }} + + + + gateway.connector-type + + {{type}} + + + {{'gateway.connector-type-required' | translate }} + + + + gateway.connector-key + + + {{'gateway.connector-key-required' | translate }} + + + +
+ + +
+
+
+
+ +
+ + +
+
+ + + +
+
diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss new file mode 100644 index 0000000000..9f683170c2 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss @@ -0,0 +1,73 @@ +/** + * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * + * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of ThingsBoard, Inc. and its suppliers, + * if any. The intellectual and technical concepts contained + * herein are proprietary to ThingsBoard, Inc. + * and its suppliers and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * + * Dissemination of this information or reproduction of this material is strictly forbidden + * unless prior written permission is obtained from COMPANY. + * + * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, + * managers or contractors who have executed Confidentiality and Non-disclosure agreements + * explicitly covering such access. + * + * The copyright notice above does not evidence any actual or intended publication + * or disclosure of this source code, which includes + * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. + * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, + * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT + * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, + * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. + * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION + * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, + * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + */ +:host { + width: 100%; + height: 100%; + display: block; + + .mat-toolbar { + background: transparent; + color: rgba(0, 0, 0, .87) !important; + } + + .mat-mdc-form-field { + margin-right: 15px; + } + + mat-expansion-panel { + border: 1px solid #305680; + } + + mat-card { + padding-left: 10px; + } + + .mat-card-selected { + background-color: white; + } + + .mat-mdc-slide-toggle { + margin: 15px; + } + + ::ng-deep tb-json-object-edit > div { + flex-grow: 1; + } + + .mat-accordion .mat-expansion-panel { + border-radius: 5px; + } + + .action-btns { + margin: 10px 10px 0; + } +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts new file mode 100644 index 0000000000..0abf9ede4a --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -0,0 +1,195 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { EntityId } from '@shared/models/id/entity-id'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { forkJoin } from 'rxjs'; +import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; + + +export interface gatewayConnector { + name: string; + type: string; + configuration: string; + jsonConfiguration: string; + key: string; +} + +@Component({ + selector: 'tb-gateway-connector', + templateUrl: './gateway-connectors.component.html', + styleUrls: ['./gateway-connectors.component.scss'] +}) +export class GatewayConnectorComponent implements OnInit { + + gatewayConnectorsGroup: FormGroup; + + gatewayConnectorDefaultTypes: Array = + ['mqtt', + 'modbus', + 'grpc', + 'opcua', + 'opcua_asyncio', + 'ble', + 'request', + 'can', + 'bacnet', + 'odbc', + 'rest', + 'snmp', + 'ftp', + 'socket', + 'xmpp', + 'ocpp' + ]; + + selectedConnector: number; + + @Input() + device: EntityId; + + @Input() + dialogRef: MatDialogRef; + + logSelector: FormControl; + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + private cd: ChangeDetectorRef, + public dialog: MatDialog) { + } + + ngOnInit() { + this.gatewayConnectorsGroup = this.fb.group({ + connectors: this.fb.array([], [Validators.required]) + }); + this.getConnectorsData(); + } + + cancel(): void { + if (this.dialogRef) { + this.dialogRef.close(); + } + } + + getConnectorsData(): void { + forkJoin([ + this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE,['implementedConnectors']), + this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE,['implementedConnectors']), + this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE,['connectorTypes']) + ]).subscribe(attributes=>{ + if (attributes[0].length) { + attributes[0][0].value.forEach(connector=>this.addConnector(true, connector)); + } + if (attributes[1].length) { + attributes[1][0].value.forEach(connector=>this.addConnector(false, connector)); + } + if(attributes[2].length) { + attributes[1][0].value.forEach(type=> { + if (this.gatewayConnectorDefaultTypes.indexOf(type) === -1) { + this.gatewayConnectorDefaultTypes.push(type); + } + }); + } + this.cd.detectChanges(); + }); + } + + saveConnectors(): void { + const connectors = this.gatewayConnectorsGroup.value.connectors; + const activeConnectors = connectors.filter(connector=>connector.active); + const inactiveConnectors = connectors.filter(connector=>!connector.active); + forkJoin([ + this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, + [{key: 'implementedConnectors', value: inactiveConnectors}]), + this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, + [{key: 'implementedConnectors', value: activeConnectors}]) + ]).subscribe(_=> { + if (this.dialogRef) { + this.dialogRef.close(); + } + }); + } + + connectorsFormArray(): FormArray { + return this.gatewayConnectorsGroup.get('connectors') as FormArray; + } + + addConnector(active?: boolean,connector?: gatewayConnector) { + const newConnector = this.fb.group({ + active: [!!active], + name: [connector?.name || '', [Validators.required]], + type: [connector?.type || '', [Validators.required]], + configuration: [connector?.configuration || '', [Validators.required]], + jsonConfiguration: [connector?.jsonConfiguration || {}, [Validators.required]], + key: [connector?.key || 'auto', [Validators.required]], + }); + const connectorsFormArray = this.connectorsFormArray(); + connectorsFormArray.push(newConnector); + this.selectConnector(connectorsFormArray.length-1); + } + + removeConnector(index: number): void { + this.connectorsFormArray().removeAt(index); + } + + selectConnector(index: number): void { + this.selectedConnector = index; + } + + getJsonControl(selectedConnector: number): FormControl { + return this.connectorsFormArray().at(selectedConnector).get('jsonConfiguration') as FormControl; + } + + generatePanelTitle(connectorControl): string{ + const connectorValues = connectorControl.value; + const activeTxt = this.translate.instant(connectorValues.active ? 'gateway.connectors-active' : 'gateway.connectors-inactive'); + let title = `${connectorValues.name} | ${connectorValues.type} `; + if (connectorValues.type === 'grpc') { + title += `| ${connectorValues.key} `; + } + title += `| ${activeTxt}`; + return title; + } +} diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html new file mode 100644 index 0000000000..cc7bb69f6b --- /dev/null +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html @@ -0,0 +1,72 @@ + +
+ + warning +

gateway.configuration-delete-dialog-header

+ + +
+
+
+ + + gateway.configuration-delete-dialog-input + + + {{'gateway.configuration-delete-dialog-input-required' | translate }} + + +
+
+
+ + +
+
diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts new file mode 100644 index 0000000000..086e12a68a --- /dev/null +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts @@ -0,0 +1,76 @@ +/// +/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// +/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// +/// NOTICE: All information contained herein is, and remains +/// the property of ThingsBoard, Inc. and its suppliers, +/// if any. The intellectual and technical concepts contained +/// herein are proprietary to ThingsBoard, Inc. +/// and its suppliers and may be covered by U.S. and Foreign Patents, +/// patents in process, and are protected by trade secret or copyright law. +/// +/// Dissemination of this information or reproduction of this material is strictly forbidden +/// unless prior written permission is obtained from COMPANY. +/// +/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, +/// managers or contractors who have executed Confidentiality and Non-disclosure agreements +/// explicitly covering such access. +/// +/// The copyright notice above does not evidence any actual or intended publication +/// or disclosure of this source code, which includes +/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. +/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, +/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT +/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, +/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. +/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION +/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, +/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// + +import { Component, Inject, OnInit } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { DialogComponent } from '@shared/components/dialog.component'; +import { Router } from '@angular/router'; +import { FormBuilder, FormControl } from '@angular/forms'; + +export interface GatewayRemoteConfigurationDialogData { + gatewayName: string; +} + +@Component({ + selector: 'tb-activation-link-dialog', + templateUrl: './gateway-remote-configuration-dialog.html' +}) + +export class GatewayRemoteConfigurationDialogComponent extends DialogComponent implements OnInit { + + gatewayName: string; + + gatewayForm: FormControl; + + constructor(protected store: Store, + protected router: Router, + @Inject(MAT_DIALOG_DATA) public data: GatewayRemoteConfigurationDialogData, + public dialogRef: MatDialogRef, + private fb: FormBuilder) { + super(store, router, dialogRef); + this.gatewayName = this.data.gatewayName; + this.gatewayForm = this.fb.control(null); + } + + ngOnInit(): void { + } + + close(): void { + this.dialogRef.close(); + } + + turnOff(): void { + this.dialogRef.close(true); + } +} diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index c82ae61644..7b053007f1 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -176,10 +176,13 @@ import { NotificationComponent } from '@shared/components/notification/notificat import { TemplateAutocompleteComponent } from '@shared/components/notification/template-autocomplete.component'; import { SlackConversationAutocompleteComponent } from '@shared/components/slack-conversation-autocomplete.component'; import { DateAgoPipe } from '@shared/pipe/date-ago.pipe'; +import { DeviceGatewayCommandComponent } from '@shared/components/device/device-gateway-command.component'; +import { GatewayConfigurationComponent } from '@shared/components/device/gateway-configuration.component'; +import { GatewayRemoteConfigurationDialogComponent } from '@shared/components/dialog/gateway-remote-configuration-dialog'; +import { GatewayConnectorComponent } from '@shared/components/device/gateway-connectors.component'; + +export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) => markedOptionsService; -export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) { - return markedOptionsService; -} @NgModule({ providers: [ @@ -241,6 +244,10 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, + DeviceGatewayCommandComponent, + GatewayConfigurationComponent, + GatewayConnectorComponent, + GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbSnackBarComponent, TbErrorComponent, @@ -407,6 +414,10 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, + DeviceGatewayCommandComponent, + GatewayConfigurationComponent, + GatewayConnectorComponent, + GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbErrorComponent, TbCheatSheetComponent, diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index d810da019c..e25d2667e6 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1186,6 +1186,7 @@ "device-details": "Device details", "add-device-text": "Add new device", "credentials": "Credentials", + "commands": "Commands", "manage-credentials": "Manage credentials", "delete": "Delete device", "assign-devices": "Assign devices", @@ -1278,6 +1279,7 @@ "copyId": "Copy device Id", "copyAccessToken": "Copy access token", "copy-mqtt-authentication": "Copy MQTT credentials", + "transportCommandCopiedMessage": "Transport Command has been copied to clipboard", "idCopiedMessage": "Device Id has been copied to clipboard", "accessTokenCopiedMessage": "Device access token has been copied to clipboard", "mqtt-authentication-copied-message": "Device MQTT authentication has been copied to clipboard", @@ -2466,44 +2468,164 @@ }, "gateway": { "add-entry": "Add configuration", + "advanced": "Advanced", + "checking-device-activity": "Checking Device Activity:", "command": "Docker commands", "command-copied-message": "Docker command has been copied to clipboard", + "configuration": "Configuration", + "connector-json": "Connector JSON", "connector-add": "Add new connector", "connector-enabled": "Enable connector", "connector-name": "Connector name", "connector-name-required": "Connector name is required.", + "connector-key": "Connector key", + "connector-key-required": "Connector key is required.", + "connector-configuration": "Configuration file name", + "connector-configuration-required": "Configuration file name is required.", "connector-type": "Connector type", "connector-type-required": "Connector type is required.", + "connector-types": { + "mqtt": "MQTT Broker Connector", + "modbus": "Modbus Connector", + "modbus_serial": "Modbus Connector (serial)", + "opcua": "OPC-UA Connector", + "opcua_asyncio": "OPC-UA Connector (asyncio)", + "ble": "BLE Connector", + "request": "REQUEST Connector", + "can": "CAN Connector", + "bacnet": "BACnet Connector", + "odbc": "ODBC Connector", + "rest": "REST Connector", + "snmp": "SNMP Connector", + "ftp": "FTP Connector", + "socket": "Socket TCP/UDP Connector", + "xmpp": "XMPP Connector", + "ocpp": "OCPP Connector" + }, "connectors": "Connectors configuration", + "connectors-active": "Connector active", + "connectors-inactive": "Connector inactive", + "select-connector": "Select connector", + "gateway-configuration": "Gateway Configuration", "copy-command": "Copy docker command", "create-new-gateway": "Create a new gateway", "create-new-gateway-text": "Are you sure you want create a new gateway with name: '{{gatewayName}}'?", "created-time": "Created time", + "configuration-delete-dialog-header": "Configurations will be deleted", + "configuration-delete-dialog-body": "Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below.", + "configuration-delete-dialog-input": "Gateway name", + "configuration-delete-dialog-input-required": "Gateway name is mandatory", + "configuration-delete-dialog-confirm": "Turn Off", "delete": "Delete configuration", "download-tip": "Download configuration file", + "drop-file": "Drop file here or", "gateway": "Gateway", "gateway-exists": "Device with same name is already exists.", "gateway-name": "Gateway name", "gateway-name-required": "Gateway name is required.", "gateway-saved": "Gateway configuration successfully saved.", "gateway-search": "Gateway search", + "grpc": "GRPC", + "grpc-keep-alive-timeout": "Keep alive timeout (in ms)", + "grpc-keep-alive-timeout-required": "Keep alive timeout is required", + "grpc-keep-alive-timeout-min": "Keep alive timeout can not be less then 1", + "grpc-keep-alive-timeout-pattern": "Keep alive timeout is not valid", + "grpc-keep-alive": "Keep alive (in ms)", + "grpc-keep-alive-required": "Keep alive is required", + "grpc-keep-alive-min": "Keep alive can not be less then 1", + "grpc-keep-alive-pattern": "Keep alive is not valid", + "grpc-min-time-between-pings": "Min time between pings (in ms)", + "grpc-min-time-between-pings-required": "Min time between pings is required", + "grpc-min-time-between-pings-min": "Min time between pings can not be less then 1", + "grpc-min-time-between-pings-pattern": "Min time between pings is not valid", + "grpc-min-ping-interval-without-data": "Min ping interval without data (in ms)", + "grpc-min-ping-interval-without-data-required": "Min ping interval without data is required", + "grpc-min-ping-interval-without-data-min": "Min ping interval without data can not be less then 1", + "grpc-min-ping-interval-without-data-pattern": "Min ping interval without data is not valid", + "grpc-max-pings-without-data": "Max pings without data", + "grpc-max-pings-without-data-required": "Max pings without data is required", + "grpc-max-pings-without-data-min": "Max pings without data can not be less then 1", + "grpc-max-pings-without-data-pattern": "Max pings without data is not valid", + "handle-device-renaming": "Handle device renaming", + "inactivity-check-period-seconds": "Inactivity check period (in sec)", + "inactivity-check-period-seconds-required": "Inactivity check period is required", + "inactivity-check-period-seconds-min": "Inactivity check period can not be less then 1", + "inactivity-timeout-seconds": "Inactivity timeout (in sec)", + "inactivity-timeout-seconds-required": "Inactivity timeout is required", + "inactivity-timeout-seconds-min": "Inactivity timeout can not be less then 1", "json-parse": "Not valid JSON.", "json-required": "Field cannot be empty.", "linux-macos": "Linux/MacOS", + "logs": { + "logs": "Logs", + "days": "days", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "date-format": "Date format", + "date-format-required": "Date format required", + "log-format": "Log format", + "log-type": "Log type", + "log-format-required": "Log format required", + "remote": "Remote logging", + "remote-logs": "Remote logs", + "local": "Local logging", + "level": "Log level", + "file-path": "File path", + "file-path-required": "File path required", + "saving-period": "Log saving period", + "saving-period-min": "Log saving period can not be less then 0", + "saving-period-required": "Log saving period required", + "backup-count": "Backup count", + "backup-count-min": "Backup count can not be less then 0", + "backup-count-required": "Backup count required" + }, + "min-pack-send-delay": "Min pack send delay (in ms)", + "min-pack-send-delay-required": "Min pack send delay is required", + "min-pack-send-delay-min": "Min pack send delay can not be less then 1", "no-connectors": "No connectors", "no-data": "No configurations", "no-gateway-found": "No gateway found.", "no-gateway-matching": " '{{item}}' not found.", "path-logs": "Path to log files", "path-logs-required": "Path is required.", + "permit-without-calls": "Keep alive permit without calls", "remote": "Remote configuration", "remote-logging-level": "Logging level", "remove-entry": "Remove configuration", + "remote-shell": "Remote shell", + "remote-configuration": "Remote Configuration", + "other": "Other", "save-tip": "Save configuration file", "security-type": "Security type", "security-types": { "access-token": "Access Token", - "tls": "TLS" + "tls": "TLS", + "tls-access-token": "TLS + Access Token", + "tls-private-key": "TLS + Private Key" + }, + "server-port": "Server port", + "stats-send-period-in-sec": "Stats send period in seconds", + "statistics": { + "statistics": "Statistics", + "send-period": "Statistic send period (in ms)", + "send-period-required": "Statistic send period is required", + "send-period-min": "Statistic send period can not be less then 0", + "send-period-pattern": "Statistic send period is not valid", + "check-connectors-configuration": "Check connectors configuration (in ms)", + "check-connectors-configuration-required": "Check connectors configuration is required", + "check-connectors-configuration-min": "Check connectors configuration can not be less then 0", + "check-connectors-configuration-pattern": "Check connectors configuration is not valid", + "add": "Add command", + "timeout": "Timeout", + "timeout-required": "Timeout is required", + "timeout-min": "Timeout can not be less then 0", + "timeout-pattern": "Timeout is not valid", + "attribute-name": "Attribute name", + "attribute-name-required": "Attribute name is required", + "command": "Command", + "command-required": "Command is required", + "remove": "Remove command" }, "storage": "Storage", "storage-max-file-records": "Maximum records in file", @@ -2515,6 +2637,16 @@ "storage-max-records-min": "Minimum number of records is 1.", "storage-max-records-pattern": "Number is not valid.", "storage-max-records-required": "Maximum records is required.", + "storage-read-record-count": "Read record count in storage", + "storage-read-record-count-min": "Minimum number of records is 1.", + "storage-read-record-count-pattern": "Number is not valid.", + "storage-read-record-count-required": "Read record count is required.", + "storage-max-read-record-count": "Max read record count in storage", + "storage-max-read-record-count-min": "Minimum number of records is 1.", + "storage-max-read-record-count-pattern": "Number is not valid.", + "storage-max-read-record-count-required": "Max Read record count is required.", + "storage-data-folder-path": "Data folder path", + "storage-data-folder-path-required": "Data folder path is required.", "storage-pack-size": "Maximum event pack size", "storage-pack-size-min": "Minimum number is 1.", "storage-pack-size-pattern": "Number is not valid.", @@ -2524,9 +2656,11 @@ "storage-type": "Storage type", "storage-types": { "file-storage": "File storage", - "memory-storage": "Memory storage" + "memory-storage": "Memory storage", + "sqlite": "SQLITE" }, "thingsboard": "ThingsBoard", + "thingsboard-general": "General", "thingsboard-host": "ThingsBoard host", "thingsboard-host-required": "Host is required.", "thingsboard-port": "ThingsBoard port", @@ -2539,6 +2673,17 @@ "title-connectors-json": "Connector {{typeName}} configuration", "tls-path-ca-certificate": "Path to CA certificate on gateway", "tls-path-client-certificate": "Path to client certificate on gateway", + "messages-ttl-check-in-hours": "Messages TTL check in hours", + "messages-ttl-check-in-hours-required": "Messages TTL check in hours is required.", + "messages-ttl-check-in-hours-min": "Min number is 1.", + "messages-ttl-check-in-hours-pattern": "Number is not valid.", + "messages-ttl-in-days": "Messages TTL in days", + "messages-ttl-in-days-required": "Messages TTL in days is required.", + "messages-ttl-in-days-min": "Min number is 1.", + "messages-ttl-in-days-pattern": "Number is not valid.", + "mqtt-qos": "QoS", + "mqtt-qos-required": "QoS is required", + "mqtt-qos-range": "QoS values range is from 0 to 2", "tls-path-private-key": "Path to private key on gateway", "toggle-fullscreen": "Toggle fullscreen", "transformer-json-config": "Configuration JSON*", @@ -3065,6 +3210,20 @@ }, "security": { "security": "Security", + "access-token": "Access token", + "access-token-required": "Access token is required", + "clientId": "Client ID", + "clientId-required": "Client ID is required", + "username": "Username", + "username-required": "Username is required", + "password": "Password", + "password-required": "Password is required", + "ca-cert": "CA certificate", + "ca-cert-required": "CA certificate is required", + "cert": "Certificate", + "cert-required": "Certificate is required", + "private-key": "Private Key", + "private-key-required": "Private Key is required", "2fa": { "2fa": "Two-factor authentication", "2fa-description": "Two-factor authentication protects your account from unauthorized access. All you have to do is enter a security code when you log in.", From 7951e75ddfc8086da432f12323f7faecd9965b70 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Sat, 8 Apr 2023 01:50:36 +0300 Subject: [PATCH 015/120] licence fix --- .../device/device-credentials.module.ts | 35 ++++++------------- .../device-example-command.component.html | 35 ++++++------------- .../device-example-command.component.scss | 35 ++++++------------- .../device-example-command.component.ts | 35 ++++++------------- .../device-gateway-command.component.html | 35 ++++++------------- .../device-gateway-command.component.ts | 35 ++++++------------- .../gateway-configuration.component.html | 35 ++++++------------- .../gateway-configuration.component.scss | 35 ++++++------------- .../device/gateway-configuration.component.ts | 35 ++++++------------- .../device/gateway-connectors.component.html | 35 ++++++------------- .../device/gateway-connectors.component.scss | 35 ++++++------------- .../device/gateway-connectors.component.ts | 35 ++++++------------- .../gateway-remote-configuration-dialog.html | 35 ++++++------------- .../gateway-remote-configuration-dialog.ts | 35 ++++++------------- 14 files changed, 140 insertions(+), 350 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts index 58c39a3699..692e2e36d1 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// 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 /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// 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. /// import { NgModule } from '@angular/core'; diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html index 0663d12a14..69fe98ba3d 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html @@ -1,33 +1,18 @@
diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss index e3fc24d4dc..1ffdf91763 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss @@ -1,32 +1,17 @@ /** - * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * Copyright © 2016-2023 The Thingsboard Authors * - * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * 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 * - * NOTICE: All information contained herein is, and remains - * the property of ThingsBoard, Inc. and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to ThingsBoard, Inc. - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. + * http://www.apache.org/licenses/LICENSE-2.0 * - * Dissemination of this information or reproduction of this material is strictly forbidden - * unless prior written permission is obtained from COMPANY. - * - * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, - * managers or contractors who have executed Confidentiality and Non-disclosure agreements - * explicitly covering such access. - * - * The copyright notice above does not evidence any actual or intended publication - * or disclosure of this source code, which includes - * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. - * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, - * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT - * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, - * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. - * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION - * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, - * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + * 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. */ :host { diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts index 853084ae32..1241b93851 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// 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 /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// 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. /// import { Component, Input, OnInit } from '@angular/core'; diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html index 711897ce4d..e720f4f817 100644 --- a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html @@ -1,33 +1,18 @@
diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts index ab0548e273..c96e8ae1c5 100644 --- a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// 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 /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// 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. /// import { Component, Input, OnInit } from '@angular/core'; diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index 6c1300ece4..8949f5015c 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -1,33 +1,18 @@
diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss index d6bcdf6e8a..0b04abd6bf 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss @@ -1,32 +1,17 @@ /** - * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * Copyright © 2016-2023 The Thingsboard Authors * - * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * 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 * - * NOTICE: All information contained herein is, and remains - * the property of ThingsBoard, Inc. and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to ThingsBoard, Inc. - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. + * http://www.apache.org/licenses/LICENSE-2.0 * - * Dissemination of this information or reproduction of this material is strictly forbidden - * unless prior written permission is obtained from COMPANY. - * - * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, - * managers or contractors who have executed Confidentiality and Non-disclosure agreements - * explicitly covering such access. - * - * The copyright notice above does not evidence any actual or intended publication - * or disclosure of this source code, which includes - * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. - * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, - * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT - * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, - * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. - * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION - * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, - * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + * 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. */ :host { width: 100%; diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index 2fd02f60b7..83c2e0a907 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// 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 /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// 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. /// import { Component, Input, OnInit } from '@angular/core'; diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html index f14ae4294d..bb0a28cd07 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html @@ -1,33 +1,18 @@ diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss index 9f683170c2..563a8d8709 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss @@ -1,32 +1,17 @@ /** - * ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL + * Copyright © 2016-2023 The Thingsboard Authors * - * Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. + * 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 * - * NOTICE: All information contained herein is, and remains - * the property of ThingsBoard, Inc. and its suppliers, - * if any. The intellectual and technical concepts contained - * herein are proprietary to ThingsBoard, Inc. - * and its suppliers and may be covered by U.S. and Foreign Patents, - * patents in process, and are protected by trade secret or copyright law. + * http://www.apache.org/licenses/LICENSE-2.0 * - * Dissemination of this information or reproduction of this material is strictly forbidden - * unless prior written permission is obtained from COMPANY. - * - * Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, - * managers or contractors who have executed Confidentiality and Non-disclosure agreements - * explicitly covering such access. - * - * The copyright notice above does not evidence any actual or intended publication - * or disclosure of this source code, which includes - * information that is confidential and/or proprietary, and is a trade secret, of COMPANY. - * ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, - * OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT - * THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, - * AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. - * THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION - * DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, - * OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. + * 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. */ :host { width: 100%; diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 0abf9ede4a..951ed4ae50 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// 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 /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// 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. /// import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html index cc7bb69f6b..e253c67e33 100644 --- a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html @@ -1,33 +1,18 @@ diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts index 086e12a68a..95850a2444 100644 --- a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts @@ -1,32 +1,17 @@ /// -/// ThingsBoard, Inc. ("COMPANY") CONFIDENTIAL +/// Copyright © 2016-2023 The Thingsboard Authors /// -/// Copyright © 2016-2023 ThingsBoard, Inc. All Rights Reserved. +/// 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 /// -/// NOTICE: All information contained herein is, and remains -/// the property of ThingsBoard, Inc. and its suppliers, -/// if any. The intellectual and technical concepts contained -/// herein are proprietary to ThingsBoard, Inc. -/// and its suppliers and may be covered by U.S. and Foreign Patents, -/// patents in process, and are protected by trade secret or copyright law. +/// http://www.apache.org/licenses/LICENSE-2.0 /// -/// Dissemination of this information or reproduction of this material is strictly forbidden -/// unless prior written permission is obtained from COMPANY. -/// -/// Access to the source code contained herein is hereby forbidden to anyone except current COMPANY employees, -/// managers or contractors who have executed Confidentiality and Non-disclosure agreements -/// explicitly covering such access. -/// -/// The copyright notice above does not evidence any actual or intended publication -/// or disclosure of this source code, which includes -/// information that is confidential and/or proprietary, and is a trade secret, of COMPANY. -/// ANY REPRODUCTION, MODIFICATION, DISTRIBUTION, PUBLIC PERFORMANCE, -/// OR PUBLIC DISPLAY OF OR THROUGH USE OF THIS SOURCE CODE WITHOUT -/// THE EXPRESS WRITTEN CONSENT OF COMPANY IS STRICTLY PROHIBITED, -/// AND IN VIOLATION OF APPLICABLE LAWS AND INTERNATIONAL TREATIES. -/// THE RECEIPT OR POSSESSION OF THIS SOURCE CODE AND/OR RELATED INFORMATION -/// DOES NOT CONVEY OR IMPLY ANY RIGHTS TO REPRODUCE, DISCLOSE OR DISTRIBUTE ITS CONTENTS, -/// OR TO MANUFACTURE, USE, OR SELL ANYTHING THAT IT MAY DESCRIBE, IN WHOLE OR IN PART. +/// 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. /// import { Component, Inject, OnInit } from '@angular/core'; From 50593449490be0e58e350a570fc6ef58ee2210a0 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 10 Apr 2023 15:46:21 +0300 Subject: [PATCH 016/120] hotfix fix --- .../components/device/device-gateway-command.component.html | 2 +- .../components/device/gateway-configuration.component.ts | 2 +- .../components/device/gateway-connectors.component.scss | 3 ++- .../shared/components/device/gateway-connectors.component.ts | 5 +++++ ui-ngx/src/assets/locale/locale.constant-en_US.json | 1 + 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html index e720f4f817..0b3dbc7344 100644 --- a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html @@ -17,7 +17,7 @@ -->
In order to run ThingsBoard IoT gateway (ThingsBoard IoT gateway) in docker with credentials for this device you can use the following commands. -
+
gateway.windows gateway.linux-macos diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index 83c2e0a907..5f0e0ae40d 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -461,7 +461,7 @@ export class GatewayConfigurationComponent implements OnInit { const attributes = []; attributes.push({ key: 'RemoteLoggingLevel', - value: value.logs.remote.logLevel + value: value.logs.remote.enabled ? value.logs.remote.logLevel : GatewayLogLevel.none }); delete value.connectors; value.logs = stringToBase64(this.generateLogsFile(value.logs)); diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss index 563a8d8709..0ad7851616 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss @@ -33,10 +33,11 @@ mat-card { padding-left: 10px; + background: transparent; } .mat-card-selected { - background-color: white; + background-color: rgba(48, 86, 128, 0.1); } .mat-mdc-slide-toggle { diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 951ed4ae50..2a985a7113 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -157,6 +157,11 @@ export class GatewayConnectorComponent implements OnInit { removeConnector(index: number): void { this.connectorsFormArray().removeAt(index); + if (index !== 0) { + this.selectedConnector = index - 1; + } else { + this.selectedConnector = undefined; + } } selectConnector(index: number): void { diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index e25d2667e6..ea9cd2d66c 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2600,6 +2600,7 @@ "security-type": "Security type", "security-types": { "access-token": "Access Token", + "username-password": "Username and Password", "tls": "TLS", "tls-access-token": "TLS + Access Token", "tls-private-key": "TLS + Private Key" From 5aa9398a61b535644c1f76d624c93d474dffcf90 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 10 Apr 2023 16:27:44 +0300 Subject: [PATCH 017/120] hotfix v2 --- .../components/device/gateway-configuration.component.html | 1 + .../components/device/gateway-configuration.component.ts | 2 ++ .../components/device/gateway-connectors.component.html | 1 + .../components/device/gateway-connectors.component.ts | 6 ++++++ 4 files changed, 10 insertions(+) diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index 8949f5015c..f4e5e364d0 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -653,6 +653,7 @@ diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index 5f0e0ae40d..a99a23eff1 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -473,6 +473,8 @@ export class GatewayConfigurationComponent implements OnInit { this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributes).subscribe(_ => { if (this.dialogRef) { this.dialogRef.close(); + } else { + this.gatewayConfigGroup.markAsPristine(); } }); } diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html index bb0a28cd07..809a8cb44d 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html @@ -113,6 +113,7 @@ diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 2a985a7113..4635b7fe56 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -89,6 +89,9 @@ export class GatewayConnectorComponent implements OnInit { this.gatewayConnectorsGroup = this.fb.group({ connectors: this.fb.array([], [Validators.required]) }); + this.gatewayConnectorsGroup.valueChanges.subscribe(_=>{ + this.cd.detectChanges(); + }); this.getConnectorsData(); } @@ -133,6 +136,9 @@ export class GatewayConnectorComponent implements OnInit { ]).subscribe(_=> { if (this.dialogRef) { this.dialogRef.close(); + } else { + this.gatewayConnectorsGroup.markAsPristine(); + this.cd.detectChanges(); } }); } From 42e196906d281852805e6550bd50e2ce93e1b19a Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 19 May 2023 10:28:24 +0300 Subject: [PATCH 018/120] mark2 gateway dashboard --- .../json/system/widget_bundles/cards.json | 19 + .../widget_bundles/gateway_widgets.json | 136 +++++-- ui-ngx/src/app/modules/common/modules-map.ts | 6 + .../widget/lib/action-buttons.component.html | 30 ++ .../widget/lib/action-buttons.component.scss | 33 ++ .../widget/lib/action-buttons.component.ts | 61 +++ ...ion-buttons-widget-settings.component.html | 43 ++ ...ction-buttons-widget-settings.component.ts | 62 +++ .../gateway-logs-settings.component.html | 26 ++ .../gateway-logs-settings.component.ts | 54 +++ ...ateway-service-rpc-settings.component.html | 22 + .../gateway-service-rpc-settings.component.ts | 52 +++ .../lib/settings/widget-settings.module.ts | 25 +- .../widget/widget-components.module.ts | 7 +- .../gateway-configuration.component.html | 191 +++++++-- .../gateway-configuration.component.scss | 41 ++ .../device/gateway-configuration.component.ts | 257 ++++++++---- .../device/gateway-connectors.component.html | 246 ++++++----- .../device/gateway-connectors.component.scss | 33 +- .../device/gateway-connectors.component.ts | 384 +++++++++++++----- .../device/gateway-logs.component.html | 57 +++ .../device/gateway-logs.component.scss | 55 +++ .../device/gateway-logs.component.ts | 250 ++++++++++++ .../device/gateway-service-rpc.component.html | 49 +++ .../device/gateway-service-rpc.component.scss | 48 +++ .../device/gateway-service-rpc.component.ts | 125 ++++++ .../device/gateway-statistics.component.html | 43 ++ .../device/gateway-statistics.component.scss | 41 ++ .../device/gateway-statistics.component.ts | 150 +++++++ .../gateway-remote-configuration-dialog.html | 2 +- .../components/file-input.component.html | 13 +- .../components/file-input.component.scss | 4 + .../shared/components/file-input.component.ts | 3 + ui-ngx/src/app/shared/shared.module.ts | 9 + .../assets/locale/locale.constant-en_US.json | 51 ++- 35 files changed, 2253 insertions(+), 375 deletions(-) create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-logs.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-logs.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-logs.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-statistics.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts diff --git a/application/src/main/data/json/system/widget_bundles/cards.json b/application/src/main/data/json/system/widget_bundles/cards.json index 4930219741..ef746b58da 100644 --- a/application/src/main/data/json/system/widget_bundles/cards.json +++ b/application/src/main/data/json/system/widget_bundles/cards.json @@ -217,6 +217,25 @@ "settingsDirective": "tb-dashboard-state-widget-settings", "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"syncParentStateParams\":true,\"defaultAutofillLayout\":true,\"defaultMargin\":0,\"defaultBackgroundColor\":\"#fff\"},\"title\":\"Dashboard state widget\",\"dropShadow\":true,\"enableFullscreen\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"noDataDisplayMessage\":\"\",\"showLegend\":false}" } + }, + { + "alias": "action_buttons", + "name": "Action buttons", + "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCACtAfwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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", + "description": "Allow to create buttons from custom actions", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n", + "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", + "controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n}\n\nself.actionSources = function() {\n return {\n 'actionButtonClick': {\n name: 'widget-action.action-button-click',\n multiple: true\n }\n };\n}\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n datasourcesOptional: true\n };\n}\n\nself.onDestroy = function() {\n}\n\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-action-buttons-widget-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"buttonsType\":\"raised\",\"buttonsClass\":\"primary\"},\"title\":\"Action buttons\",\"actions\":{\"actionButtonClick\":[{\"name\":\"Button 1\",\"icon\":\"more_horiz\",\"useShowWidgetActionFunction\":null,\"showWidgetActionFunction\":\"return true;\",\"type\":\"custom\",\"customFunction\":\"\",\"openInSeparateDialog\":false,\"openInPopover\":false,\"id\":\"2ab2fe43-a4e0-7ef6-8a37-381e663ccf74\"},{\"name\":\"Button 2\",\"icon\":\"more_horiz\",\"useShowWidgetActionFunction\":null,\"showWidgetActionFunction\":\"return true;\",\"type\":\"custom\",\"customFunction\":null,\"openInSeparateDialog\":false,\"openInPopover\":false,\"id\":\"243e775d-d78c-f05c-ec3f-db0d20c49416\"}]},\"showTitleIcon\":false,\"dropShadow\":true,\"enableFullscreen\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + } } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index bd6e15ed3d..365576dde0 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -8,6 +8,25 @@ "name": "Gateway widgets" }, "widgetTypes": [ + { + "alias": "attributes_card", + "name": "Gateway events", + "image": "data:image/png;base64,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", + "description": "Allows to browse events from the gateway.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", + "controllerScript": "let types;\nlet eventsReg = \"eventsReg\";\n\nself.onInit = function() {\n \n self.ctx.datasourceTitleCells = [];\n self.ctx.valueCells = [];\n self.ctx.labelCells = [];\n\n if (self.ctx.datasources.length && self.ctx.datasources[0].type === 'entity') {\n getDatasourceKeys(self.ctx.datasources[0]);\n } else {\n processDatasources(self.ctx.datasources);\n }\n}\n\nself.onDataUpdated = function() {\n for (var i = 0; i < self.ctx.valueCells.length; i++) {\n var cellData = self.ctx.data[i];\n if (cellData && cellData.data && cellData.data.length > 0) {\n var tvPair = cellData.data[cellData.data.length -\n 1];\n var value = tvPair[1];\n var textValue;\n //toDo -> + IsNumber\n \n if (isNumber(value)) {\n var decimals = self.ctx.decimals;\n var units = self.ctx.units;\n if (cellData.dataKey.decimals || cellData.dataKey.decimals === 0) {\n decimals = cellData.dataKey.decimals;\n }\n if (cellData.dataKey.units) {\n units = cellData.dataKey.units;\n }\n txtValue = self.ctx.utils.formatValue(value, decimals, units, false);\n }\n else {\n txtValue = value;\n }\n self.ctx.valueCells[i].html(txtValue);\n }\n }\n \n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n}\n\nself.onResize = function() {\n var datasourceTitleFontSize = self.ctx.height/8;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n datasourceTitleFontSize = self.ctx.width/12;\n }\n datasourceTitleFontSize = Math.min(datasourceTitleFontSize, 20);\n for (var i = 0; i < self.ctx.datasourceTitleCells.length; i++) {\n self.ctx.datasourceTitleCells[i].css('font-size', datasourceTitleFontSize+'px');\n }\n var valueFontSize = self.ctx.height/9;\n var labelFontSize = self.ctx.height/9;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n valueFontSize = self.ctx.width/15;\n labelFontSize = self.ctx.width/15;\n }\n valueFontSize = Math.min(valueFontSize, 18);\n labelFontSize = Math.min(labelFontSize, 18);\n\n for (i = 0; i < self.ctx.valueCells; i++) {\n self.ctx.valueCells[i].css('font-size', valueFontSize+'px');\n self.ctx.valueCells[i].css('height', valueFontSize*2.5+'px');\n self.ctx.valueCells[i].css('padding', '0px ' + valueFontSize + 'px');\n self.ctx.labelCells[i].css('font-size', labelFontSize+'px');\n self.ctx.labelCells[i].css('height', labelFontSize*2.5+'px');\n self.ctx.labelCells[i].css('padding', '0px ' + labelFontSize + 'px');\n } \n}\n\nfunction processDatasources(datasources) {\n var i = 0;\n var tbDatasource = datasources[i];\n var datasourceId = 'tbDatasource' + i;\n self.ctx.$container.append(\n \"
\"\n );\n\n var datasourceContainer = $('#' + datasourceId,\n self.ctx.$container);\n\n datasourceContainer.append(\n \"
\" +\n tbDatasource.name + \"
\"\n );\n \n var datasourceTitleCell = $('.tbDatasource-title', datasourceContainer);\n self.ctx.datasourceTitleCells.push(datasourceTitleCell);\n \n var tableId = 'table' + i;\n datasourceContainer.append(\n \"
\"\n );\n var table = $('#' + tableId, self.ctx.$container);\n\n for (var a = 0; a < tbDatasource.dataKeys.length; a++) {\n var dataKey = tbDatasource.dataKeys[a];\n var labelCellId = 'labelCell' + a;\n var cellId = 'cell' + a;\n table.append(\"\" + dataKey.label +\n \"\");\n var labelCell = $('#' + labelCellId, table);\n self.ctx.labelCells.push(labelCell);\n var valueCell = $('#' + cellId, table);\n self.ctx.valueCells.push(valueCell);\n }\n self.onResize();\n}\n\nfunction getDatasourceKeys (datasource) {\n let entityService = self.ctx.$scope.$injector.get(self.ctx.servicesMap.get('entityService'));\n if (datasource.entityId && datasource.entityType) {\n entityService.getEntityKeys({entityType: datasource.entityType, id: datasource.entityId}, '', 'timeseries').subscribe(\n function(data){\n if (data.length) {\n subscribeForKeys (datasource, data);\n }\n });\n }\n}\n\nfunction subscribeForKeys (datasource, data) {\n let eventsRegVals = self.ctx.settings[eventsReg];\n if (eventsRegVals && eventsRegVals.length > 0) {\n var dataKeys = [];\n data.sort();\n data.forEach(dataValue => {eventsRegVals.forEach(event => {\n if (dataValue.toLowerCase().includes(event.toLowerCase())) {\n var dataKey = {\n type: 'timeseries',\n name: dataValue,\n label: dataValue,\n settings: {},\n _hash: Math.random()\n };\n dataKeys.push(dataKey);\n }\n })});\n\n if (dataKeys.length) {\n updateSubscription (datasource, dataKeys);\n }\n }\n}\n\nfunction updateSubscription (datasource, dataKeys) {\n var datasources = [\n {\n type: 'entity',\n name: datasource.aliasName,\n aliasName: datasource.aliasName,\n entityAliasId: datasource.entityAliasId,\n dataKeys: dataKeys\n }\n ];\n \n var subscriptionOptions = {\n datasources: datasources,\n useDashboardTimewindow: false,\n type: 'latest',\n callbacks: {\n onDataUpdated: (subscription) => {\n self.ctx.data = subscription.data;\n self.onDataUpdated();\n }\n }\n };\n \n processDatasources(datasources);\n self.ctx.subscriptionApi.createSubscription(subscriptionOptions, true).subscribe(\n (subscription) => {\n self.ctx.defaultSubscription = subscription;\n }\n );\n}\n\nself.onDestroy = function() {\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\t\n dataKeysOptional: true,\n singleEntity: true\n };\n}\n\n", + "settingsSchema": "", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-events-widget-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Function Math.round\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.826503672916844,\"funcBody\":\"return Math.round(1000*Math.sin(time/5000));\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"eventsTitle\":\"Gateway Events Form\",\"eventsReg\":[]},\"title\":\"Gateway events\",\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}" + } + }, { "alias": "gateway_configuration", "name": "Gateway Configuration", @@ -28,22 +47,21 @@ } }, { - "alias": "attributes_card", - "name": "Gateway events", - "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAAAAABslHx1AAAAAmJLR0QA/4ePzL8AAAwTSURBVHja7Z3tVxNJvoD9z+6HPXvPmTuo44ys6KBIIE6QF4kgMqJxEMSB6Ay6rCCIMCqMEVRW7jhvCAJGfEHQIIoLhDc7BAKBvJCETnc/90OCg8oeQFnvhNO/L1SKgs5z+BXV9XSlagPBydHhCI/RSZENwTGXRISH5BoLbph0sQ7CNblhVFoPINLohmHWRQyrICqICqKCqCAqiAqigqggKogKooL8CUAURZEjKhRFWQJEUWRJCorzERNiUJLk1yiLQGRJDPjnvJ4ICe+cPyBK8jsgiizN+yKtY/jmX5MsAhF97kgDcfvEd0GkgGc60kCmPQHpbRA56J+1RxqIfdYflN8GEeecQqSBCM458V0Q79RopIGMTnnfBZn3OEYiDWTE4ZlfCiTi7laGlwaZfA0iTeJ1AXbFLwiCICMPOVZ5Db91DUala8uBTC4D4ojjyo4AbJJatxkMBu94giGpSFnNW7ipKdS0hMuNzuVaX1xUNg/8Uf5sLUCiSmGT1PotwKEWlJyWVXA4dviZiZaxNVvpT/hfPy9bZnkKvdAryY9b/YEe6HcBr5qGsER1Ij9u9SMIrSM5550It8dhukVYE5DyuBcLIMqnCtwuWgVIW6jxk5Sbex4/iK3y/PPr+niPfsz7lwExFsO5S0ly9KwS44I+7Y09D5s+acRw7rKOii/P9qQbbV3JDVrrbGxNwca1AKl+phE3Sa0btdqL/s+BTsNqMussj8rK/A67teI8+iGiB4XvfzU1NOVUPznFwGTfF77Sxr5soC17wiGwBQYcfVvnKhrgTDOZbUJd6bVKlM1rAsKZqoXUipLg11OrAGnNw9G31dWdeslQjn5I/m+j0fhwxHDMnl5tJu9UzSbvwP7K3wFuZ+8T2AL5p2o2eyp+gjPN7M43Gm9VNq5RH6nGH/uXMEheA5L+/ipAPFvtyNEuYxvV59APohljIsBXB8jX+N1fMrfZgzbOD9x9ys1yPpc9O/BtcVf8BH9v4lg7HuftImbX6C/C4/8Kg8xk6OIqV/WPs1NzQHdG7vxbanoeFxJtzxKy0+2crqX1AIpBuy96kNpcACElJ+ElR1KVo4lp0QMVP0Hzl93jSdnJvdLBtK+3fijIEsNCcLVjgBcgOL9Q9C+eRgCUmkMv5hRQ5sKVAD453Nq//IC4epA1j+N6eQ1G9j8BiHMNOP4UIGtzr7XOQdbN3e86mY+smxniupmzB/2z9uE+S9ejhxERj7osfcNLWRRFCrinBOvL5896LBEQPc+ev7QKU+53vZYizXtnJl+NDA70R0QMDI68mpzxzi8BIvpcU3ZhdHgoImJ4VLBPuXzi0iCRZuOXBpn3zkTa85GlUyvgnoq0J1ZLdXZVYqsSW5XYqsR+L4m9fMx536qQxwTweCDgBMnqBJixijApCIITxocVUITRjyqxl4vHz2j6/c0qd3LekYxATQ105jAUn59+Bsp032oG0GQZDFfF7CN5Oqdf/01uiufjSWxcty0g3TcHcNie3JXocbaMgrflBQQ72kX7ieJJu51gh3kex3i3WQYaSuD07TBIShckv+hOkXmciWYceJgDptqWE3Ch4eNJbOfuq/mVSnbJRZ14K6b6aCnbc03R067EupwGskp/SO0/lDtca5Izz1bvFW/u+OFIOWDZ1QmEQMSNwITrvAnkQTT9brdk+1urDNaYDvljSmzTJSRTXzoUN906y1gK290UPDT9Q3iZYE2FRs8P16k1PcuEk3duljOkB+g+GPdLGGQ2BoDTPwOgSdbrR+jP3XFFoTcn9sZHlNjlPwP3v4UrtbfKsSWx3U/RvX/sMxpLu3MBfrhOran9JFy+evMCo2mAT8K2t7P2MnQeljcrMDJ9uRaCllBqBUSch2/6RRwZzR9PYjcV462Y0EjkPFgE8vN3KGPOeJlz/kv11JpsiTJZnQsgxfXwfePdw3DpPF+3ISda+7Ui7UdCIKYzYDpXeQEqaz+exJaOHkh+xDVd2illEYj0jT7tGvVJ+6vp3GauNWHSpRazADJzMDMt26ec1O3P8jCRnqk1wfWEA6njaJL1+vOBPH1misN7JEOvd31MiR1QAOltDx2QAUkE/DJA8I0GIeUthupCDeRFDUJlKaAqUxVEBVEltiqxVYmtSmxVYqsS+/9VYkdaZ/+3EjvSQP6txI40EFViqxJbldiqxA6FKNgCwIwgCBOMC1MKTMjg9MOc1b+CK4iCsMSgJL21krm3L/wmHi/5S9oaS/wfOEMc3GjQ5fspTDIYThNlyImzsNMJ+e3UJxRpzMuDDGw0ZCWOv107WP7m68t1YQtWEvo61rz4u7av5MbSDwVJgQtnKbwDECVj/iYMIuwUccQs7+UHUuBGMeLdTgWetrhAuD2OZ3B6BCyydO+BDN3mi3UAfW23ShAftouemv1DzNyxwIsgYD6Jdf8agLijKfzF7RaJmp3+viYM8tvplSVvCETWVxefpDy3Pt7VldygtVoMtr1MJyoHz5/N49LB2pg64LdkU0IJGVXnM6fPJHXb91w7VM9pJ9BcwnjKGoDwKYXxer2ZKENOXE8Y5GolHWVlwZWkVvaeicdZghAd+ELCPJzZJtSVWgykTjT8+DxNEHb4on1cqgN0Y/xeIlvtfRt5WIDbNnwrB4BX+ywoGb99OMj09j9S61U8cVOQZ/61iMm+TYHlQfYI14/zW7zRaJzYCYQWV1sM3Lya6WjfaTQanZ+H+0jMPE0l8qEzNZ/wsADb3qri7NBgp3+Kom/6YBCpqPoPkBdaDpuR4sacWx3ImwMrSS1Z86/+ZJlRYl00DB1rx+O0GHDvyWRMKzNKvI2SOuDgE+pLBB2uT5TOPK5V0xYCWZvU+p+0xAqJwni9/ihR+jRdD2O6A4kmuLc7S1e6ss7eoeeCLvM77muzjwfHk7KTey0GOHILavccOKE8is1MqgP6d2amlUgZOv1mx1T0lVc7Ug/Gk+wAzEUMZPwnBJ0vtH+VdzUjVlAElAC8ua46KC64bECeh/BCbFEMmWoZwB4v1Z9bF6bR3Hg2oLpfFUSV2KrEViW2KrFVia1KbFViqxJbldiqxFYltiqxVYn9psQWBMHvFmzz4BcEH4B30A9+QViRfBAF4T2Wblve/ZmBkh/DF+wT3k9iGwwvqzQG3XG5eZshPX2OW3HHdt7DHG3Qp6xg96rBjYacuMerBanqe8ffbzPfDn/Q/Wrn+ypTqkyg72ouguLrzm1eHFtFcx6U/bgCkBQYimf+gVnEKtxlqqkX5Pv3JQBfyzOwDL4cFtrwtnQrDAnt4kugTuBJixvGmsbA4mge5852i3sQ5dED29RP/e8DkuR2e6kywf7O5iI4fe22EcjsMedBWe3KQBzblbSLZTkUaKqmdtdl3SCn/JwB8O4xfXOFvx7uKIqvdMXXniyiUFM5EXqAUJpXp3E/+OpGSjub869Ee03Rv3flUnKkJvrn9zSNev0JqjQGXZHcvM2gz/Q1lAP598zRhox0zwpAvij7u+YXacjWt5kCM1btsHuwf68g7HLBP78TrLFslClqpa4SEicK2xa6VrTM3ZG0fzGu5TOJ7BeTWrpy5c9Ezr4nSCi1KoSv22g+KpRc4s4JQP/cfEgoP7+CbB9M6Ov3EMwuqYmi4AF05up6739pNBqn4EKK0XiaLVBkpvwW5PQUdizcBO4G2OVG3sIWONwzqaUr1xsLZR8EYmJ4V7C5CO82pyvawUiMZM7DH+NYWWqBNQ3npxQ84HkL3UfGNRKjQEsBjIZBWgqZj3G9BmGHm+sjx8w81S8CYbuTE++fWvruKhMUXW8uAtN3dOxKje/BnAcNJ1YKIu7TZUS5Ch7gzjykuUudNuu4DHLBvvTaMIhcsF/bSGEHoyFdbdZmF0j25GytdTHIndiMuF/WTNApnvcYsV7vEeKXF2nr+UWfnJhfUNnhqwQAvG/6/ldi8HDXejCNdWnpJ5R1oUwVUZXYqsRWJbYqsVWJ/eeX2J5p23B/3/PeZxEQvc/7+odtS22Tq8iizz1tF0ZHIuMwsZFRwT695MbFsjTv88w6pxyTERGOKeesZ6mtpNfN5t7rZ7v1dbMBfoSHCqKCqCAqiAqigqggKogK8p8EWTcHBK+PI5tnJzeI6+MQbWnD+jjWXOL/AEwNUAMKfcOQAAAAAElFTkSuQmCC", - "description": "Allows to browse events from the gateway.", + "alias": "gateway_configuration2", + "name": "Gateway configuration", + "image": "data:image/jpeg;base64,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ii3bMj5ytRKUXRfXI+nX7lP95c2MS6LR7nIvE14C9kW6GU4nLsXkYCIm5VnZTleH1fVnWyF/wX95ejZo6ShCqymG/tu8Elrxk1meelEtkETXy0kFCPJR7A2kGdGclcdgy1UpJ+5Qj2Tt8dxWPimMdaz1OQgGDgn7u6M7W56sYqWBxeHmuuY9s3ibzTRlJCXt9vfTRgsrPMoG5qCPa1Ys0Wtf78EanZWpf77hs3eInbO2sdGsG1WbBGGhm7ZVk2M1afGWc0ThYVu3XZNncbGv8c71GPYN6t6tv3kladrTLrNl3FvQLvBM6vKyFbsWT6Hta312UYwfUpSlOn7xZFFwkdBdrFxbBudowVg4RVq3ZK4jb46LkGhojJM9DmzaO51KVdHjYxR8nJqfvHTRo+bqNXxIqLSZ0j0lGjNdX46ySKaCREUDxMSd6WTP+8ctmrxBRq8TjItBiaNQXhYRcqBVTx7A6rVYy8NDOmabBwvHx61WlVlIyMVarMVFomKcsyRzhJFJBIiKH7xCLimjld2zUiopVRwserZp8RwqVGGhm7ZVk2/YQRqdlal/9Tp19m4I1OytSgyhymqUZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScGdH6V6eLj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/FsKXkVitufxzeHpSjg9KdBknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScJnMf7x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am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq5xJ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AXzHXy1t/wDd1/s/vv8A1rb/AO7r/Z/ff+tbf/d15AX3/rW3/wB3XkDfP+vbP/d15A3z96vWzG6VUVmysEqaT/LjJloPSgAgq2JL7yqSJ1U2otCqkqqqkZmS5IzJdZGS61Vdar5tS9GKwqdFNb0prelNb0prelNb0prelNb0prelNb0prelYSv4r5ualRf2dNDvSmt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6VhOvzpWCToprelNb0prelNb0prelNb0prelNb0prelNb0prelNb0prelBjHSq0uVTo8+r99N/Cmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp8+pejFYVOimt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp/xb0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXz6sU5upzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3Uuscfxz5lxqzTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFOb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qb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41LZkNo4oKbLguIioiZTI5wuvzXaGw+GjpNuvgBjkUVMiq9VX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NT48lG9DT5B0HNHSzjOiq4zjzXOJHcVtDQHngAsKqpnBLzaqv1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV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", + "description": "Allows to create or edit gateway configuration.", "descriptor": { "type": "latest", - "sizeX": 7.5, + "sizeX": 11, "sizeY": 8, "resources": [], - "templateHtml": "", - "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", - "controllerScript": "let types;\nlet eventsReg = \"eventsReg\";\n\nself.onInit = function() {\n \n self.ctx.datasourceTitleCells = [];\n self.ctx.valueCells = [];\n self.ctx.labelCells = [];\n\n if (self.ctx.datasources.length && self.ctx.datasources[0].type === 'entity') {\n getDatasourceKeys(self.ctx.datasources[0]);\n } else {\n processDatasources(self.ctx.datasources);\n }\n}\n\nself.onDataUpdated = function() {\n for (var i = 0; i < self.ctx.valueCells.length; i++) {\n var cellData = self.ctx.data[i];\n if (cellData && cellData.data && cellData.data.length > 0) {\n var tvPair = cellData.data[cellData.data.length -\n 1];\n var value = tvPair[1];\n var textValue;\n //toDo -> + IsNumber\n \n if (isNumber(value)) {\n var decimals = self.ctx.decimals;\n var units = self.ctx.units;\n if (cellData.dataKey.decimals || cellData.dataKey.decimals === 0) {\n decimals = cellData.dataKey.decimals;\n }\n if (cellData.dataKey.units) {\n units = cellData.dataKey.units;\n }\n txtValue = self.ctx.utils.formatValue(value, decimals, units, false);\n }\n else {\n txtValue = value;\n }\n self.ctx.valueCells[i].html(txtValue);\n }\n }\n \n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n}\n\nself.onResize = function() {\n var datasourceTitleFontSize = self.ctx.height/8;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n datasourceTitleFontSize = self.ctx.width/12;\n }\n datasourceTitleFontSize = Math.min(datasourceTitleFontSize, 20);\n for (var i = 0; i < self.ctx.datasourceTitleCells.length; i++) {\n self.ctx.datasourceTitleCells[i].css('font-size', datasourceTitleFontSize+'px');\n }\n var valueFontSize = self.ctx.height/9;\n var labelFontSize = self.ctx.height/9;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n valueFontSize = self.ctx.width/15;\n labelFontSize = self.ctx.width/15;\n }\n valueFontSize = Math.min(valueFontSize, 18);\n labelFontSize = Math.min(labelFontSize, 18);\n\n for (i = 0; i < self.ctx.valueCells; i++) {\n self.ctx.valueCells[i].css('font-size', valueFontSize+'px');\n self.ctx.valueCells[i].css('height', valueFontSize*2.5+'px');\n self.ctx.valueCells[i].css('padding', '0px ' + valueFontSize + 'px');\n self.ctx.labelCells[i].css('font-size', labelFontSize+'px');\n self.ctx.labelCells[i].css('height', labelFontSize*2.5+'px');\n self.ctx.labelCells[i].css('padding', '0px ' + labelFontSize + 'px');\n } \n}\n\nfunction processDatasources(datasources) {\n var i = 0;\n var tbDatasource = datasources[i];\n var datasourceId = 'tbDatasource' + i;\n self.ctx.$container.append(\n \"
\"\n );\n\n var datasourceContainer = $('#' + datasourceId,\n self.ctx.$container);\n\n datasourceContainer.append(\n \"
\" +\n tbDatasource.name + \"
\"\n );\n \n var datasourceTitleCell = $('.tbDatasource-title', datasourceContainer);\n self.ctx.datasourceTitleCells.push(datasourceTitleCell);\n \n var tableId = 'table' + i;\n datasourceContainer.append(\n \"
\"\n );\n var table = $('#' + tableId, self.ctx.$container);\n\n for (var a = 0; a < tbDatasource.dataKeys.length; a++) {\n var dataKey = tbDatasource.dataKeys[a];\n var labelCellId = 'labelCell' + a;\n var cellId = 'cell' + a;\n table.append(\"\" + dataKey.label +\n \"\");\n var labelCell = $('#' + labelCellId, table);\n self.ctx.labelCells.push(labelCell);\n var valueCell = $('#' + cellId, table);\n self.ctx.valueCells.push(valueCell);\n }\n self.onResize();\n}\n\nfunction getDatasourceKeys (datasource) {\n let entityService = self.ctx.$scope.$injector.get(self.ctx.servicesMap.get('entityService'));\n if (datasource.entityId && datasource.entityType) {\n entityService.getEntityKeys({entityType: datasource.entityType, id: datasource.entityId}, '', 'timeseries').subscribe(\n function(data){\n if (data.length) {\n subscribeForKeys (datasource, data);\n }\n });\n }\n}\n\nfunction subscribeForKeys (datasource, data) {\n let eventsRegVals = self.ctx.settings[eventsReg];\n if (eventsRegVals && eventsRegVals.length > 0) {\n var dataKeys = [];\n data.sort();\n data.forEach(dataValue => {eventsRegVals.forEach(event => {\n if (dataValue.toLowerCase().includes(event.toLowerCase())) {\n var dataKey = {\n type: 'timeseries',\n name: dataValue,\n label: dataValue,\n settings: {},\n _hash: Math.random()\n };\n dataKeys.push(dataKey);\n }\n })});\n\n if (dataKeys.length) {\n updateSubscription (datasource, dataKeys);\n }\n }\n}\n\nfunction updateSubscription (datasource, dataKeys) {\n var datasources = [\n {\n type: 'entity',\n name: datasource.aliasName,\n aliasName: datasource.aliasName,\n entityAliasId: datasource.entityAliasId,\n dataKeys: dataKeys\n }\n ];\n \n var subscriptionOptions = {\n datasources: datasources,\n useDashboardTimewindow: false,\n type: 'latest',\n callbacks: {\n onDataUpdated: (subscription) => {\n self.ctx.data = subscription.data;\n self.onDataUpdated();\n }\n }\n };\n \n processDatasources(datasources);\n self.ctx.subscriptionApi.createSubscription(subscriptionOptions, true).subscribe(\n (subscription) => {\n self.ctx.defaultSubscription = subscription;\n }\n );\n}\n\nself.onDestroy = function() {\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\t\n dataKeysOptional: true,\n singleEntity: true\n };\n}\n\n", - "settingsSchema": "", + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", - "settingsDirective": "tb-gateway-events-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Function Math.round\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.826503672916844,\"funcBody\":\"return Math.round(1000*Math.sin(time/5000));\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"eventsTitle\":\"Gateway Events Form\",\"eventsReg\":[]},\"title\":\"Gateway events\",\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}" + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" } }, { @@ -66,39 +84,103 @@ } }, { - "alias": "gateway_configuration2", - "name": "Gateway configuration", - "image": "data:image/jpeg;base64,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ii3bMj5ytRKUXRfXI+nX7lP95c2MS6LR7nIvE14C9kW6GU4nLsXkYCIm5VnZTleH1fVnWyF/wX95ejZo6ShCqymG/tu8Elrxk1meelEtkETXy0kFCPJR7A2kGdGclcdgy1UpJ+5Qj2Tt8dxWPimMdaz1OQgGDgn7u6M7W56sYqWBxeHmuuY9s3ibzTRlJCXt9vfTRgsrPMoG5qCPa1Ys0Wtf78EanZWpf77hs3eInbO2sdGsG1WbBGGhm7ZVk2M1afGWc0ThYVu3XZNncbGv8c71GPYN6t6tv3kladrTLrNl3FvQLvBM6vKyFbsWT6Hta312UYwfUpSlOn7xZFFwkdBdrFxbBudowVg4RVq3ZK4jb46LkGhojJM9DmzaO51KVdHjYxR8nJqfvHTRo+bqNXxIqLSZ0j0lGjNdX46ySKaCREUDxMSd6WTP+8ctmrxBRq8TjItBiaNQXhYRcqBVTx7A6rVYy8NDOmabBwvHx61WlVlIyMVarMVFomKcsyRzhJFJBIiKH7xCLimjld2zUiopVRwserZp8RwqVGGhm7ZVk2/YQRqdlal/9Tp19m4I1OytSgyhymqUZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScGdH6V6eLj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/FsKXkVitufxzeHpSjg9KdBknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScJnMf7x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am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq5xJ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AXzHXy1t/wDd1/s/vv8A1rb/AO7r/Z/ff+tbf/d15AX3/rW3/wB3XkDfP+vbP/d15A3z96vWzG6VUVmysEqaT/LjJloPSgAgq2JL7yqSJ1U2otCqkqqqkZmS5IzJdZGS61Vdar5tS9GKwqdFNb0prelNb0prelNb0prelNb0prelNb0prelYSv4r5ualRf2dNDvSmt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6VhOvzpWCToprelNb0prelNb0prelNb0prelNb0prelNb0prelNb0prelBjHSq0uVTo8+r99N/Cmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp8+pejFYVOimt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp/xb0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXz6sU5upzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3Uuscfxz5lxqzTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFOb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qb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41LZkNo4oKbLguIioiZTI5wuvzXaGw+GjpNuvgBjkUVMiq9VX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NT48lG9DT5B0HNHSzjOiq4zjzXOJHcVtDQHngAsKqpnBLzaqv1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV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", - "description": "Allows to create or edit gateway configuration.", + "alias": "gateway_connector", + "name": "Gateway connector", + "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCALuBnEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD91vD/AIP0vWvD1hdSWxZrm3jlJ81xksoPY+9WT8NtGP8Ay6N/3/k/+Kp/w3bd8PNBPrp1uf8AyEtbVAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUf8K10X/n0b/v8Ayf8AxVbtFAGF/wAK10X/AJ9G/wC/8n/xVH/CtdF/59G/7/yf/FVu0UAYX/CtdF/59G/7/wAn/wAVR/wrXRf+fRv+/wDJ/wDFVu0UAYX/AArXRf8An0b/AL/yf/FUf8K10X/n0b/v/J/8VW7RQBhf8K10X/n0b/v/ACf/ABVH/CtdF/59G/7/AMn/AMVW7RQBhf8ACtdF/wCfRv8Av/J/8VR/wrXRf+fRv+/8n/xVbtFAGF/wrXRf+fRv+/8AJ/8AFUq/DnR0PFo3/f8Ak/8Aiq3KKAMf/hAtJ/59T/3+f/GitiigDE+Gv/JOtA/7Btv/AOilrbrE+Gv/ACTrQP8AsG2//opa26ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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uZ/Hur2B0b+2FLlVlNswDI7HCiPBYkDgk18pfsffEnw9o3xL/b98F3muaTaeL73xLq2q22iTXaR39zaDSUBuI4SQ7xg4yyggZGTyK8diktPDv/BLz/gn54o8WQ+b8KvCviWxvPGEk0RlsrOMrMltPcrjHlJMwyzfKpIJoA/Sb9k3/gon8Ff25YdTb4V+P9J8WS6N817bRxT2t3brkgOYJ0jl2EjAcLtPY157qf8AwW//AGVdEudMhvPjHoVpNq19Pp8MU1leo8c0MrQyecphzAgdGAkl2I2MqxHNeM+Kfij4R/aU/wCC3Pwg1n4PeIPD3iyPwt4H1keN9W8P3UV9apaTeWLKCeeFihYybmVScjOcenivwU8N6ev/AAbh/tETiws/Ou77xdPPJ5C7ppI7+UI7HGSyhVAJ5G0Y6UAfrvZXsWo2cVxbyxzwToJIpI2DJIpGQwI4II71LXlf7DN5JqH7F/wnmmcySy+EdLZ2PVj9ljr1SgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDE+Gv/ACTrQP8AsG2//opa26xPhr/yTrQP+wbb/wDopa26ACuf+Jfwm8K/Gfwy+i+MPDPh/wAWaNKdz2Gs6dDf2zn1Mcqsp/KugooAxPh/8NvDvwm8MwaL4W0DRfDWjW3+psNKsYrO2i/3Y41VR+ArGP7N/wAOz8UP+E3/AOEC8F/8Jp/0H/7Etv7U9P8Aj52eb/49XaUUAYd18M/Dd98QLXxZN4f0SbxTY2j2FtrL2MTa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iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooJwKACioTqEAP+ui/77FH9o2//PeH/vsUATUVD/aNv/z3h/77FKt/A7YE0RJ6AOKAJaKRmCLkkADqTUX9owf894f++xQBNRUP9o2//PeH/vsUf2jb/wDPeH/vsUATUVHFdxTthJEc+isDT2cIpJ4AGSfSgBaKxr7xMQ5WBRj+83f6Cqq+IboNneD7FRQB0dFZumeIFvHCSAI54BHRq0qACiiigDE+Gv8AyTrQP+wbb/8Aopa8+/Yo/wCSOaz/ANj74z/9SjVa9B+Gv/JOtA/7Btv/AOilrz79ij/kjms/9j74z/8AUo1Wq+y/67nFP/e4f4Z/nA9coooqTtCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA8j/AGb/APksnx//AOx9tf8A1F9Ar1yvI/2b/wDksnx//wCx9tf/AFF9Ar1yrnv935HHgf4T/wAU/wD0uRyfxK+Nnh34TXFjBrFxfte6nvNpY6dpl1qd7OqYMjrb20ckpRdy7n27V3LkjIrX8EeN9K+JHhWy1vQ76HUdL1BPMguIs4cAkEEHBVgwKlSAVIIIBBFeXfEG7n+FH7UUfjTUNK1/U/DuqeGF0QT6RpNxqs2n3MV082Hgt43mCSrIPnClQYQG25XPn3jfw7Y+KPEfhXWvHXwo1EeALqx1aQeHrTRZNZFnqM12jw3l1ZW8RYTzQeY28xv5MkrhnViWOad4p9Xf5W5rJ+cklb1Xe52tWbXp87pXt6NtP0fofU9FfEGkfsw6r4v8EeNpfG3hDUdW1yx+GtnFoTX0D3k9rdJLqzwRxSchr2GNrVS6EyKzcN8/zavj74BXnizQfix4ovfCWpX/AI0t4tDuvD19JYSvexXMVjaF5LQ4yJBKrBzHydm1sgYFpXlJPp+ra+/TX5akt2su/wDlF/8At34PQ+yqp+IdetPCugX2p38vkWOnW8l1cy7S3lxopZmwAScAE4AJr5A/4U94pvv2qb291HzbHxAPGQ1HTtXj8DXt9cvpQK7YBrC3a2sNqYN0b27IGBLHy3dlZjwX8CtD8VfCW90DVvhp4guvic/h7UofEuqXeivHZ6tfFSVae6mAiv8AfcBJIDG0vlFQf3WMVjKT9j7Rb2vb5X/DZ7WZrCKdZU3tdK/za/4K7pn2BoWt23iXRLPUbKTzrPUIEubeTaV8yN1DKcEAjII4IzVuvjO0+HXhuDSPCLeJ/hl4j1bwRH4FhsdH0i28JXUh0nWRLKbwmzWIPa3EuYil06KvyORKu7Ldx+y78DdVtvjQviDx9or3nirRfBXh6zh1a8jM3l3gjvUu/KmOVaXDKsjKScP1w/PTOCU5KOybX4yX/tqfpJPtfnhJuCb3sn9/L/m16prue/eOfHOl/Dbwvc6zrV19i020KCaby3k2b3WNflQFjlmUcDvXLa5+094J8N+MZtEvNVuY7m1uo7K5uV0y7k06yuJNuyGa9WI20Mh3phJJFbLoMfMM8D+1L411Xx/4b8RfDu28H+KjrF/fafFpd3Dps0+m30BmglkuHu1TyLcR7ZQySur/ALsFQ29RXFfE6x1fw/4w8VR+HPD3jiy17WdcWSXwzLoza14S8WRtIi/a5bhoDFZtJENzgTxFXjyyScF8oe9NLo/+B+j13a7aO2ktIvuv+D/l5Lz1V/cfF37UngbwL4rudH1PWZobnT3ijv549Oup7HS2kwY1urqONoLYsCpAmkQ4ZT0INbXhz4yeGfFnxD8ReE9P1aG48ReE1gfVbHY6yWqzxiSJvmADqykHKEgZwcHivB9WfVPh94C+LngK48IeKdZ1zxnqerXOjS2ekS3On6tHqCnyjLdqnkW/lbvLcXDoQsWRuBXPPeHP2d/Ffgr4jePfGOjaddy+MvCNxpS6fK8bxReLLJNGs4r2yWRhh1kaI7G5CTxITjDAxzP2bm/5U/m7XX/brfvdeyurMknz8ke8l9zVn/28r26edj6k8LfEnQ/GngPTvE2n6hFJoWrW8d1a3citAsscmNhw4VgTkYBAPPSrnhnxTp/jLRob/TLqK8tJ0WRHTqAyhwGB5U7WU4IBGRkV5p+yr4FnuP2LfBHh7XbLUtLnk8N29nfWkyPa3VuTEA6MDhkYcg9CPY16L4I8Faf8PPDNto+kw/ZtNsty28A+7AhYsI19FXO1R2UAdq3qRUZyj2egk7pNGtRRRWYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKp66xXSpcew/UVcqnr/APyCZfw/mKAPJ/ib+0B4Z+D95FDr8usWvneWElg0O+u4GaR9iJ5sMLpvZuAm7dkjjkVo+FvifY+Mr+2hsrHxAsV3bSXSXF3o9zZRKEkEZRvORGWQk5CkAsoJHFcp+1joF94j+G2mQafZXd/PH4k0ido7eFpWWNL6FnchQTtVQST0ABJrk/jh4L8T63+0RqF34etb6KeX4b6lYWWoJGywxXr3EZiTzfurJxkDOeM9qjmai211l+EOZfe9CuW7su0fxlyv8NT1iX4mWEXxXi8HmK7/ALTm0p9YWUKvkCFZViKk7t2/cw424x37V0VfG/w1/Z90vx74ludI03wR4i8K6Zqfw8l0rULjUtKntUOpmaJtxaQAPKGAfePv7Mgnbx6j+wqureNPCutePvEVv9n1vxTPDZlM52Q2MYthj/emW4f/AIGK25enZP5+81p8rP01Ib697fL3U9fx+asfSGsyE6DbnP3tuff5Sa4Lwl8XfDvjrxfr+g6VqSXWr+F5Y4dUtvKkRrVnBK8soDAgHlSR713msf8AIAtf+Af+gmvirxT8P/Hfgv4k+OvFXhTRdUbVPEXiO68PHNvIA1pc2lr5F8OMGOCdGJccAO/PBrK75+Vdn990kvm3+vQrTlv5r7rNt/JL9D6G8JftC+GPiFp0l34duL7X7e31n+wrh7GwmcW1xxuL5UfulBBMgynI5rt6+OvC3wK1bwFoEWiWGg619h0n4u2E9s32GT57CG3hj+1ZC8x/KcyfdznJq/4A+Cl/4Y8U+A/ENt4a1W01x/Hmsrqd59klEq6dK94U8wkfLA37srnC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/sfbX/1F9Ar1yvI/2b/+SyfH/wD7H21/9RfQK9cq57/d+Rx4H+E/8U//AEuQUUUVB2HmXhv/AFN//wBhXUP/AEsmrRrO8N/6m/8A+wrqH/pZNWjQAUUUUAFbPheyi1Kyv7edBJBOgjkRujqQwIP4Gsat7wT/AMvP/AP/AGagDzs/scWOp/HyLx9rfjbx34ik0/TptK0jRL64s00rRrecwG5WJYbaOaVpjbxbnuZZnAVlQorurexUUULRJL+uoPV3CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/wd/wAjF4r/AOwqn/pDaV0Fc/4O/wCRi8V/9hVP/SG0oA6CiiigDE+Gv/JOtA/7Btv/AOilrz79ij/kjms/9j74z/8AUo1WvQfhr/yTrQP+wbb/APopa8+/Yo/5I5rP/Y++M/8A1KNVqvsv+u5xT/3uH+Gf5wPXKQ9KWkPSpO0r6T/x5f8AA3/9DNWaraT/AMeX/A3/APQzT72/jsIwz554AA5NAE1FZ3/CSwf3ZfyH+NH/AAksH92X8h/jTsyeeJo0Vnf8JLB/dl/If40f8JLB/dl/If40WYc8TQKAnoPypazv+Elg/uy/kP8AGj/hJYP7sv5D/GizDniaNFZ3/CSwf3ZfyH+NH/CSwf3ZfyH+NFmHPE0aKzv+Elg/uy/kP8aP+Elg/uy/kP8AGizDniaNFZ3/AAksH92X8h/jR/wksH92X8h/jRZhzxNGis7/AISWD+7L+Q/xo/4SWD+7L+Q/xosw54mjRWd/wksH92X8h/jR/wAJLB/dl/If40WYc8TRorO/4SWD+7L+Q/xo/wCElg/uy/kP8aLMOeJo0Vnf8JLB/dl/If40f8JLB/dl/If40WYc8TRorO/4SWD+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40/tW0m0+/sNOuo54jbwBzdfaZRBErLJEiIXciR8DP2JRRYLni/wy8J+LPhFcfG3W4/DUmsXmteJZNZ0HTo7+3hfWIxp1nEqiRm2xFpYXX97txjJGCCcjxJdz6z+3VaW9n9gTV/+FZ3p+zXR86K3le9g2CZUOSm4EHBG4K2DXv8AWNo3w78P+HPFOq65p+haPYa3rvl/2lqFvZRxXWoeWNqedKqhpNo4G4nA6UCufL/7MfwR8eeC/jBoP2DwNrvwr8M2drcxeKtPfxYmqeG9WkaLEX9j2f2iZrRBKS+fLtcICpjcnI9j/Y0+Gev/AAS+CUHgvXrW0j/4RW8uLDTby3uPNXVbHf5kNwwwGjkIkKOjc742IJVlJ9WoosNu4Vt+Gv8Ajxb/AK6H+QrErb8Nf8eLf9dD/IUPYqnuaNVbP/j+u/8AfH/oC1aqrZ/8f13/AL4/9AWoOgtUUUUAFFFFABRRRQAUUUUAeR/s3/8AJZPj/wD9j7a/+ovoFeuV5H+zf/yWT4//APY+2v8A6i+gV65Vz3+78jjwP8J/4p/+lyCiiioOw8y8N/6m/wD+wrqH/pZNWjWd4b/1N/8A9hXUP/SyatGgAooooAK3vBP/AC8/8A/9mrBre8E/8vP/AAD/ANmoA3qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/wAHf8jF4r/7Cqf+kNpXQVz/AIO/5GLxX/2FU/8ASG0oA6CiiigDE+Gv/JOtA/7Btv8A+ilrz79ij/kjms/9j74z/wDUo1WvQfhr/wAk60D/ALBtv/6KWvPv2KP+SOaz/wBj74z/APUo1Wq+y/67nFP/AHuH+Gf5wPXKQ9KWkPSpO0r6T/x5f8Df/wBDNYHxIj8SyfY/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K7CiiimIKKKKACiiigAooooAKKKKACiiigAooooAK1vC/wDy3/4D/Wsmtbwv/wAt/wDgP9aT2Lp/Ea1YfiX/AI/l/wCuY/ma3Kw/Ev8Ax/L/ANcx/M1KNqnwmfXkv7Qf7Oes/FH4heEPGHhbxXaeF/E3g9bu3t31HRv7XsZoLkRiUGDzoWWUeUuyVZAV+YEMGIr1qirOc+drT9hLUYPgRfeF5fiDeXniT/hMn8b6b4jm0eHfaXpuftCLLbqyxyoCWQhTHuRuNrDdWn4S/ZB1yfUfiXqHjbx0nibUPiboFtoN2bDRF0uDTUiS5TNuhmlbaRckhZHdgwbLsCFX3ailYLs8Guv2TvFp8J+A721+IOnWnxI+H1nNptnr48NltO1CzlVEaC5sPtO5lIihYmO4jbzIwwKqSldt+z18Bz8EtM124v8AWZfEnifxbqbaxrmqvbLard3BjSJRHCpYRRJFHGiJuYgLyzMST6HRQFwooopiCiiigAooooAKKKKACiiigAooooAKKKKACtvw1/x4t/10P8hWJW34a/48W/66H+QpPY0p7mjVWz/4/rv/AHx/6AtWqq2f/H9d/wC+P/QFqDoLVFFFABRRRQAUUUUAFFFFAHkf7N//ACWT4/8A/Y+2v/qL6BXrleR/s3/8lk+P/wD2Ptr/AOovoFeuVc9/u/I48D/Cf+Kf/pcgoooqDsPMvDf+pv8A/sK6h/6WTVo1neG/9Tf/APYV1D/0smrRoAKKKKACt7wT/wAvP/AP/Zqwa3vBP/Lz/wAA/wDZqAN6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuf8AB3/IxeK/+wqn/pDaV0Fc/wCDv+Ri8V/9hVP/AEhtKAOgooooAxPhr/yT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HqP+FE2H/Qa8Zf8AhS3/AP8AHqAO4qnpsqz3V2yEMvm7cj1AAI/MGuVT4FacG+bV/F0i91k8R3zK31Blwa63SdJg0PT4rW1jWKCFQqKo4AoAs0UUUAFFFFABRRRQAUUUUAeR/s3/APJZPj//ANj7a/8AqL6BXrleR/s3/wDJZPj/AP8AY+2v/qL6BXrlXPf7vyOPA/wn/in/AOlyCiiioOw8y8N/6m//AOwrqH/pZNWjWd4b/wBTf/8AYV1D/wBLJq0aACiiigAre8E/8vP/AAD/ANmrBre8E/8ALz/wD/2agDeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArn/B3/IxeK/8AsKp/6Q2ldBXP+Dv+Ri8V/wDYVT/0htKAOgooooAxPhr/AMk60D/sG2//AKKWvPv2KP8Akjms/wDY++M//Uo1WvQfhr/yTrQP+wbb/wDopa8+/Yo/5I5rP/Y++M//AFKNVqvsv+u5xT/3uH+Gf5wPXKKKKk7QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPI/wBm/wD5LJ8f/wDsfbX/ANRfQK9cryP9m/8A5LJ8f/8AsfbX/wBRfQK9cq57/d+Rx4H+E/8AFP8A9LkFFFFQdh5l4b/1N/8A9hXUP/SyatGs7w3/AKm//wCwrqH/AKWTVo0AFFFFABW94J/5ef8AgH/s1YNb3gn/AJef+Af+zUAb1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA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9Hsl3D+0q/8Az7X/AIE//kT6S+1J/eFH2pP7wr5t/wCGS/DP/Qc+K/8A4c/xL/8AJ9H/AAyX4Z/6DnxX/wDDn+Jf/k+j2S7h/aVf/n2v/An/APIn0l9qT+8KPtSf3hXzb/wyX4Z/6DnxX/8ADn+Jf/k+j/hkvwz/ANBz4r/+HP8AEv8A8n0eyXcP7Sr/APPtf+BP/wCRPpL7Un94UC4Q/wAQr5t/4ZL8M/8AQc+K/wD4c/xL/wDJ9Oi/ZS8PW0gkh8QfFaKVDuRz8SvEMoU/7kl6yN9GUj2o9ku4f2lX/wCfa/8AAn/8ifSYORS15X+yt4/1TxTpPi3QdavH1TUvAWvnQZNReNY5NRjNlaXsMsioAnm+TeRK5UKrOjsqIGCL6pWMk07M9TD141qaqR6/018mFFFFI2PMvDf+pv8A/sK6h/6WTVo1neG/9Tf/APYV1D/0smrRoAKKKKACt7wT/wAvP/AP/Zqwa3vBP/Lz/wAA/wDZqAN6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuf8AB3/IxeK/+wqn/pDaV0Fc/wCDv+Ri8V/9hVP/AEhtKAOgooooAxPhr/yTrQP+wbb/APopa8I/ZW/5J74h/wCx98Y/+pLqde7/AA1/5J1oH/YNt/8A0UteEfsrf8k98Q/9j74x/wDUl1Ot6WzPFzL+PT9JfnE9KooorU5QooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOZ/ZB/5KH8d/8Asfbf/wBRrQq9urxH9kH/AJKH8d/+x9t//Ua0Kvbq56vxHp5V/u69Zf8ApTCiiisz0TzLw3/qb/8A7Cuof+lk1aNZ3hv/AFN//wBhXUP/AEsmrRoAKKKKACt7wT/y8/8AAP8A2asGt7wT/wAvP/AP/ZqAN6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuf8Hf8jF4r/wCwqn/pDaV0Fc/4O/5GLxX/ANhVP/SG0oA6CiiigDE+Gv8AyTrQP+wbb/8Aopa8I/ZW/wCSe+If+x98Y/8AqS6nXu/w1/5J1oH/AGDbf/0UteEfsrf8k98Q/wDY++Mf/Ul1Ot6WzPFzL+PT9JfnE9KooorU5Tg9f+PWm+D/AIo6romtzaHoukaTocOsz6te67aQ+WHnaHa9uzCWNAQuJmAjYttB3AitTwv8b/BfjjT9Xu9F8XeF9YtfD8jRapNZarBcR6a6jLLOyMREQASQ2MV8gf8ABRH4N+JfiF8Q/i+dN8K67rllrHwrsdLtzbaZLcxXs41cu9um1SHcRncUGTt5IxTP2gfg14j8HfFb4vXXgr4aw6nY6l8N9CtIrT/hH1n0++mhv7jzVWEqIbieGBt6wnJOEG0ggGbm3s01/XkfYPg744+CviL4MufEfh/xf4X13w9ZFxcapp+qwXVlblBl98yMUXaOuTx3rzj42f8ABRn4PfA34S6T43vfHHhvWPDut6xbaJZ3ek6zZXEc00s6RO6uZlRo4A/mTEMTHGrMQcYr47tvgh438c2nxjubLQfin4i0XUdQ8H655Hinw1baHeeJrKznLXttHbwW9tEWEce3ynjErBVV8h1J9D/aP8IW3xX+AHirxR4E+DHjbw6D448K61eRTaLcW2peIINPv7SW4uItKI81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OPm+/kyZOMEOBtBGa7mqEFbfhr/jxb/rof5CsStvw1/x4t/10P8AIUnsXT3NGvP/ABF/yN+p/wC/H/6KSvQK8/8AEX/I36n/AL8f/opKdLcyx38P5leiivGf2gv20tE+CHxW8H+ALDSdV8aePfGN0gg0HRzGbiysdwE1/OzsqRQRrk5dhvI2juRueSk3sezUV5v+1V+0K/7LvwhufGTeE/EPi3T9MniOpw6MiSXFhZlgJrsxlg0ixJliqBmOOgGSOq+GHxP0D4z+ANK8U+FtVs9b8P63brdWV9ayb4p426EHsexB5BBBAIoCztc3qKKKYgooooA5n9kH/kofx3/7H23/APUa0Kvbq8R/ZB/5KH8d/wDsfbf/ANRrQq9urnq/EenlX+7r1l/6UwooorM9E8y8N/6m/wD+wrqH/pZNWjWd4b/1N/8A9hXUP/SyatGgAooooAK3vBP/AC8/8A/9mrBre8E/8vP/AAD/ANmoA3qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/wAHf8jF4r/7Cqf+kNpXQVz/AIO/5GLxX/2FU/8ASG0oA6CiiigDE+Gv/JOtA/7Btv8A+ilrwj9lb/knviH/ALH3xj/6kup17v8ADX/knWgf9g23/wDRS14R+yt/yT3xD/2PvjH/ANSXU63pbM8XMv49P0l+cT0qkPSlpD0rU5Trvh3/AMijb/78v/o16l8Uf8sP+Bf0qL4d/wDIo2/+/L/6NepfFH/LD/gX9K5ep7sf4K9EZNFFed/tA/E+T4a3XgWOK/uLA+I/FVnox8rTkvBcCVZCYm3Sx+Up2f6xd7LgYRsmqMz0Sivn3xf/AMFFfDfhHWPGUX/CG/EbUdL+Her/ANk+JtZtNMgN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h74awSaLtl0D4t6r4nv1+2QHyNOmm1Jop/v/ADZFxD8i5cb+VGDjR+PP7JXiP42w/H7TUjSwi8cwaK+h3T37W6XU1nEGZGeBvOhHmIqFwAw3blzivp6iiwXZ8d/DD9jmTx9J4nOq+BPiX4Nv9Q8KX/hpNW8X/FG88VSo12EEgtIGvbpBASisZHMMp2KPL5OPVfgH4o+LLN4V8M638PbXwtpvhyyFpresXOq295BqpihEcf8AZyQSmUKzgMzXUcRVQVCMTuHt9FFgufJOmfs5eP8AV/2Ytc8Hv4di03xD4R8eSeKtBlvNRhbTvEyLrD6lEoaJnkhVkYRN50alX5CsoDHoD4D8ffH74qan411zwTd+A7fR/Bep+GtJ0nUNRsru/wBTurxo2klZraWWGOFfs8apmXcxkYsqYAP0tRRYOY8y+DNl4m+F3wg+Ffhubw1LdTQ6Va6brky38CjQzFZjLsNx84GVBHiIn7277ozUvwC+G+rfD7xZ8UrnU4oEt/E/jBtY01o5Q5ltm02whyw/hYSwSrg/3QehFekUUCCtvw1/x4t/10P8hWJW34a/48W/66H+QoexdPc0a8/8Rf8AI36n/vx/+ikr0CvP/EX/ACN+p/78f/opKdLcyx38P5leiiiug8gKKKKACiiigAooooA5n9kH/kofx3/7H23/APUa0Kvbq8R/ZB/5KH8d/wDsfbf/ANRrQq9urnq/EenlX+7r1l/6UwooorM9E8y8N/6m/wD+wrqH/pZNWjWd4b/1N/8A9hXUP/SyatGgAooooAK3vBP/AC8/8A/9mrBre8E/8vP/AAD/ANmoA3qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/wAHf8jF4r/7Cqf+kNpX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gDJ56VYpkhRRRQAUUUUAFFFFABW34a/48W/66H+QrErb8Nf8eLf9dD/IUnsaU9zRrz/xF/yN+p/78f8A6KSvQK8/8Rf8jfqf+/H/AOikp0tzLHfw/mV6KKK6DyAooooAKKKKACiiigDmf2Qf+Sh/Hf8A7H23/wDUa0Kvbq8R/ZB/5KH8d/8Asfbf/wBRrQq9urnq/EenlX+7r1l/6UwooorM9E8y8N/6m/8A+wrqH/pZNWjWd4b/ANTf/wDYV1D/ANLJq0aACiiigAre8E/8vP8AwD/2asGt7wT/AMvP/AP/AGagDeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArn/B3/ACMXiv8A7Cqf+kNpXQVz/g7/AJGLxX/2FU/9IbSgDoKKKKAMT4a/8k60D/sG2/8A6KWvCP2Vv+Se+If+x98Y/wDqS6nXu/w1/wCSdaB/2Dbf/wBFLXhH7K3/ACT3xD/2PvjH/wBSXU63pbM8XMv49P0l+cT0qkPSlpD0rU5Trvh3/wAijb/78v8A6NepfFH/ACw/4F/Sovh3/wAijb/78v8A6NepfFH/ACw/4F/SuXqe7H+CvRGTRRXlX7VHxb8U/Cyy8FW/hC10G51XxZ4nttCb+1/N8iCKWKZ2kHlkNuXywQOjYK/LnctGZ6rRXyf/AML9+Psuu/Evw1GfhH/bPwtt4dTm1NtM1D7Lr9vPbtPHAlr9p3WkgEbq0pnnGdpEfJA6YftReNPjXqHw40j4cWvhrRtQ8YeFI/Gep3/iC0nv7bTbR/KVIEhhlgaSV5JGG4yKFWMkqxIWlcdj6Kor4m+LHx1+M/xS/Zn0HWdN1zwb4H8R2nxTTwzqAtbC+vre4ih1wWcIVlu7dyjBQZlbiVWZ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0j/5Br0Sii7DlXY87/4UTqn/AEUrxz/4D6R/8g0f8KJ1T/opXjn/AMB9I/8AkGvRKKLsOVdjzv8A4UTqn/RSvHP/AID6R/8AINdV4G8J3Hg7SZLa41vVdfd5jKLjUEtllQEKNgEEUSbRjPKk5Y84wBtUUgslsFef+Iv+Rv1P/fj/APRSV6BXn/iL/kb9T/34/wD0UlaUtzjx38P5leiiiug8gKKKKACiiigAooooA5n9kH/kofx3/wCx9t//AFGtCr26vEf2Qf8Akofx3/7H23/9RrQq9urnq/EenlX+7r1l/wClMKKKKzPRPMvDf+pv/wDsK6h/6WTVo1neG/8AU3//AGFdQ/8ASyatGgAooooAK3vBP/Lz/wAA/wDZqwa3vBP/AC8/8A/9moA3qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK5/wd/yMXiv/ALCqf+kNpXQVz/g7/kYvFf8A2FU/9IbSgDoKKKKAMT4a/wDJOtA/7Btv/wCilrwj9lb/AJJ74h/7H3xj/wCpLqde7/DX/knWgf8AYNt//RS14R+yt/yT3xD/ANj74x/9SXU63pbM8XMv49P0l+cT0qkPSlorU5TqvhvcJN4WRFYM0M0qSAfwkuWwfwYH8a3q8a174f2uuX32lbrVtOuCArSadqM9k8gHQMYnUtjnr61Q/wCFUL/0Mnjn/wAKjUP/AI9WDpu56dPGxjFRaPdKK8L/AOFUL/0Mnjn/AMKjUP8A49R/wqhf+hk8c/8AhUah/wDHqPZMv6/Dse6UV4X/AMKoX/oZPHP/AIVGof8Ax6j/AIVQv/QyeOf/AAqNQ/8Aj1HsmH1+HY90orwv/hVC/wDQyeOf/Co1D/49R/wqhf8AoZPHP/hU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/eFA1GI/xD86/krpVYq2RwRyCO1H9l/3vw/4If8AEXP+oT/yp/8AaH9bKSCRcjpTq+DP+DdX4o698TP2CNQj13U7zVP+Ec8V3ek2D3MpleG2FrZzLGGPO1XnkwOwIA4AFfedeZVg4TcH0P1bKcwjj8HTxkVZTV7dgoooqD0DzLw3/qb/AP7Cuof+lk1aNZ3hv/U3/wD2FdQ/9LJq0aACiiigAre8E/8ALz/wD/2asGt7wT/y8/8AAP8A2agDeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArn/AAd/yMXiv/sKp/6Q2ldBXP8Ag7/kYvFf/YVT/wBIbSgDoKKKKAMT4a/8k60D/sG2/wD6KWv5mv2/v+T7/jX/ANj7rv8A6cJ6/pl+Gv8AyTrQP+wbb/8Aopa/ma/b+/5Pv+Nf/Y+67/6cJ69PLPjZ+TeLP+6UP8T/ACPI6KKK9k/DAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoor0n9kFfBS/tMeDJ/iLq40TwVY6nFearcm1lucxRHzPL8uJHdt7KE4Xox5HWk3ZXNaFP2lSNO6V2ld6JX6t9j1T9sP/gmTr37If7O/gLx7e67Fq7eKVji1nTUsvKk8NXUtulxFbyOJHDlo2PJCYIHBzmu0/Ze/4JEeJvGfwy8X+MPido2v+GNBsvBlx4k8Py2upWST3cqrviE9ufMmSJlyfmSMnHDV6b8WP+Cmnwk/a7+Hfx48HeI9Ct/AUfiwf2voWtm71LURqupWhVLPdDscWu6GNFIRVTGQffsdW/bv+A3ijxD46+JR+Jd1Z6944+Fg8JL4UuPD180unXqQ7dn2lIzCUZhgYOMkkkCuH2lbls1r6H6B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", + "description": "Allows to create or edit gateway connectors.", "descriptor": { "type": "latest", "sizeX": 11, "sizeY": 8, "resources": [], - "templateHtml": "", + "templateHtml": "", "templateCss": "", "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway connector\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" } }, { - "alias": "gateway_connector", - "name": "Gateway connector", + "alias": "gateway_logs", + "name": "Gateway Logs", "image": null, - "description": "Allows to create or edit gateway connectors.", + "description": null, "descriptor": { - "type": "latest", - "sizeX": 11, - "sizeY": 8, + "type": "timeseries", + "sizeX": 7.5, + "sizeY": 3, "resources": [], - "templateHtml": "", - "templateCss": "", - "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "templateHtml": "\n \n", + "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", + "controllerScript": "self.onInit = function() {\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway connector\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + "settingsDirective": "tb-gateway-logs-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"entityAliasId\":null,\"filterId\":null,\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":0,\"realtime\":{\"realtimeType\":0,\"timewindowMs\":86400000,\"quickInterval\":\"CURRENT_DAY\",\"interval\":300000},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway Logs\",\"showTitleIcon\":false,\"dropShadow\":false,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false,\"useDashboardTimewindow\":false,\"displayTimewindow\":true}" + } + }, + { + "alias": "gateway_statistics", + "name": "Gateway statistics", + "image": null, + "description": null, + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } + }, + { + "alias": "gateway_general_statistics", + "name": "Gateway General Statistics", + "image": "data:image/png;base64,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", + "description": "Displays changes to timeseries data over time. For example, temperature or humidity readings.", + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources[0]) {\n let connecotrsTs = [];\n const colors = ['blue', 'green', 'red', 'amber',\n 'blue-grey', 'purple', 'light-green',\n 'indigo', 'pink', 'yellow',\n 'light-blue', 'orange', 'deep-purple',\n 'lime', 'teal', 'brown', 'cyan',\n 'deep-orange', 'grey'\n ];\n self.ctx.attributeService\n .getEntityTimeseriesLatest(self.ctx\n .datasources[0].entity.id).subscribe(\n data => {\n connectorsTs = Object.keys(data)\n .filter(el => el.includes(\n 'ConnectorEventsProduced'\n ) || el.includes(\n 'ConnectorEventsSent'))\n if (connectorsTs.length) {\n self.ctx.defaultSubscription\n .unsubscribe();\n let defaultKeysAmount = self.ctx\n .data.length;\n connectorsTs.forEach(\n (connector, index) => {\n self.ctx\n .defaultSubscription\n .options\n .datasources[0]\n .dataKeys.push({\n name: connector,\n type: 'timeseries',\n settings: {},\n color: colors[\n (index +\n defaultKeysAmount\n ) %\n colors\n .length\n ]\n })\n })\n\n }\n self.ctx.defaultSubscription\n .updateDataSubscriptions();\n initChart();\n self.ctx.defaultSubscription.options\n .callbacks.dataLoading =\n () => {};\n self.ctx.defaultSubscription\n .callbacks.onDataUpdated = self\n .onDataUpdated;\n self.ctx.defaultSubscription\n .callbacks.timeWindowUpdated = (\n subscription, timeWindow\n ) => {\n self.ctx.defaultSubscription\n .options\n .timeWindowConfig =\n timeWindow;\n self.ctx.defaultSubscription\n .updateTimewindowConfig(\n timeWindow);\n self.ctx.defaultSubscription\n .update();\n self.onDataUpdated();\n }\n }, err => {\n self.ctx.flot = new TbFlot(self\n .ctx);\n })\n } else {\n self.ctx.flot = new TbFlot(self.ctx);\n }\n\n function initChart() {\n if (self.ctx.defaultSubscription.data.length &&\n !self.flot) {\n self.ctx.flot = new TbFlot(self.ctx);\n self.ctx.defaultSubscription\n .onTimewindowChangeFunction =\n timeWindow => {\n self.ctx.defaultSubscription\n .options\n .timeWindowConfig =\n timeWindow;\n self.ctx.defaultSubscription\n .updateTimewindowConfig(\n timeWindow);\n self.ctx.defaultSubscription\n .update();\n self.onDataUpdated();\n self.ctx.detectChanges();\n return timeWindow;\n }\n } else setTimeout(initChart, 500);\n }\n}\n\nself.onDataUpdated = function() {\n if (self.ctx.flot && self.ctx.defaultSubscription\n .data.length) {\n self.ctx.flot.update();\n }\n}\n\nself.onLatestDataUpdated = function() {\n if (self.ctx.flot) self.ctx.flot.latestDataUpdate();\n}\n\nself.onResize = function() {\n if (self.ctx.flot) self.ctx.flot.resize();\n}\n\nself.onEditModeChanged = function() {\n if (self.ctx.flot) self.ctx.flot.checkMouseEvents();\n}\n\nself.onDestroy = function() {\n if (self.ctx.flot) self.ctx.flot.destroy();\n}\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway General Statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } + }, + { + "alias": "service_rpc", + "name": "Service RPC", + "image": null, + "description": null, + "descriptor": { + "type": "rpc", + "sizeX": 8.5, + "sizeY": 5.5, + "resources": [], + "templateHtml": "", + "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.gpio-panel section[fxflex] {\n min-width: 0px;\n}\n\n\n.switch-panel {\n margin: 0;\n height: 32px;\n width: 66px;\n min-width: 66px;\n}\n\n.switch-panel mat-slide-toggle {\n margin: 0;\n width: 36px;\n min-width: 36px;\n}\n\n.switch-panel.col-0 mat-slide-toggle {\n margin-left: 8px;\n margin-right: 4px;\n}\n\n.switch-panel.col-1 mat-slide-toggle {\n margin-left: 4px;\n margin-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": "\nself.onInit = function() {\n};", + "settingsSchema": "", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-service-rpc-settings", + "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"isConnector\":false},\"title\":\"Service RPC\"}" } } ] diff --git a/ui-ngx/src/app/modules/common/modules-map.ts b/ui-ngx/src/app/modules/common/modules-map.ts index f71adb36fa..466a9f7cc6 100644 --- a/ui-ngx/src/app/modules/common/modules-map.ts +++ b/ui-ngx/src/app/modules/common/modules-map.ts @@ -300,6 +300,9 @@ import * as DeviceGatewayCommandComponent from '@shared/components/device/device import * as GatewayRemoteConfigurationDialogComponent from '@shared/components/dialog/gateway-remote-configuration-dialog'; import * as GatewayConfigurationComponent from '@shared/components/device/gateway-configuration.component'; import * as GatewayConnectorComponent from '@shared/components/device/gateway-connectors.component'; +import * as GatewayLogsComponent from '@shared/components/device/gateway-logs.component'; +import * as GatewayStatisticsComponent from '@shared/components/device/gateway-statistics.component'; +import * as GatewayServiceRPCComponent from '@shared/components/device/gateway-service-rpc.component'; import { IModulesMap } from '@modules/common/modules-map.models'; @@ -406,6 +409,9 @@ class ModulesMap implements IModulesMap { '@shared/components/device/device-gateway-command.component': DeviceGatewayCommandComponent, '@shared/components/device/gateway-configuration.component': GatewayConfigurationComponent, '@shared/components/device/gateway-connectors.component': GatewayConnectorComponent, + '@shared/components/device/gateway-logs.component': GatewayLogsComponent, + '@shared/components/device/gateway-statistics.component': GatewayStatisticsComponent, + '@shared/components/device/gateway-service-rpc.component': GatewayServiceRPCComponent, '@shared/components/device/gateway-remote-configuration-dialog': GatewayRemoteConfigurationDialogComponent, '@shared/components/tb-checkbox.component': TbCheckboxComponent, '@shared/components/toast.directive': TbToast, diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.html new file mode 100644 index 0000000000..4f19fccc60 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.html @@ -0,0 +1,30 @@ + +
+ +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss new file mode 100644 index 0000000000..a5c9d20b2f --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss @@ -0,0 +1,33 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + + .action-buttons-container { + display: flex; + flex-wrap: wrap; + flex-direction: row; + height: 100%; + width: 100%; + + button { + flex-grow: 1; + margin: 10px; + min-width: 150px; + } + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts new file mode 100644 index 0000000000..7c0de7c91d --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts @@ -0,0 +1,61 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component, Input, OnInit } from '@angular/core'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { WidgetActionDescriptor } from '@shared/models/widget.models'; +import { PageComponent } from '@shared/components/page.component'; +import { ThemePalette } from '@angular/material/core'; + + +interface ActionButtonsWidgetSettings { + buttonsType: string, + buttonsClass: ThemePalette, + alignment: string +} + +@Component({ + selector: 'tb-action-buttons-widget', + templateUrl: './action-buttons.component.html', + styleUrls: ['./action-buttons.component.scss'] +}) +export class ActionButtonsComponent implements OnInit { + + @Input() + ctx: WidgetContext; + + settings: ActionButtonsWidgetSettings; + + constructor() { + } + + ngOnInit(): void { + this.settings = this.ctx.settings; + } + + actionButtonClick($event: MouseEvent, actionDescriptor: WidgetActionDescriptor) { + let entityId, entityName, entityLabel; + if (this.ctx.datasources) { + entityId = this.ctx.datasources[0].entity.id; + entityName = this.ctx.datasources[0].entityName; + entityLabel = this.ctx.datasources[0].entityLabel; + } + this.ctx.actionsApi.handleWidgetAction($event, actionDescriptor, entityId, entityName, null, entityLabel); + } + +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html new file mode 100644 index 0000000000..0cb70d331c --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html @@ -0,0 +1,43 @@ + +
+ + widgets.action-buttons.button-type + + + {{type}} + + + + + widgets.action-buttons.button-class + + + {{class}} + + + + + widgets.action-buttons.alignment + + + {{type}} + + + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts new file mode 100644 index 0000000000..bc14843b0b --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts @@ -0,0 +1,62 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; + +@Component({ + selector: 'tb-action-buttons-widget-settings', + templateUrl: './action-buttons-widget-settings.component.html', + styleUrls: ['./../widget-settings.scss'] +}) +export class ActionButtonsWidgetSettingsComponent extends WidgetSettingsComponent { + + ActionButtonsSettingsForm: UntypedFormGroup; + + buttonTypes = ['basic', 'raised', 'stroked', 'flat']; + + buttonClasses = ['basic', 'primary', 'accent', 'warn']; + + alignment = ['center', 'start', 'end', 'normal', 'baseline', 'space-between', 'space-around', 'stretch']; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.ActionButtonsSettingsForm; + } + + protected defaultSettings(): WidgetSettings { + return { + buttonsType: 'basic', + buttonsClass: 'basic', + alignment: 'center' + }; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.ActionButtonsSettingsForm = this.fb.group({ + buttonsType: [settings.buttonsType, []], + buttonsClass: [settings.buttonsClass, []], + alignment: [settings.alignment, []] + }); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html new file mode 100644 index 0000000000..4f92aacffd --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html @@ -0,0 +1,26 @@ + +
+ + Is Connector + + + State parameter connector name + + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts new file mode 100644 index 0000000000..74e214a3d9 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts @@ -0,0 +1,54 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; + +@Component({ + selector: 'tb-gateway-logs-settings', + templateUrl: './gateway-logs-settings.component.html', + styleUrls: ['../widget-settings.scss'] +}) +export class GatewayLogsSettingsComponent extends WidgetSettingsComponent { + + GatewayLogSettingForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.GatewayLogSettingForm; + } + + protected defaultSettings(): WidgetSettings { + return { + isConnectorLog: false, + connectorLogState: 'default' + }; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.GatewayLogSettingForm = this.fb.group({ + isConnectorLog: [false, []], + connectorLogState: ['default', []] + }); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html new file mode 100644 index 0000000000..96e9a7dba9 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html @@ -0,0 +1,22 @@ + +
+ + Is Connector + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts new file mode 100644 index 0000000000..edafed90b8 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts @@ -0,0 +1,52 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; + +@Component({ + selector: 'tb-gateway-service-rpc-settings', + templateUrl: './gateway-service-rpc-settings.component.html', + styleUrls: ['../widget-settings.scss'] +}) +export class GatewayServiceRPCSettingsComponent extends WidgetSettingsComponent { + + GatewayLogSettingForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.GatewayLogSettingForm; + } + + protected defaultSettings(): WidgetSettings { + return { + isConnector: false, + }; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.GatewayLogSettingForm = this.fb.group({ + isConnector: [false, []] + }); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts index ef7668f306..6ba665cf23 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts @@ -259,6 +259,16 @@ import { import { TripAnimationPointSettingsComponent } from '@home/components/widget/lib/settings/map/trip-animation-point-settings.component'; +import { + ActionButtonsWidgetSettingsComponent +} from '@home/components/widget/lib/settings/cards/action-buttons-widget-settings.component'; +import { + GatewayLogsSettingsComponent +} from '@home/components/widget/lib/settings/gateway/gateway-logs-settings.component'; +import { + GatewayServiceRPCSettingsComponent +} from '@home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component'; + @NgModule({ declarations: [ @@ -357,7 +367,10 @@ import { TripAnimationPointSettingsComponent, MapWidgetSettingsComponent, RouteMapWidgetSettingsComponent, - TripAnimationWidgetSettingsComponent + TripAnimationWidgetSettingsComponent, + ActionButtonsWidgetSettingsComponent, + GatewayLogsSettingsComponent, + GatewayServiceRPCSettingsComponent ], imports: [ CommonModule, @@ -460,7 +473,10 @@ import { TripAnimationPointSettingsComponent, MapWidgetSettingsComponent, RouteMapWidgetSettingsComponent, - TripAnimationWidgetSettingsComponent + TripAnimationWidgetSettingsComponent, + ActionButtonsWidgetSettingsComponent, + GatewayLogsSettingsComponent, + GatewayServiceRPCSettingsComponent ] }) export class WidgetSettingsModule { @@ -527,5 +543,8 @@ export const widgetSettingsComponentsMap: {[key: string]: Type

gateway.gateway-configuration

-
- - {{ logConfig }} + name="logSelector"> + + {{ logConfig.value }}
@@ -230,6 +278,10 @@ *ngIf="gatewayConfigGroup.get('logs.local.' + logSelector.value + '.backupCount').hasError('min')"> {{'gateway.logs.backup-count-min' | translate }} + info_outlined +
@@ -243,13 +295,20 @@ - gateway.storage + gateway.storage + Hint about storage +
- + {{ storageType.value | translate }} +
+ + Hint about {{ gatewayConfigGroup.get('storage.type').value | translate }} storage
@@ -264,6 +323,10 @@ {{'gateway.storage-read-record-count-pattern' | translate}} + info_outlined + @@ -278,6 +341,10 @@ {{'gateway.storage-max-records-pattern' | translate}} + info_outlined + @@ -286,6 +353,10 @@ {{'gateway.storage-data-folder-path-required' | translate}} + info_outlined + @@ -300,6 +371,10 @@ {{'gateway.storage-max-files-pattern' | translate}} + info_outlined + @@ -314,6 +389,10 @@ {{'gateway.storage-max-read-record-count-pattern' | translate}} + info_outlined + @@ -328,6 +407,10 @@ {{'gateway.storage-max-records-pattern' | translate}} + info_outlined + @@ -336,6 +419,10 @@ {{'gateway.storage-path-required' | translate}} + info_outlined + @@ -350,6 +437,10 @@ {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} + info_outlined + @@ -364,6 +455,10 @@ {{'gateway.messages-ttl-in-days-pattern' | translate}} + info_outlined +
@@ -491,33 +586,20 @@ {{'gateway.statistics.send-period-pattern' | translate }} - - gateway.statistics.check-connectors-configuration - - - {{'gateway.statistics.check-connectors-configuration-required' | translate }} - - - {{'gateway.statistics.check-connectors-configuration-min' | translate }} - - - {{'gateway.statistics.check-connectors-configuration-pattern' | translate }} - -
- gateway.statistics.statistics + {{"gateway.statistics.commands" |translate}} + Hint about commands
- + gateway.statistics.attribute-name @@ -525,6 +607,10 @@ *ngIf="commandControl.get('attributeName').hasError('required')"> {{'gateway.statistics.attribute-name-required' | translate }} + info_outlined + gateway.statistics.timeout @@ -541,6 +627,10 @@ *ngIf="commandControl.get('timeout').hasError('pattern')"> {{'gateway.statistics.timeout-pattern' | translate }} + info_outlined + gateway.statistics.command @@ -549,6 +639,10 @@ *ngIf="commandControl.get('command').hasError('required')"> {{'gateway.statistics.command-required' | translate }} + info_outlined + diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss index 0b04abd6bf..7df5c58fe6 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss @@ -18,6 +18,10 @@ height: 100%; display: block; + .mat-icon { + color: rgba(0, 0, 0, .12); + } + .mat-toolbar { background: transparent; color: rgba(0, 0, 0, .87) !important; @@ -126,6 +130,12 @@ } } + .statistics-block { + margin-bottom: 15px; + padding-left: 15px; + padding-top: 15px; + } + .first-capital { text-transform: capitalize; } @@ -147,5 +157,36 @@ z-index: -10; border-radius: 5px; } + + ::ng-deep.pe { + pointer-events: all; + } + + ::ng-deep.mat-mdc-form-field-icon-suffix { + z-index: 100; + } + + mat-panel-title { + display: block; + padding-top: 20px; + } + + mat-panel-title span { + display: block; + padding-left: 0; + padding-top: 5px; + } + + .tb-hint { + font-size: 13px; + color: rgba(0, 0, 0, .54); + width: fit-content; + cursor: pointer; + text-transform: none!important; + } + + .line-break { + width: 100%; + } } diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index a99a23eff1..28dc198fa5 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -14,14 +14,13 @@ /// limitations under the License. /// -import { Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Router } from '@angular/router'; import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; import { EntityId } from '@shared/models/id/entity-id'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; -import { base64toObj, base64toString, objToBase64, stringToBase64 } from '@core/utils'; import { AttributeService } from '@core/http/attribute.service'; import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; import { @@ -29,6 +28,9 @@ import { GatewayRemoteConfigurationDialogData } from '@shared/components/dialog/gateway-remote-configuration-dialog'; import { DeviceService } from '@core/http/device.service'; +import { of } from "rxjs"; +import { mergeMap } from "rxjs/operators"; +import { DeviceCredentialsType } from "@shared/models/device.models"; export enum StorageTypes { MEMORY = 'memory', @@ -46,10 +48,10 @@ export enum GatewayLogLevel { } export enum LogSavingPeriod { - days = 'd', - hours = 'h', - minutes = 'm', - seconds = 's' + days = 'D', + hours = 'H', + minutes = 'M', + seconds = 'S' } export enum LocalLogsConfigs { @@ -61,6 +63,15 @@ export enum LocalLogsConfigs { extension = 'extension' } +export const localLogsConfigLabels = new Map([ + [LocalLogsConfigs.service, 'Service'], + [LocalLogsConfigs.connector, 'Connector'], + [LocalLogsConfigs.converter, 'Converter'], + [LocalLogsConfigs.tb_connection, 'TB Connection'], + [LocalLogsConfigs.storage, 'Storage'], + [LocalLogsConfigs.extension, 'Extension'] +]) + export const logSavingPeriodTranslations = new Map( [ [LogSavingPeriod.days, 'gateway.logs.days'], @@ -107,12 +118,12 @@ export class GatewayConfigurationComponent implements OnInit { logSavingPeriods = logSavingPeriodTranslations; + localLogsConfigLabels = localLogsConfigLabels; + securityTypes = securityTypesTranslationsMap; gatewayLogLevel = Object.values(GatewayLogLevel); - localLogsConfigs = Object.values(LocalLogsConfigs); - @Input() device: EntityId; @@ -127,21 +138,21 @@ export class GatewayConfigurationComponent implements OnInit { protected fb: FormBuilder, protected attributeService: AttributeService, protected deviceService: DeviceService, + private cd: ChangeDetectorRef, public dialog: MatDialog) { } ngOnInit() { this.gatewayConfigGroup = this.fb.group({ thingsboard: this.fb.group({ - host: ['thingsboard.cloud', [Validators.required]], + host: [window.location.hostname, [Validators.required]], port: [1883, [Validators.required, Validators.min(1), Validators.max(65535), Validators.pattern(/^-?[0-9]+$/)]], remoteShell: [false, []], remoteConfiguration: [true, []], + checkConnectorsConfigurationInSeconds: [60, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], statistics: this.fb.group({ enable: [true, []], statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], - checkConnectorsConfigurationInSeconds: [60, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], - handleDeviceRenaming: [false, []], commands: this.fb.array([], []) }), maxPayloadSizeBytes: [1024, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], @@ -257,6 +268,10 @@ export class GatewayConfigurationComponent implements OnInit { securityGroup.updateValueAndValidity(); }); + securityGroup.get('caCert').valueChanges.subscribe(_ => this.cd.detectChanges()) + securityGroup.get('privateKey').valueChanges.subscribe(_ => this.cd.detectChanges()) + securityGroup.get('cert').valueChanges.subscribe(_ => this.cd.detectChanges()) + const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; storageGroup.get('type').valueChanges.subscribe(type => { this.removeAllStorageValidators(); @@ -286,25 +301,44 @@ export class GatewayConfigurationComponent implements OnInit { } fetchConfigAttribute(entityId: EntityId) { - this.attributeService.getEntityAttributes(entityId, AttributeScope.SHARED_SCOPE, - ['configuration', 'RemoteLoggingLevel']).subscribe(attributes => { + this.attributeService.getEntityAttributes(entityId, AttributeScope.CLIENT_SCOPE, + ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel']).pipe( + mergeMap(attributes => attributes.length ? of(attributes) : this.attributeService.getEntityAttributes( + entityId, AttributeScope.SHARED_SCOPE, ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel'])) + ).subscribe(attributes => { if (attributes.length) { - const configuration = attributes.find(attribute => attribute.key === 'configuration').value; - const remoteLoggingLevel = attributes.find(attribute => attribute.key === 'RemoteLoggingLevel').value; - if (configuration) { - const configObj = base64toObj(configuration).thingsboard; - configObj.logs = this.logsBase64ToObj(configObj.logs); + const general_configuration = attributes.find(attribute => attribute.key === 'general_configuration')?.value; + const grpc_configuration = attributes.find(attribute => attribute.key === 'grpc_configuration')?.value; + const logs_configuration = attributes.find(attribute => attribute.key === 'logs_configuration')?.value; + const storage_configuration = attributes.find(attribute => attribute.key === 'storage_configuration')?.value; + const remoteLoggingLevel = attributes.find(attribute => attribute.key === 'RemoteLoggingLevel')?.value; + if (general_configuration) { + const configObj = {thingsboard: general_configuration}; if (configObj.thingsboard.statistics && configObj.thingsboard.statistics.commands) { - for (const command of Object.values(configObj.thingsboard.statistics.commands)) { + for (const command of configObj.thingsboard.statistics.commands) { this.addCommand(command); } delete configObj.thingsboard.statistics.commands; } this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); - this.gatewayConfigGroup.markAsDirty(); + this.gatewayConfigGroup.markAsPristine(); if (!configObj.thingsboard.remoteConfiguration) { this.gatewayConfigGroup.disable({emitEvent: false}); } + this.checkAndFetchCredentials(configObj.thingsboard.security); + } + if (grpc_configuration) { + const configObj = {grpc: grpc_configuration}; + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + } + if (logs_configuration) { + const configObj = {logs: this.logsToObj(logs_configuration)}; + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + this.cd.detectChanges(); + } + if (storage_configuration) { + const configObj = {storage: storage_configuration}; + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); } if (remoteLoggingLevel) { const remoteLogsFormGroup = this.gatewayConfigGroup.get('logs.remote'); @@ -312,41 +346,48 @@ export class GatewayConfigurationComponent implements OnInit { enabled: remoteLoggingLevel !== GatewayLogLevel.none, logLevel: remoteLoggingLevel }, {emitEvent: false}); - remoteLogsFormGroup.markAsDirty(); + remoteLogsFormGroup.markAsPristine(); } + this.cd.detectChanges(); + } else { + this.checkAndFetchCredentials({}); } }); } - logsBase64ToObj(logs64: string) { - const logsString = base64toString(logs64).split('"').join(''); - const logsObject = {}; - logsString.split('logger_').forEach((split, index) => { - if (index > 0) { - const key = split.split(']')[0]; - if (LocalLogsConfigs[key]) { - const logLevel = split.split('=')[1].replace('}}handlers', ''); - logsObject[key] = { - logLevel - }; - } - } - }); - logsString.split('handler_').forEach((split, index) => { - if (index > 0) { - const key = split.split('Handler]')[0]; - if (LocalLogsConfigs[key]) { - const args = split.split('args=(')[1].split(','); - logsObject[key].filePath = args[0].replace(`/${key}.log`, ''); - logsObject[key].savingPeriod = args[1].replace(' ', ''); - logsObject[key].savingTime = +args[2]; - logsObject[key].backupCount = +args[3]; + checkAndFetchCredentials(security): void { + if ((security.type == SecurityTypes.ACCESS_TOKEN && !security.accessToken) || + (security.type === SecurityTypes.USERNAME_PASSWORD && !(security.username && security.password)) || !security.type) { + this.deviceService.getDeviceCredentials(this.device.id).subscribe(credentials => { + if (credentials.credentialsType === DeviceCredentialsType.ACCESS_TOKEN) { + this.gatewayConfigGroup.get('thingsboard.security.accessToken').setValue(credentials.credentialsValue); + } else if (credentials.credentialsType === DeviceCredentialsType.MQTT_BASIC) { + const parsedValue = JSON.parse(credentials.credentialsValue); + this.gatewayConfigGroup.get('thingsboard.security.clientId').setValue(parsedValue.clientId); + this.gatewayConfigGroup.get('thingsboard.security.username').setValue(parsedValue.userName); + this.gatewayConfigGroup.get('thingsboard.security.password').setValue(parsedValue.password); } + }); + } + } + + logsToObj(logsConfig) { + const logsObject = { + local: {} + } + const logFormat = logsConfig.formatters.LogFormatter.format; + const dateFormat = logsConfig.formatters.LogFormatter.datefmt; + for (const localLogsConfigsKey of Object.keys(LocalLogsConfigs)) { + const handlerKey = localLogsConfigsKey + "Handler"; + logsObject[localLogsConfigsKey] = { + logLevel: logsConfig.loggers[localLogsConfigsKey].level, + filePath: logsConfig.handlers[handlerKey].filename.split('/'+localLogsConfigsKey)[0], + backupCount: logsConfig.handlers[handlerKey].backupCount, + savingTime: logsConfig.handlers[handlerKey].interval, + savingPeriod: logsConfig.handlers[handlerKey].when, } - }); - const formatArgs = logsString.split('format=')[1].split('}}datefmt='); - const logFormat = formatArgs[0]; - const dateFormat = formatArgs[1]; + } + return {local: logsObject, logFormat, dateFormat}; } @@ -366,7 +407,7 @@ export class GatewayConfigurationComponent implements OnInit { const localLogsFormGroup = this.gatewayConfigGroup.get('logs.local') as FormGroup; const configGroup = this.fb.group({ logLevel: [config.logLevel || GatewayLogLevel.info, [Validators.required]], - filePath: [config.filePath || './data', [Validators.required]], + filePath: [config.filePath || './logs', [Validators.required]], backupCount: [config.backupCount || 7, [Validators.required, Validators.min(0)]], savingTime: [config.savingTime || 3, [Validators.required, Validators.min(0)]], savingPeriod: [config.savingPeriod || LogSavingPeriod.days, [Validators.required]] @@ -416,65 +457,105 @@ export class GatewayConfigurationComponent implements OnInit { ); } - generateLogsFile(logsObj): string { - const line = '[loggers]}}' + - 'keys=root, service, connector, converter, tb_connection, storage, extension}}' + - '[handlers]}}' + - 'keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler}}' + - '[formatters]}}' + - 'keys=LogFormatter}}' + - '[logger_root]}}' + - 'level=ERROR}}' + - 'handlers=consoleHandler}}' + - '[logger_database]}}' + - 'level=INFO}}' + - 'handlers=databaseHandler}}' + - 'formatter=LogFormatter}}' + - 'qualname=database}}'; - - let loggerLine = ''; - let handlerLine = ''; - + generateLogsFile(logsObj) { + const logAttrObj = { + version: 1, + disable_existing_loggers: false, + formatters: { + LogFormatter: { + class: "logging.Formatter", + format: logsObj.logFormat, + datefmt: logsObj.dateFormat, + } + }, + handlers: { + consoleHandler: { + class: "logging.StreamHandler", + formatter: "LogFormatter", + level: "DEBUG", + stream: "ext://sys.stdout" + }, + databaseHandler: { + class: "thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler", + formatter: "LogFormatter", + filename: "./logs/database.log", + backupCount: 1, + encoding: "utf-8" + } + }, + loggers: { + database: { + handlers: ["databaseHandler", "consoleHandler"], + level: "DEBUG", + propagate: false + } + }, + root: { + level: "ERROR", + handlers: [ + "consoleHandler" + ] + } + } for (const key of Object.keys(logsObj.local)) { - loggerLine += `[logger_${key}]}}` + - `level=${logsObj.local[key].logLevel}}}` + - `handlers=${key}Handler}}` + - `formatter=LogFormatter}}` + - `qualname=${key}}}`; - handlerLine += `[handler_${key}Handler]}}` + - `level=${logsObj.local[key].logLevel}}}` + - `class=thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler}}` + - `formatter=LogFormatter}}` + - `args=("${logsObj.local[key].filePath}/${key}.log", ${logsObj.local[key].savingPeriod},` + - ` ${logsObj.local[key].savingTime}, ${logsObj.local[key].backupCount},)}}`; + logAttrObj.handlers[key+"Handler"] = this.createHandlerObj(logsObj.local[key], key); + logAttrObj.loggers[key] = this.createLoggerObj(logsObj.local[key], key); } + return logAttrObj; + } - const logerEnding = `[formatter_LogFormatter]}}` + - `format="${logsObj.logFormat}"}}` + - `datefmt="${logsObj.dateFormat}"`; + createHandlerObj(logObj, key) { + return { + class: "thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler", + formatter: "LogFormatter", + filename: `${logObj.filePath}/${key}.log`, + backupCount: logObj.backupCount, + interval: logObj.savingTime, + when: logObj.savingPeriod, + encoding: "utf-8" + } + } - return line + loggerLine + handlerLine + logerEnding; + createLoggerObj(logObj, key) { + return { + handlers: [`${key}Handler`, "consoleHandler"], + level: logObj.logLevel, + propagate: false + } } saveConfig(): void { const value = this.removeEmpty(this.gatewayConfigGroup.value); + value.thingsboard.statistics.commands = Object.values(value.thingsboard.statistics.commands); const attributes = []; attributes.push({ key: 'RemoteLoggingLevel', value: value.logs.remote.enabled ? value.logs.remote.logLevel : GatewayLogLevel.none }); delete value.connectors; - value.logs = stringToBase64(this.generateLogsFile(value.logs)); - const configuration = objToBase64({thingsboard: value}); attributes.push({ - key: 'configuration', - value: configuration + key: 'logs_configuration', + value: this.generateLogsFile(value.logs) + }); + attributes.push({ + key: 'grpc_configuration', + value: value.grpc + }); + attributes.push({ + key: 'storage_configuration', + value: value.storage }); + attributes.push({ + key: 'general_configuration', + value: value.thingsboard + }); + this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributes).subscribe(_ => { if (this.dialogRef) { this.dialogRef.close(); } else { this.gatewayConfigGroup.markAsPristine(); + this.cd.detectChanges(); } }); } @@ -502,7 +583,5 @@ export class GatewayConfigurationComponent implements OnInit { } ); }); - - } } diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html index 809a8cb44d..547476c381 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html @@ -15,115 +15,149 @@ limitations under the License. --> - - -

gateway.connectors

- - -
-
-
- - - - - {{generatePanelTitle(connectorControl)}} - - -
- - - {{ (connectorControl.get('active').value ? 'gateway.connectors-active' : 'gateway.connectors-inactive') | translate }} - - - gateway.connector-name - - - {{'gateway.connector-name-required' | translate }} - - - - gateway.connector-configuration - - - {{'gateway.connector-configuration-required' | translate }} - - - - gateway.connector-type - - {{type}} - - - {{'gateway.connector-type-required' | translate }} - - - - gateway.connector-key - - - {{'gateway.connector-key-required' | translate }} - - - -
- + + + + + Enabled + + + + + + + Name + + {{ attribute.key }} + + + + Type + + {{ attribute.value.type }} + + + + + Actions + + +
+ - + +
+
+ + + + + +
- - - - +
+
+ + +
+ + +
+ + + Name + + + + Type + + {{type}} + + + + Key + + + + gateway.remote-logging-level + + {{logLevel}} + + + + + + +
+ +
+
- - -
-
- - -
diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss index 0ad7851616..626f40672f 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss @@ -17,6 +17,31 @@ width: 100%; height: 100%; display: block; + overflow-x: auto; + padding: 0; + + .connector-container { + width: 100%; + + &>mat-card, &>div { + min-width: 50%; + } + + mat-card { + margin: 10px; + padding: 10px; + max-width: 100%; + } + } + + .tb-entity-table { + .tb-entity-table-content { + width: 100%; + height: 100%; + background: #fff; + overflow: hidden; + } + } .mat-toolbar { background: transparent; @@ -24,7 +49,9 @@ } .mat-mdc-form-field { - margin-right: 15px; + flex-grow: 1; + //min-width: 200px; + //flex-shrink: 1; } mat-expansion-panel { @@ -55,5 +82,9 @@ .action-btns { margin: 10px 10px 0; } + + mat-row { + cursor: pointer; + } } diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 4635b7fe56..5f36dd014c 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -14,26 +14,40 @@ /// limitations under the License. /// -import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, NgZone, ViewChild } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Router } from '@angular/router'; -import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { EntityId } from '@shared/models/id/entity-id'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { AttributeService } from '@core/http/attribute.service'; import { DeviceService } from '@core/http/device.service'; import { TranslateService } from '@ngx-translate/core'; -import { forkJoin } from 'rxjs'; -import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { forkJoin, merge } from 'rxjs'; +import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { PageComponent } from "@shared/components/page.component"; +import { PageLink } from "@shared/models/page/page-link"; +import { AttributeDatasource } from "@home/models/datasource/attribute-datasource"; +import { Direction, SortOrder } from "@shared/models/page/sort-order"; +import { MatSort } from "@angular/material/sort"; +import { tap } from "rxjs/operators"; +import { TelemetryWebsocketService } from "@core/ws/telemetry-websocket.service"; +import { MatTableDataSource } from "@angular/material/table"; +import { GatewayLogLevel } from "@shared/components/device/gateway-configuration.component"; +import { ActionNotificationShow } from "@core/notification/notification.actions"; +import { DialogService } from '@app/core/services/dialog.service'; +import { updateEntityParams, WidgetContext } from "@home/models/widget-component.models"; +import { deepClone } from "@core/utils"; export interface gatewayConnector { name: string; type: string; - configuration: string; - jsonConfiguration: string; - key: string; + configuration?: string; + configurationJson: string; + log_level: string; + key?: string; } @Component({ @@ -41,39 +55,58 @@ export interface gatewayConnector { templateUrl: './gateway-connectors.component.html', styleUrls: ['./gateway-connectors.component.scss'] }) -export class GatewayConnectorComponent implements OnInit { +export class GatewayConnectorComponent extends PageComponent implements AfterViewInit { - gatewayConnectorsGroup: FormGroup; + pageLink: PageLink; + + attributeDataSource: AttributeDatasource; + + dataSource: MatTableDataSource + + displayedColumns = ['enabled', 'key', 'type', 'actions']; gatewayConnectorDefaultTypes: Array = ['mqtt', - 'modbus', - 'grpc', - 'opcua', - 'opcua_asyncio', - 'ble', - 'request', - 'can', - 'bacnet', - 'odbc', - 'rest', - 'snmp', - 'ftp', - 'socket', - 'xmpp', - 'ocpp' - ]; - - selectedConnector: number; + 'modbus', + 'grpc', + 'opcua', + 'opcua_asyncio', + 'ble', + 'request', + 'can', + 'bacnet', + 'odbc', + 'rest', + 'snmp', + 'ftp', + 'socket', + 'xmpp', + 'ocpp', + 'custom' + ]; @Input() - device: EntityId; + ctx: WidgetContext; @Input() - dialogRef: MatDialogRef; + device: EntityId; + + @ViewChild('searchInput') searchInputField: ElementRef; + @ViewChild(MatSort) sort: MatSort; - logSelector: FormControl; + connectorForm: FormGroup; + viewsInited = false; + + textSearchMode: boolean; + + activeConnectors: Array; + + inactiveConnectors: Array; + + InitialActiveConnectors: Array; + + gatewayLogLevel = Object.values(GatewayLogLevel); constructor(protected router: Router, protected store: Store, @@ -81,111 +114,244 @@ export class GatewayConnectorComponent implements OnInit { protected translate: TranslateService, protected attributeService: AttributeService, protected deviceService: DeviceService, + protected dialogService: DialogService, + private telemetryWsService: TelemetryWebsocketService, + private zone: NgZone, private cd: ChangeDetectorRef, public dialog: MatDialog) { + super(store); + const sortOrder: SortOrder = {property: 'key', direction: Direction.ASC}; + this.pageLink = new PageLink(1000, 0, null, sortOrder); + this.attributeDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); + this.dataSource = new MatTableDataSource([]); + this.connectorForm = this.fb.group({ + name: ['', [Validators.required]], + type: ['', [Validators.required]], + log_level: ['', [Validators.required]], + key: ['auto'], + configurationJson: [{}, [Validators.required]] + }) + this.connectorForm.disable(); } - ngOnInit() { - this.gatewayConnectorsGroup = this.fb.group({ - connectors: this.fb.array([], [Validators.required]) - }); - this.gatewayConnectorsGroup.valueChanges.subscribe(_=>{ - this.cd.detectChanges(); - }); - this.getConnectorsData(); + + initialConnector: gatewayConnector; + + ngAfterViewInit() { + console.log(this.device) + merge(this.sort.sortChange) + .pipe( + tap(() => this.updateData()) + ) + .subscribe(); + + this.viewsInited = true; + if (this.device) { + forkJoin(this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, ['active_connectors']), + this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors'])).subscribe(attributes => { + if (attributes.length) { + this.activeConnectors = attributes[0].length ? attributes[0][0].value : []; + this.inactiveConnectors = attributes[1].length ? attributes[1][0].value : []; + this.updateData(true); + } else { + this.activeConnectors = []; + this.inactiveConnectors = []; + this.updateData(true); + } + }) + } } - cancel(): void { - if (this.dialogRef) { - this.dialogRef.close(); + saveConnector(): void { + const value = this.connectorForm.value; + if (value.type !== 'grpc') { + delete value.key; + } + value.configuration = `${value.type}.json` + const attributesToSave = [{ + key: value.name, + value: value + }]; + const attributesToDelete = []; + const scope = (this.activeConnectors.includes(value.name) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + let updateActiveConnectors = false; + if (this.initialConnector && this.initialConnector.name !== value.name) { + attributesToDelete.push({key: this.initialConnector.name}); + updateActiveConnectors = true; + const activeIndex = this.activeConnectors.indexOf(this.initialConnector.name); + const inactiveIndex = this.inactiveConnectors.indexOf(this.initialConnector.name); + if (activeIndex !== -1) this.activeConnectors.splice(activeIndex, 1); + if (inactiveIndex !== -1) this.inactiveConnectors.splice(activeIndex, 1); + } + if (!this.activeConnectors.includes(value.name) && scope == AttributeScope.SHARED_SCOPE) { + this.activeConnectors.push(value.name); + updateActiveConnectors = true; + } + if (!this.inactiveConnectors.includes(value.name) && scope == AttributeScope.SERVER_SCOPE) { + this.inactiveConnectors.push(value.name); + updateActiveConnectors = true; + } + const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToSave)]; + if (updateActiveConnectors) { + tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ + key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', + value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors + }])); + } + + if (attributesToDelete.length) { + tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToDelete)); } + forkJoin(tasks).subscribe(resp => { + this.showToast("Update Successful") + this.updateData(true); + }) } - getConnectorsData(): void { - forkJoin([ - this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE,['implementedConnectors']), - this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE,['implementedConnectors']), - this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE,['connectorTypes']) - ]).subscribe(attributes=>{ - if (attributes[0].length) { - attributes[0][0].value.forEach(connector=>this.addConnector(true, connector)); - } - if (attributes[1].length) { - attributes[1][0].value.forEach(connector=>this.addConnector(false, connector)); + resetSortAndFilter(update: boolean = true) { + this.textSearchMode = false; + this.pageLink.textSearch = null; + if (this.viewsInited) { + const sortable = this.sort.sortables.get('key'); + this.sort.active = sortable.id; + this.sort.direction = 'asc'; + if (update) { + this.updateData(true); } - if(attributes[2].length) { - attributes[1][0].value.forEach(type=> { - if (this.gatewayConnectorDefaultTypes.indexOf(type) === -1) { - this.gatewayConnectorDefaultTypes.push(type); - } - }); - } - this.cd.detectChanges(); - }); + } } - saveConnectors(): void { - const connectors = this.gatewayConnectorsGroup.value.connectors; - const activeConnectors = connectors.filter(connector=>connector.active); - const inactiveConnectors = connectors.filter(connector=>!connector.active); - forkJoin([ - this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, - [{key: 'implementedConnectors', value: inactiveConnectors}]), - this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, - [{key: 'implementedConnectors', value: activeConnectors}]) - ]).subscribe(_=> { - if (this.dialogRef) { - this.dialogRef.close(); - } else { - this.gatewayConnectorsGroup.markAsPristine(); - this.cd.detectChanges(); - } + updateData(reload: boolean = false) { + this.pageLink.sortOrder.property = this.sort.active; + this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; + this.attributeDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { + this.dataSource.data = data.data.filter(value => this.activeConnectors.includes(value.key) || this.inactiveConnectors.includes(value.key)); }); } - connectorsFormArray(): FormArray { - return this.gatewayConnectorsGroup.get('connectors') as FormArray; + addAttribute(): void { + if (this.connectorForm.disabled) { + this.connectorForm.enable(); + } + this.clearOutConnectorForm(); } - addConnector(active?: boolean,connector?: gatewayConnector) { - const newConnector = this.fb.group({ - active: [!!active], - name: [connector?.name || '', [Validators.required]], - type: [connector?.type || '', [Validators.required]], - configuration: [connector?.configuration || '', [Validators.required]], - jsonConfiguration: [connector?.jsonConfiguration || {}, [Validators.required]], - key: [connector?.key || 'auto', [Validators.required]], - }); - const connectorsFormArray = this.connectorsFormArray(); - connectorsFormArray.push(newConnector); - this.selectConnector(connectorsFormArray.length-1); + clearOutConnectorForm(): void { + this.connectorForm.setValue({ + name: '', + type: this.gatewayConnectorDefaultTypes[0], + log_level: GatewayLogLevel.info, + key: 'auto', + configurationJson: {} + }) + this.initialConnector = null; + this.connectorForm.markAsPristine(); } - removeConnector(index: number): void { - this.connectorsFormArray().removeAt(index); - if (index !== 0) { - this.selectedConnector = index - 1; - } else { - this.selectedConnector = undefined; + selectConnector(attribute): void { + if (this.connectorForm.disabled) { + this.connectorForm.enable(); + } + const connector = attribute.value; + if (!connector.key) { + connector.key = 'auto'; } + if (connector.configuration) { + delete connector.configuration; + } + this.initialConnector = connector; + this.connectorForm.setValue(connector); } - selectConnector(index: number): void { - this.selectedConnector = index; + showToast(message: string) { + this.store.dispatch(new ActionNotificationShow( + { + message, + type: 'success', + duration: 1000, + verticalPosition: 'top', + horizontalPosition: 'right', + target: 'dashboardRoot', + // panelClass: this.widgetNamespace, + forceDismiss: true + })); } - getJsonControl(selectedConnector: number): FormControl { - return this.connectorsFormArray().at(selectedConnector).get('jsonConfiguration') as FormControl; + deleteConnector(attribute: AttributeData, $event: Event): void { + if ($event) { + $event.stopPropagation(); + } + const title = `Delete connector ${attribute.key}?`; + const content = `All connector data will be deleted.`; + this.dialogService.confirm(title, content, 'Cancel', 'Delete').subscribe(result => { + if (result) { + const tasks = []; + const scope = (this.activeConnectors.includes(attribute.key) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [attribute])); + const activeIndex = this.activeConnectors.indexOf(attribute.key); + const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); + if (activeIndex !== -1) this.activeConnectors.splice(activeIndex, 1); + if (inactiveIndex !== -1) this.inactiveConnectors.splice(activeIndex, 1); + tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ + key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', + value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors + }])); + forkJoin(tasks).subscribe(resp=>{ + if (this.initialConnector ? this.initialConnector.name === attribute.key: true) { + this.clearOutConnectorForm(); + this.cd.detectChanges(); + this.connectorForm.disable(); + } + this.updateData() + }) + } + }) + } + + connectorLogs(attribute: AttributeData, $event: Event): void { + if ($event) { + $event.stopPropagation(); + } + console.log(attribute); + const params = deepClone(this.ctx.stateController.getStateParams()); + params.connector_logs = attribute; + params.targetEntityParamName = "connector_logs"; + this.ctx.stateController.openState("connector_logs", params); } - generatePanelTitle(connectorControl): string{ - const connectorValues = connectorControl.value; - const activeTxt = this.translate.instant(connectorValues.active ? 'gateway.connectors-active' : 'gateway.connectors-inactive'); - let title = `${connectorValues.name} | ${connectorValues.type} `; - if (connectorValues.type === 'grpc') { - title += `| ${connectorValues.key} `; + connectorRpc(attribute: AttributeData, $event: Event): void { + if ($event) { + $event.stopPropagation(); } - title += `| ${activeTxt}`; - return title; + console.log(attribute); + const params = deepClone(this.ctx.stateController.getStateParams()); + params.connector_logs = attribute; + params.targetEntityParamName = "connector_rpc"; + this.ctx.stateController.openState("connector_rpc", params); } + + + + enableConnector(attribute): void { + const wasEnabled = this.activeConnectors.includes(attribute.key); + if (wasEnabled) { + let index = this.activeConnectors.indexOf(attribute.key); + this.activeConnectors.splice(index, 1); + this.inactiveConnectors.push(attribute.key); + } else { + let index = this.inactiveConnectors.indexOf(attribute.key); + this.inactiveConnectors.splice(index, 1); + this.activeConnectors.push(attribute.key); + } + forkJoin([this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ + key: 'active_connectors', + value: this.activeConnectors + }]), this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, [{ + key: 'inactive_connectors', + value: this.inactiveConnectors + }]),]).subscribe(resp => { + this.updateData(); + }) + } + } diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.html b/ui-ngx/src/app/shared/components/device/gateway-logs.component.html new file mode 100644 index 0000000000..bfd37aa53c --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.html @@ -0,0 +1,57 @@ + + + + + + Created time + + {{ attribute.ts | date:'yyyy-MM-dd HH:mm:ss'}} + + + + Status + + {{ attribute.status }} + + + + Message + + {{ attribute.message }} + + + + + + + + + + +
+ + diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss b/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss new file mode 100644 index 0000000000..a529107a43 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss @@ -0,0 +1,55 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + display: block; + overflow-x: auto; + padding: 0; + + + .status { + border-radius: 20px; + font-weight: 500; + padding: 5px 15px; + } + + .status-debug { + color: green; + background: rgba(0, 128, 0, 0.1); + } + + .status-warning { + color: orange; + background: rgba(255, 165, 0, 0.1); + } + + .status-error { + color: red; + background: rgba(255, 0, 0, 0.1); + } + + .status-info { + color: black; + background: rgba(0, 0, 0, 0.1); + } + + .msg-status-exception { + color: red; + } + +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts new file mode 100644 index 0000000000..cc1538729b --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts @@ -0,0 +1,250 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { AttributeData, DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { PageComponent } from "@shared/components/page.component"; +import { PageLink } from "@shared/models/page/page-link"; +import { AttributeDatasource } from "@home/models/datasource/attribute-datasource"; +import { Direction, SortOrder } from "@shared/models/page/sort-order"; +import { MatSort } from "@angular/material/sort"; +import { MatTableDataSource } from "@angular/material/table"; +import { GatewayLogLevel } from "@shared/components/device/gateway-configuration.component"; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from "@home/models/widget-component.models"; + + +export interface gatewayConnector { + name: string; + type: string; + configuration?: string; + configurationJson: string; + log_level: string; + key?: string; +} + +export interface LogLink { + name: string; + key: string; + filterFn?: Function; +} + +@Component({ + selector: 'tb-gateway-logs', + templateUrl: './gateway-logs.component.html', + styleUrls: ['./gateway-logs.component.scss'] +}) +export class GatewayLogsComponent extends PageComponent implements AfterViewInit { + + pageLink: PageLink; + + attributeDataSource: AttributeDatasource; + + dataSource: MatTableDataSource + + displayedColumns = ['ts', 'status', 'message']; + + gatewayConnectorDefaultTypes: Array = + ['mqtt', + 'modbus', + 'grpc', + 'opcua', + 'opcua_asyncio', + 'ble', + 'request', + 'can', + 'bacnet', + 'odbc', + 'rest', + 'snmp', + 'ftp', + 'socket', + 'xmpp', + 'ocpp', + 'custom' + ]; + + @Input() + ctx: WidgetContext; + + @Input() + dialogRef: MatDialogRef; + + @ViewChild('searchInput') searchInputField: ElementRef; + @ViewChild(MatSort) sort: MatSort; + + connectorForm: FormGroup; + + viewsInited = false; + + textSearchMode: boolean; + + activeConnectors: Array; + + inactiveConnectors: Array; + + InitialActiveConnectors: Array; + + gatewayLogLevel = Object.values(GatewayLogLevel); + + logLinks: Array; + + initialConnector: gatewayConnector; + + activeLink: LogLink; + + gatewayLogLinks: Array = [ + { + name: "General", + key: "LOGS" + }, { + name: "Service", + key: "SERVICE_LOGS" + }, + { + name: "Connection", + key: "CONNECTION_LOGS" + }, { + name: "Storage", + key: "STORAGE_LOGS" + }] + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + private cd: ChangeDetectorRef, + public dialog: MatDialog) { + super(store); + const sortOrder: SortOrder = {property: 'key', direction: Direction.ASC}; + this.pageLink = new PageLink(1000, 0, null, sortOrder); + this.dataSource = new MatTableDataSource([]); + + } + + + ngAfterViewInit() { + this.dataSource.sort = this.sort; + this.ctx.defaultSubscription.onTimewindowChangeFunction = timewindow => { + this.ctx.defaultSubscription.options.timeWindowConfig = timewindow; + this.ctx.defaultSubscription.updateDataSubscriptions(); + return timewindow; + } + if (this.ctx.settings.isConnectorLog && this.ctx.settings.connectorLogState) { + console.log(this.ctx.settings.connectorLogState) + + const connector = this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState]; + console.log(connector) + this.logLinks = [{ + key: `${connector.key}_LOGS`, + name: "Connector", + filterFn: (attrData)=>{ + return !attrData.message.includes(`${connector.key}_converter`) + } + },{ + key: `${connector.key}_LOGS`, + name: "Convector", + filterFn: (attrData)=>{ + return attrData.message.includes(`${connector.key}_converter`) + } + }, + { + key: `${connector.key}_EXTENSION_LOGS`, + name: "Extension" + }] + } else { + this.logLinks = this.gatewayLogLinks; + } + this.activeLink = this.logLinks[0]; + this.changeSubscription(); + } + + + updateData(sort?) { + if (this.ctx.defaultSubscription.data.length) { + let attrData = this.ctx.defaultSubscription.data[0].data.map(data => { + return { + ts: data[0], + key: this.activeLink.key, + status: data[1].match(/\|(\w+)\|/)[1], + message: /\[(.*)/.exec(data[1])[0] + }; + }); + if (this.activeLink.filterFn) { + attrData = attrData.filter(data => this.activeLink.filterFn(data)); + } + this.dataSource.data = attrData; + if (sort) { + this.dataSource.sortData(this.dataSource.data, this.sort); + } + } + } + + onTabChanged(link) { + this.activeLink = link; + this.changeSubscription(); + } + + statusClass(status) { + switch (status) { + case GatewayLogLevel.debug: + return "status status-debug"; + case GatewayLogLevel.warning: + return "status status-warning"; + case GatewayLogLevel.error: + case "EXCEPTION": + return "status status-error"; + case GatewayLogLevel.info: + default: + return "status status-info" + } + } + + statusClassMsg(status) { + if (status === "EXCEPTION") { + return 'msg-status-exception'; + } + } + + changeSubscription() { + if (this.ctx.datasources[0].entity) { + this.ctx.defaultSubscription.options.datasources[0].dataKeys = [{ + name: this.activeLink.key, + type: DataKeyType.timeseries, + settings: {} + }]; + this.ctx.defaultSubscription.unsubscribe(); + this.ctx.defaultSubscription.updateDataSubscriptions(); + this.ctx.defaultSubscription.callbacks.onDataUpdated = () => { + this.updateData(); + } + + } + } + +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html new file mode 100644 index 0000000000..158b03c3e0 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html @@ -0,0 +1,49 @@ + + + + Command + + + {{command}} + + + + + + Time + + + + Parameters + + edit + + + + + + Result + + + + diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss new file mode 100644 index 0000000000..421ac5a153 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss @@ -0,0 +1,48 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + overflow-x: auto; + display: flex; + flex-direction: column; + padding: 0; + + .command-form { + width: 100%; + flex-wrap: nowrap; + padding: 0 15px; + margin-bottom: 5px; + + &>button { + margin-top: 10px; + } + + ::ng-deep.mat-mdc-form-field-icon-suffix { + z-index: 100; + } + } + + .result-block { + padding: 0 15px; + + &>span { + font-weight: 600; + } + } + +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts new file mode 100644 index 0000000000..1dc88c8e0f --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -0,0 +1,125 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { PageComponent } from "@shared/components/page.component"; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { ContentType } from '@shared/models/constants'; +import { + JsonObjectEditDialogComponent, + JsonObjectEditDialogData +} from "@shared/components/dialog/json-object-edit-dialog.component"; + + +@Component({ + selector: 'tb-gateway-service-rpc', + templateUrl: './gateway-service-rpc.component.html', + styleUrls: ['./gateway-service-rpc.component.scss'] +}) +export class GatewayServiceRPCComponent extends PageComponent implements AfterViewInit { + + @Input() + ctx: WidgetContext; + + contentTypes = ContentType; + + @Input() + dialogRef: MatDialogRef; + + commandForm: FormGroup; + + isConnector: boolean; + + RPCCommands: Array = [ + "Ping", + "Stats", + "Devices", + "Update", + "Version", + "Restart", + "Reboot" + ] + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + private cd: ChangeDetectorRef, + public dialog: MatDialog) { + super(store); + this.commandForm = this.fb.group({ + command: [null,[Validators.required]], + time: [60, [Validators.required]], + params: ["{}", [Validators.required]], + result: [null] + }) + + + } + + + ngAfterViewInit() { + this.isConnector = this.ctx.settings.isConnector; + if (!this.isConnector) { + this.commandForm.get('command').setValue(this.RPCCommands[0]); + } + } + + + sendCommand() { + const formValues = this.commandForm.value; + this.ctx.controlApi.sendTwoWayCommand(formValues.command.toLowerCase(), {},formValues.time).subscribe(resp=>{ + console.log(resp); + this.commandForm.get('result').setValue(resp); + },error => { + console.log(error); + this.commandForm.get('result').setValue(error.error); + }) + } + + openEditJSONDialog($event: Event) { + if ($event) { + $event.stopPropagation(); + } + this.dialog.open(JsonObjectEditDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + jsonValue: JSON.parse(this.commandForm.get('params').value) + } + }).afterClosed().subscribe( + (res) => { + if (res) { + this.commandForm.get('params').setValue(JSON.stringify(res)); + } + } + ); + } + +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html new file mode 100644 index 0000000000..4cf9a3ea18 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -0,0 +1,43 @@ + + +
+ + + Statistic + + + {{key}} + + + {{command.attributeName}} + + + + + Timeout + + + + Command + + + +
+
+ diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss new file mode 100644 index 0000000000..2125391eea --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss @@ -0,0 +1,41 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + padding: 0; + + + .statistics-container { + height: 100%; + + mat-card { + width: 40%; + margin-right: 35px; + padding: 15px; + } + + div { + height: 100%; + flex-grow: 1; + } + + & > * { + height: 100%; + } + } +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts new file mode 100644 index 0000000000..3c870dc77a --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -0,0 +1,150 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { AttributeScope, DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { PageComponent } from '@shared/components/page.component'; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { TbFlot } from '@home/components/widget/lib/flot-widget'; +import { ResizeObserver } from "@juggle/resize-observer"; + + +@Component({ + selector: 'tb-gateway-statistics', + templateUrl: './gateway-statistics.component.html', + styleUrls: ['./gateway-statistics.component.scss'] +}) +export class GatewayStatisticsComponent extends PageComponent implements AfterViewInit { + + @ViewChild('statisticChart') statisticChart: ElementRef; + + @Input() + ctx: WidgetContext; + + private flot: TbFlot; + + public statisticForm: FormGroup; + + public statisticsKeys = []; + public commands = []; + public commandObj: any; + private resize$: ResizeObserver; + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + private cd: ChangeDetectorRef, + public dialog: MatDialog) { + super(store); + this.statisticForm = this.fb.group({ + statisticKey: [this.statisticsKeys[0], []] + }) + + this.statisticForm.get('statisticKey').valueChanges.subscribe(value=>{ + this.commandObj = null; + if (this.commands.length) { + this.commandObj = this.commands.find(command=>command.attributeName === value); + } + this.changeSubscription(true); + }) + } + + + ngAfterViewInit() { + if (this.ctx.defaultSubscription.datasources.length) { + const gatewayId = this.ctx.defaultSubscription.datasources[0].entity.id; + this.attributeService.getEntityAttributes(gatewayId, AttributeScope.SHARED_SCOPE, ["configuration"]).subscribe(resp=>{ + if (resp && resp.length) { + this.commands = resp[0].value.thingsboard.thingsboard.statistics.commands; + if (!this.statisticForm.get('statisticKey').value ) { + this.statisticForm.get('statisticKey').setValue(this.commands[0].attributeName); + this.changeSubscription(true); + } + } + }) + } + this.ctx.defaultSubscription.onTimewindowChangeFunction = timeWindow => { + this.ctx.defaultSubscription.options.timeWindowConfig = timeWindow; + this.ctx.defaultSubscription.updateTimewindowConfig(timeWindow); + this.ctx.defaultSubscription.update(); + this.updateChart(); + return timeWindow; + } + this.changeSubscription(true); + this.resize$ = new ResizeObserver(() => { + this.resize(); + }); + this.resize$.observe(this.statisticChart.nativeElement) + } + + initChart = () => { + if (this.ctx.defaultSubscription.data.length && !this.flot) { + this.ctx.$container = $(this.statisticChart.nativeElement); + this.flot = new TbFlot(this.ctx, 'line'); + } else setTimeout(this.initChart, 500); + } + + updateChart = () => { + if (this.flot && this.ctx.defaultSubscription.data.length) { + this.flot.update(); + } + } + + resize = () => { + if (this.flot) { + this.flot.resize(); + } + } + + + changeSubscription(init?: boolean) { + if (this.ctx.datasources[0].entity) { + if (this.flot) { + this.flot.destroy(); + delete this.flot; + } + this.ctx.defaultSubscription.options.datasources[0].dataKeys = [{ + name: this.statisticForm.get('statisticKey').value, + type: DataKeyType.timeseries, + settings: {}, + color: "#2196f3" + }]; + this.ctx.defaultSubscription.unsubscribe(); + this.ctx.defaultSubscription.updateDataSubscriptions(); + if (init) this.initChart(); + this.ctx.defaultSubscription.options.callbacks.dataLoading = ()=>{}; + this.ctx.defaultSubscription.callbacks.onDataUpdated = () => { + this.updateChart(); + } + + } + } + +} diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html index e253c67e33..d8bff54898 100644 --- a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html @@ -28,7 +28,7 @@
- + gateway.configuration-delete-dialog-input diff --git a/ui-ngx/src/app/shared/components/file-input.component.html b/ui-ngx/src/app/shared/components/file-input.component.html index 57e1ad1465..dbc217df19 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.html +++ b/ui-ngx/src/app/shared/components/file-input.component.html @@ -16,7 +16,12 @@ -->
- +
@@ -37,9 +42,11 @@ cloud_upload {{ dropLabel }} - +
diff --git a/ui-ngx/src/app/shared/components/file-input.component.scss b/ui-ngx/src/app/shared/components/file-input.component.scss index 3426539be9..33ded0bc65 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.scss +++ b/ui-ngx/src/app/shared/components/file-input.component.scss @@ -93,4 +93,8 @@ $previewSize: 100px !default; padding: 0 16px; } } + + .pe { + pointer-events: auto; + } } diff --git a/ui-ngx/src/app/shared/components/file-input.component.ts b/ui-ngx/src/app/shared/components/file-input.component.ts index 51933d749c..8e70ca88ba 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.ts +++ b/ui-ngx/src/app/shared/components/file-input.component.ts @@ -54,6 +54,9 @@ export class FileInputComponent extends PageComponent implements AfterViewInit, @Input() label: string; + @Input() + hint: string; + @Input() accept = '*/*'; diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index 7b053007f1..408ad0d057 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -180,6 +180,9 @@ import { DeviceGatewayCommandComponent } from '@shared/components/device/device- import { GatewayConfigurationComponent } from '@shared/components/device/gateway-configuration.component'; import { GatewayRemoteConfigurationDialogComponent } from '@shared/components/dialog/gateway-remote-configuration-dialog'; import { GatewayConnectorComponent } from '@shared/components/device/gateway-connectors.component'; +import { GatewayLogsComponent } from '@shared/components/device/gateway-logs.component'; +import { GatewayStatisticsComponent } from '@shared/components/device/gateway-statistics.component'; +import { GatewayServiceRPCComponent } from '@shared/components/device/gateway-service-rpc.component'; export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) => markedOptionsService; @@ -247,6 +250,9 @@ export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) DeviceGatewayCommandComponent, GatewayConfigurationComponent, GatewayConnectorComponent, + GatewayLogsComponent, + GatewayStatisticsComponent, + GatewayServiceRPCComponent, GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbSnackBarComponent, @@ -417,6 +423,9 @@ export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) DeviceGatewayCommandComponent, GatewayConfigurationComponent, GatewayConnectorComponent, + GatewayLogsComponent, + GatewayStatisticsComponent, + GatewayServiceRPCComponent, GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbErrorComponent, diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index ea9cd2d66c..a21f5f0dab 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2512,7 +2512,7 @@ "create-new-gateway-text": "Are you sure you want create a new gateway with name: '{{gatewayName}}'?", "created-time": "Created time", "configuration-delete-dialog-header": "Configurations will be deleted", - "configuration-delete-dialog-body": "Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below.", + "configuration-delete-dialog-body": "Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below", "configuration-delete-dialog-input": "Gateway name", "configuration-delete-dialog-input-required": "Gateway name is mandatory", "configuration-delete-dialog-confirm": "Turn Off", @@ -2609,6 +2609,7 @@ "stats-send-period-in-sec": "Stats send period in seconds", "statistics": { "statistics": "Statistics", + "commands": "Commands", "send-period": "Statistic send period (in ms)", "send-period-required": "Statistic send period is required", "send-period-min": "Statistic send period can not be less then 0", @@ -2689,7 +2690,45 @@ "toggle-fullscreen": "Toggle fullscreen", "transformer-json-config": "Configuration JSON*", "update-config": "Add/update configuration JSON", - "windows": "Windows" + "windows": "Windows", + "hints": { + "remote-configuration": "Enables remote configuration and management of the gateway", + "remote-shell": "Enables remote control of the operating system with the gateway from the Remote Shell widget", + "host": "Hostname or ip address of ThingsBoard server", + "port": "Port of MQTT service on ThingsBoard server", + "token": "Access token for the gateway from ThingsBoard server", + "client-id": "MQTT client id for the gateway form ThingsBoard server", + "username": "MQTT username for the gateway form ThingsBoard server", + "password": "MQTT password for the gateway form ThingsBoard server", + "ca-cert": "Path to CA certificate file", + "cert": "Path to certificate file", + "private-key": "Path to private key file", + "date-form": "Date format of log message", + "log-format": "Log message format", + "remote-log": "Enables remote logging and logs reading from the gateway", + "backup-count": "If Backup count is > 0, when a rollover is done, no more than Backup count files are kept - the oldest ones are deleted", + "storage": "Provides configuration for saving incoming data before it is sent to the ThingsBoard platform", + "file": "Received data saving to the hard drive", + "memory": "Received data saving to the RAM memory", + "sqlite": "Received data saving to the .db file", + "data-folder": "Path to folder, that will contains data (Relative or Absolute)", + "max-file-count": "Maximum count of file that will be saved", + "max-read-count": "Count of messages to get from storage and send to ThingsBoard", + "max-records": "Maximum count of records that will be stored in one file", + "read-record-count": "Count of messages to get from storage and send to ThingsBoard", + "max-records-count": "Maximum count of data in storage before send to ThingsBoard", + "ttl-check-hour": "How often will Gateway check data for obsolescence", + "ttl-messages-day": "Maximum days that storage will save data", + "commands": "Commands for collecting additional statistic", + "attribute": "Gateway client attribute name", + "timeout": "Timeout for command executing", + "command": "The result of the command will be used as the value of the client attribute (\"/bin/sh -c ipconfig getifaddr en0\")", + "check-device-activity": "Enables monitor the activity of each connected device", + "inactivity-timeout": "Inactivity device time after whose the gateway will disconnect device", + "inactivity-period": "Periodicity of device activity check", + "minimal-pack-delay": "Delay between sending packets (Decreasing this setting results in increased CPU usage", + "qos": "Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)" + } }, "grid": { "delete-item-title": "Are you sure you want to delete this item?", @@ -5247,6 +5286,11 @@ "font-weight-lighter": "Lighter", "color": "Color", "shadow-color": "Shadow color" + }, + "action-buttons": { + "button-type": "Button type", + "button-class": "Button class", + "alignment": "Buttons alignment" } }, "icon": { @@ -5273,7 +5317,8 @@ "node-selected": "On node selected", "element-click": "On HTML element click", "pie-slice-click": "On slice click", - "row-double-click": "On row double click" + "row-double-click": "On row double click", + "action-button-click": "Action button click" } }, "paginator" : { From 475e7525ca02f71b20f247158e1ef5e1c09ba4d8 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 24 May 2023 11:12:08 +0300 Subject: [PATCH 019/120] fixes --- .../widget/lib/action-buttons.component.scss | 1 + .../device-gateway-command.component.ts | 2 +- .../gateway-configuration.component.html | 108 +++++++++--------- .../gateway-configuration.component.scss | 10 ++ .../device/gateway-configuration.component.ts | 16 +-- .../device/gateway-connectors.component.html | 10 +- .../device/gateway-connectors.component.ts | 82 +++++++------ .../device/gateway-logs.component.ts | 34 ++---- .../device/gateway-statistics.component.ts | 4 +- .../assets/locale/locale.constant-en_US.json | 10 +- 10 files changed, 138 insertions(+), 139 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss index a5c9d20b2f..209365d846 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss @@ -28,6 +28,7 @@ flex-grow: 1; margin: 10px; min-width: 150px; + height: auto; } } } diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts index c96e8ae1c5..8e65324720 100644 --- a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts @@ -71,7 +71,7 @@ export class DeviceGatewayCommandComponent implements OnInit { macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; if (macosPlatforms.indexOf(platform) !== -1) { - this.selectedOSCControl.setValue(OsType.macos); + this.selectedOSCControl.setValue(OsType.linux); } else if (windowsPlatforms.indexOf(platform) !== -1) { this.selectedOSCControl.setValue(OsType.windows); } else if (/Linux/.test(platform)) { diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index db71c33d78..03f6a93497 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -35,14 +35,14 @@ {{ 'gateway.remote-configuration' | translate }} info {{ 'gateway.remote-shell' | translate }} info @@ -50,7 +50,7 @@ gateway.thingsboard-host info_outlined @@ -59,7 +59,7 @@ gateway.thingsboard-port - + {{'gateway.thingsboard-port-required' | translate }} @@ -73,7 +73,7 @@ {{'gateway.thingsboard-port-pattern' | translate }} info_outlined @@ -99,7 +99,7 @@ {{'security.access-token-required' | translate}} info_outlined @@ -111,7 +111,7 @@ {{'security.clientId-required' | translate}} info_outlined @@ -123,7 +123,7 @@ {{'security.username-required' | translate}} info_outlined @@ -135,7 +135,7 @@ {{'security.password-required' | translate}} info_outlined @@ -186,7 +186,7 @@ {{'gateway.logs.date-format-required' | translate }} info_outlined @@ -197,7 +197,7 @@ {{'gateway.logs.log-format-required' | translate }} info_outlined @@ -213,7 +213,7 @@ {{ 'gateway.logs.remote-logs' | translate }} info @@ -249,7 +249,7 @@ gateway.logs.saving-period - + {{'gateway.logs.saving-period-required' | translate }} @@ -269,7 +269,7 @@ gateway.logs.backup-count - + {{'gateway.logs.backup-count-required' | translate }} @@ -279,7 +279,7 @@ {{'gateway.logs.backup-count-min' | translate }} info_outlined @@ -296,7 +296,7 @@ gateway.storage - Hint about storage + {{'gateway.hints.storage' | translate}}
@@ -306,9 +306,8 @@ {{ storageType.value | translate }}
- - Hint about {{ gatewayConfigGroup.get('storage.type').value | translate }} storage + + {{'gateway.hints.'+gatewayConfigGroup.get('storage.type').value | translate}} @@ -324,7 +323,7 @@ {{'gateway.storage-read-record-count-pattern' | translate}} info_outlined @@ -342,7 +341,7 @@ {{'gateway.storage-max-records-pattern' | translate}} info_outlined @@ -354,7 +353,7 @@ {{'gateway.storage-data-folder-path-required' | translate}} info_outlined @@ -372,7 +371,7 @@ {{'gateway.storage-max-files-pattern' | translate}} info_outlined @@ -390,7 +389,7 @@ {{'gateway.storage-max-read-record-count-pattern' | translate}} info_outlined @@ -408,7 +407,7 @@ {{'gateway.storage-max-records-pattern' | translate}} info_outlined @@ -420,7 +419,7 @@ {{'gateway.storage-path-required' | translate}} info_outlined @@ -438,7 +437,7 @@ {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} info_outlined @@ -456,7 +455,7 @@ {{'gateway.messages-ttl-in-days-pattern' | translate}} info_outlined @@ -478,7 +477,7 @@ gateway.server-port - + {{'gateway.thingsboard-port-required' | translate }} @@ -494,7 +493,7 @@ gateway.grpc-keep-alive-timeout - + {{'gateway.grpc-keep-alive-timeout-required' | translate }} @@ -507,7 +506,7 @@ gateway.grpc-keep-alive - + {{'gateway.grpc-keep-alive-required' | translate }} @@ -520,7 +519,7 @@ gateway.grpc-min-time-between-pings - + {{'gateway.grpc-min-time-between-pings-required' | translate }} @@ -533,7 +532,7 @@ gateway.grpc-max-pings-without-data - + {{'gateway.grpc-max-pings-without-data-required' | translate }} @@ -546,7 +545,7 @@ gateway.grpc-min-ping-interval-without-data - + {{'gateway.grpc-min-ping-interval-without-data-required' | translate }} @@ -572,7 +571,7 @@ gateway.statistics.send-period - + {{'gateway.statistics.send-period-required' | translate }} @@ -591,9 +590,8 @@ {{"gateway.statistics.commands" |translate}} - Hint about commands + + {{'gateway.hints.commands' | translate}}
gateway.statistics.attribute-name - + + *ngIf="commandControl.get('attributeOnGateway').hasError('required')"> {{'gateway.statistics.attribute-name-required' | translate }} info_outlined gateway.statistics.timeout - + {{'gateway.statistics.timeout-required' | translate }} @@ -628,7 +626,7 @@ {{'gateway.statistics.timeout-pattern' | translate }} info_outlined @@ -640,7 +638,7 @@ {{'gateway.statistics.command-required' | translate }} info_outlined @@ -674,9 +672,7 @@ {{ 'gateway.checking-device-activity' | translate }} - Hint about checking activity + {{'gateway.hints.check-device-activity' | translate}}
@@ -684,7 +680,7 @@ *ngIf="gatewayConfigGroup.get('thingsboard.checkingDeviceActivity.checkDeviceInactivity').value" fxFlex="calc(50%-15px)" class="mat-block tb-value-type"> gateway.inactivity-timeout-seconds - + {{'gateway.inactivity-timeout-seconds-required' | translate }} @@ -694,7 +690,7 @@ {{'gateway.inactivity-timeout-seconds-min' | translate }} info_outlined @@ -712,7 +708,7 @@ {{'gateway.inactivity-check-period-seconds-min' | translate }} info_outlined @@ -725,7 +721,7 @@
gateway.min-pack-send-delay - + {{ 'gateway.min-pack-send-delay-required' | translate }} @@ -733,13 +729,13 @@ {{ 'gateway.min-pack-send-delay-min' | translate }} info_outlined gateway.mqtt-qos - + {{ 'gateway.mqtt-qos-required' | translate}} @@ -750,13 +746,13 @@ {{ 'gateway.mqtt-qos-range' | translate}} info_outlined gateway.statistics.check-connectors-configuration - + {{'gateway.statistics.check-connectors-configuration-required' | translate }} @@ -778,7 +774,7 @@
-
+
-
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss deleted file mode 100644 index 209365d846..0000000000 --- a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.scss +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright © 2016-2023 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. - */ -:host { - width: 100%; - height: 100%; - - .action-buttons-container { - display: flex; - flex-wrap: wrap; - flex-direction: row; - height: 100%; - width: 100%; - - button { - flex-grow: 1; - margin: 10px; - min-width: 150px; - height: auto; - } - } -} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts deleted file mode 100644 index 7c0de7c91d..0000000000 --- a/ui-ngx/src/app/modules/home/components/widget/lib/action-buttons.component.ts +++ /dev/null @@ -1,61 +0,0 @@ -/// -/// Copyright © 2016-2023 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. -/// - -import { Component, Input, OnInit } from '@angular/core'; -import { WidgetContext } from '@home/models/widget-component.models'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { WidgetActionDescriptor } from '@shared/models/widget.models'; -import { PageComponent } from '@shared/components/page.component'; -import { ThemePalette } from '@angular/material/core'; - - -interface ActionButtonsWidgetSettings { - buttonsType: string, - buttonsClass: ThemePalette, - alignment: string -} - -@Component({ - selector: 'tb-action-buttons-widget', - templateUrl: './action-buttons.component.html', - styleUrls: ['./action-buttons.component.scss'] -}) -export class ActionButtonsComponent implements OnInit { - - @Input() - ctx: WidgetContext; - - settings: ActionButtonsWidgetSettings; - - constructor() { - } - - ngOnInit(): void { - this.settings = this.ctx.settings; - } - - actionButtonClick($event: MouseEvent, actionDescriptor: WidgetActionDescriptor) { - let entityId, entityName, entityLabel; - if (this.ctx.datasources) { - entityId = this.ctx.datasources[0].entity.id; - entityName = this.ctx.datasources[0].entityName; - entityLabel = this.ctx.datasources[0].entityLabel; - } - this.ctx.actionsApi.handleWidgetAction($event, actionDescriptor, entityId, entityName, null, entityLabel); - } - -} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html deleted file mode 100644 index 0cb70d331c..0000000000 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.html +++ /dev/null @@ -1,43 +0,0 @@ - -
- - widgets.action-buttons.button-type - - - {{type}} - - - - - widgets.action-buttons.button-class - - - {{class}} - - - - - widgets.action-buttons.alignment - - - {{type}} - - - -
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts deleted file mode 100644 index bc14843b0b..0000000000 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/cards/action-buttons-widget-settings.component.ts +++ /dev/null @@ -1,62 +0,0 @@ -/// -/// Copyright © 2016-2023 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. -/// - -import { Component } from '@angular/core'; -import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; -import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; - -@Component({ - selector: 'tb-action-buttons-widget-settings', - templateUrl: './action-buttons-widget-settings.component.html', - styleUrls: ['./../widget-settings.scss'] -}) -export class ActionButtonsWidgetSettingsComponent extends WidgetSettingsComponent { - - ActionButtonsSettingsForm: UntypedFormGroup; - - buttonTypes = ['basic', 'raised', 'stroked', 'flat']; - - buttonClasses = ['basic', 'primary', 'accent', 'warn']; - - alignment = ['center', 'start', 'end', 'normal', 'baseline', 'space-between', 'space-around', 'stretch']; - - constructor(protected store: Store, - private fb: UntypedFormBuilder) { - super(store); - } - - protected settingsForm(): UntypedFormGroup { - return this.ActionButtonsSettingsForm; - } - - protected defaultSettings(): WidgetSettings { - return { - buttonsType: 'basic', - buttonsClass: 'basic', - alignment: 'center' - }; - } - - protected onSettingsSet(settings: WidgetSettings) { - this.ActionButtonsSettingsForm = this.fb.group({ - buttonsType: [settings.buttonsType, []], - buttonsClass: [settings.buttonsClass, []], - alignment: [settings.alignment, []] - }); - } -} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts index 6ba665cf23..78793e6771 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts @@ -259,9 +259,6 @@ import { import { TripAnimationPointSettingsComponent } from '@home/components/widget/lib/settings/map/trip-animation-point-settings.component'; -import { - ActionButtonsWidgetSettingsComponent -} from '@home/components/widget/lib/settings/cards/action-buttons-widget-settings.component'; import { GatewayLogsSettingsComponent } from '@home/components/widget/lib/settings/gateway/gateway-logs-settings.component'; @@ -368,7 +365,6 @@ import { MapWidgetSettingsComponent, RouteMapWidgetSettingsComponent, TripAnimationWidgetSettingsComponent, - ActionButtonsWidgetSettingsComponent, GatewayLogsSettingsComponent, GatewayServiceRPCSettingsComponent ], @@ -474,7 +470,6 @@ import { MapWidgetSettingsComponent, RouteMapWidgetSettingsComponent, TripAnimationWidgetSettingsComponent, - ActionButtonsWidgetSettingsComponent, GatewayLogsSettingsComponent, GatewayServiceRPCSettingsComponent ] @@ -544,7 +539,6 @@ export const widgetSettingsComponentsMap: {[key: string]: Type gateway.statistics.send-period - + {{'gateway.statistics.send-period-required' | translate }} diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index 7b51e9c314..828d577855 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -100,8 +100,8 @@ export const securityTypesTranslationsMap = new Map( [ [SecurityTypes.ACCESS_TOKEN, 'gateway.security-types.access-token'], [SecurityTypes.USERNAME_PASSWORD, 'gateway.security-types.username-password'], - // [SecurityTypes.TLS_ACCESS_TOKEN, 'gateway.security-types.tls-access-token'], - [SecurityTypes.TLS_PRIVATE_KEY, 'gateway.security-types.tls-private-key'], + [SecurityTypes.TLS_ACCESS_TOKEN, 'gateway.security-types.tls-access-token'], + // [SecurityTypes.TLS_PRIVATE_KEY, 'gateway.security-types.tls-private-key'], ] ); @@ -152,7 +152,7 @@ export class GatewayConfigurationComponent implements OnInit { checkConnectorsConfigurationInSeconds: [60, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], statistics: this.fb.group({ enable: [true, []], - statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], + statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], commands: this.fb.array([], []) }), maxPayloadSizeBytes: [1024, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html index 158b03c3e0..840ca86d6d 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html @@ -17,7 +17,7 @@ --> - Command + {{'gateway.statistics.command' | translate}} {{command}} @@ -26,11 +26,11 @@ - Time + {{'gateway.statistics.timeout-ms' | translate}} - Parameters + {{'widget-config.datasource-parameters' | translate}} - Statistic + {{'gateway.statistics.statistic' | translate}} {{key}} @@ -29,12 +29,12 @@ + + + + - Timeout - - - - Command + {{'gateway.statistics.command' | translate}} diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 69261c8fac..cb5e9f3392 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2608,9 +2608,10 @@ "server-port": "Server port", "stats-send-period-in-sec": "Stats send period in seconds", "statistics": { + "statistic": "Statistic", "statistics": "Statistics", "commands": "Commands", - "send-period": "Statistic send period (in ms)", + "send-period": "Statistic send period (in sec)", "send-period-required": "Statistic send period is required", "send-period-min": "Statistic send period can not be less then 1", "send-period-pattern": "Statistic send period is not valid", @@ -2620,6 +2621,7 @@ "check-connectors-configuration-pattern": "Check connectors configuration is not valid", "add": "Add command", "timeout": "Timeout", + "timeout-ms": "Timeout (in ms)", "timeout-required": "Timeout is required", "timeout-min": "Timeout can not be less then 1", "timeout-pattern": "Timeout is not valid", @@ -2685,7 +2687,7 @@ "messages-ttl-in-days-pattern": "Number is not valid.", "mqtt-qos": "QoS", "mqtt-qos-required": "QoS is required", - "mqtt-qos-range": "QoS values range is from 0 to 2", + "mqtt-qos-range": "QoS values range is from 0 to 1", "tls-path-private-key": "Path to private key on gateway", "toggle-fullscreen": "Toggle fullscreen", "transformer-json-config": "Configuration JSON*", @@ -2726,7 +2728,7 @@ "check-device-activity": "Enables monitor the activity of each connected device", "inactivity-timeout": "Inactivity device time after whose the gateway will disconnect device", "inactivity-period": "Periodicity of device activity check", - "minimal-pack-delay": "Delay between sending packets (Decreasing this setting results in increased CPU usage", + "minimal-pack-delay": "Delay between sending packets (Decreasing this setting results in increased CPU usage)", "qos": "Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)" } }, From dc63ce47aabdc5b7c96c852f80072f3f9fd8a3a1 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 1 Jun 2023 11:00:42 +0300 Subject: [PATCH 041/120] fixes --- .../gateway-configuration.component.html | 275 +++++++++--------- 1 file changed, 135 insertions(+), 140 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index 7d71010130..5ff405538f 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -34,23 +34,23 @@
{{ 'gateway.remote-configuration' | translate }} - info {{ 'gateway.remote-shell' | translate }} - info gateway.thingsboard-host - info_outlined @@ -72,8 +72,8 @@ {{'gateway.thingsboard-port-pattern' | translate }} - info_outlined @@ -98,8 +98,8 @@ {{'security.access-token-required' | translate}} - info_outlined @@ -110,8 +110,8 @@ {{'security.clientId-required' | translate}} - info_outlined @@ -122,8 +122,8 @@ {{'security.username-required' | translate}} - info_outlined @@ -134,8 +134,8 @@ {{'security.password-required' | translate}} - info_outlined @@ -185,8 +185,8 @@ {{'gateway.logs.date-format-required' | translate }} - info_outlined @@ -196,95 +196,93 @@ {{'gateway.logs.log-format-required' | translate }} - info_outlined - - - {{'gateway.logs.remote' | translate}} - {{'gateway.logs.local' | translate}} - -
- - {{ 'gateway.logs.remote-logs' | translate }} - info - - - - gateway.logs.level - - {{logLevel}} - - -
-
- - - {{ logConfig.value }} - - -
- - gateway.logs.level - - {{logLevel}} - - - - gateway.logs.file-path - - - {{'gateway.logs.file-path-required' | translate }} - - - - gateway.logs.saving-period - - - {{'gateway.logs.saving-period-required' | translate }} - - - {{'gateway.logs.saving-period-min' | translate }} - - - - - - - {{period.value | translate}} - - - - - gateway.logs.backup-count - - - {{'gateway.logs.backup-count-required' | translate }} - - - {{'gateway.logs.backup-count-min' | translate }} - - info_outlined - - -
-
+
+ + + + gateway.logs.remote + + + {{ 'gateway.logs.remote-logs' | translate }} + info + + + + gateway.logs.level + + {{logLevel}} + + + + + + gateway.logs.local + + + + {{ logConfig.value }} + + +
+ + gateway.logs.level + + {{logLevel}} + + + + gateway.logs.file-path + + + {{'gateway.logs.file-path-required' | translate }} + + + + gateway.logs.saving-period + + + {{'gateway.logs.saving-period-required' | translate }} + + + {{'gateway.logs.saving-period-min' | translate }} + + + + + + + {{period.value | translate}} + + + + + gateway.logs.backup-count + + + {{'gateway.logs.backup-count-required' | translate }} + + + {{'gateway.logs.backup-count-min' | translate }} + + info_outlined + +
@@ -322,8 +320,8 @@ {{'gateway.storage-read-record-count-pattern' | translate}} - info_outlined
@@ -340,8 +338,8 @@ {{'gateway.storage-max-records-pattern' | translate}} - info_outlined
@@ -352,8 +350,8 @@ {{'gateway.storage-data-folder-path-required' | translate}} - info_outlined @@ -370,8 +368,8 @@ {{'gateway.storage-max-files-pattern' | translate}} - info_outlined @@ -388,8 +386,8 @@ {{'gateway.storage-max-read-record-count-pattern' | translate}} - info_outlined @@ -406,8 +404,8 @@ {{'gateway.storage-max-records-pattern' | translate}} - info_outlined @@ -418,8 +416,8 @@ {{'gateway.storage-path-required' | translate}} - info_outlined @@ -436,8 +434,8 @@ {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} - info_outlined @@ -454,8 +452,8 @@ {{'gateway.messages-ttl-in-days-pattern' | translate}} - info_outlined @@ -605,8 +603,8 @@ *ngIf="commandControl.get('attributeOnGateway').hasError('required')"> {{'gateway.statistics.attribute-name-required' | translate }} - info_outlined @@ -625,8 +623,8 @@ *ngIf="commandControl.get('timeout').hasError('pattern')"> {{'gateway.statistics.timeout-pattern' | translate }} - info_outlined @@ -637,8 +635,8 @@ *ngIf="commandControl.get('command').hasError('required')"> {{'gateway.statistics.command-required' | translate }} - info_outlined @@ -653,7 +651,6 @@ From b9f9cf494dc8eaa9c09e4884609136ce63694c61 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 1 Jun 2023 13:24:32 +0300 Subject: [PATCH 042/120] fixes --- .../device/gateway-logs.component.html | 3 + .../device/gateway-logs.component.ts | 6 +- .../device/gateway-statistics.component.html | 37 +++++++++--- .../device/gateway-statistics.component.scss | 4 ++ .../device/gateway-statistics.component.ts | 60 +++++++++++++++---- 5 files changed, 86 insertions(+), 24 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.html b/ui-ngx/src/app/shared/components/device/gateway-logs.component.html index bfd37aa53c..cc3a6d8731 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-logs.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.html @@ -53,5 +53,8 @@ +{{'attribute.no-telemetry-text' | translate}} diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts index 92b8b178b3..a3d5dea0bf 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts @@ -122,11 +122,10 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit protected attributeService: AttributeService, protected deviceService: DeviceService, protected dialogService: DialogService, - private cd: ChangeDetectorRef, public dialog: MatDialog) { super(store); const sortOrder: SortOrder = {property: 'ts', direction: Direction.DESC}; - this.pageLink = new PageLink(1000, 0, null, sortOrder); + this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); this.dataSource = new MatTableDataSource([]); } @@ -210,8 +209,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit return "status status-error"; case GatewayLogLevel.info: default: - return "status status-info" - return "status status-info" + return "status status-info"; } } diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html index d77aeb7d01..7a7581ab29 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -29,20 +29,43 @@ - - - - + + + + {{'gateway.statistics.command' | translate}}
-
+
-
-
+
+ + + Timestamp + + {{row[0]| date:'yyyy-MM-dd HH:mm:ss' }} + + + + Message + + {{ row[1] }} + + + + +
+ {{'attribute.no-telemetry-text' | translate}} +
diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss index ae3cb2615e..a96dababd5 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss @@ -33,6 +33,10 @@ flex-grow: 1; } + .chart-box { + overflow: auto; + } + & > * { height: 100%; } diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index 12e744983f..a65e56e2a3 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -35,6 +35,10 @@ import { DatasourceType, LegendConfig, LegendData, LegendPosition, widgetType } import { EntityType } from '@shared/models/entity-type.models'; import { EntityId } from '@shared/models/id/entity-id'; import { BaseData } from '@shared/models/base-data'; +import { PageLink } from "@shared/models/page/page-link"; +import { Direction, SortOrder } from "@shared/models/page/sort-order"; +import { MatTableDataSource } from "@angular/material/table"; +import { MatSort } from "@angular/material/sort"; @Component({ @@ -44,29 +48,36 @@ import { BaseData } from '@shared/models/base-data'; }) export class GatewayStatisticsComponent extends PageComponent implements AfterViewInit { + @ViewChild(MatSort) sort: MatSort; @ViewChild('statisticChart') statisticChart: ElementRef; @Input() ctx: WidgetContext; @Input() - general: boolean; - + public general: boolean; + public isNumericData: boolean = true; + public chartInited: boolean; private flot: TbFlot; private flotCtx; public statisticForm: FormGroup; public statisticsKeys = []; public commands = []; public commandObj: any; + public dataSource: MatTableDataSource; + public pageLink: PageLink; private resize$: ResizeObserver; private subscription: IWidgetSubscription; + private subscriptionInfo: SubscriptionInfo []; + public legendData: LegendData; + public displayedColumns: Array; private subscriptionOptions: WidgetSubscriptionOptions = { callbacks: { - onDataUpdated: (subscription, detectChanges) => this.ctx.ngZone.run(() => { + onDataUpdated: () => this.ctx.ngZone.run(() => { this.onDataUpdated(); }), onDataUpdateError: (subscription, e) => this.ctx.ngZone.run(() => { - this.onDataUpdateError(subscription, e); + this.onDataUpdateError(e); }) }, useDashboardTimewindow: false, @@ -74,8 +85,6 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi position: LegendPosition.bottom } as LegendConfig }; - private subscriptionInfo: SubscriptionInfo []; - public legendData: LegendData; constructor(protected router: Router, @@ -89,6 +98,10 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi private utils: UtilsService, public dialog: MatDialog) { super(store); + const sortOrder: SortOrder = {property: 'ts', direction: Direction.DESC}; + this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); + this.displayedColumns = ['ts', 'message']; + this.dataSource = new MatTableDataSource([]); this.statisticForm = this.fb.group({ statisticKey: [null, []] }) @@ -104,6 +117,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi ngAfterViewInit() { + this.dataSource.sort = this.sort; this.init(); if (this.ctx.defaultSubscription.datasources.length) { @@ -211,7 +225,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } } - private onDataUpdateError(subscription: IWidgetSubscription, e: any) { + private onDataUpdateError( e: any) { const exceptionData = this.utils.parseException(e); let errorText = exceptionData.name; if (exceptionData.message) { @@ -221,11 +235,31 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } private onDataUpdated() { - if (this.flot) { - this.flot.update(); + this.checkDataToBeNumeric(); + if (this.isNumericData) { + if (this.chartInited) { + if (this.flot) { + this.flot.update(); + } + } else { + this.initChart(); + } } } + private initChart() { + this.chartInited = true; + this.flotCtx.$container = $(this.statisticChart.nativeElement); + this.resize$.observe(this.statisticChart.nativeElement); + this.flot = new TbFlot(this.flotCtx as WidgetContext, "line"); + this.flot.update(); + } + + private checkDataToBeNumeric() { + this.dataSource.data = this.subscription.data.length ? this.subscription.data[0].data : []; + this.isNumericData = this.dataSource.data.every(data => isNaN(data[1]) === false); + } + changeSubscription(subscriptionInfo: SubscriptionInfo[]) { if (this.subscription) { @@ -234,16 +268,16 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi if (this.ctx.datasources[0].entity) { this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.timeseries, subscriptionInfo, this.subscriptionOptions, false, true).subscribe(subscription => { this.subscription = subscription; + this.checkDataToBeNumeric(); this.legendData = this.subscription.legendData; this.flotCtx.defaultSubscription = subscription; - this.flotCtx.$container = $(this.statisticChart.nativeElement); this.resize$ = new ResizeObserver(() => { this.resize(); }); - this.resize$.observe(this.statisticChart.nativeElement); this.ctx.detectChanges(); - this.flot = new TbFlot(this.flotCtx as WidgetContext, "line"); - this.flot.update(); + if (this.isNumericData) { + this.initChart(); + } }) } From db83e47401c0b4be83b19ea36f20de38626a2831 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 1 Jun 2023 13:57:21 +0300 Subject: [PATCH 043/120] fixes --- .../device/gateway-configuration.component.ts | 6 ++--- .../device/gateway-logs.component.ts | 22 +++++++--------- .../device/gateway-service-rpc.component.ts | 3 +-- .../device/gateway-statistics.component.html | 4 +-- .../device/gateway-statistics.component.ts | 26 ++++++++++++++----- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index 828d577855..541e149311 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -28,9 +28,9 @@ import { GatewayRemoteConfigurationDialogData } from '@shared/components/dialog/gateway-remote-configuration-dialog'; import { DeviceService } from '@core/http/device.service'; -import { of } from "rxjs"; -import { mergeMap } from "rxjs/operators"; -import { DeviceCredentialsType } from "@shared/models/device.models"; +import { of } from 'rxjs'; +import { mergeMap } from 'rxjs/operators'; +import { DeviceCredentialsType } from '@shared/models/device.models'; export enum StorageTypes { MEMORY = 'memory', diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts index a3d5dea0bf..eff5e67f19 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts @@ -14,7 +14,7 @@ /// limitations under the License. /// -import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Router } from '@angular/router'; @@ -24,18 +24,18 @@ import { AttributeService } from '@core/http/attribute.service'; import { DeviceService } from '@core/http/device.service'; import { TranslateService } from '@ngx-translate/core'; import { AttributeData, DataKeyType } from '@shared/models/telemetry/telemetry.models'; -import { PageComponent } from "@shared/components/page.component"; -import { PageLink } from "@shared/models/page/page-link"; +import { PageComponent } from '@shared/components/page.component'; +import { PageLink } from '@shared/models/page/page-link'; import { AttributeDatasource } from "@home/models/datasource/attribute-datasource"; import { Direction, SortOrder } from "@shared/models/page/sort-order"; -import { MatSort } from "@angular/material/sort"; -import { MatTableDataSource } from "@angular/material/table"; -import { GatewayLogLevel } from "@shared/components/device/gateway-configuration.component"; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { GatewayLogLevel } from '@shared/components/device/gateway-configuration.component'; import { DialogService } from '@app/core/services/dialog.service'; -import { WidgetContext } from "@home/models/widget-component.models"; +import { WidgetContext } from '@home/models/widget-component.models'; -export interface gatewayConnector { +export interface GatewayConnector { name: string; type: string; configuration?: string; @@ -90,7 +90,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit logLinks: Array; - initialConnector: gatewayConnector; + initialConnector: GatewayConnector; activeLink: LogLink; @@ -139,10 +139,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit return timewindow; } if (this.ctx.settings.isConnectorLog && this.ctx.settings.connectorLogState) { - console.log(this.ctx.settings.connectorLogState) - const connector = this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState]; - console.log(connector) this.logLinks = [{ key: `${connector.key}_LOGS`, name: "Connector", @@ -166,7 +163,6 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit updateData(sort?) { if (this.ctx.defaultSubscription.data.length) { - console.log(this.ctx.defaultSubscription.data[0].dataKey.name === "LOGS") let attrData = this.ctx.defaultSubscription.data[0].data.map(data => { let result = { ts: data[0], diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts index f4a9655cc0..52e687b3a9 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -30,7 +30,7 @@ import { ContentType } from '@shared/models/constants'; import { JsonObjectEditDialogComponent, JsonObjectEditDialogData -} from "@shared/components/dialog/json-object-edit-dialog.component"; +} from '@shared/components/dialog/json-object-edit-dialog.component'; @Component({ @@ -70,7 +70,6 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi protected attributeService: AttributeService, protected deviceService: DeviceService, protected dialogService: DialogService, - private cd: ChangeDetectorRef, public dialog: MatDialog) { super(store); this.commandForm = this.fb.group({ diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html index 7a7581ab29..b98d481f6d 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -45,13 +45,13 @@ - + Timestamp {{row[0]| date:'yyyy-MM-dd HH:mm:ss' }} - + Message {{ row[1] }} diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index a65e56e2a3..93945f69c9 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -35,10 +35,10 @@ import { DatasourceType, LegendConfig, LegendData, LegendPosition, widgetType } import { EntityType } from '@shared/models/entity-type.models'; import { EntityId } from '@shared/models/id/entity-id'; import { BaseData } from '@shared/models/base-data'; -import { PageLink } from "@shared/models/page/page-link"; -import { Direction, SortOrder } from "@shared/models/page/sort-order"; -import { MatTableDataSource } from "@angular/material/table"; -import { MatSort } from "@angular/material/sort"; +import { PageLink } from '@shared/models/page/page-link'; +import { Direction, SortOrder } from '@shared/models/page/sort-order'; +import { MatTableDataSource } from '@angular/material/table'; +import { MatSort } from '@angular/material/sort'; @Component({ @@ -56,6 +56,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi @Input() public general: boolean; + public isNumericData: boolean = true; public chartInited: boolean; private flot: TbFlot; @@ -98,9 +99,9 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi private utils: UtilsService, public dialog: MatDialog) { super(store); - const sortOrder: SortOrder = {property: 'ts', direction: Direction.DESC}; + const sortOrder: SortOrder = {property: '0', direction: Direction.DESC}; this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); - this.displayedColumns = ['ts', 'message']; + this.displayedColumns = ['0', '1']; this.dataSource = new MatTableDataSource([]); this.statisticForm = this.fb.group({ statisticKey: [null, []] @@ -118,6 +119,9 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi ngAfterViewInit() { this.dataSource.sort = this.sort; + this.sort.sortChange.subscribe(_=>{ + this.sortData(); + }) this.init(); if (this.ctx.defaultSubscription.datasources.length) { @@ -147,6 +151,10 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } } + public sortData () { + this.dataSource.sortData(this.dataSource.data, this.sort); + } + public onLegendKeyHiddenChange(index: number) { this.legendData.keys[index].dataKey.hidden = !this.legendData.keys[index].dataKey.hidden; this.subscription.updateDataVisibility(index); @@ -225,7 +233,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } } - private onDataUpdateError( e: any) { + private onDataUpdateError(e: any) { const exceptionData = this.utils.parseException(e); let errorText = exceptionData.name; if (exceptionData.message) { @@ -256,6 +264,10 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } private checkDataToBeNumeric() { + if (this.general) { + this.isNumericData = true; + return; + } this.dataSource.data = this.subscription.data.length ? this.subscription.data[0].data : []; this.isNumericData = this.dataSource.data.every(data => isNaN(data[1]) === false); } From 3c916454c29c82521f2ea0ad5ba0ff5f81f42d5e Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 1 Jun 2023 16:40:00 +0300 Subject: [PATCH 044/120] fixes --- .../components/device/gateway-connectors.component.ts | 6 +++--- .../components/device/gateway-service-rpc.component.ts | 2 +- .../components/device/gateway-statistics.component.ts | 9 +++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 7049f6e236..20aa4be780 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -216,7 +216,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (attributesToDelete.length) { tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToDelete)); } - forkJoin(tasks).subscribe(resp => { + forkJoin(tasks).subscribe(_ => { this.showToast("Update Successful") this.updateData(true); }) @@ -327,7 +327,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors }])); - forkJoin(tasks).subscribe(resp => { + forkJoin(tasks).subscribe(_ => { if (this.initialConnector ? this.initialConnector.name === attribute.key : true) { this.clearOutConnectorForm(); this.cd.detectChanges(); @@ -381,7 +381,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }]), this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, [{ key: 'inactive_connectors', value: this.inactiveConnectors - }]),]).subscribe(resp => { + }]),]).subscribe(_ => { this.updateData(); }) } diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts index 52e687b3a9..233304bf54 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -14,7 +14,7 @@ /// limitations under the License. /// -import { AfterViewInit, ChangeDetectorRef, Component, Input } from '@angular/core'; +import { AfterViewInit, Component, Input } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Router } from '@angular/router'; diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index 93945f69c9..369b88afe9 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -39,6 +39,7 @@ import { PageLink } from '@shared/models/page/page-link'; import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { MatTableDataSource } from '@angular/material/table'; import { MatSort } from '@angular/material/sort'; +import { isNumber } from '@core/utils'; @Component({ @@ -243,7 +244,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi } private onDataUpdated() { - this.checkDataToBeNumeric(); + this.isDataOnlyNumbers(); if (this.isNumericData) { if (this.chartInited) { if (this.flot) { @@ -263,13 +264,13 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi this.flot.update(); } - private checkDataToBeNumeric() { + private isDataOnlyNumbers() { if (this.general) { this.isNumericData = true; return; } this.dataSource.data = this.subscription.data.length ? this.subscription.data[0].data : []; - this.isNumericData = this.dataSource.data.every(data => isNaN(data[1]) === false); + this.isNumericData = this.dataSource.data.every(data => isNumber(data[1])); } @@ -280,7 +281,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi if (this.ctx.datasources[0].entity) { this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.timeseries, subscriptionInfo, this.subscriptionOptions, false, true).subscribe(subscription => { this.subscription = subscription; - this.checkDataToBeNumeric(); + this.isDataOnlyNumbers(); this.legendData = this.subscription.legendData; this.flotCtx.defaultSubscription = subscription; this.resize$ = new ResizeObserver(() => { From ae3bdc1687488e574d61c988de6be6394b1337f6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 2 Jun 2023 10:37:14 +0300 Subject: [PATCH 045/120] fixes --- .../components/device/gateway-configuration.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index 5ff405538f..fb38c63a90 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -732,7 +732,7 @@ gateway.mqtt-qos - + {{ 'gateway.mqtt-qos-required' | translate}} From a6d7b46b38b0c3929d298280530f5f95d82ded86 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 2 Jun 2023 11:46:33 +0300 Subject: [PATCH 046/120] fixes --- .../components/device/gateway-connectors.component.ts | 2 +- .../components/device/gateway-service-rpc.component.ts | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 20aa4be780..87c9c3c669 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -358,7 +358,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie $event.stopPropagation(); } const params = deepClone(this.ctx.stateController.getStateParams()); - params.connector_logs = attribute; + params.connector_rpc = attribute; params.targetEntityParamName = "connector_rpc"; this.ctx.stateController.openState("connector_rpc", params); } diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts index 233304bf54..ab29766fd0 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -52,6 +52,8 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi isConnector: boolean; + connectorType: string; + RPCCommands: Array = [ "Ping", "Stats", @@ -87,13 +89,16 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi this.isConnector = this.ctx.settings.isConnector; if (!this.isConnector) { this.commandForm.get('command').setValue(this.RPCCommands[0]); + } else { + this.connectorType = this.ctx.stateController.getStateParams().connector_rpc.value.type; } } sendCommand() { const formValues = this.commandForm.value; - this.ctx.controlApi.sendTwoWayCommand('gateway_'+formValues.command.toLowerCase(), {},formValues.time).subscribe(resp=>{ + const commandPrefix = this.isConnector ? `${this.connectorType}_` : 'gateway_'; + this.ctx.controlApi.sendTwoWayCommand(commandPrefix+formValues.command.toLowerCase(), {},formValues.time).subscribe(resp=>{ this.commandForm.get('result').setValue(JSON.stringify(resp)); },error => { console.log(error); From 15e08b79194e7509030d1aa12a84b709ed8f503a Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 2 Jun 2023 12:04:06 +0300 Subject: [PATCH 047/120] fixes --- .../app/shared/components/device/gateway-connectors.component.ts | 1 + .../shared/components/device/gateway-service-rpc.component.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 87c9c3c669..dd06a9fdb4 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -360,6 +360,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_rpc = attribute; params.targetEntityParamName = "connector_rpc"; + console.log(attribute, 'connector page') this.ctx.stateController.openState("connector_rpc", params); } diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts index ab29766fd0..a21727b91d 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -91,6 +91,7 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi this.commandForm.get('command').setValue(this.RPCCommands[0]); } else { this.connectorType = this.ctx.stateController.getStateParams().connector_rpc.value.type; + console.log(this.ctx.stateController.getStateParams().connector_rpc, 'rpc page') } } From 2be23ba39aee778ac956245fbd06a9bbe8cac839 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 2 Jun 2023 12:16:50 +0300 Subject: [PATCH 048/120] fixes --- .../shared/components/device/gateway-connectors.component.ts | 4 ++-- .../shared/components/device/gateway-service-rpc.component.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index dd06a9fdb4..9034ced4d5 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -347,8 +347,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if ($event) { $event.stopPropagation(); } + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); - params.connector_logs = attribute; params.targetEntityParamName = "connector_logs"; this.ctx.stateController.openState("connector_logs", params); } @@ -357,10 +357,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if ($event) { $event.stopPropagation(); } + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_rpc = attribute; params.targetEntityParamName = "connector_rpc"; - console.log(attribute, 'connector page') this.ctx.stateController.openState("connector_rpc", params); } diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts index a21727b91d..ab29766fd0 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -91,7 +91,6 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi this.commandForm.get('command').setValue(this.RPCCommands[0]); } else { this.connectorType = this.ctx.stateController.getStateParams().connector_rpc.value.type; - console.log(this.ctx.stateController.getStateParams().connector_rpc, 'rpc page') } } From c9b9959f47d696ef012c283ff45adc8879ba4b48 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Sat, 8 Apr 2023 00:57:57 +0300 Subject: [PATCH 049/120] mk2 gateway dashboard --- .../widget_bundles/gateway_widgets.json | 143 +++- ui-ngx/src/app/core/utils.ts | 7 + ui-ngx/src/app/modules/common/modules-map.ts | 15 + .../device/device-credentials.module.ts | 6 +- .../device-example-command.component.html | 86 ++ .../device-example-command.component.scss | 41 + .../device-example-command.component.ts | 98 +++ .../gateway-command-dialog.component.html | 41 - .../gateway-command-dialog.component.ts | 58 -- .../gateway/gateway-list-table-config.ts | 130 --- .../gateway/gateway-list.component.ts | 63 -- .../home/components/home-components.module.ts | 3 - .../shared-home-components.module.ts | 3 - .../gateway-logs-settings.component.html | 26 + .../gateway-logs-settings.component.ts | 54 ++ ...teway-service-rpc-settings.component.html} | 8 +- .../gateway-service-rpc-settings.component.ts | 52 ++ .../lib/settings/widget-settings.module.ts | 19 +- .../device-wizard-dialog.component.html | 15 +- .../device-wizard-dialog.component.scss | 4 + .../wizard/device-wizard-dialog.component.ts | 41 +- .../device-gateway-command.component.html | 12 +- .../device-gateway-command.component.ts | 58 +- .../gateway-configuration.component.html | 789 ++++++++++++++++++ .../gateway-configuration.component.scss | 201 +++++ .../device/gateway-configuration.component.ts | 589 +++++++++++++ .../device/gateway-connectors.component.html | 167 ++++ .../device/gateway-connectors.component.scss | 90 ++ .../device/gateway-connectors.component.ts | 390 +++++++++ .../device/gateway-logs.component.html | 60 ++ .../device/gateway-logs.component.scss | 55 ++ .../device/gateway-logs.component.ts | 234 ++++++ .../device/gateway-service-rpc.component.html | 49 ++ .../gateway-service-rpc.component.scss} | 42 +- .../device/gateway-service-rpc.component.ts | 128 +++ .../device/gateway-statistics.component.html | 81 ++ .../device/gateway-statistics.component.scss | 78 ++ .../device/gateway-statistics.component.ts | 299 +++++++ .../gateway-remote-configuration-dialog.html | 57 ++ .../gateway-remote-configuration-dialog.ts | 61 ++ .../components/file-input.component.html | 13 +- .../components/file-input.component.scss | 4 + .../shared/components/file-input.component.ts | 3 + ui-ngx/src/app/shared/shared.module.ts | 26 +- .../assets/locale/locale.constant-en_US.json | 215 ++++- 45 files changed, 4206 insertions(+), 408 deletions(-) create mode 100644 ui-ngx/src/app/modules/home/components/device/device-example-command.component.html create mode 100644 ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss create mode 100644 ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts delete mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html delete mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts delete mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts delete mode 100644 ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts rename ui-ngx/src/app/modules/home/components/{gateway/gateway-list.component.html => widget/lib/settings/gateway/gateway-service-rpc-settings.component.html} (68%) create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts rename ui-ngx/src/app/{modules/home => shared}/components/device/device-gateway-command.component.html (80%) rename ui-ngx/src/app/{modules/home => shared}/components/device/device-gateway-command.component.ts (63%) create mode 100644 ui-ngx/src/app/shared/components/device/gateway-configuration.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-connectors.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-logs.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-logs.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-logs.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html rename ui-ngx/src/app/{modules/home/components/gateway/gateway-list.component.scss => shared/components/device/gateway-service-rpc.component.scss} (59%) create mode 100644 ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts create mode 100644 ui-ngx/src/app/shared/components/device/gateway-statistics.component.html create mode 100644 ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss create mode 100644 ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts create mode 100644 ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html create mode 100644 ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index bf94b2c5b5..076a247904 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -3,9 +3,30 @@ "alias": "gateway_widgets", "title": "Gateway widgets", "image": "data:image/png;base64,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", - "description": "Widgets to manage ThingsBoard IoT Gateway." + "description": "Widgets to manage ThingsBoard IoT Gateway.", + "externalId": null, + "name": "Gateway widgets" }, "widgetTypes": [ + { + "alias": "attributes_card", + "name": "Gateway events", + "image": "data:image/png;base64,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", + "description": "Allows to browse events from the gateway.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", + "controllerScript": "let types;\nlet eventsReg = \"eventsReg\";\n\nself.onInit = function() {\n \n self.ctx.datasourceTitleCells = [];\n self.ctx.valueCells = [];\n self.ctx.labelCells = [];\n\n if (self.ctx.datasources.length && self.ctx.datasources[0].type === 'entity') {\n getDatasourceKeys(self.ctx.datasources[0]);\n } else {\n processDatasources(self.ctx.datasources);\n }\n}\n\nself.onDataUpdated = function() {\n for (var i = 0; i < self.ctx.valueCells.length; i++) {\n var cellData = self.ctx.data[i];\n if (cellData && cellData.data && cellData.data.length > 0) {\n var tvPair = cellData.data[cellData.data.length -\n 1];\n var value = tvPair[1];\n var textValue;\n //toDo -> + IsNumber\n \n if (isNumber(value)) {\n var decimals = self.ctx.decimals;\n var units = self.ctx.units;\n if (cellData.dataKey.decimals || cellData.dataKey.decimals === 0) {\n decimals = cellData.dataKey.decimals;\n }\n if (cellData.dataKey.units) {\n units = cellData.dataKey.units;\n }\n txtValue = self.ctx.utils.formatValue(value, decimals, units, false);\n }\n else {\n txtValue = value;\n }\n self.ctx.valueCells[i].html(txtValue);\n }\n }\n \n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n}\n\nself.onResize = function() {\n var datasourceTitleFontSize = self.ctx.height/8;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n datasourceTitleFontSize = self.ctx.width/12;\n }\n datasourceTitleFontSize = Math.min(datasourceTitleFontSize, 20);\n for (var i = 0; i < self.ctx.datasourceTitleCells.length; i++) {\n self.ctx.datasourceTitleCells[i].css('font-size', datasourceTitleFontSize+'px');\n }\n var valueFontSize = self.ctx.height/9;\n var labelFontSize = self.ctx.height/9;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n valueFontSize = self.ctx.width/15;\n labelFontSize = self.ctx.width/15;\n }\n valueFontSize = Math.min(valueFontSize, 18);\n labelFontSize = Math.min(labelFontSize, 18);\n\n for (i = 0; i < self.ctx.valueCells; i++) {\n self.ctx.valueCells[i].css('font-size', valueFontSize+'px');\n self.ctx.valueCells[i].css('height', valueFontSize*2.5+'px');\n self.ctx.valueCells[i].css('padding', '0px ' + valueFontSize + 'px');\n self.ctx.labelCells[i].css('font-size', labelFontSize+'px');\n self.ctx.labelCells[i].css('height', labelFontSize*2.5+'px');\n self.ctx.labelCells[i].css('padding', '0px ' + labelFontSize + 'px');\n } \n}\n\nfunction processDatasources(datasources) {\n var i = 0;\n var tbDatasource = datasources[i];\n var datasourceId = 'tbDatasource' + i;\n self.ctx.$container.append(\n \"
\"\n );\n\n var datasourceContainer = $('#' + datasourceId,\n self.ctx.$container);\n\n datasourceContainer.append(\n \"
\" +\n tbDatasource.name + \"
\"\n );\n \n var datasourceTitleCell = $('.tbDatasource-title', datasourceContainer);\n self.ctx.datasourceTitleCells.push(datasourceTitleCell);\n \n var tableId = 'table' + i;\n datasourceContainer.append(\n \"
\"\n );\n var table = $('#' + tableId, self.ctx.$container);\n\n for (var a = 0; a < tbDatasource.dataKeys.length; a++) {\n var dataKey = tbDatasource.dataKeys[a];\n var labelCellId = 'labelCell' + a;\n var cellId = 'cell' + a;\n table.append(\"\" + dataKey.label +\n \"\");\n var labelCell = $('#' + labelCellId, table);\n self.ctx.labelCells.push(labelCell);\n var valueCell = $('#' + cellId, table);\n self.ctx.valueCells.push(valueCell);\n }\n self.onResize();\n}\n\nfunction getDatasourceKeys (datasource) {\n let entityService = self.ctx.$scope.$injector.get(self.ctx.servicesMap.get('entityService'));\n if (datasource.entityId && datasource.entityType) {\n entityService.getEntityKeys({entityType: datasource.entityType, id: datasource.entityId}, '', 'timeseries').subscribe(\n function(data){\n if (data.length) {\n subscribeForKeys (datasource, data);\n }\n });\n }\n}\n\nfunction subscribeForKeys (datasource, data) {\n let eventsRegVals = self.ctx.settings[eventsReg];\n if (eventsRegVals && eventsRegVals.length > 0) {\n var dataKeys = [];\n data.sort();\n data.forEach(dataValue => {eventsRegVals.forEach(event => {\n if (dataValue.toLowerCase().includes(event.toLowerCase())) {\n var dataKey = {\n type: 'timeseries',\n name: dataValue,\n label: dataValue,\n settings: {},\n _hash: Math.random()\n };\n dataKeys.push(dataKey);\n }\n })});\n\n if (dataKeys.length) {\n updateSubscription (datasource, dataKeys);\n }\n }\n}\n\nfunction updateSubscription (datasource, dataKeys) {\n var datasources = [\n {\n type: 'entity',\n name: datasource.aliasName,\n aliasName: datasource.aliasName,\n entityAliasId: datasource.entityAliasId,\n dataKeys: dataKeys\n }\n ];\n \n var subscriptionOptions = {\n datasources: datasources,\n useDashboardTimewindow: false,\n type: 'latest',\n callbacks: {\n onDataUpdated: (subscription) => {\n self.ctx.data = subscription.data;\n self.onDataUpdated();\n }\n }\n };\n \n processDatasources(datasources);\n self.ctx.subscriptionApi.createSubscription(subscriptionOptions, true).subscribe(\n (subscription) => {\n self.ctx.defaultSubscription = subscription;\n }\n );\n}\n\nself.onDestroy = function() {\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\t\n dataKeysOptional: true,\n singleEntity: true\n };\n}\n\n", + "settingsSchema": "", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-events-widget-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Function Math.round\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.826503672916844,\"funcBody\":\"return Math.round(1000*Math.sin(time/5000));\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"eventsTitle\":\"Gateway Events Form\",\"eventsReg\":[]},\"title\":\"Gateway events\",\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}" + } + }, { "alias": "gateway_configuration", "name": "Gateway Configuration", @@ -26,22 +47,21 @@ } }, { - "alias": "attributes_card", - "name": "Gateway events", - "image": "data:image/png;base64,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", - "description": "Allows to browse events from the gateway.", + "alias": "gateway_configuration2", + "name": "Gateway configuration", + "image": "data:image/jpeg;base64,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ii3bMj5ytRKUXRfXI+nX7lP95c2MS6LR7nIvE14C9kW6GU4nLsXkYCIm5VnZTleH1fVnWyF/wX95ejZo6ShCqymG/tu8Elrxk1meelEtkETXy0kFCPJR7A2kGdGclcdgy1UpJ+5Qj2Tt8dxWPimMdaz1OQgGDgn7u6M7W56sYqWBxeHmuuY9s3ibzTRlJCXt9vfTRgsrPMoG5qCPa1Ys0Wtf78EanZWpf77hs3eInbO2sdGsG1WbBGGhm7ZVk2M1afGWc0ThYVu3XZNncbGv8c71GPYN6t6tv3kladrTLrNl3FvQLvBM6vKyFbsWT6Hta312UYwfUpSlOn7xZFFwkdBdrFxbBudowVg4RVq3ZK4jb46LkGhojJM9DmzaO51KVdHjYxR8nJqfvHTRo+bqNXxIqLSZ0j0lGjNdX46ySKaCREUDxMSd6WTP+8ctmrxBRq8TjItBiaNQXhYRcqBVTx7A6rVYy8NDOmabBwvHx61WlVlIyMVarMVFomKcsyRzhJFJBIiKH7xCLimjld2zUiopVRwserZp8RwqVGGhm7ZVk2/YQRqdlal/9Tp19m4I1OytSgyhymqUZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScGdH6V6eLj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/FsKXkVitufxzeHpSjg9KdBknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScJnMf7x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am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq5xJ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AXzHXy1t/wDd1/s/vv8A1rb/AO7r/Z/ff+tbf/d15AX3/rW3/wB3XkDfP+vbP/d15A3z96vWzG6VUVmysEqaT/LjJloPSgAgq2JL7yqSJ1U2otCqkqqqkZmS5IzJdZGS61Vdar5tS9GKwqdFNb0prelNb0prelNb0prelNb0prelNb0prelYSv4r5ualRf2dNDvSmt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6VhOvzpWCToprelNb0prelNb0prelNb0prelNb0prelNb0prelNb0prelBjHSq0uVTo8+r99N/Cmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp8+pejFYVOimt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp/xb0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXz6sU5upzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3Uuscfxz5lxqzTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFOb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qb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41LZkNo4oKbLguIioiZTI5wuvzXaGw+GjpNuvgBjkUVMiq9VX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NT48lG9DT5B0HNHSzjOiq4zjzXOJHcVtDQHngAsKqpnBLzaqv1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV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", + "description": "Allows to create or edit gateway configuration.", "descriptor": { "type": "latest", - "sizeX": 7.5, + "sizeX": 11, "sizeY": 8, "resources": [], - "templateHtml": "", - "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", - "controllerScript": "let types;\nlet eventsReg = \"eventsReg\";\n\nself.onInit = function() {\n \n self.ctx.datasourceTitleCells = [];\n self.ctx.valueCells = [];\n self.ctx.labelCells = [];\n\n if (self.ctx.datasources.length && self.ctx.datasources[0].type === 'entity') {\n getDatasourceKeys(self.ctx.datasources[0]);\n } else {\n processDatasources(self.ctx.datasources);\n }\n}\n\nself.onDataUpdated = function() {\n for (var i = 0; i < self.ctx.valueCells.length; i++) {\n var cellData = self.ctx.data[i];\n if (cellData && cellData.data && cellData.data.length > 0) {\n var tvPair = cellData.data[cellData.data.length -\n 1];\n var value = tvPair[1];\n var textValue;\n //toDo -> + IsNumber\n \n if (isNumber(value)) {\n var decimals = self.ctx.decimals;\n var units = self.ctx.units;\n if (cellData.dataKey.decimals || cellData.dataKey.decimals === 0) {\n decimals = cellData.dataKey.decimals;\n }\n if (cellData.dataKey.units) {\n units = cellData.dataKey.units;\n }\n txtValue = self.ctx.utils.formatValue(value, decimals, units, false);\n }\n else {\n txtValue = value;\n }\n self.ctx.valueCells[i].html(txtValue);\n }\n }\n \n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n}\n\nself.onResize = function() {\n var datasourceTitleFontSize = self.ctx.height/8;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n datasourceTitleFontSize = self.ctx.width/12;\n }\n datasourceTitleFontSize = Math.min(datasourceTitleFontSize, 20);\n for (var i = 0; i < self.ctx.datasourceTitleCells.length; i++) {\n self.ctx.datasourceTitleCells[i].css('font-size', datasourceTitleFontSize+'px');\n }\n var valueFontSize = self.ctx.height/9;\n var labelFontSize = self.ctx.height/9;\n if (self.ctx.width/self.ctx.height <= 1.5) {\n valueFontSize = self.ctx.width/15;\n labelFontSize = self.ctx.width/15;\n }\n valueFontSize = Math.min(valueFontSize, 18);\n labelFontSize = Math.min(labelFontSize, 18);\n\n for (i = 0; i < self.ctx.valueCells; i++) {\n self.ctx.valueCells[i].css('font-size', valueFontSize+'px');\n self.ctx.valueCells[i].css('height', valueFontSize*2.5+'px');\n self.ctx.valueCells[i].css('padding', '0px ' + valueFontSize + 'px');\n self.ctx.labelCells[i].css('font-size', labelFontSize+'px');\n self.ctx.labelCells[i].css('height', labelFontSize*2.5+'px');\n self.ctx.labelCells[i].css('padding', '0px ' + labelFontSize + 'px');\n } \n}\n\nfunction processDatasources(datasources) {\n var i = 0;\n var tbDatasource = datasources[i];\n var datasourceId = 'tbDatasource' + i;\n self.ctx.$container.append(\n \"
\"\n );\n\n var datasourceContainer = $('#' + datasourceId,\n self.ctx.$container);\n\n datasourceContainer.append(\n \"
\" +\n tbDatasource.name + \"
\"\n );\n \n var datasourceTitleCell = $('.tbDatasource-title', datasourceContainer);\n self.ctx.datasourceTitleCells.push(datasourceTitleCell);\n \n var tableId = 'table' + i;\n datasourceContainer.append(\n \"
\"\n );\n var table = $('#' + tableId, self.ctx.$container);\n\n for (var a = 0; a < tbDatasource.dataKeys.length; a++) {\n var dataKey = tbDatasource.dataKeys[a];\n var labelCellId = 'labelCell' + a;\n var cellId = 'cell' + a;\n table.append(\"\" + dataKey.label +\n \"\");\n var labelCell = $('#' + labelCellId, table);\n self.ctx.labelCells.push(labelCell);\n var valueCell = $('#' + cellId, table);\n self.ctx.valueCells.push(valueCell);\n }\n self.onResize();\n}\n\nfunction getDatasourceKeys (datasource) {\n let entityService = self.ctx.$scope.$injector.get(self.ctx.servicesMap.get('entityService'));\n if (datasource.entityId && datasource.entityType) {\n entityService.getEntityKeys({entityType: datasource.entityType, id: datasource.entityId}, '', 'timeseries').subscribe(\n function(data){\n if (data.length) {\n subscribeForKeys (datasource, data);\n }\n });\n }\n}\n\nfunction subscribeForKeys (datasource, data) {\n let eventsRegVals = self.ctx.settings[eventsReg];\n if (eventsRegVals && eventsRegVals.length > 0) {\n var dataKeys = [];\n data.sort();\n data.forEach(dataValue => {eventsRegVals.forEach(event => {\n if (dataValue.toLowerCase().includes(event.toLowerCase())) {\n var dataKey = {\n type: 'timeseries',\n name: dataValue,\n label: dataValue,\n settings: {},\n _hash: Math.random()\n };\n dataKeys.push(dataKey);\n }\n })});\n\n if (dataKeys.length) {\n updateSubscription (datasource, dataKeys);\n }\n }\n}\n\nfunction updateSubscription (datasource, dataKeys) {\n var datasources = [\n {\n type: 'entity',\n name: datasource.aliasName,\n aliasName: datasource.aliasName,\n entityAliasId: datasource.entityAliasId,\n dataKeys: dataKeys\n }\n ];\n \n var subscriptionOptions = {\n datasources: datasources,\n useDashboardTimewindow: false,\n type: 'latest',\n callbacks: {\n onDataUpdated: (subscription) => {\n self.ctx.data = subscription.data;\n self.onDataUpdated();\n }\n }\n };\n \n processDatasources(datasources);\n self.ctx.subscriptionApi.createSubscription(subscriptionOptions, true).subscribe(\n (subscription) => {\n self.ctx.defaultSubscription = subscription;\n }\n );\n}\n\nself.onDestroy = function() {\n}\n\nself.typeParameters = function() {\n return {\n maxDatasources: 1,\t\n dataKeysOptional: true,\n singleEntity: true\n };\n}\n\n", - "settingsSchema": "", + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", - "settingsDirective": "tb-gateway-events-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Function Math.round\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.826503672916844,\"funcBody\":\"return Math.round(1000*Math.sin(time/5000));\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"eventsTitle\":\"Gateway Events Form\",\"eventsReg\":[]},\"title\":\"Gateway events\",\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}" + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" } }, { @@ -64,22 +84,103 @@ } }, { - "alias": "gateway_list", - "name": "Gateway list", - "image": null, + "alias": "gateway_connector", + "name": "Gateway connector", + "image": "data:image/jpeg;base64,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iikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/AK4J/wChPV6qP/MxN/1wT/0J6vUAFFFFAEN9/wAer/SmaN/yB7X/AK4p/wCgin33/Hq/0pmjf8ge1/64p/6CKALNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0qPRW3aPa4/wCeSj9BQBaooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArw7/gpb8YfEf7P/7Avxa8beEdR/snxN4Z8N3V/pt59niuPs06LlX8uVWjbHoyke1e4180/wDBZH/lFl8eP+xPvf8A0CgDwb9l/wDZ7/bI+PvwN8DePpv22v7Ph8V6VaaxJpv/AAp7Q5fJWVFkMPmh1LYBxuCj1wK+hfjT/wAFWP2f/wBmDxV4k8M/ED4n6ZoPiLwXb2kur21zYXfmn7QpaIxKkTCdmALFIN5UfeAr4O/YN/ZQ/wCCb/h74L/Cfxtr3iT4O6b8TNO0/TdZu5bz4rS29xa6nGscpaS2bUAissq5MZjCgjBXHFe+/slaPpevf8F5P2nNUa1sbye38I+HPsd0Y1kaNJYju8t+cBwq5weQBQB9YfDz9tD4VfFX9nuX4r6F478PXfw6t4pJ7jXpLj7Pa2qx8OJTIFaJlPBVwGBI45Fcb+zR/wAFS/gD+2D8QJ/Cvw7+JOk+IPEUMbTCwe1ubGa5jX70kIuIo/PQdd0W4Y5zX5v+EPi7D+zl+wF+2ndW/gvwv4u0vRfjddWdppWuaSNQ0fTFmltc3U1vjDxws5kwSACF5AFWNZ+Jen+Lf+Co37HK2/7S/h/49X0OqXvmQaHpWk2ll4djexYCFXsE3KHIwIZ5WYBOnU0Aesfs1/8ABV3wH+yv+1v+1TY/HT4w3Wm6fZ+PorHw1puqXd5qbWdv5R3LbW0YleKANjJRFQHqRXrH/BYP9p+S7/4J7eEvHnwp8dXsFj4g8Z+H1tNb8N6rJb/bLWa7CyIJYWBKMMqyE88gjqK8T/YP/ac+C/7Pn7en7a0XxQ8X+BfCd5qnjHMX/CQXUFq2oWiwsJIo2lx5oyeYlJJyPl5rwGPSprT/AIIWxX1ra3Fj4R1z49wal4ThlhMIXSpNW/clEIG1GIYjtzmgD9af2qv+ChXwZ/YZ0vS5vit4/wBJ8Jyauu6ztpUmury5UYBdYIEklKAnBfbtB6mui8Kfte/DHxv+z9J8VdL8c+Hbv4dwW0l3Nr4uwtnBGnD+YzYKMp4KsAwPGM8V+ZP7RN9r/wANv+C23xDvPEP7QVn+zdH4l8H6YPCviLWPD+mahp+q2cS4ntUuNQHlW7LKSxCMCxbBz8ueS/aD+AWgeAv+CWXxS1rwf8YY/j54N1H4q6X4h8a3ulaJDY2MUMU0X9oCOK2zBJC2YnYwgISCeeaAPdP2kf8AgrB8Pf2p/wBp/wDZd034F/GG41K3uPiM1j4l03S7q80x721+znC3FvIsTTW5ccFlaMnoTX6bV+Wf7cP7UXwR/aB/bE/YntfhX4v8B+KLzS/G6O0WgXMFzLplk1tiOKTysmEbhxE+05U/LwcfqZQAUUUUAFfNP/BX79oDxd+y5/wTr+JHjvwJq39h+KtAtIZbC++yw3XkM1xEhPlzI8bZViPmU9a+lq+N/wDgv7/yiQ+MH/Xhbf8ApXDQBR/4J8f8FHda/a3/AOCfvivWtdVtB+Mvw50W4g8S2UlskUkF4to00F4ISNojmXbIBgrncMYFbf7DX7fljZ/8ErPhz8aPjx470nTZtW0wTarrd/HDZrczmWRVVIoUVS5CgBIkyccA8180ft9fDLX/ANkb4J+D/wBqD4e6bNfW918O7bwn8TNHtzt/tXS5rARwXuOnm20rrlj/AAHngGvP/C/xzj+DX/BHX9jG3ksvAumjxJrcViPG3ivRYtUs/ARDzt9vjSXEaT/wq7sFA3ZzQB+l37Kv/BQb4N/ttR6p/wAKw8dab4nuNECtf2ggns7y1Vvuu1vcRxyhDjhtu0+teY6v/wAFzf2T9AnsYb34zaDaz6hezaekMljerLBNFI0T+enk7oEDqwEkoRGAyGI5r5G/Yw8c2fiz/gvdM9j8dLP497vhPdxXPiGzs9NtrfzFvICturafGkE2xTndl2XcQTxgZn7MvhjTbn/g3g/acmk0+xkmmv8AxnPJI0ClpJIpHMbk4yWTA2k8jAxigD70g/4K1/s33fx9s/hjB8XPCtx401CVLe3tIXllt5ZXxsiF0qG38xsgBPM3EnGM10n7Wn/BQn4M/sL2mnyfFbx9pHhGTVsmztpI5rq7uVBwXWCBJJSgJAL7doPU18A/treDtJ8O/wDBBr9nNrDTLCzey1fwbcW7QW6xtBJJLGZHUgZVmJJJHJyc1jftF3/iD4cf8FuPiJe+Iv2g7T9m9PE3hDTP+EV8R6x4f0zULDVrSJcT2qXGojyrdllJYhWBctzn5cgH6ofBD47+D/2k/htp/jDwH4i0zxR4a1QE21/Yy743KnDKehVlPBVgGB4IFdD4g8QWPhTQ7zU9Su7ex0/T4WuLm5ncJHBGoyzMx4AABOa+Q/8Agjh8G/Cnwv8AAPxK1Hwf8arP43af4q8WS6hfapYaRBptjbah5ai4ECW5+zsr/IxaEBCc4yc19halptvrOnXFneW8N1a3UbQzQyoHjlRhhlZTwQQSCDwQaAPy7/bh/wCCjPj/AOMMU2rfDibWvDXwz0HVotNTWIM28ur3xDTIS3DBQsLMIx0GDJy6qPsj9hX9uGx/ai8OTaLrULaH8RvDq+TrOkzr5UkjIdjTxqQDt3cMuMxscHgqzeMf8Fivhxofwm/Ya8JaB4b0u10fR9P8WW6wWtuu1EzaXxJ9SSSSSSSSck19j6N8JfDPh34gat4qsdD0+18R65DHBf6hHEFmuUT7oY/lkjk7VznauADoqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArmfjJ4X8ReNfhZr2k+EfFH/CE+JtQs3h03Xv7Ni1L+yZyPlm+zSkRy7f7jEA101FAH5ReLYf2zfC//BRzwn+z/wD8Nkef/wAJR4UuvE/9vf8ACptDX7N5LsnkfZud27Gd/mjGfumvuH9lv4vf8K78XxfAv4ifF8/FL43aVpkniC+vZPCn/CP/AG3T5JyIpEjhU2pEYKxny5GbK5YAk18+/Fn/AJWN/hP/ANkq1T/0e9Vv+C1mvXX7F3xG+E37V+j6bcag3w5ubnw54kt7bHmXml38bKgOSB8lyIyMnA3/AIEA+kPFX/BTL4H+CvDXj7WdU8cR2uk/C/W7fw74nvP7Kvnh0y/ndUjg3LCRIdzqC0W9Uzlio5qt8DP+CqH7Pf7Svxouvh74H+KXh3xD4vtN/wDoMAmRbnby3kSuixXGBknyXfABPQV+df7VPwGm+Av/AAbd6hqXiqEDxN8QvEOl+N/E7TJuZri/1a3nZXHJbZEyJjn7vevRP27P2gPhP+1J8Tv2PdD+CXinwb4w+Imk+OdNvbf/AIRm6hu5tE0mKLN4J/JJMEewAbJACCM7RgkAH2p+1F/wVF+AP7GHjWy8N/Ev4maH4Z1+/VZE08xT3lxEjfdeVLeOQwocHDSbVODzXs3gXx3ovxO8Hab4h8O6pY63oesW63Vjf2UyzW91Ewyro68EGvxv+Ht3rPgH9vf9qbQ/GX7VGjfs2a9rnihr77L4j8M6LdweJ9JkiC28kV1qQ+ZFTKeTG23jOM7sfoX/AMEh/g/4a+CH7EGg6N4N+IzfFLwrLfX17puujTv7PjkjkuGZo44gSFjWTzNu3C4I2jGKAPpuiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr5h/wCCs37Ufiz9mf8AZcjg+G80cfxW+IGsWnhTwcGijmK39zJjzdkiujCONZHO5SoC8jFfT1fmT+2Lqvxk/bB/4K16XpPwJT4X3k37MekLf3p8dyX39kLqupIVG0WamQzxwAEAkAb2PPFAH1V/wSw/am1v9rD9j7RtX8YSK3xA8O3Vz4b8WoIlh26pZymKZtihVUPhXAUAfPwBUXxK/wCCvn7NXwg+OH/CufEnxe8L6Z4uSf7NNat50kFpLkDy57lIzbwuCcFZJFI74r5W/YXufjD+yX/wUi+Jnw9+MA+G+n69+0RosvjTQ/8AhCJLz+x/7UtV8icJ9rUSrK6bHYZIymQecDh/+Cf/AO0d+zj8D/8AglN4y+HPx81LwxB4stdT1m38feEL65jh8Ra9eNdSEmK3MiXEzyKU8t4yCOMFccAHv37YX/BbXwt+zD/wUD+HHwt/tTSW8J6hb3b+M759A1S7u9MkMMUll9lkhXy5Vk8wlyiTBRjJSvcPhz8SLHV/+Ch3jjRY/jFqWsTQ+E9Pvx8PH0N4bXQ4nY4v1vCu2Rpc4MYO5e+eMfI/7WPjbwV8Cv29/wBhPxbfM3w5+Gun+HdasbabxPefZho6SWVv9nguZppG2OEAUmSQ8jBYkjM3xO0zXPGv/BVn9qy08HSPJr2qfAmzj0l7Z/mkmdZPL2MO5JGCPUUAfT0P/BY39mO4+OY+G6fGTwm3ixrn7EIczfZDPu2+ULzZ9l37vl2+bndxjPFdl+0J/wAFCfg1+yl47tfDXxF8eab4T1i90mbXII76CcRy2kTbXcSrGY927gR7vMY/dU1+Zcv7Sv7PVz/wbsQ/C2PWvBknxH/4RZNHj8Gq8Q8QDxNuEe/7F/r/ADvtPzeZt6d+1eyeE/AmoRf8Fcv2S9O8cWkN94j0X4K3T3f2qISNBexqis/zZxIrFhu65zQB9vfstftz/CX9tXwNqHiT4Y+NtL8U6PpEnlX8qJLayWTY3fvYp0SSMFQSCygEA4Jwa4n4c/8ABXP9nD4tfGK38B+H/itoOoeJry5aztIvIuYrW/mU4MUF08a28z542xyMTxjqK+YfA2leH9H/AOCoH7ddjqmn6o3hjUvAejXOsWuiW5e8uFe0mWZ4kXlpihbGOSQOtfP/AIb+OWk/s+/BD4I6D4f+JHwS/am+Ds3iTTbDw/4I1jR4bTx14fEkuI3iS3kbdcW27LtLCreuMg0AftZRQp3L6ex7UUAFFFFABRRRQBR/5mJv+uCf+hPV6qP/ADMTf9cE/wDQnq9QAUUUUANlTzIyvrXBa/deL/At639iabp+vaZI7SG2nuWtp4WPJCvhlK5ycFcgk84xjv6CM0AeYf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16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7+3SvePC/wDyD3/66H+QoA0qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigClrtib2y+X78fzD39a5yuwrK1fQPPZpYfvHll9fpQB8faT/wS603w9rVxeab8RPHOmrdXZvJYLS4WGN3LZ5CgZ9Oe1e8fGn4Vf8Lj+G934d/trVtB+1GM/btOk8u4j2MG+VvfGD7Guwmge3fa6srehFNoA8E/Z+/YL034C/Ft/GS+LPEviLVJLN7JjqbrJlG28lsbuNoA5r6Z8L/8g9/+uh/kKx7WwmvWxGjN79h+NdDpVh/Z1r5e7czHcT70AWaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5P44Xs9h8Nb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f7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArUVZ/sa8/59bn/v03+FH9jXn/AD63P/fpv8KAK1FWf7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArUVZ/sa8/59bn/v03+FH9jXn/AD63P/fpv8KAK1FWf7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArV1vgP/kDyf8AXY/+grXN/wBjXn/Prc/9+m/wrp/BVtJa6VIssckbGUnDqVOMCgDYooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/wBcE/8AQnq9VH/mYm/64J/6E9XqACiiigCG+/49X+lM0b/kD2v/AFxT/wBBFPvv+PV/pTNG/wCQPa/9cU/9BFAFmiiigArmPi//AMiT/wBxCw/9LIa6euY+L/8AyJP/AHELD/0shoAyqKKKACiiigAooooAKv8Ahn/kOQf8C/8AQTVCr/hn/kOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/wAzE3/XBP8A0J6vUAFFFFAEN9/x6v8ASmaN/wAge1/64p/6CKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/+RJ/7iFh/6WQ109cx8X/+RJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/ACHIP+Bf+gmqFX/DP/Icg/4F/wCgmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/ADMTf9cE/wDQnq9VH/mYm/64J/6E9XqACiiigCG+/wCPV/pTNG/5A9r/ANcU/wDQRT77/j1f6UzRv+QPa/8AXFP/AEEUAWaKKKACuY+L/wDyJP8A3ELD/wBLIa6euY+L/wDyJP8A3ELD/wBLIaAMqiiigAooooAKKKKACr/hn/kOQf8AAv8A0E1Qq/4Z/wCQ5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP8AzMTf9cE/9Cer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/x6v8ASmaN/wAge1/64p/6CKALNFFFABXMfF//AJEn/uIWH/pZDXT1zHxf/wCRJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/AAz/AMhyD/gX/oJqhV/wz/yHIP8AgX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACuY+L/APyJP/cQsP8A0shrp65j4v8A/Ik/9xCw/wDSyGgDKooooAKKKKACiiigAq/4Z/5DkH/Av/QTVCr/AIZ/5DkH/Av/AEE0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv8Argn/AKE9Xqo/8zE3/XBP/Qnq9QAUUUUAQ33/AB6v9KZo3/IHtf8Arin/AKCKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/wDkSf8AuIWH/pZDXT1zHxf/AORJ/wC4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/yHIP+Bf8AoJqhV/wz/wAhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5j4v/8AIk/9xCw/9LIa6euY+L//ACJP/cQsP/SyGgDKooooAKKKKACiiigAq/4Z/wCQ5B/wL/0E1Qq/4Z/5DkH/AAL/ANBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf8AmYm/64J/6E9Xqo/8zE3/AFwT/wBCer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/wAer/SmaN/yB7X/AK4p/wCgigCzRRRQAVzHxf8A+RJ/7iFh/wClkNdPXMfF/wD5En/uIWH/AKWQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/wCBf+gmqFX/AAz/AMhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf8AXBP/AEJ6vVR/5mJv+uCf+hPV6gAooooAhvv+PV/pTNG/5A9r/wBcU/8AQRT77/j1f6UzRv8AkD2v/XFP/QRQBZooooAK5j4v/wDIk/8AcQsP/SyGunrmPi//AMiT/wBxCw/9LIaAMqiiigAooooAKKKKACr/AIZ/5DkH/Av/AEE1Qq/4Z/5DkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF//kSf+4hYf+lkNdPXMfF//kSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJqhV/wz/yHIP+Bf8AoJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/wAzE3/XBP8A0J6vVR/5mJv+uCf+hPV6gAooooAhvv8Aj1f6UzRv+QPa/wDXFP8A0EU++/49X+lM0b/kD2v/AFxT/wBBFAFmiiigArmPi/8A8iT/ANxCw/8ASyGunrmPi/8A8iT/ANxCw/8ASyGgDKooooAKKKKACiiigAq/4Z/5DkH/AAL/ANBNUKv+Gf8AkOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/AMzE3/XBP/Qnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8er/AEpmjf8AIHtf+uKf+gigCzRRRQAVzHxf/wCRJ/7iFh/6WQ109cx8X/8AkSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wAM/wDIcg/4F/6CaoVf8M/8hyD/AIF/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/wDMxN/1wT/0J6vVR/5mJv8Argn/AKE9XqACiiigCG+/49X+lM0b/kD2v/XFP/QRT77/AI9X+lM0b/kD2v8A1xT/ANBFAFmiiigArmPi/wD8iT/3ELD/ANLIa6euY+L/APyJP/cQsP8A0shoAyqKKKACiiigAooooAKv+Gf+Q5B/wL/0E1Qq/wCGf+Q5B/wL/wBBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/AK4J/wChPV6qP/MxN/1wT/0J6vUAFFFFAEN9/wAer/SmaN/yB7X/AK4p/wCgin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF/8A5En/ALiFh/6WQ109cx8X/wDkSf8AuIWH/pZDQBlUUUUAFFFFABRRRQAVf8M/8hyD/gX/AKCaoVf8M/8AIcg/4F/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8zE3/XBP/Qnq9VH/AJmJv+uCf+hPV6gAooooAhvv+PV/pTNG/wCQPa/9cU/9BFPvv+PV/pTNG/5A9r/1xT/0EUAWaKKKACuY+L//ACJP/cQsP/SyGunrmPi//wAiT/3ELD/0shoAyqKKKACiiigAooooAKv+Gf8AkOQf8C/9BNUKv+Gf+Q5B/wAC/wDQTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/AJmJv+uCf+hPV6qP/MxN/wBcE/8AQnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8AHq/0pmjf8ge1/wCuKf8AoIoAs0UUUAFcx8X/APkSf+4hYf8ApZDXT1zHxf8A+RJ/7iFh/wClkNAGVRRRQAUUUUAFFFFABV/wz/yHIP8AgX/oJqhV/wAM/wDIcg/4F/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8zE3/AFwT/wBCer1Uf+Zib/rgn/oT1eoAKKKKAIb7/j1f6UzRv+QPa/8AXFP/AEEU++/49X+lM0b/AJA9r/1xT/0EUAWaKKKACuY+L/8AyJP/AHELD/0shrp65j4v/wDIk/8AcQsP/SyGgDKooooAKKKKACiiigAq/wCGf+Q5B/wL/wBBNUKv+Gf+Q5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP/ADMTf9cE/wDQnq9QAUUUUAQ33/Hq/wBKZo3/ACB7X/rin/oIp99/x6v9KZo3/IHtf+uKf+gigCzRRRQAVzHxf/5En/uIWH/pZDXT1zHxf/5En/uIWH/pZDQBlUUUUAFFFFABRRRQAVf8M/8AIcg/4F/6CaoVf8M/8hyD/gX/AKCaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8AMxN/1wT/ANCer1Uf+Zib/rgn/oT1eoAKKKKAIb7/AI9X+lM0b/kD2v8A1xT/ANBFPvv+PV/pTNG/5A9r/wBcU/8AQRQBZooooAK5j4v/APIk/wDcQsP/AEshrp65j4v/APIk/wDcQsP/AEshoAyqKKKACiiigAooooAKv+Gf+Q5B/wAC/wDQTVCr/hn/AJDkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/wDMxN/1wT/0J6vUAFFFFAEN9/x6v9KZo3/IHtf+uKf+gin33/Hq/wBKZo3/ACB7X/rin/oIoAs0UUUAFcx8X/8AkSf+4hYf+lkNdPXMfF//AJEn/uIWH/pZDQBlUUUUAFFFFABRRRQAVf8ADP8AyHIP+Bf+gmqFX/DP/Icg/wCBf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP8AzMTf9cE/9Cer1Uf+Zib/AK4J/wChPV6gAooooAhvv+PV/pTNG/5A9r/1xT/0EU++/wCPV/pTNG/5A9r/ANcU/wDQRQBZooooAK5j4v8A/Ik/9xCw/wDSyGunrmPi/wD8iT/3ELD/ANLIaAMqiiigAooooAKKKKACr/hn/kOQf8C/9BNUKv8Ahn/kOQf8C/8AQTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/wCuCf8AoT1eqj/zMTf9cE/9Cer1ABRRRQBDff8AHq/0pmjf8ge1/wCuKf8AoIp99/x6v9KZo3/IHtf+uKf+gigCzRRRQAVzHxf/AORJ/wC4hYf+lkNdPXMfF/8A5En/ALiFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/4F/wCgmqFX/DP/ACHIP+Bf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/1wT/0J6vVR/wCZib/rgn/oT1eoAKKKKAIb7/j1f6UzRv8AkD2v/XFP/QRT77/j1f6UzRv+QPa/9cU/9BFAFmiiigArmPi//wAiT/3ELD/0shrp65j4v/8AIk/9xCw/9LIaAMqiiigAooooAKKKKACr/hn/AJDkH/Av/QTVCr/hn/kOQf8AAv8A0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/wCZib/rgn/oT1eqj/zMTf8AXBP/AEJ6vUAFFFFAEN9/x6v9KZo3/IHtf+uKf+gin33/AB6v9KZo3/IHtf8Arin/AKCKALNFFFABXMfF/wD5En/uIWH/AKWQ109cx8X/APkSf+4hYf8ApZDQBlUUUUAFFFFABRRRQAVf8M/8hyD/AIF/6CaoVf8ADP8AyHIP+Bf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/wBcE/8AQnq9VH/mYm/64J/6E9XqACiiigCG+/49X+lM0b/kD2v/AFxT/wBBFPvv+PV/pTNG/wCQPa/9cU/9BFAFmiiigArmPi//AMiT/wBxCw/9LIa6euY+L/8AyJP/AHELD/0shoAyqKKKACiiigAooooAKv8Ahn/kOQf8C/8AQTVCr/hn/kOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/wAzE3/XBP8A0J6vUAFFFFAEN9/x6v8ASmaN/wAge1/64p/6CKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/+RJ/7iFh/6WQ109cx8X/+RJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/ACHIP+Bf+gmqFX/DP/Icg/4F/wCgmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/ADMTf9cE/wDQnq9VH/mYm/64J/6E9XqACiiigCG+/wCPV/pTNG/5A9r/ANcU/wDQRT77/j1f6UzRv+QPa/8AXFP/AEEUAWaKKKACuY+L/wDyJP8A3ELD/wBLIa6euY+L/wDyJP8A3ELD/wBLIaAMqiiigAooooAKKKKACr/hn/kOQf8AAv8A0E1Qq/4Z/wCQ5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP8AzMTf9cE/9Cer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/x6v8ASmaN/wAge1/64p/6CKALNFFFABXMfF//AJEn/uIWH/pZDXT1zHxf/wCRJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/AAz/AMhyD/gX/oJqhV/wz/yHIP8AgX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACuY+L/APyJP/cQsP8A0shrp65j4v8A/Ik/9xCw/wDSyGgDKooooAKKKKACiiigAq/4Z/5DkH/Av/QTVCr/AIZ/5DkH/Av/AEE0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv8Argn/AKE9Xqo/8zE3/XBP/Qnq9QAUUUUAQ33/AB6v9KZo3/IHtf8Arin/AKCKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/wDkSf8AuIWH/pZDXT1zHxf/AORJ/wC4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/yHIP+Bf8AoJqhV/wz/wAhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5j4v/8AIk/9xCw/9LIa6euY+L//ACJP/cQsP/SyGgDKooooAKKKKACiiigAq/4Z/wCQ5B/wL/0E1Qq/4Z/5DkH/AAL/ANBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf8AmYm/64J/6E9Xqo/8zE3/AFwT/wBCer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/wAer/SmaN/yB7X/AK4p/wCgigCzRRRQAVzHxf8A+RJ/7iFh/wClkNdPXMfF/wD5En/uIWH/AKWQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/wCBf+gmqFX/AAz/AMhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf8AXBP/AEJ6vVR/5mJv+uCf+hPV6gAooooAhvv+PV/pTNG/5A9r/wBcU/8AQRT77/j1f6UzRv8AkD2v/XFP/QRQBZooooAK5j4v/wDIk/8AcQsP/SyGunrmPi//AMiT/wBxCw/9LIaAMqiiigAooooAKKKKACr/AIZ/5DkH/Av/AEE1Qq/4Z/5DkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF//kSf+4hYf+lkNdPXMfF//kSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJqhV/wz/yHIP+Bf8AoJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/wAzE3/XBP8A0J6vVR/5mJv+uCf+hPV6gAooooAhvv8Aj1f6UzRv+QPa/wDXFP8A0EU++/49X+lM0b/kD2v/AFxT/wBBFAFmiiigArmPi/8A8iT/ANxCw/8ASyGunrmPi/8A8iT/ANxCw/8ASyGgDKooooAKKKKACiiigAq/4Z/5DkH/AAL/ANBNUKv+Gf8AkOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/AMzE3/XBP/Qnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8er/AEpmjf8AIHtf+uKf+gigCzRRRQAVzHxf/wCRJ/7iFh/6WQ109cx8X/8AkSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wAM/wDIcg/4F/6CaoVf8M/8hyD/AIF/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/wDMxN/1wT/0J6vUUUAFFFFAEN9/x6v9KZo3/IHtf+uKf+giiigCzRRRQAVzHxf/AORJ/wC4hYf+lkNFFAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJoooA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=", + "description": "Allows to create or edit gateway connectors.", + "descriptor": { + "type": "latest", + "sizeX": 11, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway connector\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + } + }, + { + "alias": "gateway_logs", + "name": "Gateway Logs", + "image": "data:image/jpeg;base64,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V6B4kuvEviqC88aeILvTL5dW0vSTY2eny6bKJrIRWrzTMUWUMzh5mMgkZdyjaF9qoo63879tdNV2ei2KstL9P6+e73OC+Dvwk1TwTruveIfE2uWPiHxV4kFvDd3VhprabZxQW6uIYYYGmndQDLKxLSuWaRugCqOGv/2Qtb+3RaXp/jW0sfA9v4th8YQ6S2h+bercC/F/Nbm7M4U27zF2UCEOhYDe6LsPu1FVGTU1NbqzXqmmtNtGl/VyXFODpvZ3v800/wAGzwGw/Y01jSfEmkiPxxbr4T0DxjP40tdNTw+v264nnkuJZori687Eih7l9jJCjqFUOZcVH+zd8Gm1PX/i54ws28T+F7f4hX/laGbuzazvtLtlhzJcR29xGGhaS9mu5gkqZOVYrhgK+gqKmKUb26pr7+VN33vaMV6eZcpNvmfdemjk1ptvJs8r+Cf7PWqfD34l694v8Qa5oera5rlnBp8p0XQP7Gt544nkdZrhDPO01yfMIMm5VCjCovOfVKKKOiXb/hxW1b7/APDfkgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPn39tXxNrmsfEj4R/DfSfEGreFbD4iaxdx6vqWlT/Z78W1raPOYIZsZiaRgoLrhgoIBGc15j4a/ay8P/ALMfw1+MmoaL498Z/Ei18FpaXFl4f8U6bqUep6RNcOYEjN7dRia6glmGVIV2QK2C2VFfSnx+/Z20H9ovw7p9nrE2rabfaLepqWk6tpN19l1DSLpQVEsMmCAdrMpVlZWDEFTXG6H+wR4OTw543svEmpeKvHd58Q7SKw1vU9ev1e7ngh3eSieQkUUXllmZTHGrBjkk8V6lGvh1SUal/NJLX3r3v6abp6dmefVo1nUcoW8nrppa3367NfNHi15/wUH+KPhn4MfEbVL7wvpt5qnhWy0++0rVpvCmt6BpF69xdLBLaPDfhJmkiyG8yNirBwdowVO/4t/b18afs/Q/F2z+IGk+FdW1XwHomma7pR8Px3UMF2t/LLbxW8qyNI5ZJo8F0HzKchAflr0WX9hDSdZ+FGv+Edf8ffE7xVZ+II7SB7rV9Yimns4raVZY0hVYVhUll+Z2jaRx95zgY3PHX7Gng34meLPG2q66mpagvj7QLTw5qdm86rbrb2zzSRPFtUSJKGmY7t5wVQgAg509vg72cdL9P+3fT+8R7HFWupa2/wDkv+AeBXX/AAUE+KHhn4G/FLWdQ8M6fd6n4N0i01XSdWl8J63oOk30k04iktHhvwkzPHwd8b7WDg4Ugqe0+Nf7S/xQ+DvhHwnY6hf/AAztvGet297fXMFloet680kcWGjjt7G0BuGQBlWW5d1RDghDuCjrpf2EtK1n4P8A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gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMvxh4K0f4haBNpWvaXp+saZcFWktb2BZ4ZCrBlJVgQcMAR7itKKNYY1RFVUUBVVRgADsKdRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHlWs/sS/DDxD8Z4fH994YF14khvE1NS+oXRsPtqKES8Nj5v2RrlVVQJzEZRtGGGBXqtFFC0iorZdA683UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKjunlSBjCkcknZXcop/EA/yqSigDP+1ap/z52H/gY/8A8ao+1ap/z52H/gY//wAarQooAz/+Ekt/+eeof+AM/wD8RR/wklv/AM89Q/8AAGf/AOIrQooAz/8AhJLf/nnqH/gDP/8AEUf8JJb/APPPUP8AwBn/APiK0KKAM/8A4SS3/wCeeof+AM//AMRR/wAJJb/889Q/8AZ//iK0KKAM/wD4SS3/AOeeof8AgDP/APEUf8JJb/8APPUP/AGf/wCIrQooAz/+Ekt/+eeof+AM/wD8RR/wklv/AM89Q/8AAGf/AOIrQooAz/8AhJLf/nnqH/gDP/8AEUf8JJb/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FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFHX/Dtt4jtPKuFOV5R1+8h9q5G5+E14sh8m6t3XsXyp/QGu8ooA8+/wCFUaj/AM9rL/vtv/iaP+FUaj/z2sv++2/+Jr0GigDz7/hVGo/89rL/AL7b/wCJo/4VRqP/AD2sv++2/wDia9BooA47RvhSsUwe+nWRV/5Zx5Ab6nr+VdfFEsEaoihVUYUAcAU6igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqO6tIr6Bopo45o2+8jqGU9+hqSigDP/4RPS/+gbYf+A6f4Uf8Inpf/QNsP/AdP8K0KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3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x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbqS102a3nV21C8nVeqOsQVv++UB/I0AXKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiuW8feNX0dvsdo224YZd/wDnmOwHua4S5vJr2TdNJJKx7uxY0AeyUV4vRQB7RRXi9FAHtFFeTaR4mvdEmVoZ32g8xsco34V6Z4f1uPxBpcdzH8u7hl/uMOooAu0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRVfVtVt9D0q6vrqTyrWzieeZ9pbYigsxwMk4APA5rH+FfxP0f40fDzSfFXh99Ql0XXIBdWUl7ptzp00sR+65guI45VDDlSyDcpDDIIJFre3S1/K97ffZ272fYG7WT63t8rX+66v6rudBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRXK/Gj40+H/ANn7wBdeKPFM2pWuh2BX7VcWelXepG2Un/WPHbRyOsa9WkKhEHLEDmuqVty5HQ80dL/L5/0194dbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVLQfEuneKbWa40vULLUoLe4ms5ZLWdZljnhkaKWJipIDpIrIynlWUggEEUB0uXaKKqa/r9j4U0K91TVL2003TNNge6u7u6mWGC1hRSzySOxCqiqCSxIAAJNA0m3ZFuiozewrZ/aDLGLcJ5hl3DZtxndnpjHOah0LXbHxRolnqWmXlrqOm6hAlza3drKs0FzE6hkkR1JVlZSCGBIIIIoFdFqiiigAorHg+Inh+61hdPj1zR5NQe7ksFtlvY2ma5jiE0kITOfMWIh2TG4KQxAHNbFAlJPYKKKKBhRRRQAUUUUAFFFFABRRUOo6lb6Pp9xeXlxDa2trG0000ziOOFFGWZmPCqACSTwAKUpJK7BXeiJqKh0/ULfVrCG6tZobm1uY1lhmicPHKjDKsrDgggggjgg1NTaadmCaaugoorJ8cePND+GPhS917xLrWk+HtD01PMu9R1O7jtLS1XIG6SWQhFGSBkkckUm0ldgk27I1qKjtbuK+tY54JI5oZlDxyIwZXUjIII4II5yKkp7aML31QUUUUAFFFFABRVPxF4j0/whoV3qmrX9npemafE091d3c6wQW0ajLO7sQqqBySSAKuA5FABRRRQAUUU2SVYV3MyquQMk45JwB+J4oAdRRRQAUVRt/E2m3fiK60eLULGTVrGCK6ubJJ1a4t4ZWkWKR487lR2ilCsRhjE4GdpxeoAKKKo6l4l03RtQsrO81CxtbrUmdLSGadY5LpkQyOI1Jy5VFZiBnCgk8Chu2rAvUVT8O+I9P8X6BZatpN9Z6ppepQJdWl5aTLPb3UTqGSSN1JV0ZSCGBIIIIq5TaadmAUUUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK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56h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFH/AAklv/zz1D/wBn/+IoA0KKz/APhJLf8A556h/wCAM/8A8RR/wklv/wA89Q/8AZ//AIigDQorP/4SS3/556h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFH/AAklv/zz1D/wBn/+IoA0KKz/APhJLf8A556h/wCAM/8A8RR/wklv/wA89Q/8AZ//AIigDQorP/4SS3/556h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFSWutw3k6xql4rN0L2ksa/mygD8TQBcooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKrarq1voto01xII4xx7sfQCuYufi5Ckn7mykkX1eQKfywaAOwori/+Fvf9Q/8A8j//AGNH/C3v+of/AOR//saAO0ori/8Ahb3/AFD/APyP/wDY0f8AC3v+of8A+R//ALGgDtKK5rSPidZahMsc0b2rMcAsdyfn2/KulByKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo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mSnc8m0AbmPcnGTWs1BXUXezdntdXdtOiStbvfdtMh7prsrrzsru/m7u3S3ZosUUUVkMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo6/4dtvEdp5VwpyvKOv3kPtXI3PwmvFkPk3Vu69i+VP6A13lFAHn3/CqNR/57WX/AH23/wATR/wqjUf+e1l/323/AMTXoNFAHn3/AAqjUf8AntZf99t/8TR/wqjUf+e1l/323/xNeg0UAcdo3wpWKYPfTrIq/wDLOPIDfU9fyrr4olgjVEUKqjCgDgCnUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBn/ANj3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N1oUUAZ/wDY9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdaFFAGf8A2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43WhRQBn/ANj3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N1oUUAZ/wDY9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdaFFAGf8A2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/4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RxNa280wkj8uKaVHk82Parb1zXK20lrft37evkVKLi2n0SfyaTv+KPR6K8t8J/tn/Djxv8QLXwzpuuXs2qXuo3ujwSPot9DYzX9m8yXNmt28ItzcJ9nmbyfM3skZdVZCGPM337b+i+Jfjd4P8KeEZn1K31i+1S0vru50W+gtZhZ2c0payupES3uQs0ao7QtKoyRlTg1nKajHme1m/ktyZe67S3ul827W+894or5/+Fn7fXhWX4E/DXXvHWpR6X4h8ZeFdN8RalDpmk3t1Z6Ql1CrGe5eJJVsrUyeYqzXUiJ+7YbyVbHXav8Ato/DfQ/EfirSrjXLz7Z4JkS31oxaNfTQ2c8gtjFbeakJjkuJftdv5UEbNLKZMIjFWA2qUZQnKm94tp/9uuz+57hre3XT8dvv6dz1KiuF+H37R/hP4o6bp91otzq841DUZNI8ifQ761urC7SFp2iu4JoVls28pdw+0rGDvjxkyIG89/a+/bQm/Zo8f+D/AA5aQ/DWO68VWl9efbfG3jc+FdPh+zy2kSwpKLO682aVrv5Y9q8ROcnpUWd1Hq9vPS/5ajiua9ul393/AAVb103PfKKp+H7m8vdBsptRgs7XUJYEe5htLlrm3ikKgsscrJGZEByA5RCwwdq5wLlEk07MmMrq6CiiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8F/an8A/Ff4h/EXQYfD3hv4eeKfh7psaX13pet+LrzQ5dQ1FJC0fniHTLxZbaMKjiPcu6TBcFUAPvVFK2qfb+v8Ag+tmO+jXf+v+B6aHzL8U/wBmH4ieOT4+0myh8E2vh/41W9m3imaXVrprzw7cLaRWd19jQWu29V4IIhGZGtdrKWKsDsGlrHgH4zX37VR8TXnhb4Z+IvCWj3CW/hk3Hja+sbjRbZ0CXN2bJdKljlvnDSqGNwFWLEaGPfM8n0RRVJtNNdL6ettPklZeQndp36pL7v8APr0+R843v7LvjDxf+0npXinWtN+HtlJol9O48b6PLPaeJ9Y0thcCPR54UgULAgmTLm7lDNAsiwxy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A8Z+J7fW9MsdWkuWtmt4bTToRHLKgEsE++zcxzx+aYWMUoDspSvfKK2lWlKU5ved7/OSlttuuq7p3RMtXFv7LuvWzX4p9Oye547+zR8OviP8KfCyWfiC40vUI9Q1uS5eym8TX+tSeHNPNqqrBDf3UAuNQc3Sb91wItqXDKCREitqfHnw34+v9Ut7rwbpfgHxDbXGn3Gl32neJriWxWNZWQ+ck8VtcNIu1Sr2zIqyfIfMTbz6dRWdRKatLa1vlbl173W73vre+oRbjqv6d73+/wCVtLWvfkfgD8Lm+CHwM8G+DW1CTVm8J6LZ6Qb2RdrXZghSLzCuTt3bc4ycZxk9a66iirqVJVJuct27v5kxioqyCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/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W1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdNbSrgf8xXUP8AviD/AON0UUANOm3P/QV1D/viD/43TRp9yf8AmK6h/wB8Qf8AxuiigB66ZcH/AJiuof8AfEH/AMbqe006aCdXbULydV6o6xBW/wC+UB/I0UUAXKKKKAP/2Q==", "description": null, "descriptor": { - "type": "static", + "type": "timeseries", "sizeX": 7.5, "sizeY": 3, "resources": [], - "templateHtml": "", - "templateCss": " .tb-entity-table {\r\n padding: 0 !important;\r\n }", - "controllerScript": "self.onInit = function() {\n}\n", + "templateHtml": "\n \n", + "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", + "controllerScript": "self.onInit = function() {\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-logs-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"entityAliasId\":null,\"filterId\":null,\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":0,\"realtime\":{\"realtimeType\":0,\"timewindowMs\":86400000,\"quickInterval\":\"CURRENT_DAY\",\"interval\":300000},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway Logs\",\"showTitleIcon\":false,\"dropShadow\":false,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false,\"useDashboardTimewindow\":false,\"displayTimewindow\":true}" + } + }, + { + "alias": "gateway_statistics", + "name": "Gateway statistics", + "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAFSBl0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKBwKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiimyLvQ84PY0AOoqKyn+02sb/3lBqWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqlr0rR2IwcbmAP05oWrAu0Vy9FachPMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvQrFTkcH1FHIHMdRRUdo5ktY2PUoCfyqSsyiro3/ILg/wBwfyq1VXRv+QXB/uD+VWqACiiigAooqj4l8S6d4M8PX2r6xf2WlaTpkD3V5e3k6wW9pCilnkkkYhURVBJYkAAEmhuyuwSbdkXqK8l8H/t8/Ar4h+KLLRPD/wAafhNrutanKILPT9O8X6fdXV3IeiRxJKXdj6KCa7z4ZfEzQvjJ4D03xP4Z1GLVtC1iLzrO8iVlSdMlcgMAeoI5HajXcV1exvUUUUDCiqPiXxLp3gzw9favrF/ZaVpWmQPdXl7eTrBb2kKKWeSSRiFRFUEliQAASasafqEGrWEN1azRXNtcxrLDNE4eOVGGVZWHBBBBBHXNAE1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVg6n8UvDOiePtM8KXniLQrTxRrUElzp+jzX8Ud/fxR8ySRQFvMkVP4mVSB3o62Dpc3qKw7v4neG7D4g2nhKfxDocPiq/tHv7XRpL+JdQubZDteZIC3mNGp4LhcA963KOlw62CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqHiH/jyX/fH8jV+qHiH/AI8l/wB8fyNOO4nsY1cx8YfEOq+Fvh/eXujQST3kTRgmO1a6eGIyKJJVhX5pGRCzBBySOh6V09ZXjPw1J4r0M20Go3mlXCyJNDdWxG+N0YMMg5DKcYKnggkVuQeUx/HvV9I8Dw6npl1pvj2zutesdLgu7XZbzxpNKkcqXERZAkyFiAOPvLuUYOe71b4wQ6J4zttJudJ1WKO7ulsYr11jWF5mjLhVBfey8Ebwu3IIzxWJP+zudQtNWnu9euJdc1fUrHU5L2O0jjjjezZGhRYRxt+T5ssWO4/MMABNQ/Zug1D4nR+I21VsxapHqyxNYwvKJFj8sxidgXWIjkKuMHPJHFICt4S+O+o+IdN0KbUdOl0aXU/FF5oix+XHOJ0h+1YOVlynEAy3zfMDhcHIl/4aObXfhzrWvaL4e1W4jsbCW9s3laDyrrYSCpxLmNhjJR9rYB4yMVoWHwHjtH09X1a5lt9K8QXGv2qeUqsjTrPviLDqA1w5BwCMAc9ap6J+zfDp9xq0l1rNzeSanpkulGYW0UMzxv1kndR+/mGAA7AcZ4ySaAHy/HlNE1TUf7Ut7yD7Ho+nXp09LdHl866mliSNZFlIdmdFXbgAcHecnb1/g7xZN4ojuhc6Pqui3FnII3ivUX58qGDI6MyOvOPlY4IIOK5TUv2eodf+3y6hq91LfX+mWFibmGFIjBLZzSTRXCKdw3eY4O05HyDrk11Xgzw1f+H4rt9S1q51q7vJRIzvGsMUAChQkca8KvGTkkksTnoAwNuiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6Ox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+VS1FY/8eUP+4v8AKpa5zQq6N/yC4P8AcH8qtVV0b/kFwf7g/lVqgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqh4h/48l/3x/I1frnPib420bwHoMV3rmraZo1pJcCFJ766S3jZyrEKGcgFsKxx1wD6U47iexFVTXdBsfFOjXWnanZWmo6fexNDc2t1Cs0NxGwwyOjAqykdQRiuW/4aP+Hn/Q+eDP8Awd23/wAXR/w0f8PP+h88Gf8Ag7tv/i63IJfBX7P/AID+G1j9m8O+CfCOgW32NtP8rTdHt7VPszMXaDbGgHlliSU+6SScVqaT8NfDmg3ul3FjoGiWdxodidM06WCxijfT7Q7M28JCgxxHy48ouF+ReOBWN/w0f8PP+h88Gf8Ag7tv/i6P+Gj/AIef9D54M/8AB3bf/F0gMnwn+xl8HvAXjr/hKNC+FHw10XxN5rz/ANr2Hhiytr7zHOWfzkiD7mJyTnJNTan8Er/xR+0JpvjLWdfivNI8NW8q6BokOnCIWVzMgjmuppzIxmfZuRAqRhFkfO8kEaH/AA0f8PP+h88Gf+Du2/8Ai6P+Gj/h5/0Pngz/AMHdt/8AF0AbWtfDjw94k8WaVr2oaDot/rug+YNM1G5sYpbvTvMG2TyZWUvHuHB2kZHWs0fAfwOPicfG3/CGeFP+EzMfknX/AOyLf+0ymMbftOzzcY4xuxVf/ho/4ef9D54M/wDB3bf/ABdH/DR/w8/6HzwZ/wCDu2/+LoAn1f4CeBfEHxItPGN/4L8J3vi+wUJa65caRbyalbKOgS4ZDIo9g1N+Jv7P3gL41XVhP4y8EeEfFs2ltvspNa0e3v2s265jMqMUPuuKi/4aP+Hn/Q+eDP8Awd23/wAXR/w0f8PP+h88Gf8Ag7tv/i6ANbxx8LPD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JWk3M8QUlURi/wBX0UAeL/tl/GeX4IeHtGv9L8La5rXiTVbiTS7HVtN8Iah4jHhyN1DTXM0dhBNOI8IuEUASyCNSyrl15HxN4ZsPEH/BP06X4I07xlqEP2i12R6v4dvtL1e9mGpxSXM8tpcwQzqXfzZSfKVSCWX5cV9LUUAeV/G/xL4X+H1t4u8R3XgDW/Fms6PpFpeTR6b4Zn1G41ZYp5HtbeArGwmljm3OETc0W8OQMg186anaP8e/hHf681r8T7jxBN4r0jXvGMVt4N13w5cJYQEqlrpovbWCa4FuuH3QAzMyu6hHdEH2/RQB87fsv2URtoTrGkeO9S0KLxPK3gC58V2Go3esaZbHTwJJbmW8VruBS5u0R7wrIQ6qT8yg9Bpmh6npPxr+Nupnwzda3a32laV9htJYxHDrbR21wHgSSQeW2SVU5OAXG7Fe00UAfNn7L0uqeL/2mPEficL8QNR0W60VbX7R4y8ONodx4fnFxv8A7MskNtbCe2wSxl8uQlkT/SJRhU+k6KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvkr9unwzrN78YftcVz8S/D2n33hSTSLa+8E+HJNcl16eSZy2nXwW3uBa2+NhEwFu372TF1Fjn61ooA+EvH/AMM/FXhPX9S1KXRvijo3jnV/C2iQ+C7bwfPqMmiadqFtavG9neNbE2/kxzMSf7RJgKSZQl91fSvxC8P6rqH7Snwk1D7DczwadZ6yt/cwws0Fq8kFuFDuBhdzBguSM4OOlesUUAeC/G3xodE+LXgH4gnQPGV/4d8NSa1ompR2Phy9vb60klESx3KWkUTXEsJa3ZBJFGwKzKw+Qlq6b9jTwvqfhb4E266tYXOl3Wp6tqurraXKbJ7eG71C4uYlkXqj+XKm5TypyDyK9UooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA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qf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCro3/ILg/3B/KrVVdG/wCQXB/uD+VWqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK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J1KPzbe4QMu8ZIIKsAysCCCrAMpBBAIIrxz42+NDonxa8A/EE6B4yv8Aw74ak1rRNSjsfDl7e31pJKIljuUtIomuJYS1uyCSKNgVmVh8hLV037GnhfU/C3wJt11awudLutT1bVdXW0uU2T28N3qFxcxLIvVH8uVNynlTkHkUAeqUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVdG/5BcH+4P5Vaqro3/ILg/3B/KrVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVdG/wCQXB/uD+VWqq6N/wAguD/cH8qtUAFFFFAF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UPtOqf8APnYf+Bj/APxqj7Tqn/PnYf8AgY//AMaq41wFpn2ugCt9p1T/AJ87D/wMf/41R9p1T/nzsP8AwMf/AONVZF1UizA0AUvtOqf8+dh/4GP/APGqPtOqf8+dh/4GP/8AGqvg5paACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAq6N/yC4P9wfyq1RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpUMxoooAqTGod1FFAChuasQmiigC1Ef51LRRQB//9k=", + "description": null, + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } + }, + { + "alias": "gateway_general_statistics", + "name": "Gateway General Statistics", + "image": "data:image/png;base64,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", + "description": "", + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false\n };\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}", - "settingsDirective": "", - "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"cardHtml\":\"
HTML code here
\",\"cardCss\":\".card {\\n font-weight: bold;\\n font-size: 32px;\\n color: #999;\\n width: 100%;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\"},\"title\":\"Gateway list\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway General Statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } + }, + { + "alias": "service_rpc", + "name": "Service RPC", + "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAJNBKMDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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Nm8SeLPidri6Tp+lWdwiXFvCEZ5r2RTkiGJVyxwBzjOa9moAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK4Oy/ap+GGp+L18PW3xI8B3GvtcmyXTI/EFo9404baYhEJN/mBgRtxnIxiu8r4N/YQ/4IveDfhB8UvGXxI+JXg7w7qnxKufiJqvijw9rVpqNy8lnZz3BltgyhkTeu5sqVYZJGSKAPsn4j/HPwT8HHtV8XeMPC3hVr8MbYaxq0FibgLjds8113YyM4zjIrV8HeNtF+Inh231jw/q+l67pN5kwXun3SXVvNglTtkQlWwQQcHggivJ/2yv2APhX+3HoVovxF8G2Hiy+0K3uF0drq6uIVtJJVGT+6dQclU+8DjH1rH/4JX/sx+JP2N/2DfAHw38XNpsniLwzbTQ3jWE5mtyWnkkGx2VSRtYdQKAPoSiiigCvqulWuvaZcWN9bW95Z3kbQz288YkimRhhlZTkMpBIIPBFfL6/8ESP2V18bjXv+FN+H/tIuPtQs/tV3/ZQlznd/Z/nfZM/9sunHSvqiigDmfiH8GfCfxa+Gt34N8TeHNG1vwrfW4tZtJu7RJLR4gAFXYRgbcDGMFSARjAryv8AZw/4JifAj9krxq3iTwF8O9O0nXhG0MOoXN5dalcWcbfeSB7qWUwIem2LaMcYxxXvVFAHF/Dz9nrwf8KfiL408WaBo/2DxB8Q7uC+8QXX2qeX+0JoYVgjbY7ske2NVXEaqDjJBPNM+Ov7OPgn9pjQNK0vx14ftfEOn6Jq1trllDNJJGILy3bfDLlGUnaeqnKsOGBHFdvRQByPx1+BfhX9pb4Ta14F8baX/bXhXxFB9m1Cy+0zW32iPcGx5kLpIvKg5VgeKh+Lv7Ovgf4+fCmTwP408M6X4k8KzRpGdPvo/NRdgwjK2dyuuOHUhh1BrtKKAPHf2X/+Cf8A8Hv2M7rULr4b+B7DQNQ1RRHd6hJc3GoX80YORGbm5kkm8sHkIH2j0rL/AGkv+CZnwL/a48bweJvH3w907VvEVvEIP7Utry6028niHSOWW1lieZB/dkLL2xXu1FAHN/CT4PeFvgL4A0/wr4L0DS/DPh3Sk8u10/T7dYYIR1JwOrE8ljkknJJNZnxT/Zy8GfGvxn4K8QeJtG/tLWPh3qbax4euPtc8P9n3TRmMybY3VZPlJG2QMvfGea7eigDi/wBoH9nfwb+1N8L73wZ480SPX/DmoSRTS2zTy27rJE4kjkSWFkkjdXUEMjKwI61Dffs2+C9T+MPhfx9caRJP4u8GaXcaNo+ovfXDNa2k+zzoynmbJC3lp88is4xwRk57qigArg/2h/2YPh9+1l4Dbwz8RvCWj+LtF8wTJb38O4wSDgSROCHjfGRuRlbBPNd5RQB4j+y//wAE4vgn+xprV3qnw58A6boes30flTapPc3Gpai8f/PP7TdSSzBOnyhwOBxwK9uoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+Df2EP8AgtD4N+L/AMUvGXw3+JXjHw7pfxKtviJqvhfw9otpp1ykl5ZwXBitizBXTe21ssWUZBOAK+8q4Oy/ZX+GGmeL18Q23w38B2+vrcm9XU4/D9ol4s5bcZRKI9/mFiTuznJzmgDj/wBsr9v/AOFf7DmhWjfEXxlYeE77Xbe4bR1urW4mW7kiUZH7pGAwWT7xGc/Wsf8A4JX/ALTniT9sf9g3wB8SPFy6bH4i8TW0014thAYbcFZ5IxsRmYgbVHUmvW/iP8DfBPxje1bxd4P8LeKmsAwtjrGk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in5Uf8I5af8APFPyq9RQBR/4Ry0/54p+VH/COWn/ADxT8qvUUAUf+EctP+eKflTo9DtYjlYkH4VcooAakaxj5RTqKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAory9/jd4tsz5c/w51CSVTgtb6lC0be4LBT+YpP+F7+KP+ib61/4H2/+NAHqNFeXf8L38Uf9E31r/wAD7f8Axo/4Xv4o/wCib61/4H2/+NAHqNFeXf8AC9/FH/RN9a/8D7f/ABo/4Xv4o/6JvrX/AIH2/wDjQB6jRXl3/C9/FH/RN9a/8D7f/Gj/AIXv4o/6JvrX/gfb/wCNAHqNFeXf8L38Uf8ARN9a/wDA+3/xo/4Xv4o/6JvrX/gfb/40Aeo0V5d/wvfxR/0TfWv/AAPt/wDGj/he/ij/AKJvrX/gfb/40Aeo0V5d/wAL38Uf9E31r/wPt/8AGj/he/ij/om+tf8Agfb/AONAHqNFeXf8L38Uf9E31r/wPt/8aP8Ahe/ij/om+tf+B9v/AI0Aeo0V5d/wvfxR/wBE31r/AMD7f/Gj/he/ij/om+tf+B9v/jQB6jRXl3/C9/FH/RN9a/8AA+3/AMaP+F7+KP8Aom+tf+B9v/jQB6jRXl3/AAvfxR/0TfWv/A+3/wAaP+F7+KP+ib61/wCB9v8A40Aeo0V5d/wvfxR/0TfWv/A+3/xo/wCF7+KP+ib61/4H2/8AjQB6jRXl3/C9/FH/AETfWv8AwPt/8aP+F7+KP+ib61/4H2/+NAHqNFeXf8L38Uf9E31r/wAD7f8Axo/4Xv4o/wCib61/4H2/+NAHqNFeXf8AC9/F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CH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/VPU9Gj1D5vuSf3h3+tZn/CwIf+fG9/76h/8AjlH/AAsCH/nxvf8AvqH/AOOUAQXGi3Nu3+rZh6r82ahFnMzYEUhPptNXf+FgQ/8APje/99Q//HKP+FgQ/wDPje/99Q//ABygBln4fnuG+dfKX1PX8q3LGwjsItsa/Unqaxv+FgQ/8+N7/wB9Q/8Axyj/AIWBD/z43v8A31D/APHKAN+is3w54nt/E8d0YFmjazn+zyrIBlW2I/YkH5XU8HvWlQAUUUUAFFFFAHlf7Q//ACMvh3/r2vf/AEK2rh67j9of/kZfDv8A17Xv/oVtXD0AFFFFAGb4s8Y6T4C0C41bXNU0/RtLs13z3l9cJbwQr6s7kKB9TXH/AAC/as+H/wC1HBrU3gHxJb+JIPD10tnfTQQTJFHKQWAV3RVkBAzuQsvvW78Ufg54V+NmiWum+LtB0zxFp1ndx30VrfwiaETJnaxQ8NjJ4II56V85f8E7bWKx/aX/AGoYYY44YYvG0KJGihVRRbDAAHAA9KAPrKiiigDovAP/AC9/8A/9mrmfgp/yP/jv/sID/wBGT103gH/l7/4B/wCzVzPwU/5H/wAd/wDYQH/oyegD0iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDW+D/XxJ/2FR/6SW1dlXG/B/r4k/7Co/8ASS2rsqACiiigAooooA8r/aH/AORl8O/9e17/AOhW1cPXpPxh0Vdd8Z6DC0jRhbK9fIH+3aj+tYf/AArmH/n5l/75FAHJUV1v/CuYf+fmX/vkUf8ACuYf+fmX/vkUAeOfH7/hY3/CvZP+FW/8IT/wlf2iPZ/wlX2r+z/J58zP2f8Aeb+mO3XNfMf7Ln7Nv7UPwR+OnijxFql18BLjR/iLr8OseJUtJdWe5gVVCOtmGRVU7M4EpbnqcV9//wDCuYf+fmX/AL5FH/CuYf8An5l/75FAHJUV1v8AwrmH/n5l/wC+RR/wrmH/AJ+Zf++RQBU8A/8AL3/wD/2auZ+Cn/I/+O/+wgP/AEZPXp3gr4eIv2rZ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", + "description": null, + "descriptor": { + "type": "rpc", + "sizeX": 8.5, + "sizeY": 5.5, + "resources": [], + "templateHtml": "", + "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.gpio-panel section[fxflex] {\n min-width: 0px;\n}\n\n\n.switch-panel {\n margin: 0;\n height: 32px;\n width: 66px;\n min-width: 66px;\n}\n\n.switch-panel mat-slide-toggle {\n margin: 0;\n width: 36px;\n min-width: 36px;\n}\n\n.switch-panel.col-0 mat-slide-toggle {\n margin-left: 8px;\n margin-right: 4px;\n}\n\n.switch-panel.col-1 mat-slide-toggle {\n margin-left: 4px;\n margin-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": "\nself.onInit = function() {\n};", + "settingsSchema": "", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-service-rpc-settings", + "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"isConnector\":false},\"title\":\"Service RPC\"}" } } ] diff --git a/ui-ngx/src/app/core/utils.ts b/ui-ngx/src/app/core/utils.ts index 4018fd491f..4bde4ab41d 100644 --- a/ui-ngx/src/app/core/utils.ts +++ b/ui-ngx/src/app/core/utils.ts @@ -205,6 +205,13 @@ export function base64toObj(b64Encoded: string): any { return JSON.parse(json); } +export function stringToBase64(value: string): string { + return btoa(encodeURIComponent(value).replace(/%([0-9A-F]{2})/g, + function toSolidBytes(match, p1) { + return String.fromCharCode(Number('0x' + p1)); + })); +} + const scrollRegex = /(auto|scroll)/; function parentNodes(node: Node, nodes: Node[]): Node[] { diff --git a/ui-ngx/src/app/modules/common/modules-map.ts b/ui-ngx/src/app/modules/common/modules-map.ts index f7ef860562..466a9f7cc6 100644 --- a/ui-ngx/src/app/modules/common/modules-map.ts +++ b/ui-ngx/src/app/modules/common/modules-map.ts @@ -296,6 +296,14 @@ import * as QueueFormComponent from '@home/components/queue/queue-form.component import * as AssetProfileComponent from '@home/components/profile/asset-profile.component'; import * as AssetProfileDialogComponent from '@home/components/profile/asset-profile-dialog.component'; import * as AssetProfileAutocompleteComponent from '@home/components/profile/asset-profile-autocomplete.component'; +import * as DeviceGatewayCommandComponent from '@shared/components/device/device-gateway-command.component'; +import * as GatewayRemoteConfigurationDialogComponent from '@shared/components/dialog/gateway-remote-configuration-dialog'; +import * as GatewayConfigurationComponent from '@shared/components/device/gateway-configuration.component'; +import * as GatewayConnectorComponent from '@shared/components/device/gateway-connectors.component'; +import * as GatewayLogsComponent from '@shared/components/device/gateway-logs.component'; +import * as GatewayStatisticsComponent from '@shared/components/device/gateway-statistics.component'; +import * as GatewayServiceRPCComponent from '@shared/components/device/gateway-service-rpc.component'; + import { IModulesMap } from '@modules/common/modules-map.models'; @@ -398,6 +406,13 @@ class ModulesMap implements IModulesMap { '@shared/components/help.component': HelpComponent, '@shared/components/help-markdown.component': HelpMarkdownComponent, '@shared/components/help-popup.component': HelpPopupComponent, + '@shared/components/device/device-gateway-command.component': DeviceGatewayCommandComponent, + '@shared/components/device/gateway-configuration.component': GatewayConfigurationComponent, + '@shared/components/device/gateway-connectors.component': GatewayConnectorComponent, + '@shared/components/device/gateway-logs.component': GatewayLogsComponent, + '@shared/components/device/gateway-statistics.component': GatewayStatisticsComponent, + '@shared/components/device/gateway-service-rpc.component': GatewayServiceRPCComponent, + '@shared/components/device/gateway-remote-configuration-dialog': GatewayRemoteConfigurationDialogComponent, '@shared/components/tb-checkbox.component': TbCheckboxComponent, '@shared/components/toast.directive': TbToast, '@shared/components/tb-error.component': TbErrorComponent, diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts index 7023f09a40..692e2e36d1 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts @@ -22,7 +22,7 @@ import { DeviceCredentialsComponent } from '@home/components/device/device-crede import { DeviceCredentialsLwm2mComponent } from '@home/components/device/device-credentials-lwm2m.component'; import { DeviceCredentialsLwm2mServerComponent } from '@home/components/device/device-credentials-lwm2m-server.component'; import { DeviceCredentialsMqttBasicComponent } from '@home/components/device/device-credentials-mqtt-basic.component'; -import {DeviceGatewayCommandComponent} from "@home/components/device/device-gateway-command.component"; +import { DeviceExampleCommandComponent } from '@home/components/device/device-example-command.component'; @NgModule({ declarations: [ @@ -31,7 +31,7 @@ import {DeviceGatewayCommandComponent} from "@home/components/device/device-gate DeviceCredentialsLwm2mComponent, DeviceCredentialsLwm2mServerComponent, DeviceCredentialsMqttBasicComponent, - DeviceGatewayCommandComponent + DeviceExampleCommandComponent ], imports: [ CommonModule, @@ -43,7 +43,7 @@ import {DeviceGatewayCommandComponent} from "@home/components/device/device-gate DeviceCredentialsLwm2mComponent, DeviceCredentialsLwm2mServerComponent, DeviceCredentialsMqttBasicComponent, - DeviceGatewayCommandComponent + DeviceExampleCommandComponent ] }) export class DeviceCredentialsModule { } diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html new file mode 100644 index 0000000000..69fe98ba3d --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html @@ -0,0 +1,86 @@ + +
+ + + MQTT + + + COAP + + + HTTP + + + In order to publish telemetry data to (ThingsBoard device) with credentials of the current device you can use the following commands. +
+
+ MQTT + 1. Setup: + 2. Send command: +
+
{{ mqttCode }}
+ +
+
+
+ COAP + 1. Setup: + 2. Send command: (based on CoAP cli) +
+
{{ coapCode }}
+ +
JSON example: {{'[{"temperature": 40}, {"isRainy": true}]'}}
+
+
+
+ HTTP + 1. Setup: + 2. Send command: +
+
{{ httpCode }}
+ +
+
+
+
diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss new file mode 100644 index 0000000000..1ffdf91763 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss @@ -0,0 +1,41 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + + mat-button-toggle-group, .protocol-title { + margin-bottom: 20px; + } + + span { + margin-bottom: 10px; + } + + .protocol-toggle { + width: fit-content; + } + + .help-title { + padding-bottom: 5px; + } + + .protocol-send-command { + width: 100%; + } + + .pre-wrap { + white-space: pre-wrap; + } +} diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts new file mode 100644 index 0000000000..1241b93851 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts @@ -0,0 +1,98 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component, Input, OnInit } from '@angular/core'; +import { FormControl } from '@angular/forms'; +import { Router } from '@angular/router'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { TranslateService } from '@ngx-translate/core'; +import { ActionNotificationShow } from '@core/notification/notification.actions'; +import { helpBaseUrl } from '@shared/models/constants'; + +@Component({ + selector: 'tb-device-example-command', + templateUrl: './device-example-command.component.html', + styleUrls: ['./device-example-command.component.scss'] +}) + +export class DeviceExampleCommandComponent implements OnInit { + + @Input() + token: string; + + helpLink: string = helpBaseUrl + '/docs/reference/protocols/'; + + mqttCode: string; + + coapCode: string; + + httpCode: string; + + mqttSetup: string; + + coapSetup: string; + + httpSetup: string; + + protocolCtrl: FormControl; + + constructor(protected router: Router, + protected store: Store, + private translate: TranslateService) { + } + + + ngOnInit(): void { + const HOST = window.location.hostname; + this.mqttCode = `mosquitto_pub -d -q 1 -h ${HOST} -t "v1/devices/me/telemetry" -u "${this.token}" -m "{"temperature":42}"`; + this.coapCode = `cat telemetry-data.json | coap post coap://${HOST}/api/v1/${this.token}/telemetry`; + this.httpCode = `curl -v -X POST --data "{"temperature":42,"humidity":73}" http://${HOST}/api/v1/${this.token}/telemetry --header "Content-Type:application/json"`; + + this.protocolCtrl = new FormControl('mqtt'); + const mqttLink = ' Mqtt Guide'; + + // @ts-ignore + const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, + macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], + windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; + if (macosPlatforms.indexOf(platform) !== -1) { + this.mqttSetup = 'brew install mosquitto-clients'; + this.coapSetup = 'npm install coap-cli -g'; + this.httpSetup = 'brew install curl'; + } else if (windowsPlatforms.indexOf(platform) !== -1) { + this.mqttSetup = mqttLink; + this.coapSetup = 'npm install coap-cli -g'; + this.httpSetup = 'not required, available by default in windows 10+'; + } else if (/Linux/.test(platform)) { + this.mqttSetup = 'sudo apt-get install mosquitto-clients'; + this.coapSetup = 'npm install coap-cli -g'; + this.httpSetup = 'sudo apt-get install curl'; + } + } + + onDockerCodeCopied() { + this.store.dispatch(new ActionNotificationShow( + { + message: this.translate.instant('gateway.command-copied-message'), + type: 'success', + target: 'dockerCommandDialogContent', + duration: 1200, + verticalPosition: 'bottom', + horizontalPosition: 'left' + })); + } +} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html deleted file mode 100644 index 6318b74537..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.html +++ /dev/null @@ -1,41 +0,0 @@ - -
- -

gateway.command

- - -
- - -
- -
- -
-
diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts deleted file mode 100644 index 60bf9c1e21..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-command-dialog.component.ts +++ /dev/null @@ -1,58 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import {Component, Inject, OnInit} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {Store} from '@ngrx/store'; -import {AppState} from '@core/core.state'; -import {Router} from '@angular/router'; -import {DialogComponent} from '@app/shared/components/dialog.component'; -import {TranslateService} from '@ngx-translate/core'; -import {Device, DeviceCredentials} from "@shared/models/device.models"; - -export interface GatewayCommandDialogData { - device: Device, - credentials: DeviceCredentials -} - -enum OsType { - linux = 'linux', - macos = 'macos', - windows = 'win' -} - -@Component({ - selector: 'tb-gateway-command-dialog', - templateUrl: './gateway-command-dialog.component.html', - styleUrls: [] -}) -export class GatewayCommandDialogComponent extends DialogComponent implements OnInit { - - constructor(protected router: Router, - protected store: Store, - @Inject(MAT_DIALOG_DATA) public data: GatewayCommandDialogData, - public dialogRef: MatDialogRef,) { - super(store, router, dialogRef); - } - - ngOnInit() { - } - - close(): void { - this.dialogRef.close(); - } - -} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts deleted file mode 100644 index 00ff31343e..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list-table-config.ts +++ /dev/null @@ -1,130 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import { - DateEntityTableColumn, - EntityTableColumn, - EntityTableConfig -} from '@home/models/entity/entities-table-config.models'; -import {EntityType, EntityTypeResource} from '@shared/models/entity-type.models'; -import {TranslateService} from '@ngx-translate/core'; -import {DatePipe} from '@angular/common'; -import {Direction} from '@shared/models/page/sort-order'; -import {MatDialog} from '@angular/material/dialog'; -import {TimePageLink} from '@shared/models/page/page-link'; -import {Observable} from 'rxjs'; -import {emptyPageData, PageData} from '@shared/models/page/page-data'; -import {UtilsService} from '@core/services/utils.service'; -import {DeviceService} from "@core/http/device.service"; -import {AttributeService} from "@core/http/attribute.service"; -import {Device} from "@shared/models/device.models"; -import { - GatewayCommandDialogComponent, - GatewayCommandDialogData -} from "@home/components/gateway/gateway-command-dialog.component"; -import {ActionNotificationShow} from "@core/notification/notification.actions"; -import {Store} from "@ngrx/store"; -import {AppState} from "@core/core.state"; -import {map} from "rxjs/operators"; -import {EntityService} from "@core/http/entity.service"; - -export class GatewayListTableConfig extends EntityTableConfig { - - constructor(protected store: Store, - private deviceService: DeviceService, - private attributeService: AttributeService, - private entityService: EntityService, - private datePipe: DatePipe, - private translate: TranslateService, - private utils: UtilsService, - private dialog: MatDialog, - updateOnInit = true) { - super(); - this.loadDataOnInit = updateOnInit; - this.tableTitle = 'Gateway list'; - this.useTimePageLink = false; - this.pageMode = false; - this.displayPagination = false; - this.detailsPanelEnabled = false; - this.selectionEnabled = false; - this.searchEnabled = false; - this.addEnabled = false; - this.entitiesDeleteEnabled = false; - this.actionsColumnTitle = ''; - this.entityTranslations = { - noEntities: 'gateway.no-gateway-found', - search: 'gateway.gateway-search' - }; - this.entityResources = {} as EntityTypeResource; - - this.entitiesFetchFunction = () => this.fetchGateways(); - - this.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC}; - - this.columns.push( - new DateEntityTableColumn('createdTime', 'gateway.created-time', this.datePipe, '150px')); - - this.columns.push( - new EntityTableColumn('entityName', 'gateway.gateway-name', '20%', - (entity => this.utils.customTranslation(entity.name, entity.name)) - ) - ); - - this.cellActionDescriptors.push( - { - name: this.translate.instant('gateway.command'), - icon: 'vpn_key', - isEnabled: () => true, - onAction: ($event, entity) => this.showGatewayDockerCommand(entity) - } - ); - } - - showGatewayDockerCommand(entity: Device) { - this.deviceService.getDeviceCredentials(entity.id.id).subscribe(credentials => { - this.dialog.open - (GatewayCommandDialogComponent, - { - disableClose: true, - panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], - data: { - credentials: credentials, - device: entity - } - }).afterClosed().subscribe( - (res) => { - if (res) { - this.updateData(); - } - } - ); - }, error => { - const messageToShow = `
${error}
`; - this.store.dispatch(new ActionNotificationShow({message: messageToShow, type: 'error'})); - }) - } - - fetchGateways(): Observable> { - return this.entityService.getEntitiesByNameFilter(EntityType.DEVICE, "", -1).pipe( - map((array: Array) => { - const pageData = emptyPageData(); - pageData.data = array.filter(device => device.additionalInfo?.gateway); - pageData.totalPages = 1; - pageData.totalElements = array.length; - return pageData; - })) - } -} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts b/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts deleted file mode 100644 index 14e95234a2..0000000000 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.ts +++ /dev/null @@ -1,63 +0,0 @@ -/// -/// Copyright © 2016-2022 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. -/// - -import {Component, OnInit} from '@angular/core'; -import {UtilsService} from '@core/services/utils.service'; -import {TranslateService} from '@ngx-translate/core'; -import {DeviceService} from '@core/http/device.service'; -import {AttributeService} from '@core/http/attribute.service'; -import {GatewayListTableConfig} from "@home/components/gateway/gateway-list-table-config"; -import {DatePipe} from "@angular/common"; -import {MatDialog} from "@angular/material/dialog"; -import {Store} from "@ngrx/store"; -import {AppState} from "@core/core.state"; -import {EntityService} from "@core/http/entity.service"; - -@Component({ - selector: 'tb-gateway-list', - templateUrl: './gateway-list.component.html', - styleUrls: ['./gateway-list.component.scss'] -}) - - -export class GatewayListComponent implements OnInit { - gatewayListTableConfig: GatewayListTableConfig; - - constructor( - protected store: Store, - private utils: UtilsService, - private translate: TranslateService, - private datePipe: DatePipe, - private deviceService: DeviceService, - private entityService: EntityService, - private attributeService: AttributeService, - private dialog: MatDialog, - ) { - } - - ngOnInit(): void { - this.gatewayListTableConfig = new GatewayListTableConfig( - this.store, - this.deviceService, - this.attributeService, - this.entityService, - this.datePipe, - this.translate, - this.utils, - this.dialog - ); - } -} diff --git a/ui-ngx/src/app/modules/home/components/home-components.module.ts b/ui-ngx/src/app/modules/home/components/home-components.module.ts index 2b9a446e20..7a91645e31 100644 --- a/ui-ngx/src/app/modules/home/components/home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/home-components.module.ts @@ -178,7 +178,6 @@ import { modulesMap } from '@modules/common/modules-map'; import { AlarmAssigneePanelComponent } from '@home/components/alarm/alarm-assignee-panel.component'; import { RouterTabsComponent } from '@home/components/router-tabs.component'; import { SendNotificationButtonComponent } from '@home/components/notification/send-notification-button.component'; -import { GatewayListComponent } from "@home/components/gateway/gateway-list.component"; @NgModule({ declarations: @@ -203,7 +202,6 @@ import { GatewayListComponent } from "@home/components/gateway/gateway-list.comp AlarmTableHeaderComponent, AlarmTableComponent, AlarmAssigneePanelComponent, - GatewayListComponent, AttributeTableComponent, AddAttributeDialogComponent, EditAttributeValuePanelComponent, @@ -354,7 +352,6 @@ import { GatewayListComponent } from "@home/components/gateway/gateway-list.comp RelationFiltersComponent, AlarmTableComponent, AlarmAssigneePanelComponent, - GatewayListComponent, AttributeTableComponent, AliasesEntitySelectComponent, AliasesEntityAutocompleteComponent, diff --git a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts index 912fcfb52e..45ee713d10 100644 --- a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts @@ -18,7 +18,6 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedModule } from '@app/shared/shared.module'; import { AlarmDetailsDialogComponent } from '@home/components/alarm/alarm-details-dialog.component'; -import { GatewayCommandDialogComponent } from "@home/components/gateway/gateway-command-dialog.component"; import { SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; import { DeviceCredentialsModule } from "@home/components/device/device-credentials.module"; import { AlarmCommentComponent } from '@home/components/alarm/alarm-comment.component'; @@ -35,7 +34,6 @@ import { AlarmAssigneeComponent } from '@home/components/alarm/alarm-assignee.co AlarmCommentComponent, AlarmCommentDialogComponent, AlarmAssigneeComponent - GatewayCommandDialogComponent ], imports: [ CommonModule, @@ -47,7 +45,6 @@ import { AlarmAssigneeComponent } from '@home/components/alarm/alarm-assignee.co AlarmCommentComponent, AlarmCommentDialogComponent, AlarmAssigneeComponent - GatewayCommandDialogComponent ] }) export class SharedHomeComponentsModule { } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html new file mode 100644 index 0000000000..4f92aacffd --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.html @@ -0,0 +1,26 @@ + +
+ + Is Connector + + + State parameter connector name + + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts new file mode 100644 index 0000000000..74e214a3d9 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-logs-settings.component.ts @@ -0,0 +1,54 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; + +@Component({ + selector: 'tb-gateway-logs-settings', + templateUrl: './gateway-logs-settings.component.html', + styleUrls: ['../widget-settings.scss'] +}) +export class GatewayLogsSettingsComponent extends WidgetSettingsComponent { + + GatewayLogSettingForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.GatewayLogSettingForm; + } + + protected defaultSettings(): WidgetSettings { + return { + isConnectorLog: false, + connectorLogState: 'default' + }; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.GatewayLogSettingForm = this.fb.group({ + isConnectorLog: [false, []], + connectorLogState: ['default', []] + }); + } +} diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html similarity index 68% rename from ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html index 7190c87ead..96e9a7dba9 100644 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.html @@ -1,6 +1,6 @@ - +
+ + Is Connector + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts new file mode 100644 index 0000000000..edafed90b8 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component.ts @@ -0,0 +1,52 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component } from '@angular/core'; +import { WidgetSettings, WidgetSettingsComponent } from '@shared/models/widget.models'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; + +@Component({ + selector: 'tb-gateway-service-rpc-settings', + templateUrl: './gateway-service-rpc-settings.component.html', + styleUrls: ['../widget-settings.scss'] +}) +export class GatewayServiceRPCSettingsComponent extends WidgetSettingsComponent { + + GatewayLogSettingForm: UntypedFormGroup; + + constructor(protected store: Store, + private fb: UntypedFormBuilder) { + super(store); + } + + protected settingsForm(): UntypedFormGroup { + return this.GatewayLogSettingForm; + } + + protected defaultSettings(): WidgetSettings { + return { + isConnector: false, + }; + } + + protected onSettingsSet(settings: WidgetSettings) { + this.GatewayLogSettingForm = this.fb.group({ + isConnector: [false, []] + }); + } +} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts index ef7668f306..78793e6771 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/widget-settings.module.ts @@ -259,6 +259,13 @@ import { import { TripAnimationPointSettingsComponent } from '@home/components/widget/lib/settings/map/trip-animation-point-settings.component'; +import { + GatewayLogsSettingsComponent +} from '@home/components/widget/lib/settings/gateway/gateway-logs-settings.component'; +import { + GatewayServiceRPCSettingsComponent +} from '@home/components/widget/lib/settings/gateway/gateway-service-rpc-settings.component'; + @NgModule({ declarations: [ @@ -357,7 +364,9 @@ import { TripAnimationPointSettingsComponent, MapWidgetSettingsComponent, RouteMapWidgetSettingsComponent, - TripAnimationWidgetSettingsComponent + TripAnimationWidgetSettingsComponent, + GatewayLogsSettingsComponent, + GatewayServiceRPCSettingsComponent ], imports: [ CommonModule, @@ -460,7 +469,9 @@ import { TripAnimationPointSettingsComponent, MapWidgetSettingsComponent, RouteMapWidgetSettingsComponent, - TripAnimationWidgetSettingsComponent + TripAnimationWidgetSettingsComponent, + GatewayLogsSettingsComponent, + GatewayServiceRPCSettingsComponent ] }) export class WidgetSettingsModule { @@ -527,5 +538,7 @@ export const widgetSettingsComponentsMap: {[key: string]: Type
- + check @@ -178,9 +178,17 @@ +
+ + + + +
-
+
@@ -195,10 +203,11 @@
+ (click)="add()">{{ (deviceCredentials ? 'action.close': 'action.add') | translate }}
diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss index 0fe18467fd..e3fbd3c7c6 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss @@ -37,6 +37,10 @@ } :host ::ng-deep { + .commands-container { + padding: 24px; + } + .mat-mdc-dialog-content { display: flex; flex-direction: column; diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index 77916d379c..80aa438e2d 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -24,6 +24,8 @@ import { Router } from '@angular/router'; import { createDeviceProfileConfiguration, createDeviceProfileTransportConfiguration, + Device, + DeviceCredentials, DeviceProfile, DeviceProfileInfo, DeviceProfileType, @@ -57,9 +59,9 @@ import { deepTrim } from '@core/utils'; styleUrls: ['./device-wizard-dialog.component.scss'] }) export class DeviceWizardDialogComponent extends - DialogComponent implements OnDestroy, ErrorStateMatcher { + DialogComponent implements OnDestroy, ErrorStateMatcher { - @ViewChild('addDeviceWizardStepper', {static: true}) addDeviceWizardStepper: MatStepper; + @ViewChild('addDeviceWizardStepper') addDeviceWizardStepper: MatStepper; selectedIndex = 0; @@ -69,7 +71,7 @@ export class DeviceWizardDialogComponent extends entityType = EntityType; - deviceTransportTypes = Object.values(DeviceTransportType); + deviceTransportTypes = Object.values(DeviceTransportType) as DeviceTransportType[]; deviceTransportTypeTranslations = deviceTransportTypeTranslationMap; @@ -91,6 +93,10 @@ export class DeviceWizardDialogComponent extends serviceType = ServiceType.TB_RULE_ENGINE; + device: Device; + + deviceCredentials: DeviceCredentials; + private subscriptions: Subscription[] = []; private currentDeviceProfileTransportType = DeviceTransportType.DEFAULT; @@ -98,7 +104,7 @@ export class DeviceWizardDialogComponent extends protected router: Router, @Inject(MAT_DIALOG_DATA) public data: AddEntityDialogData>, @SkipSelf() private errorStateMatcher: ErrorStateMatcher, - public dialogRef: MatDialogRef, + public dialogRef: MatDialogRef, private deviceProfileService: DeviceProfileService, private deviceService: DeviceService, private breakpointObserver: BreakpointObserver, @@ -263,13 +269,15 @@ export class DeviceWizardDialogComponent extends } add(): void { - if (this.allValid()) { + if (this.deviceCredentials) { + this.dialogRef.close(this.device); + } else if (this.allValid()) { this.createDeviceProfile().pipe( mergeMap(profileId => this.createDevice(profileId)), - mergeMap(device => this.saveCredentials(device)) + mergeMap(device => this.saveCredentials(device)), ).subscribe( - (created) => { - this.dialogRef.close(created); + (device) => { + this.device = device; } ); } @@ -326,7 +334,7 @@ export class DeviceWizardDialogComponent extends } } - private createDevice(profileId): Observable> { + private createDevice(profileId): Observable { const device = { name: this.deviceWizardFormGroup.get('name').value, label: this.deviceWizardFormGroup.get('label').value, @@ -349,10 +357,10 @@ export class DeviceWizardDialogComponent extends this.addDeviceWizardStepper.selectedIndex = 0; return throwError(e); }) - ); + ) as Observable; } - private saveCredentials(device: BaseData): Observable { + private saveCredentials(device: Device): Observable { if (this.credentialsFormGroup.get('setCredential').value) { return this.deviceService.getDeviceCredentials(device.id.id).pipe( mergeMap( @@ -370,9 +378,16 @@ export class DeviceWizardDialogComponent extends ); } ), - map(() => true)); + map(() => device)); + } else { + return this.deviceService.getDeviceCredentials(device.id.id).pipe( + map((deviceCredentials) => { + this.deviceCredentials = deviceCredentials; + return device; + }) + ); } - return of(true); + return of(device); } allValid(): boolean { diff --git a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html similarity index 80% rename from ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html rename to ui-ngx/src/app/shared/components/device/device-gateway-command.component.html index 64c60ba8fa..b963a18aaf 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-gateway-command.component.html +++ b/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html @@ -1,6 +1,6 @@
- In order to run ThingsBoard IoT gateway (ThingsBoard IoT gateway) in docker with credentials for this device you can use the following commands. -
- + In order to run ThingsBoard IoT gateway in docker with credentials for this device you can use the following commands. +
+ gateway.windows gateway.linux-macos
-
+
{{ linuxCode }}
-
+
{{ windowsCode }}
+ + + +
+ + +
+ + {{ 'gateway.remote-configuration' | translate }} + info + + + + {{ 'gateway.remote-shell' | translate }} + info + + + + gateway.thingsboard-host + + info_outlined + + + {{ 'gateway.thingsboard-host-required' | translate }} + + + + gateway.thingsboard-port + + + {{'gateway.thingsboard-port-required' | translate }} + + + {{'gateway.thingsboard-port-min' | translate }} + + + {{'gateway.thingsboard-port-max' | translate }} + + + {{'gateway.thingsboard-port-pattern' | translate }} + + info_outlined + + + +
+
+ + + security.security + +
+ + + {{ securityType.value | translate }} + + + + security.access-token + + + {{'security.access-token-required' | translate}} + + info_outlined + + + + security.clientId + + + {{'security.clientId-required' | translate}} + + info_outlined + + + + security.username + + + {{'security.username-required' | translate}} + + info_outlined + + + + security.password + + + {{'security.password-required' | translate}} + + info_outlined + + + + + + + + +
+
+
+
+
+ +
+ + +
+ + gateway.logs.date-format + + + {{'gateway.logs.date-format-required' | translate }} + + info_outlined + + + + gateway.logs.log-format + + + {{'gateway.logs.log-format-required' | translate }} + + info_outlined + + +
+
+ + + gateway.logs.remote + + + {{ 'gateway.logs.remote-logs' | translate }} + info + + + + gateway.logs.level + + {{logLevel}} + + + + + + gateway.logs.local + + + + {{ logConfig.value }} + + +
+ + gateway.logs.level + + {{logLevel}} + + + + gateway.logs.file-path + + + {{'gateway.logs.file-path-required' | translate }} + + + + gateway.logs.saving-period + + + {{'gateway.logs.saving-period-required' | translate }} + + + {{'gateway.logs.saving-period-min' | translate }} + + + + + + + {{period.value | translate}} + + + + + gateway.logs.backup-count + + + {{'gateway.logs.backup-count-required' | translate }} + + + {{'gateway.logs.backup-count-min' | translate }} + + info_outlined + + +
+
+
+
+
+ +
+ + + + gateway.storage + {{'gateway.hints.storage' | translate}} + + +
+ + + {{ storageType.value | translate }} + +
+ + {{'gateway.hints.'+gatewayConfigGroup.get('storage.type').value | translate}} +
+ + gateway.storage-read-record-count + + + {{'gateway.storage-read-record-count-required' | translate}} + + + {{'gateway.storage-read-record-count-min' | translate}} + + + {{'gateway.storage-read-record-count-pattern' | translate}} + + info_outlined + + + + gateway.storage-max-records + + + {{'gateway.storage-max-records-required' | translate}} + + + {{'gateway.storage-max-records-min' | translate}} + + + {{'gateway.storage-max-records-pattern' | translate}} + + info_outlined + + + + gateway.storage-data-folder-path + + + {{'gateway.storage-data-folder-path-required' | translate}} + + info_outlined + + + + gateway.storage-max-files + + + {{'gateway.storage-max-files-required' | translate}} + + + {{'gateway.storage-max-files-min' | translate}} + + + {{'gateway.storage-max-files-pattern' | translate}} + + info_outlined + + + + gateway.storage-max-read-record-count + + + {{'gateway.storage-max-read-record-count-required' | translate}} + + + {{'gateway.storage-max-read-record-count-min' | translate}} + + + {{'gateway.storage-max-read-record-count-pattern' | translate}} + + info_outlined + + + + gateway.storage-max-file-records + + + {{'gateway.storage-max-records-required' | translate}} + + + {{'gateway.storage-max-records-min' | translate}} + + + {{'gateway.storage-max-records-pattern' | translate}} + + info_outlined + + + + gateway.storage-path + + + {{'gateway.storage-path-required' | translate}} + + info_outlined + + + + gateway.messages-ttl-check-in-hours + + + {{'gateway.messages-ttl-check-in-hours-required' | translate}} + + + {{'gateway.messages-ttl-check-in-hours-min' | translate}} + + + {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} + + info_outlined + + + + gateway.messages-ttl-in-days + + + {{'gateway.messages-ttl-in-days-required' | translate}} + + + {{'gateway.messages-ttl-in-days-min' | translate}} + + + {{'gateway.messages-ttl-in-days-pattern' | translate}} + + info_outlined + + +
+
+
+
+
+ +
+ + +
+ + {{ 'gateway.grpc' | translate }} + + + {{ 'gateway.permit-without-calls' | translate }} + + + gateway.server-port + + + {{'gateway.thingsboard-port-required' | translate }} + + + {{'gateway.thingsboard-port-min' | translate }} + + + {{'gateway.thingsboard-port-max' | translate }} + + + {{'gateway.thingsboard-port-pattern' | translate }} + + + + gateway.grpc-keep-alive-timeout + + + {{'gateway.grpc-keep-alive-timeout-required' | translate }} + + + {{'gateway.grpc-keep-alive-timeout-min' | translate }} + + + {{'gateway.grpc-keep-alive-timeout-pattern' | translate }} + + + + gateway.grpc-keep-alive + + + {{'gateway.grpc-keep-alive-required' | translate }} + + + {{'gateway.grpc-keep-alive-min' | translate }} + + + {{'gateway.grpc-keep-alive-pattern' | translate }} + + + + gateway.grpc-min-time-between-pings + + + {{'gateway.grpc-min-time-between-pings-required' | translate }} + + + {{'gateway.grpc-min-time-between-pings-min' | translate }} + + + {{'gateway.grpc-min-time-between-pings-pattern' | translate }} + + + + gateway.grpc-max-pings-without-data + + + {{'gateway.grpc-max-pings-without-data-required' | translate }} + + + {{'gateway.grpc-max-pings-without-data-min' | translate }} + + + {{'gateway.grpc-max-pings-without-data-pattern' | translate }} + + + + gateway.grpc-min-ping-interval-without-data + + + {{'gateway.grpc-min-ping-interval-without-data-required' | translate }} + + + {{'gateway.grpc-min-ping-interval-without-data-min' | translate }} + + + {{'gateway.grpc-min-ping-interval-without-data-pattern' | translate }} + + +
+
+
+
+
+ +
+ + +
+ + {{ 'gateway.statistics.statistics' | translate }} + + + gateway.statistics.send-period + + + {{'gateway.statistics.send-period-required' | translate }} + + + {{'gateway.statistics.send-period-min' | translate }} + + + {{'gateway.statistics.send-period-pattern' | translate }} + + +
+
+ + + {{"gateway.statistics.commands" |translate}} + + {{'gateway.hints.commands' | translate}} + +
+
+ + + gateway.statistics.attribute-name + + + {{'gateway.statistics.attribute-name-required' | translate }} + + info_outlined + + + + gateway.statistics.timeout + + + {{'gateway.statistics.timeout-required' | translate }} + + + {{'gateway.statistics.timeout-min' | translate }} + + + {{'gateway.statistics.timeout-pattern' | translate }} + + info_outlined + + + + gateway.statistics.command + + + {{'gateway.statistics.command-required' | translate }} + + info_outlined + + + + +
+ +
+
+
+
+
+ +
+ + + + + + {{ 'gateway.checking-device-activity' | translate }} + + {{'gateway.hints.check-device-activity' | translate}} + + +
+ + gateway.inactivity-timeout-seconds + + + {{'gateway.inactivity-timeout-seconds-required' | translate }} + + + {{'gateway.inactivity-timeout-seconds-min' | translate }} + + info_outlined + + + + gateway.inactivity-check-period-seconds + + + {{'gateway.inactivity-check-period-seconds-required' | translate }} + + + {{'gateway.inactivity-check-period-seconds-min' | translate }} + + info_outlined + + +
+
+ + + gateway.advanced + +
+ + gateway.min-pack-send-delay + + + {{ 'gateway.min-pack-send-delay-required' | translate }} + + + {{ 'gateway.min-pack-send-delay-min' | translate }} + + info_outlined + + + + gateway.mqtt-qos + + + {{ 'gateway.mqtt-qos-required' | translate}} + + + {{ 'gateway.mqtt-qos-range' | translate}} + + + {{ 'gateway.mqtt-qos-range' | translate}} + + info_outlined + + + + gateway.statistics.check-connectors-configuration + + + {{'gateway.statistics.check-connectors-configuration-required' | translate }} + + + {{'gateway.statistics.check-connectors-configuration-min' | translate }} + + + {{'gateway.statistics.check-connectors-configuration-pattern' | translate }} + + +
+
+ +
+
+
+
+
+
+ + + +
+ diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss new file mode 100644 index 0000000000..7d3f357589 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss @@ -0,0 +1,201 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + display: block; + + .mat-icon { + color: rgba(0, 0, 0, .12); + } + + .mat-toolbar { + background: transparent; + color: rgba(0, 0, 0, .87) !important; + } + + .mat-content { + .expansion-panel-header { + font-weight: 600; + color: rgba(0, 0, 0, .87) !important; + } + + mat-slide-toggle { + margin-bottom: 16px; + } + + mat-form-field { + margin-right: 15px; + } + + .block-title { + font-size: 20px; + font-weight: 400; + padding-top: 16px; + } + + .hover-cursor { + cursor: pointer; + } + } + + .security-toggle-group { + padding-bottom: 0; + background: transparent !important; + margin-bottom: 15px; + border: none; + + .mat-button-toggle { + border-radius: 15px; + border: 1px solid rgba(0, 0, 0, 0); + background: rgba(0, 0, 0, .05); + margin: 5px; + color: rgba(0, 0, 0, .2); + font-weight: 500; + } + + .mat-button-toggle-checked { + border-radius: 15px; + border: 1px solid #305680; + background: white; + color: #305680; + } + + ::ng-deep span { + text-transform: capitalize; + line-height: 20px; + font-size: 13px; + padding: 5px 25px; + } + + ::ng-deep .mat-button-toggle-ripple { + border-radius: 15px; + } + + ::ng-deep .mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay { + opacity: 0 !important; + } + } + + .logs-label { + font-weight: 500; + margin-bottom: 10px; + } + + .logs-toggle-group { + border: none; + border-radius: 15px; + background: rgba(0, 0, 0, .05); + color: rgba(0, 0, 0, .2); + font-weight: 500; + + .mat-button-toggle { + border: none; + background: rgba(0, 0, 0, .0); + color: rgba(0, 0, 0, .2); + font-weight: 500; + } + + .mat-button-toggle-checked { + border-radius: 15px; + color: white; + background: #305680; + } + + ::ng-deep span { + line-height: 20px; + font-size: 13px; + padding: 5px 25px; + } + + ::ng-deep .mat-button-toggle-ripple { + border-radius: 15px; + } + + ::ng-deep .mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay { + opacity: 0 !important; + } + } + + .statistics-block { + margin-bottom: 15px; + padding-left: 15px; + padding-top: 15px; + } + + .first-capital { + text-transform: capitalize; + } + + ::ng-deep.mat-tab-label-active { + color: white; + opacity: 1; + } + + ::ng-deep.mat-tab-label, ::ng-deep.mat-tab-label-active { + min-width: 50px !important; + padding: 3px !important; + margin: 3px !important; + flex-grow: 1; + } + + ::ng-deep.mat-ink-bar { + height: 100%; + z-index: -10; + border-radius: 5px; + } + + ::ng-deep.pe { + pointer-events: all; + } + + ::ng-deep.mat-mdc-form-field-icon-suffix { + z-index: 100; + } + + .suffix-icon { + position: relative; + transform: translateY(5px); + } + + mat-panel-title { + display: block; + padding-top: 20px; + } + + mat-panel-title span { + display: block; + padding-left: 0; + padding-top: 5px; + } + + .tb-hint { + font-size: 13px; + color: rgba(0, 0, 0, .54); + width: fit-content; + cursor: pointer; + text-transform: none!important; + } + + .line-break { + width: 100%; + } + + textarea { + resize: none; + } +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts new file mode 100644 index 0000000000..541e149311 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -0,0 +1,589 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms'; +import { EntityId } from '@shared/models/id/entity-id'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { + GatewayRemoteConfigurationDialogComponent, + GatewayRemoteConfigurationDialogData +} from '@shared/components/dialog/gateway-remote-configuration-dialog'; +import { DeviceService } from '@core/http/device.service'; +import { of } from 'rxjs'; +import { mergeMap } from 'rxjs/operators'; +import { DeviceCredentialsType } from '@shared/models/device.models'; + +export enum StorageTypes { + MEMORY = 'memory', + FILE = 'file', + SQLITE = 'sqlite' +} + +export enum GatewayLogLevel { + none = 'NONE', + critical = 'CRITICAL', + error = 'ERROR', + warning = 'WARNING', + info = 'INFO', + debug = 'DEBUG' +} + +export enum LogSavingPeriod { + days = 'D', + hours = 'H', + minutes = 'M', + seconds = 'S' +} + +export enum LocalLogsConfigs { + service = 'service', + connector = 'connector', + converter = 'converter', + tb_connection = 'tb_connection', + storage = 'storage', + extension = 'extension' +} + +export const localLogsConfigLabels = new Map([ + [LocalLogsConfigs.service, 'Service'], + [LocalLogsConfigs.connector, 'Connector'], + [LocalLogsConfigs.converter, 'Converter'], + [LocalLogsConfigs.tb_connection, 'TB Connection'], + [LocalLogsConfigs.storage, 'Storage'], + [LocalLogsConfigs.extension, 'Extension'] +]) + +export const logSavingPeriodTranslations = new Map( + [ + [LogSavingPeriod.days, 'gateway.logs.days'], + [LogSavingPeriod.hours, 'gateway.logs.hours'], + [LogSavingPeriod.minutes, 'gateway.logs.minutes'], + [LogSavingPeriod.seconds, 'gateway.logs.seconds'] + ] +); + +export const storageTypesTranslations = new Map( + [ + [StorageTypes.MEMORY, 'gateway.storage-types.memory-storage'], + [StorageTypes.FILE, 'gateway.storage-types.file-storage'], + [StorageTypes.SQLITE, 'gateway.storage-types.sqlite'] + ] +); + +export enum SecurityTypes { + ACCESS_TOKEN = 'accessToken', + USERNAME_PASSWORD = 'usernamePassword', + TLS_ACCESS_TOKEN = 'tlsAccessToken', + TLS_PRIVATE_KEY = 'tlsPrivateKey' +} + +export const securityTypesTranslationsMap = new Map( + [ + [SecurityTypes.ACCESS_TOKEN, 'gateway.security-types.access-token'], + [SecurityTypes.USERNAME_PASSWORD, 'gateway.security-types.username-password'], + [SecurityTypes.TLS_ACCESS_TOKEN, 'gateway.security-types.tls-access-token'], + // [SecurityTypes.TLS_PRIVATE_KEY, 'gateway.security-types.tls-private-key'], + ] +); + +@Component({ + selector: 'tb-gateway-configuration', + templateUrl: './gateway-configuration.component.html', + styleUrls: ['./gateway-configuration.component.scss'] +}) +export class GatewayConfigurationComponent implements OnInit { + + gatewayConfigGroup: FormGroup; + + storageTypes = storageTypesTranslations; + + logSavingPeriods = logSavingPeriodTranslations; + + localLogsConfigLabels = localLogsConfigLabels; + + securityTypes = securityTypesTranslationsMap; + + gatewayLogLevel = Object.values(GatewayLogLevel); + + @Input() + device: EntityId; + + @Input() + dialogRef: MatDialogRef; + + logSelector: FormControl; + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + private cd: ChangeDetectorRef, + public dialog: MatDialog) { + } + + ngOnInit() { + this.gatewayConfigGroup = this.fb.group({ + thingsboard: this.fb.group({ + host: [window.location.hostname, [Validators.required]], + port: [1883, [Validators.required, Validators.min(1), Validators.max(65535), Validators.pattern(/^-?[0-9]+$/)]], + remoteShell: [false, []], + remoteConfiguration: [true, []], + checkConnectorsConfigurationInSeconds: [60, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + statistics: this.fb.group({ + enable: [true, []], + statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + commands: this.fb.array([], []) + }), + maxPayloadSizeBytes: [1024, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + minPackSendDelayMS: [200, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], + minPackSizeToSend: [500, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + handleDeviceRenaming: [true, []], + checkingDeviceActivity: this.fb.group({ + checkDeviceInactivity: [false, []], + inactivityTimeoutSeconds: [200, [Validators.min(1)]], + inactivityCheckPeriodSeconds: [500, [Validators.min(1)]] + }), + security: this.fb.group({ + type: [SecurityTypes.ACCESS_TOKEN, [Validators.required]], + accessToken: [null, [Validators.required]], + clientId: [null, []], + username: [null, []], + password: [null, []], + caCert: [null, []], + cert: [null, []], + privateKey: [null, []], + }), + qos: [1, [Validators.min(0), Validators.max(1), Validators.required]] + }), + storage: this.fb.group({ + type: [StorageTypes.MEMORY, [Validators.required]], + read_records_count: [100, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]], + max_records_count: [100000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]], + data_folder_path: ['./data/', []], + max_file_count: [10, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + max_read_records_count: [10, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + max_records_per_file: [10000, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + data_file_path: ['./data/data.db', []], + messages_ttl_check_in_hours: [1, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + messages_ttl_in_days: [7, [Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + + }), + grpc: this.fb.group({ + enabled: [false, []], + serverPort: [9595, [Validators.required, Validators.min(1), Validators.max(65535), Validators.pattern(/^-?[0-9]+$/)]], + keepAliveTimeMs: [10000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + keepAliveTimeoutMs: [5000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + keepalivePermitWithoutCalls: [true, []], + maxPingsWithoutData: [0, [Validators.required, Validators.min(0), Validators.pattern(/^-?[0-9]+$/)]], + minTimeBetweenPingsMs: [10000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + minPingIntervalWithoutDataMs: [5000, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + }), + connectors: this.fb.array([]), + logs: this.fb.group({ + dateFormat: ['%Y-%m-%d %H:%M:%S', [Validators.required]], + logFormat: ['%(asctime)s - |%(levelname)s| - [%(filename)s] - %(module)s - %(funcName)s - %(lineno)d - %(message)s', + [Validators.required]], + type: ['remote', [Validators.required]], + remote: this.fb.group({ + enabled: [false], + logLevel: [GatewayLogLevel.info, [Validators.required]], + }), + local: this.fb.group({}) + }) + }); + + this.gatewayConfigGroup.get('thingsboard.remoteConfiguration').valueChanges.subscribe(enabled => { + if (!enabled) { + this.openConfigurationConfirmDialog(); + } + }); + + this.logSelector = this.fb.control(LocalLogsConfigs.service); + + for (const localLogsConfigsKey of Object.keys(LocalLogsConfigs)) { + this.addLocalLogConfig(localLogsConfigsKey, {}); + } + + const checkingDeviceActivityGroup = this.gatewayConfigGroup.get('thingsboard.checkingDeviceActivity') as FormGroup; + checkingDeviceActivityGroup.get('checkDeviceInactivity').valueChanges.subscribe(enabled => { + checkingDeviceActivityGroup.updateValueAndValidity(); + if (enabled) { + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setValidators([Validators.min(1), Validators.required]); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setValidators([Validators.min(1), Validators.required]); + } else { + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').clearValidators(); + checkingDeviceActivityGroup.get('inactivityTimeoutSeconds').setErrors(null); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').clearValidators(); + checkingDeviceActivityGroup.get('inactivityCheckPeriodSeconds').setErrors(null); + } + }); + + const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; + securityGroup.get('type').valueChanges.subscribe(type => { + this.removeAllSecurityValidators(); + if (type === SecurityTypes.ACCESS_TOKEN) { + securityGroup.get('accessToken').addValidators([Validators.required]); + securityGroup.get('accessToken').updateValueAndValidity(); + } else if (type === SecurityTypes.TLS_PRIVATE_KEY) { + securityGroup.get('caCert').addValidators([Validators.required]); + securityGroup.get('caCert').updateValueAndValidity(); + securityGroup.get('privateKey').addValidators([Validators.required]); + securityGroup.get('privateKey').updateValueAndValidity(); + securityGroup.get('cert').addValidators([Validators.required]); + securityGroup.get('cert').updateValueAndValidity(); + } else if (type === SecurityTypes.TLS_ACCESS_TOKEN) { + securityGroup.get('accessToken').addValidators([Validators.required]); + securityGroup.get('accessToken').updateValueAndValidity(); + securityGroup.get('caCert').addValidators([Validators.required]); + securityGroup.get('caCert').updateValueAndValidity(); + } else if (type === SecurityTypes.USERNAME_PASSWORD) { + securityGroup.get('clientId').addValidators([Validators.required]); + securityGroup.get('clientId').updateValueAndValidity(); + securityGroup.get('username').addValidators([Validators.required]); + securityGroup.get('username').updateValueAndValidity(); + securityGroup.get('password').addValidators([Validators.required]); + securityGroup.get('password').updateValueAndValidity(); + } + securityGroup.updateValueAndValidity(); + }); + + securityGroup.get('caCert').valueChanges.subscribe(_ => this.cd.detectChanges()) + securityGroup.get('privateKey').valueChanges.subscribe(_ => this.cd.detectChanges()) + securityGroup.get('cert').valueChanges.subscribe(_ => this.cd.detectChanges()) + + const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; + storageGroup.get('type').valueChanges.subscribe(type => { + this.removeAllStorageValidators(); + if (type === StorageTypes.MEMORY) { + storageGroup.get('read_records_count').addValidators( + [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]); + storageGroup.get('max_records_count').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + } else if (type === StorageTypes.FILE) { + storageGroup.get('data_folder_path').addValidators([Validators.required]); + storageGroup.get('max_file_count').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('max_read_records_count').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('max_records_per_file').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + } else if (type === StorageTypes.SQLITE) { + storageGroup.get('data_file_path').addValidators([Validators.required]); + storageGroup.get('messages_ttl_check_in_hours').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + storageGroup.get('messages_ttl_in_days').addValidators( + [Validators.min(1), Validators.pattern(/^-?[0-9]+$/), Validators.required]); + } + }); + + this.fetchConfigAttribute(this.device); + } + + fetchConfigAttribute(entityId: EntityId) { + this.attributeService.getEntityAttributes(entityId, AttributeScope.CLIENT_SCOPE, + ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel']).pipe( + mergeMap(attributes => attributes.length ? of(attributes) : this.attributeService.getEntityAttributes( + entityId, AttributeScope.SHARED_SCOPE, ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel'])) + ).subscribe(attributes => { + if (attributes.length) { + const general_configuration = attributes.find(attribute => attribute.key === 'general_configuration')?.value; + const grpc_configuration = attributes.find(attribute => attribute.key === 'grpc_configuration')?.value; + const logs_configuration = attributes.find(attribute => attribute.key === 'logs_configuration')?.value; + const storage_configuration = attributes.find(attribute => attribute.key === 'storage_configuration')?.value; + const remoteLoggingLevel = attributes.find(attribute => attribute.key === 'RemoteLoggingLevel')?.value; + if (general_configuration) { + const configObj = {thingsboard: general_configuration}; + if (configObj.thingsboard.statistics && configObj.thingsboard.statistics.commands) { + for (const command of configObj.thingsboard.statistics.commands) { + this.addCommand(command); + } + delete configObj.thingsboard.statistics.commands; + } + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + this.gatewayConfigGroup.markAsPristine(); + if (!configObj.thingsboard.remoteConfiguration) { + this.gatewayConfigGroup.disable({emitEvent: false}); + } + this.checkAndFetchCredentials(configObj.thingsboard.security); + } + if (grpc_configuration) { + const configObj = {grpc: grpc_configuration}; + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + } + if (logs_configuration) { + const configObj = {logs: this.logsToObj(logs_configuration)}; + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + this.cd.detectChanges(); + } + if (storage_configuration) { + const configObj = {storage: storage_configuration}; + this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + } + if (remoteLoggingLevel) { + const remoteLogsFormGroup = this.gatewayConfigGroup.get('logs.remote'); + remoteLogsFormGroup.patchValue({ + enabled: remoteLoggingLevel !== GatewayLogLevel.none, + logLevel: remoteLoggingLevel + }, {emitEvent: false}); + remoteLogsFormGroup.markAsPristine(); + } + this.cd.detectChanges(); + } else { + this.checkAndFetchCredentials({}); + } + }); + } + + checkAndFetchCredentials(security): void { + if (security.type !== SecurityTypes.TLS_PRIVATE_KEY) { + this.deviceService.getDeviceCredentials(this.device.id).subscribe(credentials => { + if (credentials.credentialsType === DeviceCredentialsType.ACCESS_TOKEN || security.type !== SecurityTypes.TLS_ACCESS_TOKEN) { + this.gatewayConfigGroup.get('thingsboard.security.accessToken').setValue(credentials.credentialsId); + } else if (credentials.credentialsType === DeviceCredentialsType.MQTT_BASIC) { + const parsedValue = JSON.parse(credentials.credentialsValue); + this.gatewayConfigGroup.get('thingsboard.security.clientId').setValue(parsedValue.clientId); + this.gatewayConfigGroup.get('thingsboard.security.username').setValue(parsedValue.userName); + this.gatewayConfigGroup.get('thingsboard.security.password').setValue(parsedValue.password); + } else if (credentials.credentialsType === DeviceCredentialsType.X509_CERTIFICATE ) { + //if sertificate is present set sertificate as present + } + }); + } + } + + logsToObj(logsConfig) { + const logsObject = { + local: {} + } + const logFormat = logsConfig.formatters.LogFormatter.format; + const dateFormat = logsConfig.formatters.LogFormatter.datefmt; + for (const localLogsConfigsKey of Object.keys(LocalLogsConfigs)) { + const handlerKey = localLogsConfigsKey + "Handler"; + logsObject[localLogsConfigsKey] = { + logLevel: logsConfig.loggers[localLogsConfigsKey].level, + filePath: logsConfig.handlers[handlerKey].filename.split('/'+localLogsConfigsKey)[0], + backupCount: logsConfig.handlers[handlerKey].backupCount, + savingTime: logsConfig.handlers[handlerKey].interval, + savingPeriod: logsConfig.handlers[handlerKey].when, + } + } + + + return {local: logsObject, logFormat, dateFormat}; + } + + addCommand(command?): void { + const data = command || {}; + const commandsFormArray = this.commandFormArray(); + const commandFormGroup = this.fb.group({ + attributeOnGateway: [data.attributeOnGateway || null, [Validators.required]], + command: [data.command || null, [Validators.required]], + timeout: [data.timeout || null, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + }); + commandsFormArray.push(commandFormGroup); + } + + addLocalLogConfig(name, config): void { + const localLogsFormGroup = this.gatewayConfigGroup.get('logs.local') as FormGroup; + const configGroup = this.fb.group({ + logLevel: [config.logLevel || GatewayLogLevel.info, [Validators.required]], + filePath: [config.filePath || './logs', [Validators.required]], + backupCount: [config.backupCount || 7, [Validators.required, Validators.min(0)]], + savingTime: [config.savingTime || 3, [Validators.required, Validators.min(0)]], + savingPeriod: [config.savingPeriod || LogSavingPeriod.days, [Validators.required]] + }); + localLogsFormGroup.addControl(name, configGroup); + } + + getLogFormGroup(value: string): FormGroup { + return this.gatewayConfigGroup.get(`logs.local.${value}`) as FormGroup; + } + + commandFormArray(): FormArray { + return this.gatewayConfigGroup.get('thingsboard.statistics.commands') as FormArray; + } + + removeCommandControl(index: number): void { + this.commandFormArray().removeAt(index); + this.gatewayConfigGroup.markAsDirty(); + } + + removeAllSecurityValidators(): void { + const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; + for (const controlsKey in securityGroup.controls) { + if (controlsKey !== 'type') { + securityGroup.controls[controlsKey].clearValidators(); + securityGroup.controls[controlsKey].setErrors(null); + securityGroup.controls[controlsKey].updateValueAndValidity(); + } + } + } + + removeAllStorageValidators(): void { + const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; + for (const storageKey in storageGroup.controls) { + if (storageKey !== 'type') { + storageGroup.controls[storageKey].clearValidators(); + storageGroup.controls[storageKey].setErrors(null); + storageGroup.controls[storageKey].updateValueAndValidity(); + } + } + } + + removeEmpty(obj) { + return Object.fromEntries( + Object.entries(obj) + .filter(([_, v]) => v != null) + .map(([k, v]) => [k, v === Object(v) ? this.removeEmpty(v) : v]) + ); + } + + generateLogsFile(logsObj) { + const logAttrObj = { + version: 1, + disable_existing_loggers: false, + formatters: { + LogFormatter: { + class: "logging.Formatter", + format: logsObj.logFormat, + datefmt: logsObj.dateFormat, + } + }, + handlers: { + consoleHandler: { + class: "logging.StreamHandler", + formatter: "LogFormatter", + level: "DEBUG", + stream: "ext://sys.stdout" + }, + databaseHandler: { + class: "thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler", + formatter: "LogFormatter", + filename: "./logs/database.log", + backupCount: 1, + encoding: "utf-8" + } + }, + loggers: { + database: { + handlers: ["databaseHandler", "consoleHandler"], + level: "DEBUG", + propagate: false + } + }, + root: { + level: "ERROR", + handlers: [ + "consoleHandler" + ] + } + } + for (const key of Object.keys(logsObj.local)) { + logAttrObj.handlers[key+"Handler"] = this.createHandlerObj(logsObj.local[key], key); + logAttrObj.loggers[key] = this.createLoggerObj(logsObj.local[key], key); + } + return logAttrObj; + } + + createHandlerObj(logObj, key) { + return { + class: "thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler", + formatter: "LogFormatter", + filename: `${logObj.filePath}/${key}.log`, + backupCount: logObj.backupCount, + interval: logObj.savingTime, + when: logObj.savingPeriod, + encoding: "utf-8" + } + } + + createLoggerObj(logObj, key) { + return { + handlers: [`${key}Handler`, "consoleHandler"], + level: logObj.logLevel, + propagate: false + } + } + + saveConfig(): void { + const value = this.removeEmpty(this.gatewayConfigGroup.value); + value.thingsboard.statistics.commands = Object.values(value.thingsboard.statistics.commands); + const attributes = []; + attributes.push({ + key: 'RemoteLoggingLevel', + value: value.logs.remote.enabled ? value.logs.remote.logLevel : GatewayLogLevel.none + }); + delete value.connectors; + attributes.push({ + key: 'logs_configuration', + value: this.generateLogsFile(value.logs) + }); + attributes.push({ + key: 'grpc_configuration', + value: value.grpc + }); + attributes.push({ + key: 'storage_configuration', + value: value.storage + }); + attributes.push({ + key: 'general_configuration', + value: value.thingsboard + }); + + this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributes).subscribe(_ => { + if (this.dialogRef) { + this.dialogRef.close(); + } else { + this.gatewayConfigGroup.markAsPristine(); + this.cd.detectChanges(); + } + }); + } + + cancel(): void { + if (this.dialogRef) { + this.dialogRef.close(); + } + } + + private openConfigurationConfirmDialog(): void { + this.deviceService.getDevice(this.device.id).subscribe(gateway => { + this.dialog.open + (GatewayRemoteConfigurationDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + gatewayName: gateway.name + } + }).afterClosed().subscribe( + (res) => { + if (!res) { + this.gatewayConfigGroup.get('thingsboard.remoteConfiguration').setValue(true, {emitEvent: false}); + } + } + ); + }); + } +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html new file mode 100644 index 0000000000..387f8707d4 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html @@ -0,0 +1,167 @@ + +
+
+ + +

Connectors

+ + +
+ + + + Enabled + + + + + + + Name + + {{ attribute.key }} + + + + Type + + {{ returnType(attribute) }} + + + + + Actions + + +
+ + + +
+
+ + + + + + +
+
+
+ + +
+ +
+
+ + + Name + + + + Type + + {{type.value}} + + + + Key + + + + Class + + + + gateway.remote-logging-level + + {{logLevel}} + + + + + + +
+ +
+
+
+
+
diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss new file mode 100644 index 0000000000..626f40672f --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss @@ -0,0 +1,90 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + display: block; + overflow-x: auto; + padding: 0; + + .connector-container { + width: 100%; + + &>mat-card, &>div { + min-width: 50%; + } + + mat-card { + margin: 10px; + padding: 10px; + max-width: 100%; + } + } + + .tb-entity-table { + .tb-entity-table-content { + width: 100%; + height: 100%; + background: #fff; + overflow: hidden; + } + } + + .mat-toolbar { + background: transparent; + color: rgba(0, 0, 0, .87) !important; + } + + .mat-mdc-form-field { + flex-grow: 1; + //min-width: 200px; + //flex-shrink: 1; + } + + mat-expansion-panel { + border: 1px solid #305680; + } + + mat-card { + padding-left: 10px; + background: transparent; + } + + .mat-card-selected { + background-color: rgba(48, 86, 128, 0.1); + } + + .mat-mdc-slide-toggle { + margin: 15px; + } + + ::ng-deep tb-json-object-edit > div { + flex-grow: 1; + } + + .mat-accordion .mat-expansion-panel { + border-radius: 5px; + } + + .action-btns { + margin: 10px 10px 0; + } + + mat-row { + cursor: pointer; + } +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts new file mode 100644 index 0000000000..9034ced4d5 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -0,0 +1,390 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, NgZone, ViewChild } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { EntityId } from '@shared/models/id/entity-id'; +import { MatDialog } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { forkJoin, merge } from 'rxjs'; +import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { PageComponent } from '@shared/components/page.component'; +import { PageLink } from '@shared/models/page/page-link'; +import { AttributeDatasource } from '@home/models/datasource/attribute-datasource'; +import { Direction, SortOrder } from '@shared/models/page/sort-order'; +import { MatSort } from '@angular/material/sort'; +import { tap } from 'rxjs/operators'; +import { TelemetryWebsocketService } from '@core/ws/telemetry-websocket.service'; +import { MatTableDataSource } from '@angular/material/table'; +import { GatewayLogLevel } from '@shared/components/device/gateway-configuration.component'; +import { ActionNotificationShow } from '@core/notification/notification.actions'; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { deepClone } from '@core/utils'; + + +export interface gatewayConnector { + name: string; + type: string; + configuration?: string; + configurationJson: string; + log_level: string; + key?: string; +} + + +export const GatewayConnectorDefaultTypesTranslates = new Map([ + ['mqtt', 'MQTT'], + ['modbus', 'MODBUS'], + ['grpc', 'GRPC'], + ['opcua', 'OPCUA'], + ['opcua_asyncio', 'OPCUA ASYNCIO'], + ['ble', 'BLE'], + ['request', 'REQUEST'], + ['can', 'CAN'], + ['bacnet', 'BACNET'], + ['odbc', 'ODBC'], + ['rest', 'REST'], + ['snmp', 'SNMP'], + ['ftp', 'FTP'], + ['socket', 'SOCKET'], + ['xmpp', 'XMPP'], + ['ocpp', 'OCCP'], + ['custom', 'CUSTOM'] +]); + +@Component({ + selector: 'tb-gateway-connector', + templateUrl: './gateway-connectors.component.html', + styleUrls: ['./gateway-connectors.component.scss'] +}) +export class GatewayConnectorComponent extends PageComponent implements AfterViewInit { + + pageLink: PageLink; + + attributeDataSource: AttributeDatasource; + + inactiveConnectorsDataSource: AttributeDatasource; + + dataSource: MatTableDataSource + + displayedColumns = ['enabled', 'key', 'type', 'actions']; + + gatewayConnectorDefaultTypes = GatewayConnectorDefaultTypesTranslates; + + @Input() + ctx: WidgetContext; + + @Input() + device: EntityId; + + @ViewChild('searchInput') searchInputField: ElementRef; + @ViewChild(MatSort) sort: MatSort; + + connectorForm: FormGroup; + + viewsInited = false; + + textSearchMode: boolean; + + activeConnectors: Array; + + inactiveConnectors: Array; + + InitialActiveConnectors: Array; + + gatewayLogLevel = Object.values(GatewayLogLevel); + + activeData: Array = []; + + inactiveData: Array = []; + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + private telemetryWsService: TelemetryWebsocketService, + private zone: NgZone, + private cd: ChangeDetectorRef, + public dialog: MatDialog) { + super(store); + const sortOrder: SortOrder = {property: 'key', direction: Direction.ASC}; + this.pageLink = new PageLink(1000, 0, null, sortOrder); + this.attributeDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); + this.inactiveConnectorsDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); + this.dataSource = new MatTableDataSource([]); + this.connectorForm = this.fb.group({ + name: ['', [Validators.required]], + type: ['', [Validators.required]], + log_level: ['', [Validators.required]], + key: ['auto'], + class: [''], + configuration: [''], + configurationJson: [{}, [Validators.required]] + }) + this.connectorForm.disable(); + } + + + initialConnector: gatewayConnector; + + ngAfterViewInit() { + this.connectorForm.valueChanges.subscribe(() => { + this.cd.detectChanges(); + }); + merge(this.sort.sortChange) + .pipe( + tap(() => this.updateData()) + ) + .subscribe(); + + this.viewsInited = true; + if (this.device) { + forkJoin(this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, ['active_connectors']), + this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors'])).subscribe(attributes => { + if (attributes.length) { + this.activeConnectors = attributes[0].length ? attributes[0][0].value : []; + this.inactiveConnectors = attributes[1].length ? attributes[1][0].value : []; + this.updateData(true); + } else { + this.activeConnectors = []; + this.inactiveConnectors = []; + this.updateData(true); + } + }) + } + } + + saveConnector(): void { + const value = this.connectorForm.value; + value.configuration = this.camelize(value.name) + ".json"; + if (value.type !== 'grpc') { + delete value.key; + } + const attributesToSave = [{ + key: value.name, + value: value + }]; + const attributesToDelete = []; + const scope = (this.activeConnectors.includes(value.name) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + let updateActiveConnectors = false; + if (this.initialConnector && this.initialConnector.name !== value.name) { + attributesToDelete.push({key: this.initialConnector.name}); + updateActiveConnectors = true; + const activeIndex = this.activeConnectors.indexOf(this.initialConnector.name); + const inactiveIndex = this.inactiveConnectors.indexOf(this.initialConnector.name); + if (activeIndex !== -1) this.activeConnectors.splice(activeIndex, 1); + if (inactiveIndex !== -1) this.inactiveConnectors.splice(activeIndex, 1); + } + if (!this.activeConnectors.includes(value.name) && scope == AttributeScope.SHARED_SCOPE) { + this.activeConnectors.push(value.name); + updateActiveConnectors = true; + } + if (!this.inactiveConnectors.includes(value.name) && scope == AttributeScope.SERVER_SCOPE) { + this.inactiveConnectors.push(value.name); + updateActiveConnectors = true; + } + const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToSave)]; + if (updateActiveConnectors) { + tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ + key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', + value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors + }])); + } + + if (attributesToDelete.length) { + tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToDelete)); + } + forkJoin(tasks).subscribe(_ => { + this.showToast("Update Successful") + this.updateData(true); + }) + } + + resetSortAndFilter(update: boolean = true) { + this.textSearchMode = false; + this.pageLink.textSearch = null; + if (this.viewsInited) { + const sortable = this.sort.sortables.get('key'); + this.sort.active = sortable.id; + this.sort.direction = 'asc'; + if (update) { + this.updateData(true); + } + } + } + + updateData(reload: boolean = false) { + this.pageLink.sortOrder.property = this.sort.active; + this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; + this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { + this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); + this.combineData() + }); + this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { + this.inactiveData = data.data.filter(value =>this.inactiveConnectors.includes(value.key)); + this.combineData() + }); + } + + combineData () { + this.dataSource.data = [...this.activeData, ...this.inactiveData]; + } + + addAttribute(): void { + if (this.connectorForm.disabled) { + this.connectorForm.enable(); + } + this.clearOutConnectorForm(); + } + + clearOutConnectorForm(): void { + this.connectorForm.setValue({ + name: '', + type: 'mqtt', + log_level: GatewayLogLevel.info, + key: 'auto', + class: '', + configuration: '', + configurationJson: {} + }) + this.initialConnector = null; + this.connectorForm.markAsPristine(); + } + + selectConnector(attribute): void { + if (this.connectorForm.disabled) { + this.connectorForm.enable(); + } + const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + if (!connector.configuration) { + connector.configuration = ""; + } + if (!connector.key) { + connector.key = 'auto'; + } + this.initialConnector = connector; + this.connectorForm.setValue(connector); + this.connectorForm.markAsPristine(); + } + + showToast(message: string) { + this.store.dispatch(new ActionNotificationShow( + { + message, + type: 'success', + duration: 1000, + verticalPosition: 'top', + horizontalPosition: 'right', + target: 'dashboardRoot', + // panelClass: this.widgetNamespace, + forceDismiss: true + })); + } + + returnType (attribute) { + const value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + return this.gatewayConnectorDefaultTypes.get(value.type) + } + + deleteConnector(attribute: AttributeData, $event: Event): void { + if ($event) { + $event.stopPropagation(); + } + const title = `Delete connector ${attribute.key}?`; + const content = `All connector data will be deleted.`; + this.dialogService.confirm(title, content, 'Cancel', 'Delete').subscribe(result => { + if (result) { + const tasks = []; + const scope = (this.activeConnectors.includes(attribute.key) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [attribute])); + const activeIndex = this.activeConnectors.indexOf(attribute.key); + const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); + if (activeIndex !== -1) this.activeConnectors.splice(activeIndex, 1); + if (inactiveIndex !== -1) this.inactiveConnectors.splice(activeIndex, 1); + tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ + key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', + value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors + }])); + forkJoin(tasks).subscribe(_ => { + if (this.initialConnector ? this.initialConnector.name === attribute.key : true) { + this.clearOutConnectorForm(); + this.cd.detectChanges(); + this.connectorForm.disable(); + } + this.updateData() + }) + } + }) + } + + camelize(str): string { + return str.toLowerCase().replace(/\s+/g, '_'); + } + + connectorLogs(attribute: AttributeData, $event: Event): void { + if ($event) { + $event.stopPropagation(); + } + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + const params = deepClone(this.ctx.stateController.getStateParams()); + params.targetEntityParamName = "connector_logs"; + this.ctx.stateController.openState("connector_logs", params); + } + + connectorRpc(attribute: AttributeData, $event: Event): void { + if ($event) { + $event.stopPropagation(); + } + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + const params = deepClone(this.ctx.stateController.getStateParams()); + params.connector_rpc = attribute; + params.targetEntityParamName = "connector_rpc"; + this.ctx.stateController.openState("connector_rpc", params); + } + + + enableConnector(attribute): void { + const wasEnabled = this.activeConnectors.includes(attribute.key); + if (wasEnabled) { + let index = this.activeConnectors.indexOf(attribute.key); + this.activeConnectors.splice(index, 1); + this.inactiveConnectors.push(attribute.key); + } else { + let index = this.inactiveConnectors.indexOf(attribute.key); + this.inactiveConnectors.splice(index, 1); + this.activeConnectors.push(attribute.key); + } + forkJoin([this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ + key: 'active_connectors', + value: this.activeConnectors + }]), this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, [{ + key: 'inactive_connectors', + value: this.inactiveConnectors + }]),]).subscribe(_ => { + this.updateData(); + }) + } + +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.html b/ui-ngx/src/app/shared/components/device/gateway-logs.component.html new file mode 100644 index 0000000000..cc3a6d8731 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.html @@ -0,0 +1,60 @@ + + + + + + Created time + + {{ attribute.ts | date:'yyyy-MM-dd HH:mm:ss'}} + + + + Status + + {{ attribute.status }} + + + + Message + + {{ attribute.message }} + + + + + + + + + + +
+{{'attribute.no-telemetry-text' | translate}} + + diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss b/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss new file mode 100644 index 0000000000..a529107a43 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss @@ -0,0 +1,55 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + display: block; + overflow-x: auto; + padding: 0; + + + .status { + border-radius: 20px; + font-weight: 500; + padding: 5px 15px; + } + + .status-debug { + color: green; + background: rgba(0, 128, 0, 0.1); + } + + .status-warning { + color: orange; + background: rgba(255, 165, 0, 0.1); + } + + .status-error { + color: red; + background: rgba(255, 0, 0, 0.1); + } + + .status-info { + color: black; + background: rgba(0, 0, 0, 0.1); + } + + .msg-status-exception { + color: red; + } + +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts new file mode 100644 index 0000000000..eff5e67f19 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts @@ -0,0 +1,234 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { AttributeData, DataKeyType } from '@shared/models/telemetry/telemetry.models'; +import { PageComponent } from '@shared/components/page.component'; +import { PageLink } from '@shared/models/page/page-link'; +import { AttributeDatasource } from "@home/models/datasource/attribute-datasource"; +import { Direction, SortOrder } from "@shared/models/page/sort-order"; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { GatewayLogLevel } from '@shared/components/device/gateway-configuration.component'; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from '@home/models/widget-component.models'; + + +export interface GatewayConnector { + name: string; + type: string; + configuration?: string; + configurationJson: string; + log_level: string; + key?: string; +} + +export interface LogLink { + name: string; + key: string; + filterFn?: Function; +} + +@Component({ + selector: 'tb-gateway-logs', + templateUrl: './gateway-logs.component.html', + styleUrls: ['./gateway-logs.component.scss'] +}) +export class GatewayLogsComponent extends PageComponent implements AfterViewInit { + + pageLink: PageLink; + + attributeDataSource: AttributeDatasource; + + dataSource: MatTableDataSource + + displayedColumns = ['ts', 'status', 'message']; + + @Input() + ctx: WidgetContext; + + @Input() + dialogRef: MatDialogRef; + + @ViewChild('searchInput') searchInputField: ElementRef; + @ViewChild(MatSort) sort: MatSort; + + connectorForm: FormGroup; + + viewsInited = false; + + textSearchMode: boolean; + + activeConnectors: Array; + + inactiveConnectors: Array; + + InitialActiveConnectors: Array; + + gatewayLogLevel = Object.values(GatewayLogLevel); + + logLinks: Array; + + initialConnector: GatewayConnector; + + activeLink: LogLink; + + gatewayLogLinks: Array = [ + { + name: "General", + key: "LOGS" + }, { + name: "Service", + key: "SERVICE_LOGS" + }, + { + name: "Connection", + key: "CONNECTION_LOGS" + }, { + name: "Storage", + key: "STORAGE_LOGS" + }, + { + key: 'EXTENSIONS_LOGS', + name: "Extension" + }] + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + public dialog: MatDialog) { + super(store); + const sortOrder: SortOrder = {property: 'ts', direction: Direction.DESC}; + this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); + this.dataSource = new MatTableDataSource([]); + + } + + + ngAfterViewInit() { + this.dataSource.sort = this.sort; + this.ctx.defaultSubscription.onTimewindowChangeFunction = timewindow => { + this.ctx.defaultSubscription.options.timeWindowConfig = timewindow; + this.ctx.defaultSubscription.updateDataSubscriptions(); + return timewindow; + } + if (this.ctx.settings.isConnectorLog && this.ctx.settings.connectorLogState) { + const connector = this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState]; + this.logLinks = [{ + key: `${connector.key}_LOGS`, + name: "Connector", + filterFn: (attrData)=>{ + return !attrData.message.includes(`_converter.py`) + } + },{ + key: `${connector.key}_LOGS`, + name: "Converter", + filterFn: (attrData)=>{ + return attrData.message.includes(`_converter.py`) + } + }] + } else { + this.logLinks = this.gatewayLogLinks; + } + this.activeLink = this.logLinks[0]; + this.changeSubscription(); + } + + + updateData(sort?) { + if (this.ctx.defaultSubscription.data.length) { + let attrData = this.ctx.defaultSubscription.data[0].data.map(data => { + let result = { + ts: data[0], + key: this.activeLink.key, + message: /\[(.*)/.exec(data[1])[0], + status: 'INVALID LOG FORMAT' + }; + + try { + result.status= data[1].match(/\|(\w+)\|/)[1]; + } catch (e) { + result.status = 'INVALID LOG FORMAT' + } + + return result; + }); + if (this.activeLink.filterFn) { + attrData = attrData.filter(data => this.activeLink.filterFn(data)); + } + this.dataSource.data = attrData; + if (sort) { + this.dataSource.sortData(this.dataSource.data, this.sort); + } + } + } + + onTabChanged(link) { + this.activeLink = link; + this.changeSubscription(); + } + + statusClass(status) { + switch (status) { + case GatewayLogLevel.debug: + return "status status-debug"; + case GatewayLogLevel.warning: + return "status status-warning"; + case GatewayLogLevel.error: + case "EXCEPTION": + return "status status-error"; + case GatewayLogLevel.info: + default: + return "status status-info"; + } + } + + statusClassMsg(status) { + if (status === "EXCEPTION") { + return 'msg-status-exception'; + } + } + + changeSubscription() { + if (this.ctx.datasources[0].entity) { + this.ctx.defaultSubscription.options.datasources[0].dataKeys = [{ + name: this.activeLink.key, + type: DataKeyType.timeseries, + settings: {} + }]; + this.ctx.defaultSubscription.unsubscribe(); + this.ctx.defaultSubscription.updateDataSubscriptions(); + this.ctx.defaultSubscription.callbacks.onDataUpdated = () => { + this.updateData(); + } + + } + } + +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html new file mode 100644 index 0000000000..840ca86d6d --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html @@ -0,0 +1,49 @@ + + + + {{'gateway.statistics.command' | translate}} + + + {{command}} + + + + + + {{'gateway.statistics.timeout-ms' | translate}} + + + + {{'widget-config.datasource-parameters' | translate}} + + edit + + + + + + Result + + + + diff --git a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss similarity index 59% rename from ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss rename to ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss index 09f06ae6b5..421ac5a153 100644 --- a/ui-ngx/src/app/modules/home/components/gateway/gateway-list.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss @@ -1,5 +1,5 @@ /** - * Copyright © 2016-2022 The Thingsboard Authors + * Copyright © 2016-2023 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. @@ -16,25 +16,33 @@ :host { width: 100%; height: 100%; - display: block; - .tb-table-widget { - .table-container { - position: relative; + overflow-x: auto; + display: flex; + flex-direction: column; + padding: 0; + + .command-form { + width: 100%; + flex-wrap: nowrap; + padding: 0 15px; + margin-bottom: 5px; + + &>button { + margin-top: 10px; } - .mat-table { - .mat-row { - &.invisible { - visibility: hidden; - } - } + + ::ng-deep.mat-mdc-form-field-icon-suffix { + z-index: 100; } - span.no-data-found { - position: absolute; - top: 60px; - bottom: 0; - left: 0; - right: 0; + } + + .result-block { + padding: 0 15px; + + &>span { + font-weight: 600; } } + } diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts new file mode 100644 index 0000000000..ab29766fd0 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts @@ -0,0 +1,128 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, Component, Input } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { MatDialog, MatDialogRef } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { PageComponent } from "@shared/components/page.component"; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { ContentType } from '@shared/models/constants'; +import { + JsonObjectEditDialogComponent, + JsonObjectEditDialogData +} from '@shared/components/dialog/json-object-edit-dialog.component'; + + +@Component({ + selector: 'tb-gateway-service-rpc', + templateUrl: './gateway-service-rpc.component.html', + styleUrls: ['./gateway-service-rpc.component.scss'] +}) +export class GatewayServiceRPCComponent extends PageComponent implements AfterViewInit { + + @Input() + ctx: WidgetContext; + + contentTypes = ContentType; + + @Input() + dialogRef: MatDialogRef; + + commandForm: FormGroup; + + isConnector: boolean; + + connectorType: string; + + RPCCommands: Array = [ + "Ping", + "Stats", + "Devices", + "Update", + "Version", + "Restart", + "Reboot" + ] + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + public dialog: MatDialog) { + super(store); + this.commandForm = this.fb.group({ + command: [null,[Validators.required]], + time: [60, [Validators.required]], + params: ["{}", [Validators.required]], + result: [null] + }) + + + } + + + ngAfterViewInit() { + this.isConnector = this.ctx.settings.isConnector; + if (!this.isConnector) { + this.commandForm.get('command').setValue(this.RPCCommands[0]); + } else { + this.connectorType = this.ctx.stateController.getStateParams().connector_rpc.value.type; + } + } + + + sendCommand() { + const formValues = this.commandForm.value; + const commandPrefix = this.isConnector ? `${this.connectorType}_` : 'gateway_'; + this.ctx.controlApi.sendTwoWayCommand(commandPrefix+formValues.command.toLowerCase(), {},formValues.time).subscribe(resp=>{ + this.commandForm.get('result').setValue(JSON.stringify(resp)); + },error => { + console.log(error); + this.commandForm.get('result').setValue(JSON.stringify(error.error)); + }) + } + + openEditJSONDialog($event: Event) { + if ($event) { + $event.stopPropagation(); + } + this.dialog.open(JsonObjectEditDialogComponent, { + disableClose: true, + panelClass: ['tb-dialog', 'tb-fullscreen-dialog'], + data: { + jsonValue: JSON.parse(this.commandForm.get('params').value) + } + }).afterClosed().subscribe( + (res) => { + if (res) { + this.commandForm.get('params').setValue(JSON.stringify(res)); + } + } + ); + } + +} diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html new file mode 100644 index 0000000000..b98d481f6d --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -0,0 +1,81 @@ + + +
+ + + {{'gateway.statistics.statistic' | translate}} + + + {{key}} + + + {{command.attributeOnGateway}} + + + + + + + + + {{'gateway.statistics.command' | translate}} + + + +
+
+ +
+ + + Timestamp + + {{row[0]| date:'yyyy-MM-dd HH:mm:ss' }} + + + + Message + + {{ row[1] }} + + + + +
+ {{'attribute.no-telemetry-text' | translate}} +
+
+ +
+
+
+
+
+
+ diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss new file mode 100644 index 0000000000..a96dababd5 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss @@ -0,0 +1,78 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + padding: 0; + + + .statistics-container { + height: 100%; + + mat-card { + width: 40%; + margin-right: 35px; + padding: 15px; + } + + .chart-box, .chart-container { + height: 100%; + flex-grow: 1; + } + + .chart-box { + overflow: auto; + } + + & > * { + height: 100%; + } + } + + .legend { + flex-wrap: wrap; + width: 100%; + padding-top: 8px; + padding-bottom: 4px; + margin-top: 15px; + + .legend-keys { + .legend-label { + padding: 2px 20px 2px 10px; + white-space: nowrap; + + &.hidden-label { + text-decoration: line-through; + opacity: .6; + } + + &:focus { + outline: none; + } + } + + .legend-line { + display: inline-block; + width: 15px; + height: 3px; + text-align: left; + vertical-align: middle; + outline: none; + } + } + } +} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts new file mode 100644 index 0000000000..369b88afe9 --- /dev/null +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -0,0 +1,299 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { Router } from '@angular/router'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { AttributeService } from '@core/http/attribute.service'; +import { DeviceService } from '@core/http/device.service'; +import { TranslateService } from '@ngx-translate/core'; +import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; +import { PageComponent } from '@shared/components/page.component'; +import { DialogService } from '@app/core/services/dialog.service'; +import { WidgetContext } from '@home/models/widget-component.models'; +import { TbFlot } from '@home/components/widget/lib/flot-widget'; +import { ResizeObserver } from '@juggle/resize-observer'; +import { IWidgetSubscription, SubscriptionInfo, WidgetSubscriptionOptions } from '@core/api/widget-api.models'; +import { UtilsService } from '@core/services/utils.service'; +import { DatasourceType, LegendConfig, LegendData, LegendPosition, widgetType } from '@shared/models/widget.models'; +import { EntityType } from '@shared/models/entity-type.models'; +import { EntityId } from '@shared/models/id/entity-id'; +import { BaseData } from '@shared/models/base-data'; +import { PageLink } from '@shared/models/page/page-link'; +import { Direction, SortOrder } from '@shared/models/page/sort-order'; +import { MatTableDataSource } from '@angular/material/table'; +import { MatSort } from '@angular/material/sort'; +import { isNumber } from '@core/utils'; + + +@Component({ + selector: 'tb-gateway-statistics', + templateUrl: './gateway-statistics.component.html', + styleUrls: ['./gateway-statistics.component.scss'] +}) +export class GatewayStatisticsComponent extends PageComponent implements AfterViewInit { + + @ViewChild(MatSort) sort: MatSort; + @ViewChild('statisticChart') statisticChart: ElementRef; + + @Input() + ctx: WidgetContext; + + @Input() + public general: boolean; + + public isNumericData: boolean = true; + public chartInited: boolean; + private flot: TbFlot; + private flotCtx; + public statisticForm: FormGroup; + public statisticsKeys = []; + public commands = []; + public commandObj: any; + public dataSource: MatTableDataSource; + public pageLink: PageLink; + private resize$: ResizeObserver; + private subscription: IWidgetSubscription; + private subscriptionInfo: SubscriptionInfo []; + public legendData: LegendData; + public displayedColumns: Array; + private subscriptionOptions: WidgetSubscriptionOptions = { + callbacks: { + onDataUpdated: () => this.ctx.ngZone.run(() => { + this.onDataUpdated(); + }), + onDataUpdateError: (subscription, e) => this.ctx.ngZone.run(() => { + this.onDataUpdateError(e); + }) + }, + useDashboardTimewindow: false, + legendConfig: { + position: LegendPosition.bottom + } as LegendConfig + }; + + + constructor(protected router: Router, + protected store: Store, + protected fb: FormBuilder, + protected translate: TranslateService, + protected attributeService: AttributeService, + protected deviceService: DeviceService, + protected dialogService: DialogService, + private cd: ChangeDetectorRef, + private utils: UtilsService, + public dialog: MatDialog) { + super(store); + const sortOrder: SortOrder = {property: '0', direction: Direction.DESC}; + this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); + this.displayedColumns = ['0', '1']; + this.dataSource = new MatTableDataSource([]); + this.statisticForm = this.fb.group({ + statisticKey: [null, []] + }) + + this.statisticForm.get('statisticKey').valueChanges.subscribe(value => { + this.commandObj = null; + if (this.commands.length) { + this.commandObj = this.commands.find(command => command.attributeOnGateway === value); + } + if (this.subscriptionInfo) this.createChartsSubscription(this.ctx.defaultSubscription.datasources[0].entity, value); + }) + } + + + ngAfterViewInit() { + this.dataSource.sort = this.sort; + this.sort.sortChange.subscribe(_=>{ + this.sortData(); + }) + this.init(); + if (this.ctx.defaultSubscription.datasources.length) { + + const gateway = this.ctx.defaultSubscription.datasources[0].entity; + if (!this.general) { + this.attributeService.getEntityAttributes(gateway.id, AttributeScope.SHARED_SCOPE, ["general_configuration"]).subscribe((resp: AttributeData[]) => { + if (resp && resp.length) { + this.commands = resp[0].value.statistics.commands; + if (!this.statisticForm.get('statisticKey').value) { + this.statisticForm.get('statisticKey').setValue(this.commands[0].attributeOnGateway); + this.createChartsSubscription(gateway, this.commands[0].attributeOnGateway); + } + } + }) + } else { + let connectorsTs; + this.attributeService.getEntityTimeseriesLatest(gateway.id).subscribe( + data => { + connectorsTs = Object.keys(data) + .filter(el => el.includes( + 'ConnectorEventsProduced' + ) || el.includes( + 'ConnectorEventsSent')) + this.createGeneralChartsSubscription(gateway, connectorsTs); + }) + } + } + } + + public sortData () { + this.dataSource.sortData(this.dataSource.data, this.sort); + } + + public onLegendKeyHiddenChange(index: number) { + this.legendData.keys[index].dataKey.hidden = !this.legendData.keys[index].dataKey.hidden; + this.subscription.updateDataVisibility(index); + } + + private createChartsSubscription(gateway: BaseData, attr: string) { + let subscriptionInfo = [{ + type: DatasourceType.entity, + entityType: EntityType.DEVICE, + entityId: gateway.id.id, + entityName: gateway.name, + timeseries: [] + }]; + + subscriptionInfo[0].timeseries = [{name: attr, label: attr}]; + this.subscriptionInfo = subscriptionInfo; + this.changeSubscription(subscriptionInfo); + } + + private createGeneralChartsSubscription(gateway: BaseData, attrData: [string]) { + let subscriptionInfo = [{ + type: DatasourceType.entity, + entityType: EntityType.DEVICE, + entityId: gateway.id.id, + entityName: gateway.name, + timeseries: [] + }]; + subscriptionInfo[0].timeseries = []; + if (attrData && attrData.length) { + attrData.forEach(attr => { + subscriptionInfo[0].timeseries.push({name: attr, label: attr}) + }) + } + this.ctx.defaultSubscription.datasources[0].dataKeys.forEach(dataKey => { + subscriptionInfo[0].timeseries.push({name: dataKey.name, label: dataKey.label}) + }) + + this.subscriptionInfo = subscriptionInfo; + this.changeSubscription(subscriptionInfo); + } + + init = () => { + this.flotCtx = { + $scope: this.ctx.$scope, + $injector: this.ctx.$injector, + utils: this.ctx.utils, + isMobile: this.ctx.isMobile, + isEdit: this.ctx.isEdit, + subscriptionApi: this.ctx.subscriptionApi, + detectChanges: this.ctx.detectChanges, + settings: this.ctx.settings + }; + } + + updateChart = () => { + if (this.flot && this.ctx.defaultSubscription.data.length) { + this.flot.update(); + } + } + + resize = () => { + if (this.flot) { + this.flot.resize(); + } + } + + private reset() { + if (this.resize$) { + this.resize$.disconnect(); + } + if (this.subscription) { + this.subscription.unsubscribe(); + } + if (this.flot) { + this.flot.destroy(); + } + } + + private onDataUpdateError(e: any) { + const exceptionData = this.utils.parseException(e); + let errorText = exceptionData.name; + if (exceptionData.message) { + errorText += ': ' + exceptionData.message; + } + console.error(errorText); + } + + private onDataUpdated() { + this.isDataOnlyNumbers(); + if (this.isNumericData) { + if (this.chartInited) { + if (this.flot) { + this.flot.update(); + } + } else { + this.initChart(); + } + } + } + + private initChart() { + this.chartInited = true; + this.flotCtx.$container = $(this.statisticChart.nativeElement); + this.resize$.observe(this.statisticChart.nativeElement); + this.flot = new TbFlot(this.flotCtx as WidgetContext, "line"); + this.flot.update(); + } + + private isDataOnlyNumbers() { + if (this.general) { + this.isNumericData = true; + return; + } + this.dataSource.data = this.subscription.data.length ? this.subscription.data[0].data : []; + this.isNumericData = this.dataSource.data.every(data => isNumber(data[1])); + } + + + changeSubscription(subscriptionInfo: SubscriptionInfo[]) { + if (this.subscription) { + this.reset(); + } + if (this.ctx.datasources[0].entity) { + this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.timeseries, subscriptionInfo, this.subscriptionOptions, false, true).subscribe(subscription => { + this.subscription = subscription; + this.isDataOnlyNumbers(); + this.legendData = this.subscription.legendData; + this.flotCtx.defaultSubscription = subscription; + this.resize$ = new ResizeObserver(() => { + this.resize(); + }); + this.ctx.detectChanges(); + if (this.isNumericData) { + this.initChart(); + } + }) + + } + } + +} diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html new file mode 100644 index 0000000000..d8bff54898 --- /dev/null +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html @@ -0,0 +1,57 @@ + +
+ + warning +

gateway.configuration-delete-dialog-header

+ + +
+
+
+ + + gateway.configuration-delete-dialog-input + + + {{'gateway.configuration-delete-dialog-input-required' | translate }} + + +
+
+
+ + +
+
diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts new file mode 100644 index 0000000000..95850a2444 --- /dev/null +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts @@ -0,0 +1,61 @@ +/// +/// Copyright © 2016-2023 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. +/// + +import { Component, Inject, OnInit } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { Store } from '@ngrx/store'; +import { AppState } from '@core/core.state'; +import { DialogComponent } from '@shared/components/dialog.component'; +import { Router } from '@angular/router'; +import { FormBuilder, FormControl } from '@angular/forms'; + +export interface GatewayRemoteConfigurationDialogData { + gatewayName: string; +} + +@Component({ + selector: 'tb-activation-link-dialog', + templateUrl: './gateway-remote-configuration-dialog.html' +}) + +export class GatewayRemoteConfigurationDialogComponent extends DialogComponent implements OnInit { + + gatewayName: string; + + gatewayForm: FormControl; + + constructor(protected store: Store, + protected router: Router, + @Inject(MAT_DIALOG_DATA) public data: GatewayRemoteConfigurationDialogData, + public dialogRef: MatDialogRef, + private fb: FormBuilder) { + super(store, router, dialogRef); + this.gatewayName = this.data.gatewayName; + this.gatewayForm = this.fb.control(null); + } + + ngOnInit(): void { + } + + close(): void { + this.dialogRef.close(); + } + + turnOff(): void { + this.dialogRef.close(true); + } +} diff --git a/ui-ngx/src/app/shared/components/file-input.component.html b/ui-ngx/src/app/shared/components/file-input.component.html index 57e1ad1465..dbc217df19 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.html +++ b/ui-ngx/src/app/shared/components/file-input.component.html @@ -16,7 +16,12 @@ -->
- +
@@ -37,9 +42,11 @@ cloud_upload {{ dropLabel }} - +
diff --git a/ui-ngx/src/app/shared/components/file-input.component.scss b/ui-ngx/src/app/shared/components/file-input.component.scss index 3426539be9..33ded0bc65 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.scss +++ b/ui-ngx/src/app/shared/components/file-input.component.scss @@ -93,4 +93,8 @@ $previewSize: 100px !default; padding: 0 16px; } } + + .pe { + pointer-events: auto; + } } diff --git a/ui-ngx/src/app/shared/components/file-input.component.ts b/ui-ngx/src/app/shared/components/file-input.component.ts index 51933d749c..8e70ca88ba 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.ts +++ b/ui-ngx/src/app/shared/components/file-input.component.ts @@ -54,6 +54,9 @@ export class FileInputComponent extends PageComponent implements AfterViewInit, @Input() label: string; + @Input() + hint: string; + @Input() accept = '*/*'; diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index c82ae61644..408ad0d057 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -176,10 +176,16 @@ import { NotificationComponent } from '@shared/components/notification/notificat import { TemplateAutocompleteComponent } from '@shared/components/notification/template-autocomplete.component'; import { SlackConversationAutocompleteComponent } from '@shared/components/slack-conversation-autocomplete.component'; import { DateAgoPipe } from '@shared/pipe/date-ago.pipe'; +import { DeviceGatewayCommandComponent } from '@shared/components/device/device-gateway-command.component'; +import { GatewayConfigurationComponent } from '@shared/components/device/gateway-configuration.component'; +import { GatewayRemoteConfigurationDialogComponent } from '@shared/components/dialog/gateway-remote-configuration-dialog'; +import { GatewayConnectorComponent } from '@shared/components/device/gateway-connectors.component'; +import { GatewayLogsComponent } from '@shared/components/device/gateway-logs.component'; +import { GatewayStatisticsComponent } from '@shared/components/device/gateway-statistics.component'; +import { GatewayServiceRPCComponent } from '@shared/components/device/gateway-service-rpc.component'; + +export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) => markedOptionsService; -export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) { - return markedOptionsService; -} @NgModule({ providers: [ @@ -241,6 +247,13 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, + DeviceGatewayCommandComponent, + GatewayConfigurationComponent, + GatewayConnectorComponent, + GatewayLogsComponent, + GatewayStatisticsComponent, + GatewayServiceRPCComponent, + GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbSnackBarComponent, TbErrorComponent, @@ -407,6 +420,13 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, + DeviceGatewayCommandComponent, + GatewayConfigurationComponent, + GatewayConnectorComponent, + GatewayLogsComponent, + GatewayStatisticsComponent, + GatewayServiceRPCComponent, + GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbErrorComponent, TbCheatSheetComponent, diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index d810da019c..cb5e9f3392 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1186,6 +1186,7 @@ "device-details": "Device details", "add-device-text": "Add new device", "credentials": "Credentials", + "commands": "Commands", "manage-credentials": "Manage credentials", "delete": "Delete device", "assign-devices": "Assign devices", @@ -1278,6 +1279,7 @@ "copyId": "Copy device Id", "copyAccessToken": "Copy access token", "copy-mqtt-authentication": "Copy MQTT credentials", + "transportCommandCopiedMessage": "Transport Command has been copied to clipboard", "idCopiedMessage": "Device Id has been copied to clipboard", "accessTokenCopiedMessage": "Device access token has been copied to clipboard", "mqtt-authentication-copied-message": "Device MQTT authentication has been copied to clipboard", @@ -2466,44 +2468,168 @@ }, "gateway": { "add-entry": "Add configuration", + "advanced": "Advanced", + "checking-device-activity": "Checking Device Activity:", "command": "Docker commands", "command-copied-message": "Docker command has been copied to clipboard", + "configuration": "Configuration", + "connector-json": "Connector JSON", "connector-add": "Add new connector", "connector-enabled": "Enable connector", "connector-name": "Connector name", "connector-name-required": "Connector name is required.", + "connector-key": "Connector key", + "connector-key-required": "Connector key is required.", + "connector-configuration": "Configuration file name", + "connector-configuration-required": "Configuration file name is required.", "connector-type": "Connector type", "connector-type-required": "Connector type is required.", + "connector-types": { + "mqtt": "MQTT Broker Connector", + "modbus": "Modbus Connector", + "modbus_serial": "Modbus Connector (serial)", + "opcua": "OPC-UA Connector", + "opcua_asyncio": "OPC-UA Connector (asyncio)", + "ble": "BLE Connector", + "request": "REQUEST Connector", + "can": "CAN Connector", + "bacnet": "BACnet Connector", + "odbc": "ODBC Connector", + "rest": "REST Connector", + "snmp": "SNMP Connector", + "ftp": "FTP Connector", + "socket": "Socket TCP/UDP Connector", + "xmpp": "XMPP Connector", + "ocpp": "OCPP Connector" + }, "connectors": "Connectors configuration", + "connectors-active": "Connector active", + "connectors-inactive": "Connector inactive", + "select-connector": "Select connector", + "gateway-configuration": "Gateway Configuration", "copy-command": "Copy docker command", "create-new-gateway": "Create a new gateway", "create-new-gateway-text": "Are you sure you want create a new gateway with name: '{{gatewayName}}'?", "created-time": "Created time", + "configuration-delete-dialog-header": "Configurations will be deleted", + "configuration-delete-dialog-body": "Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below", + "configuration-delete-dialog-input": "Gateway name", + "configuration-delete-dialog-input-required": "Gateway name is mandatory", + "configuration-delete-dialog-confirm": "Turn Off", "delete": "Delete configuration", "download-tip": "Download configuration file", + "drop-file": "Drop file here or", "gateway": "Gateway", "gateway-exists": "Device with same name is already exists.", "gateway-name": "Gateway name", "gateway-name-required": "Gateway name is required.", "gateway-saved": "Gateway configuration successfully saved.", "gateway-search": "Gateway search", + "grpc": "GRPC", + "grpc-keep-alive-timeout": "Keep alive timeout (in ms)", + "grpc-keep-alive-timeout-required": "Keep alive timeout is required", + "grpc-keep-alive-timeout-min": "Keep alive timeout can not be less then 1", + "grpc-keep-alive-timeout-pattern": "Keep alive timeout is not valid", + "grpc-keep-alive": "Keep alive (in ms)", + "grpc-keep-alive-required": "Keep alive is required", + "grpc-keep-alive-min": "Keep alive can not be less then 1", + "grpc-keep-alive-pattern": "Keep alive is not valid", + "grpc-min-time-between-pings": "Min time between pings (in ms)", + "grpc-min-time-between-pings-required": "Min time between pings is required", + "grpc-min-time-between-pings-min": "Min time between pings can not be less then 1", + "grpc-min-time-between-pings-pattern": "Min time between pings is not valid", + "grpc-min-ping-interval-without-data": "Min ping interval without data (in ms)", + "grpc-min-ping-interval-without-data-required": "Min ping interval without data is required", + "grpc-min-ping-interval-without-data-min": "Min ping interval without data can not be less then 1", + "grpc-min-ping-interval-without-data-pattern": "Min ping interval without data is not valid", + "grpc-max-pings-without-data": "Max pings without data", + "grpc-max-pings-without-data-required": "Max pings without data is required", + "grpc-max-pings-without-data-min": "Max pings without data can not be less then 1", + "grpc-max-pings-without-data-pattern": "Max pings without data is not valid", + "handle-device-renaming": "Handle device renaming", + "inactivity-check-period-seconds": "Inactivity check period (in sec)", + "inactivity-check-period-seconds-required": "Inactivity check period is required", + "inactivity-check-period-seconds-min": "Inactivity check period can not be less then 1", + "inactivity-timeout-seconds": "Inactivity timeout (in sec)", + "inactivity-timeout-seconds-required": "Inactivity timeout is required", + "inactivity-timeout-seconds-min": "Inactivity timeout can not be less then 1", "json-parse": "Not valid JSON.", "json-required": "Field cannot be empty.", "linux-macos": "Linux/MacOS", + "logs": { + "logs": "Logs", + "days": "days", + "hours": "hours", + "minutes": "minutes", + "seconds": "seconds", + "date-format": "Date format", + "date-format-required": "Date format required", + "log-format": "Log format", + "log-type": "Log type", + "log-format-required": "Log format required", + "remote": "Remote logging", + "remote-logs": "Remote logs", + "local": "Local logging", + "level": "Log level", + "file-path": "File path", + "file-path-required": "File path required", + "saving-period": "Log saving period", + "saving-period-min": "Log saving period can not be less then 1", + "saving-period-required": "Log saving period required", + "backup-count": "Backup count", + "backup-count-min": "Backup count can not be less then 1", + "backup-count-required": "Backup count required" + }, + "min-pack-send-delay": "Min pack send delay (in ms)", + "min-pack-send-delay-required": "Min pack send delay is required", + "min-pack-send-delay-min": "Min pack send delay can not be less then 1", "no-connectors": "No connectors", "no-data": "No configurations", "no-gateway-found": "No gateway found.", "no-gateway-matching": " '{{item}}' not found.", "path-logs": "Path to log files", "path-logs-required": "Path is required.", + "permit-without-calls": "Keep alive permit without calls", "remote": "Remote configuration", "remote-logging-level": "Logging level", "remove-entry": "Remove configuration", + "remote-shell": "Remote shell", + "remote-configuration": "Remote Configuration", + "other": "Other", "save-tip": "Save configuration file", "security-type": "Security type", "security-types": { "access-token": "Access Token", - "tls": "TLS" + "username-password": "Username and Password", + "tls": "TLS", + "tls-access-token": "TLS + Access Token", + "tls-private-key": "TLS + Private Key" + }, + "server-port": "Server port", + "stats-send-period-in-sec": "Stats send period in seconds", + "statistics": { + "statistic": "Statistic", + "statistics": "Statistics", + "commands": "Commands", + "send-period": "Statistic send period (in sec)", + "send-period-required": "Statistic send period is required", + "send-period-min": "Statistic send period can not be less then 1", + "send-period-pattern": "Statistic send period is not valid", + "check-connectors-configuration": "Check connectors configuration (in ms)", + "check-connectors-configuration-required": "Check connectors configuration is required", + "check-connectors-configuration-min": "Check connectors configuration can not be less then 1", + "check-connectors-configuration-pattern": "Check connectors configuration is not valid", + "add": "Add command", + "timeout": "Timeout", + "timeout-ms": "Timeout (in ms)", + "timeout-required": "Timeout is required", + "timeout-min": "Timeout can not be less then 1", + "timeout-pattern": "Timeout is not valid", + "attribute-name": "Attribute name", + "attribute-name-required": "Attribute name is required", + "command": "Command", + "command-required": "Command is required", + "remove": "Remove command" }, "storage": "Storage", "storage-max-file-records": "Maximum records in file", @@ -2515,6 +2641,16 @@ "storage-max-records-min": "Minimum number of records is 1.", "storage-max-records-pattern": "Number is not valid.", "storage-max-records-required": "Maximum records is required.", + "storage-read-record-count": "Read record count in storage", + "storage-read-record-count-min": "Minimum number of records is 1.", + "storage-read-record-count-pattern": "Number is not valid.", + "storage-read-record-count-required": "Read record count is required.", + "storage-max-read-record-count": "Max read record count in storage", + "storage-max-read-record-count-min": "Minimum number of records is 1.", + "storage-max-read-record-count-pattern": "Number is not valid.", + "storage-max-read-record-count-required": "Max Read record count is required.", + "storage-data-folder-path": "Data folder path", + "storage-data-folder-path-required": "Data folder path is required.", "storage-pack-size": "Maximum event pack size", "storage-pack-size-min": "Minimum number is 1.", "storage-pack-size-pattern": "Number is not valid.", @@ -2524,9 +2660,11 @@ "storage-type": "Storage type", "storage-types": { "file-storage": "File storage", - "memory-storage": "Memory storage" + "memory-storage": "Memory storage", + "sqlite": "SQLITE" }, "thingsboard": "ThingsBoard", + "thingsboard-general": "General", "thingsboard-host": "ThingsBoard host", "thingsboard-host-required": "Host is required.", "thingsboard-port": "ThingsBoard port", @@ -2539,11 +2677,60 @@ "title-connectors-json": "Connector {{typeName}} configuration", "tls-path-ca-certificate": "Path to CA certificate on gateway", "tls-path-client-certificate": "Path to client certificate on gateway", + "messages-ttl-check-in-hours": "Messages TTL check in hours", + "messages-ttl-check-in-hours-required": "Messages TTL check in hours is required.", + "messages-ttl-check-in-hours-min": "Min number is 1.", + "messages-ttl-check-in-hours-pattern": "Number is not valid.", + "messages-ttl-in-days": "Messages TTL in days", + "messages-ttl-in-days-required": "Messages TTL in days is required.", + "messages-ttl-in-days-min": "Min number is 1.", + "messages-ttl-in-days-pattern": "Number is not valid.", + "mqtt-qos": "QoS", + "mqtt-qos-required": "QoS is required", + "mqtt-qos-range": "QoS values range is from 0 to 1", "tls-path-private-key": "Path to private key on gateway", "toggle-fullscreen": "Toggle fullscreen", "transformer-json-config": "Configuration JSON*", "update-config": "Add/update configuration JSON", - "windows": "Windows" + "windows": "Windows", + "hints": { + "remote-configuration": "Enables remote configuration and management of the gateway", + "remote-shell": "Enables remote control of the operating system with the gateway from the Remote Shell widget", + "host": "Hostname or ip address of ThingsBoard server", + "port": "Port of MQTT service on ThingsBoard server", + "token": "Access token for the gateway from ThingsBoard server", + "client-id": "MQTT client id for the gateway form ThingsBoard server", + "username": "MQTT username for the gateway form ThingsBoard server", + "password": "MQTT password for the gateway form ThingsBoard server", + "ca-cert": "Path to CA certificate file", + "cert": "Path to certificate file", + "private-key": "Path to private key file", + "date-form": "Date format of log message", + "log-format": "Log message format", + "remote-log": "Enables remote logging and logs reading from the gateway", + "backup-count": "If Backup count is > 0, when a rollover is done, no more than Backup count files are kept - the oldest ones are deleted", + "storage": "Provides configuration for saving incoming data before it is sent to the ThingsBoard platform", + "file": "Received data saving to the hard drive", + "memory": "Received data saving to the RAM memory", + "sqlite": "Received data saving to the .db file", + "data-folder": "Path to folder, that will contains data (Relative or Absolute)", + "max-file-count": "Maximum count of file that will be saved", + "max-read-count": "Count of messages to get from storage and send to ThingsBoard", + "max-records": "Maximum count of records that will be stored in one file", + "read-record-count": "Count of messages to get from storage and send to ThingsBoard", + "max-records-count": "Maximum count of data in storage before send to ThingsBoard", + "ttl-check-hour": "How often will Gateway check data for obsolescence", + "ttl-messages-day": "Maximum days that storage will save data", + "commands": "Commands for collecting additional statistic", + "attribute": "Gateway client attribute name", + "timeout": "Timeout for command executing", + "command": "The result of the command will be used as the value of the client attribute (\"/bin/sh -c ipconfig getifaddr en0\")", + "check-device-activity": "Enables monitor the activity of each connected device", + "inactivity-timeout": "Inactivity device time after whose the gateway will disconnect device", + "inactivity-period": "Periodicity of device activity check", + "minimal-pack-delay": "Delay between sending packets (Decreasing this setting results in increased CPU usage)", + "qos": "Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)" + } }, "grid": { "delete-item-title": "Are you sure you want to delete this item?", @@ -3065,6 +3252,20 @@ }, "security": { "security": "Security", + "access-token": "Access token", + "access-token-required": "Access token is required", + "clientId": "Client ID", + "clientId-required": "Client ID is required", + "username": "Username", + "username-required": "Username is required", + "password": "Password", + "password-required": "Password is required", + "ca-cert": "CA certificate", + "ca-cert-required": "CA certificate is required", + "cert": "Certificate", + "cert-required": "Certificate is required", + "private-key": "Private Key", + "private-key-required": "Private Key is required", "2fa": { "2fa": "Two-factor authentication", "2fa-description": "Two-factor authentication protects your account from unauthorized access. All you have to do is enter a security code when you log in.", @@ -5087,6 +5288,11 @@ "font-weight-lighter": "Lighter", "color": "Color", "shadow-color": "Shadow color" + }, + "action-buttons": { + "button-type": "Button type", + "button-class": "Button class", + "alignment": "Buttons alignment" } }, "icon": { @@ -5113,7 +5319,8 @@ "node-selected": "On node selected", "element-click": "On HTML element click", "pie-slice-click": "On slice click", - "row-double-click": "On row double click" + "row-double-click": "On row double click", + "action-button-click": "Action button click" } }, "paginator" : { From 1d71e2067f93a566ad371d39d1932c874a4c1e90 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 6 Jun 2023 14:19:09 +0300 Subject: [PATCH 050/120] removed action buttons --- .../json/system/widget_bundles/cards.json | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/application/src/main/data/json/system/widget_bundles/cards.json b/application/src/main/data/json/system/widget_bundles/cards.json index 6ded4c49a2..1cf107b801 100644 --- a/application/src/main/data/json/system/widget_bundles/cards.json +++ b/application/src/main/data/json/system/widget_bundles/cards.json @@ -221,25 +221,6 @@ "settingsDirective": "tb-dashboard-state-widget-settings", "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"syncParentStateParams\":true,\"defaultAutofillLayout\":true,\"defaultMargin\":0,\"defaultBackgroundColor\":\"#fff\"},\"title\":\"Dashboard state widget\",\"dropShadow\":true,\"enableFullscreen\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"noDataDisplayMessage\":\"\",\"showLegend\":false}" } - }, - { - "alias": "action_buttons", - "name": "Action buttons", - "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCACtAfwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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", - "description": "Allow to create buttons from custom actions", - "descriptor": { - "type": "latest", - "sizeX": 7.5, - "sizeY": 3, - "resources": [], - "templateHtml": "\n", - "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", - "controllerScript": "self.onInit = function() {\n}\n\nself.onDataUpdated = function() {\n}\n\nself.actionSources = function() {\n return {\n 'actionButtonClick': {\n name: 'widget-action.action-button-click',\n multiple: true\n }\n };\n}\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n datasourcesOptional: true\n };\n}\n\nself.onDestroy = function() {\n}\n\n", - "settingsSchema": "{}", - "dataKeySettingsSchema": "{}\n", - "settingsDirective": "tb-action-buttons-widget-settings", - "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"buttonsType\":\"raised\",\"buttonsClass\":\"primary\"},\"title\":\"Action buttons\",\"actions\":{\"actionButtonClick\":[{\"name\":\"Button 1\",\"icon\":\"more_horiz\",\"useShowWidgetActionFunction\":null,\"showWidgetActionFunction\":\"return true;\",\"type\":\"custom\",\"customFunction\":\"\",\"openInSeparateDialog\":false,\"openInPopover\":false,\"id\":\"2ab2fe43-a4e0-7ef6-8a37-381e663ccf74\"},{\"name\":\"Button 2\",\"icon\":\"more_horiz\",\"useShowWidgetActionFunction\":null,\"showWidgetActionFunction\":\"return true;\",\"type\":\"custom\",\"customFunction\":null,\"openInSeparateDialog\":false,\"openInPopover\":false,\"id\":\"243e775d-d78c-f05c-ec3f-db0d20c49416\"}]},\"showTitleIcon\":false,\"dropShadow\":true,\"enableFullscreen\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" - } } ] } \ No newline at end of file From d15ec0dc39182924c870932e238b4c3239a32cff Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 7 Jun 2023 11:27:05 +0300 Subject: [PATCH 051/120] hotfix --- .../app/shared/components/device/gateway-connectors.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 9034ced4d5..ae2cf62ef6 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -349,6 +349,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); + params.connector_logs = attribute; params.targetEntityParamName = "connector_logs"; this.ctx.stateController.openState("connector_logs", params); } From ac0c7ed7b264f765cbc99160d295adab65e815b4 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 9 Jun 2023 16:00:32 +0300 Subject: [PATCH 052/120] statistic number data fix --- .../shared/components/device/gateway-statistics.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index 369b88afe9..cc0c2e0591 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -270,7 +270,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi return; } this.dataSource.data = this.subscription.data.length ? this.subscription.data[0].data : []; - this.isNumericData = this.dataSource.data.every(data => isNumber(data[1])); + this.isNumericData = this.dataSource.data.every(data => !isNaN(+data[1]) ); } From c5a35b1f530842bc52d12e706ef90f4124c4c574 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 12 Jun 2023 12:12:31 +0300 Subject: [PATCH 053/120] 6.12 update --- .../device-wizard-dialog.component.html | 4 +- .../wizard/device-wizard-dialog.component.ts | 2 +- .../gateway-configuration.component.html | 27 ++-- .../gateway-configuration.component.scss | 9 +- .../device/gateway-configuration.component.ts | 128 +++++++++++++----- .../device/gateway-connectors.component.html | 6 +- .../device/gateway-connectors.component.ts | 56 ++++---- .../device/gateway-logs.component.scss | 4 +- .../device/gateway-statistics.component.html | 2 +- .../device/gateway-statistics.component.scss | 9 ++ 10 files changed, 161 insertions(+), 86 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html index 52a31314e2..f268c586ba 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html @@ -179,10 +179,10 @@
- -
diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index 80aa438e2d..235658a374 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -366,6 +366,7 @@ export class DeviceWizardDialogComponent extends mergeMap( (deviceCredentials) => { const deviceCredentialsValue = {...deviceCredentials, ...this.credentialsFormGroup.value.credential}; + this.deviceCredentials = deviceCredentialsValue; return this.deviceService.saveDeviceCredentials(deviceCredentialsValue).pipe( catchError(e => { this.addDeviceWizardStepper.selectedIndex = 1; @@ -387,7 +388,6 @@ export class DeviceWizardDialogComponent extends }) ); } - return of(device); } allValid(): boolean { diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index fb38c63a90..445d37d6ee 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -131,9 +131,6 @@ fxFlex="calc(50%-15px)" class="mat-block tb-value-type"> security.password - - {{'security.password-required' | translate}} - info_outlined @@ -466,14 +463,14 @@
-
+
{{ 'gateway.grpc' | translate }} {{ 'gateway.permit-without-calls' | translate }} - + gateway.server-port @@ -489,7 +486,7 @@ {{'gateway.thingsboard-port-pattern' | translate }} - + gateway.grpc-keep-alive-timeout @@ -502,7 +499,7 @@ {{'gateway.grpc-keep-alive-timeout-pattern' | translate }} - + gateway.grpc-keep-alive @@ -515,7 +512,7 @@ {{'gateway.grpc-keep-alive-pattern' | translate }} - + gateway.grpc-min-time-between-pings @@ -528,7 +525,7 @@ {{'gateway.grpc-min-time-between-pings-pattern' | translate }} - + gateway.grpc-max-pings-without-data @@ -541,7 +538,7 @@ {{'gateway.grpc-max-pings-without-data-pattern' | translate }} - + gateway.grpc-min-ping-interval-without-data @@ -592,11 +589,11 @@ {{'gateway.hints.commands' | translate}}
-
- - + + gateway.statistics.attribute-name info_outlined - + gateway.statistics.timeout info_outlined - + gateway.statistics.command ([ [LocalLogsConfigs.tb_connection, 'TB Connection'], [LocalLogsConfigs.storage, 'Storage'], [LocalLogsConfigs.extension, 'Extension'] -]) +]); export const logSavingPeriodTranslations = new Map( [ @@ -213,6 +213,18 @@ export class GatewayConfigurationComponent implements OnInit { }) }); + this.gatewayConfigGroup.get('thingsboard.security').valueChanges.subscribe(security => { + if (security.username) { + this.clientIdUserNameFieldsToggle('clientId'); + } else if (security.clientId) { + this.clientIdUserNameFieldsToggle('username'); + } else if (!security.username && !security.clientId) { + this.clientIdUserNameFieldsToggle(); + } + }); + + this.toggleRpcFields(false); + this.gatewayConfigGroup.get('thingsboard.remoteConfiguration').valueChanges.subscribe(enabled => { if (!enabled) { this.openConfigurationConfirmDialog(); @@ -239,6 +251,10 @@ export class GatewayConfigurationComponent implements OnInit { } }); + this.gatewayConfigGroup.get('grpc.enabled').valueChanges.subscribe(value => { + this.toggleRpcFields(value); + }); + const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; securityGroup.get('type').valueChanges.subscribe(type => { this.removeAllSecurityValidators(); @@ -262,15 +278,15 @@ export class GatewayConfigurationComponent implements OnInit { securityGroup.get('clientId').updateValueAndValidity(); securityGroup.get('username').addValidators([Validators.required]); securityGroup.get('username').updateValueAndValidity(); - securityGroup.get('password').addValidators([Validators.required]); - securityGroup.get('password').updateValueAndValidity(); + // securityGroup.get('password').addValidators([Validators.required]); + // securityGroup.get('password').updateValueAndValidity(); } securityGroup.updateValueAndValidity(); }); - securityGroup.get('caCert').valueChanges.subscribe(_ => this.cd.detectChanges()) - securityGroup.get('privateKey').valueChanges.subscribe(_ => this.cd.detectChanges()) - securityGroup.get('cert').valueChanges.subscribe(_ => this.cd.detectChanges()) + securityGroup.get('caCert').valueChanges.subscribe(_ => this.cd.detectChanges()); + securityGroup.get('privateKey').valueChanges.subscribe(_ => this.cd.detectChanges()); + securityGroup.get('cert').valueChanges.subscribe(_ => this.cd.detectChanges()); const storageGroup = this.gatewayConfigGroup.get('storage') as FormGroup; storageGroup.get('type').valueChanges.subscribe(type => { @@ -304,7 +320,8 @@ export class GatewayConfigurationComponent implements OnInit { this.attributeService.getEntityAttributes(entityId, AttributeScope.CLIENT_SCOPE, ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel']).pipe( mergeMap(attributes => attributes.length ? of(attributes) : this.attributeService.getEntityAttributes( - entityId, AttributeScope.SHARED_SCOPE, ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel'])) + entityId, AttributeScope.SHARED_SCOPE, ['general_configuration', 'grpc_configuration', + 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel'])) ).subscribe(attributes => { if (attributes.length) { const general_configuration = attributes.find(attribute => attribute.key === 'general_configuration')?.value; @@ -330,6 +347,7 @@ export class GatewayConfigurationComponent implements OnInit { if (grpc_configuration) { const configObj = {grpc: grpc_configuration}; this.gatewayConfigGroup.patchValue(configObj, {emitEvent: false}); + this.toggleRpcFields(grpc_configuration.enabled); } if (logs_configuration) { const configObj = {logs: this.logsToObj(logs_configuration)}; @@ -365,7 +383,7 @@ export class GatewayConfigurationComponent implements OnInit { this.gatewayConfigGroup.get('thingsboard.security.clientId').setValue(parsedValue.clientId); this.gatewayConfigGroup.get('thingsboard.security.username').setValue(parsedValue.userName); this.gatewayConfigGroup.get('thingsboard.security.password').setValue(parsedValue.password); - } else if (credentials.credentialsType === DeviceCredentialsType.X509_CERTIFICATE ) { + } else if (credentials.credentialsType === DeviceCredentialsType.X509_CERTIFICATE) { //if sertificate is present set sertificate as present } }); @@ -375,24 +393,68 @@ export class GatewayConfigurationComponent implements OnInit { logsToObj(logsConfig) { const logsObject = { local: {} - } + }; const logFormat = logsConfig.formatters.LogFormatter.format; const dateFormat = logsConfig.formatters.LogFormatter.datefmt; for (const localLogsConfigsKey of Object.keys(LocalLogsConfigs)) { - const handlerKey = localLogsConfigsKey + "Handler"; + const handlerKey = localLogsConfigsKey + 'Handler'; logsObject[localLogsConfigsKey] = { logLevel: logsConfig.loggers[localLogsConfigsKey].level, - filePath: logsConfig.handlers[handlerKey].filename.split('/'+localLogsConfigsKey)[0], + filePath: logsConfig.handlers[handlerKey].filename.split('/' + localLogsConfigsKey)[0], backupCount: logsConfig.handlers[handlerKey].backupCount, savingTime: logsConfig.handlers[handlerKey].interval, savingPeriod: logsConfig.handlers[handlerKey].when, - } + }; } return {local: logsObject, logFormat, dateFormat}; } + toggleRpcFields(enable: boolean) { + const grpcGroup = this.gatewayConfigGroup.get('grpc') as FormGroup; + if (enable) { + grpcGroup.get('serverPort').enable(); + grpcGroup.get('keepAliveTimeMs').enable(); + grpcGroup.get('keepAliveTimeoutMs').enable(); + grpcGroup.get('maxPingsWithoutData').enable(); + grpcGroup.get('minTimeBetweenPingsMs').enable(); + grpcGroup.get('minPingIntervalWithoutDataMs').enable(); + } else { + grpcGroup.get('serverPort').disable(); + grpcGroup.get('keepAliveTimeMs').disable(); + grpcGroup.get('keepAliveTimeoutMs').disable(); + grpcGroup.get('maxPingsWithoutData').disable(); + grpcGroup.get('minTimeBetweenPingsMs').disable(); + grpcGroup.get('minPingIntervalWithoutDataMs').disable(); + } + } + + clientIdUserNameFieldsToggle(type?: string) { + const clientIdForm = this.gatewayConfigGroup.get('thingsboard.security.clientId'); + const usernameForm = this.gatewayConfigGroup.get('thingsboard.security.username'); + switch (type) { + case 'clientId': + if (clientIdForm.enabled) { + clientIdForm.disable({emitEvent: false}); + } + break; + case 'username': + if (usernameForm.enabled) { + usernameForm.disable({emitEvent: false}); + } + break; + default: + if (clientIdForm.disabled) { + clientIdForm.enable({emitEvent: false}); + } + if (usernameForm.disabled) { + usernameForm.enable({emitEvent: false}); + } + break; + } + } + addCommand(command?): void { const data = command || {}; const commandsFormArray = this.commandFormArray(); @@ -465,42 +527,42 @@ export class GatewayConfigurationComponent implements OnInit { disable_existing_loggers: false, formatters: { LogFormatter: { - class: "logging.Formatter", + class: 'logging.Formatter', format: logsObj.logFormat, datefmt: logsObj.dateFormat, } }, handlers: { consoleHandler: { - class: "logging.StreamHandler", - formatter: "LogFormatter", - level: "DEBUG", - stream: "ext://sys.stdout" + class: 'logging.StreamHandler', + formatter: 'LogFormatter', + level: 'DEBUG', + stream: 'ext://sys.stdout' }, databaseHandler: { - class: "thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler", - formatter: "LogFormatter", - filename: "./logs/database.log", + class: 'thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler', + formatter: 'LogFormatter', + filename: './logs/database.log', backupCount: 1, - encoding: "utf-8" + encoding: 'utf-8' } }, loggers: { database: { - handlers: ["databaseHandler", "consoleHandler"], - level: "DEBUG", + handlers: ['databaseHandler', 'consoleHandler'], + level: 'DEBUG', propagate: false } }, root: { - level: "ERROR", + level: 'ERROR', handlers: [ - "consoleHandler" + 'consoleHandler' ] } - } + }; for (const key of Object.keys(logsObj.local)) { - logAttrObj.handlers[key+"Handler"] = this.createHandlerObj(logsObj.local[key], key); + logAttrObj.handlers[key + 'Handler'] = this.createHandlerObj(logsObj.local[key], key); logAttrObj.loggers[key] = this.createLoggerObj(logsObj.local[key], key); } return logAttrObj; @@ -508,22 +570,22 @@ export class GatewayConfigurationComponent implements OnInit { createHandlerObj(logObj, key) { return { - class: "thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler", - formatter: "LogFormatter", + class: 'thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler', + formatter: 'LogFormatter', filename: `${logObj.filePath}/${key}.log`, backupCount: logObj.backupCount, interval: logObj.savingTime, when: logObj.savingPeriod, - encoding: "utf-8" - } + encoding: 'utf-8' + }; } createLoggerObj(logObj, key) { return { - handlers: [`${key}Handler`, "consoleHandler"], + handlers: [`${key}Handler`, 'consoleHandler'], level: logObj.logLevel, propagate: false - } + }; } saveConfig(): void { diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html index 387f8707d4..96fd8bcddb 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html @@ -16,8 +16,8 @@ -->
-
- +
+

Connectors

@@ -117,7 +117,7 @@
- + Name diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index ae2cf62ef6..086cf55f6d 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -84,7 +84,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie inactiveConnectorsDataSource: AttributeDatasource; - dataSource: MatTableDataSource + dataSource: MatTableDataSource; displayedColumns = ['enabled', 'key', 'type', 'actions']; @@ -142,7 +142,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie class: [''], configuration: [''], configurationJson: [{}, [Validators.required]] - }) + }); this.connectorForm.disable(); } @@ -172,19 +172,19 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveConnectors = []; this.updateData(true); } - }) + }); } } saveConnector(): void { const value = this.connectorForm.value; - value.configuration = this.camelize(value.name) + ".json"; + value.configuration = this.camelize(value.name) + '.json'; if (value.type !== 'grpc') { delete value.key; } const attributesToSave = [{ key: value.name, - value: value + value }]; const attributesToDelete = []; const scope = (this.activeConnectors.includes(value.name) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; @@ -194,8 +194,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie updateActiveConnectors = true; const activeIndex = this.activeConnectors.indexOf(this.initialConnector.name); const inactiveIndex = this.inactiveConnectors.indexOf(this.initialConnector.name); - if (activeIndex !== -1) this.activeConnectors.splice(activeIndex, 1); - if (inactiveIndex !== -1) this.inactiveConnectors.splice(activeIndex, 1); + if (activeIndex !== -1) {this.activeConnectors.splice(activeIndex, 1);} + if (inactiveIndex !== -1) {this.inactiveConnectors.splice(activeIndex, 1);} } if (!this.activeConnectors.includes(value.name) && scope == AttributeScope.SHARED_SCOPE) { this.activeConnectors.push(value.name); @@ -217,9 +217,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToDelete)); } forkJoin(tasks).subscribe(_ => { - this.showToast("Update Successful") + this.showToast('Update Successful'); this.updateData(true); - }) + }); } resetSortAndFilter(update: boolean = true) { @@ -240,15 +240,15 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); - this.combineData() + this.combineData(); }); this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { this.inactiveData = data.data.filter(value =>this.inactiveConnectors.includes(value.key)); - this.combineData() + this.combineData(); }); } - combineData () { + combineData() { this.dataSource.data = [...this.activeData, ...this.inactiveData]; } @@ -268,7 +268,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie class: '', configuration: '', configurationJson: {} - }) + }); this.initialConnector = null; this.connectorForm.markAsPristine(); } @@ -279,7 +279,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; if (!connector.configuration) { - connector.configuration = ""; + connector.configuration = ''; } if (!connector.key) { connector.key = 'auto'; @@ -303,9 +303,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie })); } - returnType (attribute) { + returnType(attribute) { const value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; - return this.gatewayConnectorDefaultTypes.get(value.type) + return this.gatewayConnectorDefaultTypes.get(value.type); } deleteConnector(attribute: AttributeData, $event: Event): void { @@ -321,8 +321,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [attribute])); const activeIndex = this.activeConnectors.indexOf(attribute.key); const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); - if (activeIndex !== -1) this.activeConnectors.splice(activeIndex, 1); - if (inactiveIndex !== -1) this.inactiveConnectors.splice(activeIndex, 1); + if (activeIndex !== -1) {this.activeConnectors.splice(activeIndex, 1);} + if (inactiveIndex !== -1) {this.inactiveConnectors.splice(activeIndex, 1);} tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors @@ -333,10 +333,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.cd.detectChanges(); this.connectorForm.disable(); } - this.updateData() - }) + this.updateData(); + }); } - }) + }); } camelize(str): string { @@ -350,8 +350,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_logs = attribute; - params.targetEntityParamName = "connector_logs"; - this.ctx.stateController.openState("connector_logs", params); + params.targetEntityParamName = 'connector_logs'; + this.ctx.stateController.openState('connector_logs', params); } connectorRpc(attribute: AttributeData, $event: Event): void { @@ -361,19 +361,19 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_rpc = attribute; - params.targetEntityParamName = "connector_rpc"; - this.ctx.stateController.openState("connector_rpc", params); + params.targetEntityParamName = 'connector_rpc'; + this.ctx.stateController.openState('connector_rpc', params); } enableConnector(attribute): void { const wasEnabled = this.activeConnectors.includes(attribute.key); if (wasEnabled) { - let index = this.activeConnectors.indexOf(attribute.key); + const index = this.activeConnectors.indexOf(attribute.key); this.activeConnectors.splice(index, 1); this.inactiveConnectors.push(attribute.key); } else { - let index = this.inactiveConnectors.indexOf(attribute.key); + const index = this.inactiveConnectors.indexOf(attribute.key); this.inactiveConnectors.splice(index, 1); this.activeConnectors.push(attribute.key); } @@ -385,7 +385,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie value: this.inactiveConnectors }]),]).subscribe(_ => { this.updateData(); - }) + }); } } diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss b/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss index a529107a43..34b5f9d249 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss @@ -43,8 +43,8 @@ } .status-info { - color: black; - background: rgba(0, 0, 0, 0.1); + color: blue; + background: rgba(0, 0, 128, 0.1); } .msg-status-exception { diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html index b98d481f6d..6233205eaa 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -16,7 +16,7 @@ --> -
+
{{'gateway.statistics.statistic' | translate}} diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss index a96dababd5..d14f748547 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss @@ -21,15 +21,24 @@ .statistics-container { height: 100%; + overflow-y: auto; mat-card { width: 40%; + height: 100%; margin-right: 35px; padding: 15px; } + @media only screen and (max-width: 750px) { + mat-card { + width: 100%; + } + } + .chart-box, .chart-container { height: 100%; + min-height: 300px; flex-grow: 1; } From 64d4b9aa50d4767551a88084c402b8283e9e1830 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 22 Jun 2023 14:41:16 +0300 Subject: [PATCH 054/120] dashboard added --- .../json/demo/dashboards/gateway_list.json | 6524 +++++++++++++++++ 1 file changed, 6524 insertions(+) create mode 100644 application/src/main/data/json/demo/dashboards/gateway_list.json diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json new file mode 100644 index 0000000000..780f45a899 --- /dev/null +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -0,0 +1,6524 @@ +{ + "title": "Gateway", + "image": null, + "mobileHide": false, + "mobileOrder": null, + "configuration": { + "description": "", + "widgets": { + "23b9adc5-b3bd-040f-e5eb-a45925c73257": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 7.5, + "sizeY": 6.5, + "config": { + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1680624762213, + "endTimeMs": 1680711162213 + }, + "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": "Gateway list", + "enableSearch": true, + "enableSelectColumnDisplay": false, + "enableStickyHeader": true, + "enableStickyAction": true, + "reserveSpaceForHiddenAction": "true", + "displayEntityName": false, + "displayEntityLabel": false, + "displayEntityType": false, + "displayPagination": true, + "defaultPageSize": 10, + "defaultSortOrder": "entityName", + "useRowStyleFunction": false + }, + "title": "New Entities table", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600, + "padding": "5px 10px 5px 10px" + }, + "useDashboardTimewindow": false, + "showLegend": false, + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "9b7a1caa-3510-3daa-e05a-fc39b851d2c1", + "filterId": "abdfdcf9-75d4-001d-783a-920cb8e2a7e1", + "dataKeys": [ + { + "name": "createdTime", + "type": "entityField", + "label": "Created time", + "color": "#2196f3", + "settings": {}, + "_hash": 0.4570900758216545 + }, + { + "name": "name", + "type": "entityField", + "label": "Gateway name", + "color": "#4caf50", + "settings": {}, + "_hash": 0.45934623767875316, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "active", + "type": "attribute", + "label": "Status", + "color": "#f44336", + "settings": { + "columnWidth": "0px", + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "var newValue = value == 'true' ? \"Active\" : \"Inactive\";\r\nvar bgColor = value == 'true' ? 'rgba(25,128,56, .06)': 'rgba(203,37,48, .06)',\r\ncolor = value == 'true' ? 'rgb(25,128,56)': 'rgb(203,37,48)';\r\nreturn `
${newValue}
`", + "defaultColumnVisibility": "visible", + "columnSelectionToDisplay": "enabled" + }, + "_hash": 0.7189327146035449, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": false, + "postFuncBody": "" + }, + { + "name": "active_connectors", + "type": "attribute", + "label": "Active Connectors", + "color": "#3f51b5", + "settings": { + "columnWidth": "0px", + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "return value?JSON.parse(value).length:0;", + "defaultColumnVisibility": "visible", + "columnSelectionToDisplay": "enabled" + }, + "_hash": 0.3929515708982403, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "Version", + "type": "attribute", + "label": "Version", + "color": "#8bc34a", + "settings": {}, + "_hash": 0.4705163811361781 + } + ] + } + ], + "displayTimewindow": true, + "actions": { + "actionCellButton": [ + { + "name": "Docker commands", + "icon": "terminal", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "customPretty", + "customHtml": "\r\n \r\n

gateway.command

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n", + "customCss": "/*=======================================================================*/\r\n/*========== There are two examples: for edit and add entity ==========*/\r\n/*=======================================================================*/\r\n/*======================== Edit entity example ========================*/\r\n/*=======================================================================*/\r\n/*\r\n.edit-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.edit-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n/*========================================================================*/\r\n/*========================= Add entity example =========================*/\r\n/*========================================================================*/\r\n/*\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n deviceService.getDeviceCredentials(entityId.id).subscribe(credentials => {\r\n data.credentials = credentials;\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n });\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.data = data;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", + "customResources": [], + "openInSeparateDialog": false, + "openInPopover": false, + "id": "ae2e5995-505f-a241-5fb2-6cbaf08b1b55" + }, + { + "name": "Gateway configuration", + "icon": "settings", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "customPretty", + "customHtml": "
\n \n
\n", + "customCss": ".container {\n width: 800px;\n height: 80vh;\n}", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.entityId = entityId;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", + "customResources": [], + "openInSeparateDialog": false, + "openInPopover": false, + "id": "c0c8eb55-48c6-8a4e-ad9a-427507e86916" + }, + { + "name": "Connectors", + "icon": "private_connectivity", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "connectors", + "setEntityId": true, + "stateEntityParamName": "", + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "e27eea56-c57c-0a45-eb1d-f48f19e5356b" + } + ], + "rowClick": [ + { + "name": "Show geteway details", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "gateway_details", + "setEntityId": true, + "stateEntityParamName": "", + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "40cd37f1-6d1c-38a4-aba5-7dc408376647" + } + ], + "headerButton": [ + { + "name": "Add Gateway", + "icon": "add", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "customPretty", + "customHtml": "
\r\n \r\n

Add gateway

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Name\r\n \r\n \r\n Gateway name is required.\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n", + "customCss": ".add-entity-form {\r\n min-width: 400px !important;\r\n}\r\n\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n\r\n", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet assetService = $injector.get(widgetContext.servicesMap.get('assetService'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));\r\nlet entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));\r\n\r\nopenAddEntityDialog();\r\n\r\nfunction openAddEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\r\n}\r\n\r\nfunction AddEntityDialogController(instance) {\r\n let vm = instance;\r\n\r\n vm.addEntityFormGroup = vm.fb.group({\r\n entityName: ['', [vm.validators.required]],\r\n entityType: ['DEVICE'],\r\n entityLabel: [''],\r\n type: ['', [vm.validators.required]],\r\n });\r\n\r\n vm.cancel = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n vm.save = function() {\r\n vm.addEntityFormGroup.markAsPristine();\r\n saveEntityObservable().subscribe(\r\n function (device) {\r\n widgetContext.updateAliases();\r\n vm.dialogRef.close(null);\r\n goToConfigState(device);\r\n }\r\n );\r\n };\r\n \r\n function goToConfigState(device) {\r\n const stateParams = {};\r\n stateParams.entityId = device.id;\r\n stateParams.entityName = device.name;\r\n const newStateParams = {\r\n targetEntityParamName: 'default',\r\n new_gateway: {\r\n entityId: device.id,\r\n entityName: device.name\r\n }\r\n }\r\n const params = {...stateParams, ...newStateParams};\r\n widgetContext.stateController.openState('configuration', params, false);\r\n }\r\n\r\n function saveEntityObservable() {\r\n const formValues = vm.addEntityFormGroup.value;\r\n let entity = {\r\n name: formValues.entityName,\r\n type: formValues.type,\r\n label: formValues.entityLabel,\r\n additionalInfo: {\r\n gateway: true\r\n }\r\n };\r\n return deviceService.saveDevice(entity);\r\n }\r\n}\r\n", + "customResources": [], + "openInSeparateDialog": false, + "openInPopover": false, + "id": "9aab301f-a305-520b-4842-b02ca92a5970" + } + ] + }, + "showTitleIcon": false, + "titleTooltip": "", + "enableDataExport": false, + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "23b9adc5-b3bd-040f-e5eb-a45925c73257" + }, + "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "gateway_configuration2", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 9.5, + "sizeY": 6, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1680685647526, + "endTimeMs": 1680772047526 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": {}, + "title": "New Gateway configuration", + "showTitleIcon": false, + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "enableDataExport": false, + "widgetStyle": {}, + "widgetCss": "", + "titleStyle": { + "fontSize": "16px", + "fontWeight": 500 + }, + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false, + "useDashboardTimewindow": true + }, + "row": 0, + "col": 0, + "id": "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99" + }, + "02a05113-d878-b086-328e-75bd6f02b2bb": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "gateway_connector", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 11, + "sizeY": 8, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "activeConnectors", + "type": "attribute", + "label": "activeConnectors", + "color": "#2196f3", + "settings": {}, + "_hash": 0.7454705362378311 + } + ] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1680769601167, + "endTimeMs": 1680856001167 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": {}, + "title": "New Gateway connector", + "showTitleIcon": false, + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "enableDataExport": false, + "widgetStyle": {}, + "widgetCss": "", + "titleStyle": { + "fontSize": "16px", + "fontWeight": 500 + }, + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false, + "useDashboardTimewindow": true + }, + "row": 0, + "col": 0, + "id": "02a05113-d878-b086-328e-75bd6f02b2bb" + }, + "79f59106-758f-c428-8b93-4341faea705d": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "markdown_card", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "name", + "type": "entityField", + "label": "Name", + "color": "#2196f3", + "settings": {}, + "_hash": 0.1375998537558516 + }, + { + "name": "type", + "type": "entityField", + "label": "Type", + "color": "#4caf50", + "settings": {}, + "_hash": 0.9806146353493157 + }, + { + "name": "Status", + "type": "attribute", + "label": "active", + "color": "#f44336", + "settings": {}, + "_hash": 0.7141801635241265, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "var newValue = value == true ? \"Active\" : \"Inactive\";\r\nreturn newValue;" + }, + { + "name": "activeDevices", + "type": "attribute", + "label": "activeDevices", + "color": "#ffc107", + "settings": {}, + "_hash": 0.09421132942226995 + }, + { + "name": "inactiveDevices", + "type": "attribute", + "label": "inactiveDevices", + "color": "#607d8b", + "settings": {}, + "_hash": 0.35218481621567044 + }, + { + "name": "active_connectors", + "type": "attribute", + "label": "active_connectors", + "color": "#3f51b5", + "settings": {}, + "_hash": 0.45076316106117176 + }, + { + "name": "inactive_connectors", + "type": "attribute", + "label": "inactive_connectors", + "color": "#e91e63", + "settings": {}, + "_hash": 0.36755550699981954 + } + ] + }, + { + "type": "entityCount", + "name": null, + "entityAliasId": "a75d9031-ba51-8da4-81be-de65061b72f4", + "filterId": "bd33a006-fd40-3efc-7863-505c6e64f2b8", + "dataKeys": [ + { + "name": "count", + "type": "count", + "label": "count", + "color": "#3f51b5", + "settings": {}, + "_hash": 0.6470244865405319 + } + ] + }, + { + "type": "entityCount", + "name": null, + "entityAliasId": "a75d9031-ba51-8da4-81be-de65061b72f4", + "filterId": "956cf341-7cdf-82a7-ea2a-50cc9586f1f1", + "dataKeys": [ + { + "name": "count", + "type": "count", + "label": "count 2", + "color": "#e91e63", + "settings": {}, + "_hash": 0.46058668157030436 + } + ] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1683116949383, + "endTimeMs": 1683203349383 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "useMarkdownTextFunction": true, + "markdownTextFunction": "var blockData = '';\n\nfunction createDataBlock(value, label, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Name, \"Gateway Name\", ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\");\ncreateDataBlock(data[0].active, \"Status\");\ncreateDataBlock(data[1]?data[1].count:0, \"Active Devices\");\ncreateDataBlock(data[2]?data[2][\"count 2\"]:0, \"Inactive Devices\");\ncreateDataBlock(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0, \"Enabled Connectors\");\ncreateDataBlock(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0, \"Disabled Connectors\");\nreturn `
${blockData}
`;", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" + }, + "title": "New Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": { + "borderRadius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "margin": "0", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "79f59106-758f-c428-8b93-4341faea705d" + }, + "60dcf518-8fc3-3539-8ff8-ce94bda39f3a": { + "isSystemType": true, + "bundleAlias": "alarm_widgets", + "typeAlias": "alarms_table", + "type": "alarm", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 10.5, + "sizeY": 6.5, + "config": { + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 2592000000, + "quickInterval": "CURRENT_DAY", + "interval": 1000 + }, + "aggregation": { + "type": "NONE", + "limit": 200 + } + }, + "showTitle": true, + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "4px", + "settings": { + "enableSelection": true, + "enableSearch": true, + "enableSelectColumnDisplay": false, + "enableFilter": true, + "enableStickyHeader": true, + "enableStickyAction": false, + "reserveSpaceForHiddenAction": "true", + "displayDetails": true, + "allowAcknowledgment": true, + "allowClear": true, + "allowAssign": true, + "displayActivity": true, + "displayPagination": true, + "defaultPageSize": 10, + "defaultSortOrder": "-createdTime", + "useRowStyleFunction": false + }, + "title": "New Alarms table", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400, + "padding": "5px 10px 5px 10px" + }, + "useDashboardTimewindow": false, + "showLegend": false, + "alarmSource": { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "createdTime", + "type": "alarm", + "label": "Created time", + "color": "#2196f3", + "settings": { + "useCellStyleFunction": false, + "cellStyleFunction": "", + "useCellContentFunction": false, + "cellContentFunction": "" + }, + "_hash": 0.021092237451093787 + }, + { + "name": "type", + "type": "alarm", + "label": "Type", + "color": "#f44336", + "settings": { + "useCellStyleFunction": false, + "cellStyleFunction": "", + "useCellContentFunction": false, + "cellContentFunction": "" + }, + "_hash": 0.7323586880398418 + }, + { + "name": "severity", + "type": "alarm", + "label": "Severity", + "color": "#ffc107", + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": false + }, + "_hash": 0.09927019860088193 + }, + { + "name": "details", + "type": "alarm", + "label": "details", + "color": "#9c27b0", + "settings": {}, + "_hash": 0.10903701402251387 + }, + { + "name": "status", + "type": "alarm", + "label": "Status", + "color": "#607d8b", + "settings": {}, + "_hash": 0.5260411335842929 + } + ] + }, + "alarmsPollingInterval": 5, + "showTitleIcon": false, + "titleIcon": "more_horiz", + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "widgetStyle": { + "borderRadius": "10px" + }, + "displayTimewindow": false, + "actions": {}, + "datasources": [], + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "alarmFilterConfig": { + "statusList": [], + "severityList": [], + "typeList": [], + "searchPropagatedAlarms": false + } + }, + "row": 0, + "col": 0, + "id": "60dcf518-8fc3-3539-8ff8-ce94bda39f3a" + }, + "27e6b37c-085e-824d-fb13-69651a545ec1": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "gateway_logs", + "type": "timeseries", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 7.5, + "sizeY": 3, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [] + } + ], + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 43200000, + "quickInterval": "CURRENT_DAY", + "interval": 1000 + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": {}, + "title": "Gateway Logs", + "showTitleIcon": false, + "dropShadow": false, + "enableFullscreen": true, + "widgetStyle": { + "border-radius": "10px" + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false, + "useDashboardTimewindow": false, + "displayTimewindow": true, + "titleTooltip": "", + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + } + }, + "row": 0, + "col": 0, + "id": "27e6b37c-085e-824d-fb13-69651a545ec1" + }, + "bcd04dbf-c82a-ca13-6e88-a74f32b4348a": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "gateway_logs", + "type": "timeseries", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 7.5, + "sizeY": 3, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [] + } + ], + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 43200000, + "quickInterval": "CURRENT_DAY", + "interval": 1000 + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "isConnectorLog": true, + "connectorLogState": "connector_logs" + }, + "title": "Gateway Logs", + "showTitleIcon": false, + "dropShadow": false, + "enableFullscreen": true, + "widgetStyle": { + "border-radius": "10px" + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false, + "useDashboardTimewindow": false, + "displayTimewindow": true, + "titleTooltip": "", + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + } + }, + "row": 0, + "col": 0, + "id": "bcd04dbf-c82a-ca13-6e88-a74f32b4348a" + }, + "9b88dc51-b186-90ef-5afb-9648e6e2ac9a": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "gateway_statistics", + "type": "timeseries", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 8, + "sizeY": 5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "eventsSent", + "type": "timeseries", + "label": "eventsSent", + "color": "#2196f3", + "settings": {}, + "_hash": 0.0976422532267398 + } + ] + } + ], + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 604800000, + "quickInterval": "CURRENT_DAY", + "interval": 300000 + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "stack": false, + "fontSize": 10, + "fontColor": "#545454", + "showTooltip": true, + "tooltipIndividual": false, + "tooltipCumulative": false, + "hideZeros": false, + "grid": { + "verticalLines": true, + "horizontalLines": true, + "outlineWidth": 0, + "color": "#545454", + "backgroundColor": null, + "tickColor": "#DDDDDD" + }, + "xaxis": { + "title": null, + "showLabels": true, + "color": "#545454" + }, + "yaxis": { + "min": null, + "max": null, + "title": null, + "showLabels": true, + "color": "#545454", + "tickSize": null, + "tickDecimals": 0, + "ticksFormatter": "" + }, + "shadowSize": 4, + "smoothLines": true, + "comparisonEnabled": false, + "timeForComparison": "previousInterval", + "comparisonCustomIntervalValue": 7200000, + "xaxisSecond": { + "axisPosition": "top", + "title": null, + "showLabels": true + }, + "customLegendEnabled": false, + "dataKeysListForLabels": [] + }, + "title": "Statistics", + "dropShadow": true, + "enableFullscreen": true, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600 + }, + "useDashboardTimewindow": true, + "displayTimewindow": false, + "showTitleIcon": false, + "titleTooltip": "", + "widgetStyle": { + "border-radius": "10px" + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false, + "legendConfig": { + "direction": "column", + "position": "bottom", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": true, + "showTotal": false, + "showLatest": false + } + }, + "row": 0, + "col": 0, + "id": "9b88dc51-b186-90ef-5afb-9648e6e2ac9a" + }, + "2a318e56-5c83-4f82-bf23-df72dd7e3edf": { + "isSystemType": true, + "bundleAlias": "control_widgets", + "typeAlias": "rpc_remote_shell", + "type": "rpc", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 9.5, + "sizeY": 5.5, + "config": { + "targetDeviceAliases": [], + "showTitle": false, + "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": "New RPC remote shell", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "border-radius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "useDashboardTimewindow": true, + "showLegend": false, + "actions": {}, + "datasources": [], + "targetDeviceAliasIds": [ + "a2f01c66-96cf-49c5-303f-e6f21c559ee8" + ], + "showTitleIcon": false, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "2a318e56-5c83-4f82-bf23-df72dd7e3edf" + }, + "c50e294a-265a-d13c-c772-b56c4df953fe": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "gateway_general_statistics", + "type": "timeseries", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 8, + "sizeY": 5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "allBytesSentToDevices", + "type": "timeseries", + "label": "Sent To Devices (bytes)", + "color": "#2196f3", + "settings": {}, + "_hash": 0.6608774125800538, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "allBytesSentToTB", + "type": "timeseries", + "label": "Send To ThingsBoard (bytes)", + "color": "#4caf50", + "settings": {}, + "_hash": 0.05525630093240763, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "allReсeivedBytesFromTB", + "type": "timeseries", + "label": "Received From ThingsBoard (bytes)", + "color": "#f44336", + "settings": {}, + "_hash": 0.4539040118567914, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "convertedBytesFromDevice", + "type": "timeseries", + "label": "Converted From Devices (bytes)", + "color": "#ffc107", + "settings": {}, + "_hash": 0.36601736007496366, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "eventsProduced", + "type": "timeseries", + "label": "Events Produced", + "color": "#607d8b", + "settings": {}, + "_hash": 0.6227465527701406, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "eventsSent", + "type": "timeseries", + "label": "Events Sent", + "color": "#9c27b0", + "settings": {}, + "_hash": 0.6043328458525739, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + }, + { + "name": "receivedBytesFromDevices", + "type": "timeseries", + "label": "Received From Devices (bytes)", + "color": "#8bc34a", + "settings": {}, + "_hash": 0.7829761270709421, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": null, + "postFuncBody": null + } + ] + } + ], + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 604800000, + "quickInterval": "CURRENT_DAY", + "interval": 1800000 + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "stack": false, + "fontSize": 10, + "fontColor": "#545454", + "showTooltip": true, + "tooltipIndividual": false, + "tooltipCumulative": false, + "hideZeros": false, + "grid": { + "verticalLines": true, + "horizontalLines": true, + "outlineWidth": 0, + "color": "#545454", + "backgroundColor": null, + "tickColor": "#DDDDDD" + }, + "xaxis": { + "title": null, + "showLabels": true, + "color": "#545454" + }, + "yaxis": { + "min": null, + "max": null, + "title": null, + "showLabels": true, + "color": "#545454", + "tickSize": null, + "tickDecimals": 0, + "ticksFormatter": "" + }, + "shadowSize": 4, + "smoothLines": true, + "comparisonEnabled": false, + "timeForComparison": "previousInterval", + "comparisonCustomIntervalValue": 7200000, + "xaxisSecond": { + "axisPosition": "top", + "title": null, + "showLabels": true + }, + "customLegendEnabled": false, + "dataKeysListForLabels": [] + }, + "title": "General Statistics", + "dropShadow": true, + "enableFullscreen": true, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600 + }, + "useDashboardTimewindow": true, + "displayTimewindow": false, + "showTitleIcon": false, + "titleTooltip": "", + "widgetStyle": { + "border-radius": "10px" + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false, + "legendConfig": { + "direction": "row", + "position": "bottom", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": false, + "showTotal": false, + "showLatest": false + } + }, + "row": 0, + "col": 0, + "id": "c50e294a-265a-d13c-c772-b56c4df953fe" + }, + "da01e13f-c108-39fd-2a74-b40da088769a": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "timeseries_table", + "type": "timeseries", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 8, + "sizeY": 6.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "SERVICE_LOGS", + "type": "timeseries", + "label": "Status", + "color": "#4caf50", + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "let cssClass;\r\nswitch (value) {\r\n case \"DEBUG\":\r\n cssClass = \"status status-debug\";\r\n break;\r\n case \"WARNING\":\r\n cssClass = \"status status-warning\";\r\n break;\r\n case \"ERROR\":\r\n case \"EXCEPTION\":\r\n cssClass = \"status status-error\";\r\n break;\r\n case \"INFO\":\r\n default:\r\n cssClass = \"status status-info\";\r\n break;\r\n }\r\n \r\n return `${value}`;" + }, + "_hash": 0.6667576563240645, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "if (value.includes(\"RPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" + }, + { + "name": "SERVICE_LOGS", + "type": "timeseries", + "label": "Details", + "color": "#2196f3", + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "let statusValue = value.match(/\\|(\\w+)\\|/); \r\nstatusValue = statusValue? statusValue[1] : statusValue;\r\nlet cssClass = statusValue === \"EXCEPTION\" ?\r\n \"msg-status-exception\" : 'msg';\r\nlet parsedValue = /\\[(.*)/.exec(value);\r\nparsedValue = parsedValue ? parsedValue[0] : parsedValue;\r\nreturn `${parsedValue || value}`;" + }, + "_hash": 0.6931154680365814, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "if (value.includes(\"RPC\")) {\n return value;\n} else return '';" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 604800000, + "quickInterval": "CURRENT_DAY", + "interval": 1000 + }, + "aggregation": { + "type": "NONE", + "limit": 200 + } + }, + "showTitle": true, + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "enableSearch": true, + "enableStickyHeader": true, + "enableStickyAction": true, + "reserveSpaceForHiddenAction": "true", + "showTimestamp": true, + "showMilliseconds": false, + "displayPagination": false, + "useEntityLabel": false, + "hideEmptyLines": true, + "disableStickyHeader": false, + "useRowStyleFunction": false + }, + "title": "RPC Logs", + "dropShadow": true, + "enableFullscreen": true, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600, + "padding": "5px 10px 5px 10px" + }, + "useDashboardTimewindow": false, + "showLegend": false, + "widgetStyle": { + "borderRadius": "10px" + }, + "actions": {}, + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "displayTimewindow": true, + "titleTooltip": "", + "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n }\r\n\r\n .status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n\r\n .status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n }\r\n \r\n .msg-status-exception {\r\n color: red;\r\n }", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": true + }, + "row": 0, + "col": 0, + "id": "da01e13f-c108-39fd-2a74-b40da088769a" + }, + "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f": { + "isSystemType": true, + "bundleAlias": "control_widgets", + "typeAlias": "rpc_debug_terminal", + "type": "rpc", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 9.5, + "sizeY": 5.5, + "config": { + "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": "New RPC debug terminal", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "borderRadius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "useDashboardTimewindow": true, + "showLegend": false, + "actions": {}, + "datasources": [], + "targetDeviceAliasIds": [ + "a2f01c66-96cf-49c5-303f-e6f21c559ee8" + ], + "showTitleIcon": false, + "titleTooltip": "", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f" + }, + "46b68eb5-7e2d-bca1-c2ef-061b64575218": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "service_rpc", + "type": "rpc", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 4, + "sizeY": 2, + "config": { + "targetDeviceAliases": [], + "showTitle": true, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "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": "Service RPC", + "datasources": [], + "targetDeviceAliasIds": [ + "a2f01c66-96cf-49c5-303f-e6f21c559ee8" + ], + "showTitleIcon": false, + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "borderRadius": "10px" + }, + "widgetCss": "", + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600 + }, + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false + }, + "row": 0, + "col": 0, + "id": "46b68eb5-7e2d-bca1-c2ef-061b64575218" + }, + "878c68fd-71cb-21d4-684a-b5b5a4526b43": { + "isSystemType": true, + "bundleAlias": "gateway_widgets", + "typeAlias": "service_rpc", + "type": "rpc", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 4, + "sizeY": 2, + "config": { + "targetDeviceAliases": [], + "showTitle": true, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "isConnector": true + }, + "title": "Service RPC", + "datasources": [], + "targetDeviceAliasIds": [ + "a2f01c66-96cf-49c5-303f-e6f21c559ee8" + ], + "showTitleIcon": false, + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "borderRadius": "10px" + }, + "widgetCss": "", + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600 + }, + "pageSize": 1024, + "noDataDisplayMessage": "", + "showLegend": false + }, + "row": 0, + "col": 0, + "id": "878c68fd-71cb-21d4-684a-b5b5a4526b43" + }, + "0fc7dcf3-32a2-0159-738e-96956bf0d450": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "timeseries_table", + "type": "timeseries", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 8, + "sizeY": 6.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "SERVICE_LOGS", + "type": "timeseries", + "label": "Status", + "color": "#4caf50", + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "let cssClass;\r\nswitch (value) {\r\n case \"DEBUG\":\r\n cssClass = \"status status-debug\";\r\n break;\r\n case \"WARNING\":\r\n cssClass = \"status status-warning\";\r\n break;\r\n case \"ERROR\":\r\n case \"EXCEPTION\":\r\n cssClass = \"status status-error\";\r\n break;\r\n case \"INFO\":\r\n default:\r\n cssClass = \"status status-info\";\r\n break;\r\n }\r\n \r\n return `${value}`;" + }, + "_hash": 0.6667576563240645, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "if (value.includes(\"RPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" + }, + { + "name": "SERVICE_LOGS", + "type": "timeseries", + "label": "Details", + "color": "#2196f3", + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "let statusValue = value.match(/\\|(\\w+)\\|/); \r\nstatusValue = statusValue? statusValue[1] : statusValue;\r\nlet cssClass = statusValue === \"EXCEPTION\" ?\r\n \"msg-status-exception\" : 'msg';\r\nlet parsedValue = /\\[(.*)/.exec(value);\r\nparsedValue = parsedValue ? parsedValue[0] : parsedValue;\r\nreturn `${parsedValue || value}`;" + }, + "_hash": 0.6931154680365814, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "if (value.includes(\"RPC\")) {\n return value;\n} else return '';" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + }, + "latestDataKeys": [] + } + ], + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "timewindowMs": 604800000, + "quickInterval": "CURRENT_DAY", + "interval": 1000 + }, + "aggregation": { + "type": "NONE", + "limit": 200 + } + }, + "showTitle": true, + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "enableSearch": true, + "enableStickyHeader": true, + "enableStickyAction": true, + "reserveSpaceForHiddenAction": "true", + "showTimestamp": true, + "showMilliseconds": false, + "displayPagination": false, + "useEntityLabel": false, + "hideEmptyLines": true, + "disableStickyHeader": false, + "useRowStyleFunction": false + }, + "title": "RPC Logs", + "dropShadow": true, + "enableFullscreen": true, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 600, + "padding": "5px 10px 5px 10px" + }, + "useDashboardTimewindow": false, + "showLegend": false, + "widgetStyle": { + "borderRadius": "10px" + }, + "actions": {}, + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "displayTimewindow": true, + "titleTooltip": "", + "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n }\r\n\r\n .status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n\r\n .status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n }\r\n \r\n .msg-status-exception {\r\n color: red;\r\n }", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": true + }, + "row": 0, + "col": 0, + "id": "0fc7dcf3-32a2-0159-738e-96956bf0d450" + }, + "6e136fbc-545b-4926-c0a9-79348f35628a": { + "isSystemType": true, + "bundleAlias": "control_widgets", + "typeAlias": "rpc_debug_terminal", + "type": "rpc", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 9.5, + "sizeY": 5.5, + "config": { + "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": "New RPC debug terminal", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "borderRadius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "useDashboardTimewindow": true, + "showLegend": false, + "actions": {}, + "datasources": [], + "targetDeviceAliasIds": [ + "a2f01c66-96cf-49c5-303f-e6f21c559ee8" + ], + "showTitleIcon": false, + "titleTooltip": "", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "6e136fbc-545b-4926-c0a9-79348f35628a" + }, + "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "markdown_card", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1685437116892, + "endTimeMs": 1685523516892 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\r\n\r\n
", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".action-buttons-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: center;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" + }, + "title": "New Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "borderRadius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "actions": { + "elementClick": [ + { + "name": "Launch command", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "customPretty", + "customHtml": "
\r\n \r\n

gateway.command

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
", + "customCss": "/*=======================================================================*/\r\n/*========== There are two examples: for edit and add entity ==========*/\r\n/*=======================================================================*/\r\n/*======================== Edit entity example ========================*/\r\n/*=======================================================================*/\r\n/*\r\n.edit-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.edit-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n/*========================================================================*/\r\n/*========================= Add entity example =========================*/\r\n/*========================================================================*/\r\n/*\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n deviceService.getDeviceCredentials(entityId.id).subscribe(credentials => {\r\n data.credentials = credentials;\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n });\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.data = data;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", + "customResources": [], + "openInSeparateDialog": false, + "openInPopover": false, + "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" + } + ] + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19" + }, + "61d149e8-b249-5526-e5d7-6ad58413982e": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "markdown_card", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [ + { + "name": "general_configuration", + "type": "attribute", + "label": "general_configuration", + "color": "#2196f3", + "settings": {}, + "_hash": 0.739858588321151 + }, + { + "name": "RemoteLoggingLevel", + "type": "attribute", + "label": "RemoteLoggingLevel", + "color": "#4caf50", + "settings": {}, + "_hash": 0.20230761305210687 + } + ] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1685437116892, + "endTimeMs": 1685523516892 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "useMarkdownTextFunction": true, + "markdownTextFunction": "let buttonsHtml = \"\" \nctx.actionsApi.getActionDescriptors('elementClick').forEach((btn, index)=>{\n let disabled =false;\n if (index == 2) {\n disabled = data[0] && data[0].RemoteLoggingLevel ? data[0].RemoteLoggingLevel == \"NONE\" : true;\n } else if (index == 4) {\n const conf = data[0].general_configuration? JSON.parse(data[0].general_configuration): {};\n disabled = !conf.remoteShell;\n }\n buttonsHtml += ``\n});\n\nreturn `
${buttonsHtml}
`;", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".action-buttons-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: start;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" + }, + "title": "New Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": true, + "widgetStyle": { + "borderRadius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "actions": { + "elementClick": [ + { + "name": "General configuration", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "configuration", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" + }, + { + "name": "Connectors configuration", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "connectors", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "00469ea7-f4c4-e39d-a735-c74b6ba6a026" + }, + { + "name": "Logs", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "logs", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "d8607421-28b4-7c3b-949b-f69c3a46b461" + }, + { + "name": "Statistics", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "statistics", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "425ba0d8-8e26-18a5-881d-bebe27fb2a7a" + }, + { + "name": "Remote Shell", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "remote_shell", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "2c4c7dcc-009f-64eb-5f1b-a991df6d25a2" + }, + { + "name": "RPC", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "openDashboardState", + "targetDashboardStateId": "rpc", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "35705df8-69cf-7f76-b52f-d53c5a1931c0" + } + ] + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "61d149e8-b249-5526-e5d7-6ad58413982e" + }, + "3d661190-7463-ba61-6793-503c85af67ec": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "markdown_card", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "function", + "entityAliasId": "a75d9031-ba51-8da4-81be-de65061b72f4", + "dataKeys": [], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1686652103417, + "endTimeMs": 1686738503417 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "0px", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n", + "applyDefaultMarkdownStyle": true, + "markdownCss": ".mat-mdc-form-field-subscript-wrapper {\n display: none !important;\n}" + }, + "title": "New Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": { + "borderRadius": "10px" + }, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "" + }, + "row": 0, + "col": 0, + "id": "3d661190-7463-ba61-6793-503c85af67ec" + }, + "1615bd4e-c0a4-c32c-3706-3c83214cb8d7": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": null, + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "1615bd4e-c0a4-c32c-3706-3c83214cb8d7" + }, + "aafba3d8-a381-21c0-ecbe-446da3cdc041": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "bd9176e1-9e04-3e9b-d5a5-07b72bb9ae90", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "aafba3d8-a381-21c0-ecbe-446da3cdc041" + }, + "7f676bb2-bde2-10e7-80d8-25dd734e8e22": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "44038462-1bae-e075-7b31-283341cb2295", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "7f676bb2-bde2-10e7-80d8-25dd734e8e22" + }, + "d64482d8-001a-6f33-9b56-665530098fe5": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "884e9c34-7534-a483-99be-81b56cd91185", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "d64482d8-001a-6f33-9b56-665530098fe5" + }, + "bb27723a-989c-2327-5808-b56d490b93ab": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "e91ca0e9-1653-4fbc-5f3d-3da021b1b415", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "bb27723a-989c-2327-5808-b56d490b93ab" + }, + "e3a9539d-2ccb-96e0-2afa-36f93e40233d": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "e3a9539d-2ccb-96e0-2afa-36f93e40233d" + }, + "cf2eba6b-44f6-9cc2-6089-35c735f54898": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "3f74cbaa-6353-5e88-a7e8-708fc0e18039", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "cf2eba6b-44f6-9cc2-6089-35c735f54898" + }, + "3f6ed61b-f5af-13e3-7505-f69fd53f8211": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "c08eee84-64ee-73c4-8d96-c0df813a92cd", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "3f6ed61b-f5af-13e3-7505-f69fd53f8211" + }, + "b06cecaa-2806-65a9-782d-4f2d8cf95a6c": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "2f0af7f5-22ea-c0d5-3aef-7f2bb1b534ec", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "b06cecaa-2806-65a9-782d-4f2d8cf95a6c" + }, + "c3d39b60-a668-7f5e-e6f4-cae27151f4aa": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "92a7d208-c143-ea20-5162-1da584532830", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "c3d39b60-a668-7f5e-e6f4-cae27151f4aa" + }, + "f78a0d66-60cb-188f-857f-9acd4d24bd5a": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "498f090c-b1e5-df74-35d1-3ecf89d33f1c", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "f78a0d66-60cb-188f-857f-9acd4d24bd5a" + }, + "b81a171c-77c0-b857-21d2-cff02a1cb733": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "9175179d-a8db-848b-0762-e78da150e768", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "b81a171c-77c0-b857-21d2-cff02a1cb733" + }, + "0e399bef-01d2-4e4e-02d2-e254ebe91e56": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "1b70460b-428b-2aed-f23a-65927d3e67bb", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "0e399bef-01d2-4e4e-02d2-e254ebe91e56" + }, + "819c1d39-de7c-8ac3-858e-0040d286823e": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "ae357478-b4c2-eee8-dde6-a6942fe6202f", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "819c1d39-de7c-8ac3-858e-0040d286823e" + }, + "d4f73f32-f719-98bb-d427-b5c8957e8f47": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "6eef4979-369f-c2cc-4894-96a84b6a668a", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "d4f73f32-f719-98bb-d427-b5c8957e8f47" + }, + "f16a258c-3f6c-9317-fda7-48b33d8fe8b9": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "9c8e3a63-01a1-64b5-fe44-4f58f8350340", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "f16a258c-3f6c-9317-fda7-48b33d8fe8b9" + }, + "d1951ec7-ab13-87e4-bc05-ce2318dca353": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "c6501413-d823-29c4-992f-9ae6e8e25549", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "d1951ec7-ab13-87e4-bc05-ce2318dca353" + }, + "75b6372d-4def-42b4-8774-4edf413a8b83": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "entities_table", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "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": "2f04d6e5-8438-857a-ca78-ae78cc8b0c03", + "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 `${value}`;", + "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": { + "borderRadius": "10px" + }, + "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": "" + }, + "row": 0, + "col": 0, + "id": "75b6372d-4def-42b4-8774-4edf413a8b83" + } + }, + "states": { + "default": { + "name": "Gateway List", + "root": true, + "layouts": { + "main": { + "widgets": { + "23b9adc5-b3bd-040f-e5eb-a45925c73257": { + "sizeX": 48, + "sizeY": 23, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 48, + "margin": 5, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "configuration": { + "name": "Configuration", + "root": false, + "layouts": { + "main": { + "widgets": { + "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0, + "mobileHeight": null + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": true, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "connectors": { + "name": "Connectors", + "root": false, + "layouts": { + "main": { + "widgets": { + "02a05113-d878-b086-328e-75bd6f02b2bb": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "gateway_details": { + "name": "${entityName}", + "root": false, + "layouts": { + "main": { + "widgets": { + "79f59106-758f-c428-8b93-4341faea705d": { + "sizeX": 41, + "sizeY": 3, + "row": 0, + "col": 0, + "mobileHeight": 5, + "mobileOrder": 2 + }, + "60dcf518-8fc3-3539-8ff8-ce94bda39f3a": { + "sizeX": 41, + "sizeY": 10, + "row": 12, + "col": 0 + }, + "fb9df382-6ef3-4aa6-bc13-8bf8e300ba19": { + "sizeX": 7, + "sizeY": 3, + "row": 0, + "col": 41, + "mobileOrder": 0, + "mobileHeight": 1 + }, + "61d149e8-b249-5526-e5d7-6ad58413982e": { + "sizeX": 7, + "sizeY": 19, + "row": 3, + "col": 41, + "mobileOrder": 1, + "mobileHeight": 3 + }, + "3d661190-7463-ba61-6793-503c85af67ec": { + "sizeX": 41, + "sizeY": 9, + "row": 3, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 48, + "margin": 10, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "logs": { + "name": "Logs", + "root": false, + "layouts": { + "main": { + "widgets": { + "27e6b37c-085e-824d-fb13-69651a545ec1": { + "sizeX": 48, + "sizeY": 21, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 48, + "margin": 10, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": true, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "connector_logs": { + "name": "Logs", + "root": false, + "layouts": { + "main": { + "widgets": { + "bcd04dbf-c82a-ca13-6e88-a74f32b4348a": { + "sizeX": 24, + "sizeY": 10, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "statistics": { + "name": "Statistics", + "root": false, + "layouts": { + "main": { + "widgets": { + "9b88dc51-b186-90ef-5afb-9648e6e2ac9a": { + "sizeX": 48, + "sizeY": 12, + "row": 10, + "col": 0 + }, + "c50e294a-265a-d13c-c772-b56c4df953fe": { + "sizeX": 48, + "sizeY": 10, + "row": 0, + "col": 0, + "mobileOrder": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 48, + "margin": 5, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "remote_shell": { + "name": "Remote Shell", + "root": false, + "layouts": { + "main": { + "widgets": { + "2a318e56-5c83-4f82-bf23-df72dd7e3edf": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "rpc": { + "name": "RPC", + "root": false, + "layouts": { + "main": { + "widgets": { + "da01e13f-c108-39fd-2a74-b40da088769a": { + "sizeX": 45, + "sizeY": 10, + "row": 12, + "col": 0 + }, + "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f": { + "sizeX": 45, + "sizeY": 9, + "row": 22, + "col": 0 + }, + "46b68eb5-7e2d-bca1-c2ef-061b64575218": { + "sizeX": 45, + "sizeY": 12, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 45, + "margin": 5, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "connector_rpc": { + "name": "Connector RPC", + "root": false, + "layouts": { + "main": { + "widgets": { + "878c68fd-71cb-21d4-684a-b5b5a4526b43": { + "sizeX": 48, + "sizeY": 13, + "row": 0, + "col": 0 + }, + "0fc7dcf3-32a2-0159-738e-96956bf0d450": { + "sizeX": 48, + "sizeY": 10, + "row": 13, + "col": 0 + }, + "6e136fbc-545b-4926-c0a9-79348f35628a": { + "sizeX": 48, + "sizeY": 9, + "row": 23, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 48, + "margin": 5, + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "outerMargin": true + } + } + } + }, + "gateway_devices_0": { + "name": "Gateway devices", + "root": false, + "layouts": { + "main": { + "widgets": { + "1615bd4e-c0a4-c32c-3706-3c83214cb8d7": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 0, + "outerMargin": true, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } + }, + "gateway_devices_1": { + "name": "gateway_devices_mqtt", + "root": false, + "layouts": { + "main": { + "widgets": { + "aafba3d8-a381-21c0-ecbe-446da3cdc041": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 0, + "outerMargin": true, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } + }, + "gateway_devices_2": { + "name": "gateway_devices_modbus", + "root": false, + "layouts": { + "main": { + "widgets": { + "7f676bb2-bde2-10e7-80d8-25dd734e8e22": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 0, + "outerMargin": true, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } + }, + "gateway_devices_3": { + "name": "gateway_devices_grpc", + "root": false, + "layouts": { + "main": { + "widgets": { + "d64482d8-001a-6f33-9b56-665530098fe5": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_4": { + "name": "gateway_devices_opcua", + "root": false, + "layouts": { + "main": { + "widgets": { + "bb27723a-989c-2327-5808-b56d490b93ab": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "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": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_6": { + "name": "gateway_devices_ble", + "root": false, + "layouts": { + "main": { + "widgets": { + "cf2eba6b-44f6-9cc2-6089-35c735f54898": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_7": { + "name": "gateway_devices_request", + "root": false, + "layouts": { + "main": { + "widgets": { + "3f6ed61b-f5af-13e3-7505-f69fd53f8211": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_8": { + "name": "gateway_devices_can", + "root": false, + "layouts": { + "main": { + "widgets": { + "b06cecaa-2806-65a9-782d-4f2d8cf95a6c": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_9": { + "name": "gateway_devices_bacnet", + "root": false, + "layouts": { + "main": { + "widgets": { + "c3d39b60-a668-7f5e-e6f4-cae27151f4aa": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_10": { + "name": "gateway_devices_odbc", + "root": false, + "layouts": { + "main": { + "widgets": { + "f78a0d66-60cb-188f-857f-9acd4d24bd5a": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_11": { + "name": "gateway_devices_rest", + "root": false, + "layouts": { + "main": { + "widgets": { + "b81a171c-77c0-b857-21d2-cff02a1cb733": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_12": { + "name": "gateway_devices_snmp", + "root": false, + "layouts": { + "main": { + "widgets": { + "0e399bef-01d2-4e4e-02d2-e254ebe91e56": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_13": { + "name": "gateway_devices_ftp", + "root": false, + "layouts": { + "main": { + "widgets": { + "819c1d39-de7c-8ac3-858e-0040d286823e": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_14": { + "name": "gateway_devices_socket", + "root": false, + "layouts": { + "main": { + "widgets": { + "d4f73f32-f719-98bb-d427-b5c8957e8f47": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_15": { + "name": "gateway_devices_xmpp", + "root": false, + "layouts": { + "main": { + "widgets": { + "f16a258c-3f6c-9317-fda7-48b33d8fe8b9": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_16": { + "name": "gateway_devices_occp", + "root": false, + "layouts": { + "main": { + "widgets": { + "d1951ec7-ab13-87e4-bc05-ce2318dca353": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + }, + "gateway_devices_17": { + "name": "gateway_devices_custom", + "root": false, + "layouts": { + "main": { + "widgets": { + "75b6372d-4def-42b4-8774-4edf413a8b83": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 10, + "outerMargin": true, + "backgroundSizeMode": "100%" + } + } + } + } + }, + "entityAliases": { + "9b7a1caa-3510-3daa-e05a-fc39b851d2c1": { + "id": "9b7a1caa-3510-3daa-e05a-fc39b851d2c1", + "alias": "Devices", + "filter": { + "type": "entityType", + "resolveMultiple": true, + "entityType": "DEVICE" + } + }, + "a2f01c66-96cf-49c5-303f-e6f21c559ee8": { + "id": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "alias": "Selected Gateway", + "filter": { + "type": "stateEntity", + "resolveMultiple": false, + "stateEntityParamName": "", + "defaultStateEntity": null + } + }, + "a75d9031-ba51-8da4-81be-de65061b72f4": { + "id": "a75d9031-ba51-8da4-81be-de65061b72f4", + "alias": "GatewayDevices", + "filter": { + "type": "relationsQuery", + "resolveMultiple": true, + "rootStateEntity": true, + "stateEntityParamName": null, + "defaultStateEntity": null, + "rootEntity": null, + "direction": "FROM", + "maxLevel": 1, + "fetchLastLevelOnly": false, + "filters": [ + { + "relationType": "Created", + "entityTypes": [ + "DEVICE" + ] + } + ] + } + }, + "e3ea8714-bd05-67aa-8413-e07e93d53930": { + "id": "e3ea8714-bd05-67aa-8413-e07e93d53930", + "alias": "Current User", + "filter": { + "type": "singleEntity", + "resolveMultiple": false, + "singleEntity": { + "entityType": "CURRENT_USER", + "id": "13814000-1dd2-11b2-8080-808080808080" + } + } + } + }, + "filters": { + "abdfdcf9-75d4-001d-783a-920cb8e2a7e1": { + "id": "abdfdcf9-75d4-001d-783a-920cb8e2a7e1", + "filter": "Gateway", + "keyFilters": [ + { + "key": { + "type": "ENTITY_FIELD", + "key": "additionalInfo" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "CONTAINS", + "value": { + "defaultValue": "\"gateway\":true", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "bd33a006-fd40-3efc-7863-505c6e64f2b8": { + "id": "bd33a006-fd40-3efc-7863-505c6e64f2b8", + "filter": "isActive", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "active" + }, + "valueType": "BOOLEAN", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": true, + "dynamicValue": null + }, + "type": "BOOLEAN" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "956cf341-7cdf-82a7-ea2a-50cc9586f1f1": { + "id": "956cf341-7cdf-82a7-ea2a-50cc9586f1f1", + "filter": "isInactive", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "active" + }, + "valueType": "BOOLEAN", + "predicates": [ + { + "keyFilterPredicate": { + "type": "BOOLEAN", + "operation": "EQUAL", + "value": { + "defaultValue": false + } + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "bd9176e1-9e04-3e9b-d5a5-07b72bb9ae90": { + "id": "bd9176e1-9e04-3e9b-d5a5-07b72bb9ae90", + "filter": "gateway_devices_mqtt", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "mqtt", + "dynamicValue": null + }, + "ignoreCase": true, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "44038462-1bae-e075-7b31-283341cb2295": { + "id": "44038462-1bae-e075-7b31-283341cb2295", + "filter": "gateway_devices_modbus", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "modbus", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "884e9c34-7534-a483-99be-81b56cd91185": { + "id": "884e9c34-7534-a483-99be-81b56cd91185", + "filter": "gateway_devices_grpc", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "grpc", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "e91ca0e9-1653-4fbc-5f3d-3da021b1b415": { + "id": "e91ca0e9-1653-4fbc-5f3d-3da021b1b415", + "filter": "gateway_devices_opcua", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "opcua", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "3931abd5-2205-9386-6ea9-8e8a8131bb9d": { + "id": "3931abd5-2205-9386-6ea9-8e8a8131bb9d", + "filter": "gateway_devices_opcua_asyncio", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "opcua_asyncio", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "3f74cbaa-6353-5e88-a7e8-708fc0e18039": { + "id": "3f74cbaa-6353-5e88-a7e8-708fc0e18039", + "filter": "gateway_devices_ble", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "ble", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "c08eee84-64ee-73c4-8d96-c0df813a92cd": { + "id": "c08eee84-64ee-73c4-8d96-c0df813a92cd", + "filter": "gateway_devices_request", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "request", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "2f0af7f5-22ea-c0d5-3aef-7f2bb1b534ec": { + "id": "2f0af7f5-22ea-c0d5-3aef-7f2bb1b534ec", + "filter": "gateway_devices_can", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "can", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "92a7d208-c143-ea20-5162-1da584532830": { + "id": "92a7d208-c143-ea20-5162-1da584532830", + "filter": "gateway_devices_bacnet", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "bacnet", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "498f090c-b1e5-df74-35d1-3ecf89d33f1c": { + "id": "498f090c-b1e5-df74-35d1-3ecf89d33f1c", + "filter": "gateway_devices_odbc", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "odbc", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "9175179d-a8db-848b-0762-e78da150e768": { + "id": "9175179d-a8db-848b-0762-e78da150e768", + "filter": "gateway_devices_rest", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "rest", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "1b70460b-428b-2aed-f23a-65927d3e67bb": { + "id": "1b70460b-428b-2aed-f23a-65927d3e67bb", + "filter": "gateway_devices_snmp", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "snmp", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "ae357478-b4c2-eee8-dde6-a6942fe6202f": { + "id": "ae357478-b4c2-eee8-dde6-a6942fe6202f", + "filter": "gateway_devices_ftp", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "ftp", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "6eef4979-369f-c2cc-4894-96a84b6a668a": { + "id": "6eef4979-369f-c2cc-4894-96a84b6a668a", + "filter": "gateway_devices_socket", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "socket", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "9c8e3a63-01a1-64b5-fe44-4f58f8350340": { + "id": "9c8e3a63-01a1-64b5-fe44-4f58f8350340", + "filter": "gateway_devices_xmpp", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "xmpp", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "c6501413-d823-29c4-992f-9ae6e8e25549": { + "id": "c6501413-d823-29c4-992f-9ae6e8e25549", + "filter": "gateway_devices_ocpp", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "ocpp", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + }, + "2f04d6e5-8438-857a-ca78-ae78cc8b0c03": { + "id": "2f04d6e5-8438-857a-ca78-ae78cc8b0c03", + "filter": "gateway_devices_custom", + "keyFilters": [ + { + "key": { + "type": "ATTRIBUTE", + "key": "connectorType" + }, + "valueType": "STRING", + "predicates": [ + { + "keyFilterPredicate": { + "operation": "EQUAL", + "value": { + "defaultValue": "custom", + "dynamicValue": null + }, + "ignoreCase": false, + "type": "STRING" + }, + "userInfo": { + "editable": true, + "label": "", + "autogeneratedLabel": true, + "order": 0 + } + } + ] + } + ], + "editable": true + } + }, + "timewindow": { + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false, + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 1, + "history": { + "historyType": 0, + "timewindowMs": 43200000, + "interval": 120000, + "fixedTimewindow": { + "startTimeMs": 1686306375309.7058, + "endTimeMs": 1686307998839.1177 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "settings": { + "stateControllerId": "entity", + "showTitle": false, + "showDashboardsSelect": false, + "showEntitiesSelect": false, + "showDashboardTimewindow": true, + "showDashboardExport": false, + "toolbarAlwaysOpen": true, + "titleColor": "rgba(0,0,0,0.870588)", + "showDashboardLogo": false, + "dashboardLogoUrl": null, + "hideToolbar": false, + "showFilters": false, + "showUpdateDashboardImage": false, + "dashboardCss": "" + } + }, + "externalId": null, + "name": "Gateway" +} \ No newline at end of file From 62fbb2d5cdc7e573d9dd81fe54f97757b4d51313 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 23 Jun 2023 15:51:50 +0300 Subject: [PATCH 055/120] mobile layout update --- .../json/demo/dashboards/gateway_list.json | 21 +++++--- .../gateway-configuration.component.html | 52 ++++++++++--------- .../device/gateway-service-rpc.component.html | 2 +- .../device/gateway-service-rpc.component.scss | 2 +- 4 files changed, 44 insertions(+), 33 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 780f45a899..d2adc3c7ea 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -5268,19 +5268,23 @@ "sizeX": 45, "sizeY": 10, "row": 12, - "col": 0 + "col": 0, + "mobileOrder": 1 }, "ce3065bf-d898-2c03-6236-ce1b6cdf1f3f": { "sizeX": 45, "sizeY": 9, "row": 22, - "col": 0 + "col": 0, + "mobileOrder": 2 }, "46b68eb5-7e2d-bca1-c2ef-061b64575218": { "sizeX": 45, "sizeY": 12, "row": 0, - "col": 0 + "col": 0, + "mobileOrder": 0, + "mobileHeight": 8 } }, "gridSettings": { @@ -5307,19 +5311,24 @@ "sizeX": 48, "sizeY": 13, "row": 0, - "col": 0 + "col": 0, + "mobileOrder": 0, + "mobileHeight": 8 }, "0fc7dcf3-32a2-0159-738e-96956bf0d450": { "sizeX": 48, "sizeY": 10, "row": 13, - "col": 0 + "col": 0, + "mobileOrder": 1, + "mobileHeight": null }, "6e136fbc-545b-4926-c0a9-79348f35628a": { "sizeX": 48, "sizeY": 9, "row": 23, - "col": 0 + "col": 0, + "mobileOrder": 2 } }, "gridSettings": { diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index 445d37d6ee..d2ba08a773 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -229,7 +229,7 @@ {{ logConfig.value }} -
+
gateway.logs.level @@ -244,26 +244,28 @@ {{'gateway.logs.file-path-required' | translate }} - - gateway.logs.saving-period - - - {{'gateway.logs.saving-period-required' | translate }} - - - {{'gateway.logs.saving-period-min' | translate }} - - - - - - - {{period.value | translate}} - - - +
+ + gateway.logs.saving-period + + + {{'gateway.logs.saving-period-required' | translate }} + + + {{'gateway.logs.saving-period-min' | translate }} + + + + + + + {{period.value | translate}} + + + +
gateway.logs.backup-count @@ -294,8 +296,8 @@ {{'gateway.hints.storage' | translate}} -
- + {{ storageType.value | translate }} @@ -669,7 +671,7 @@ {{'gateway.hints.check-device-activity' | translate}} -
+
@@ -712,7 +714,7 @@ gateway.advanced -
+
gateway.min-pack-send-delay diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html index 840ca86d6d..0fb5f1b134 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html @@ -15,7 +15,7 @@ limitations under the License. --> - + {{'gateway.statistics.command' | translate}} diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss index 421ac5a153..fbb87dc5c1 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss @@ -24,7 +24,7 @@ .command-form { width: 100%; flex-wrap: nowrap; - padding: 0 15px; + padding: 0 15px 5px; margin-bottom: 5px; &>button { From cdb79bfc0cba129b58119d3ab0dc9af0b28dd944 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 27 Jun 2023 12:05:32 +0300 Subject: [PATCH 056/120] requested changes and internationalization fix --- .../device-example-command.component.html | 16 +++--- .../device-example-command.component.ts | 2 +- .../lib/gateway/gateway-form.component.html | 2 +- .../gateway-logs-settings.component.html | 4 +- ...ateway-service-rpc-settings.component.html | 2 +- .../device-gateway-command.component.html | 2 +- .../gateway-configuration.component.html | 52 +++++++++---------- .../gateway-configuration.component.scss | 2 +- .../device/gateway-connectors.component.html | 21 ++++---- .../device/gateway-service-rpc.component.html | 6 +-- .../device/gateway-statistics.component.html | 4 +- .../device/gateway-statistics.component.ts | 3 +- .../gateway-remote-configuration-dialog.html | 6 +-- .../gateway-remote-configuration-dialog.ts | 4 +- .../components/file-input.component.html | 4 +- .../components/file-input.component.scss | 2 +- .../assets/locale/locale.constant-en_US.json | 21 +++++++- 17 files changed, 86 insertions(+), 67 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html index 69fe98ba3d..ea29f533ba 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html +++ b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html @@ -27,12 +27,12 @@ HTTP - In order to publish telemetry data to (ThingsBoard device) with credentials of the current device you can use the following commands. +
MQTT - 1. Setup: - 2. Send command: + {{'device.telemetry-command-setup-step'| translate}} + {{'device.telemetry-command-send-step'| translate}}
{{ mqttCode }}
+ [disabled]="commandForm.invalid">{{'gateway.rpc-command-send' | translate}} - Result + {{'gateway.rpc-command-result' | translate}} diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html index 6233205eaa..611e68dbea 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -46,13 +46,13 @@ matSort [matSortActive]="pageLink.sortOrder.property" [matSortDirection]="pageLink.sortDirection()" matSortDisableClear> - Timestamp + {{'audit-log.timestamp' | translate}} {{row[0]| date:'yyyy-MM-dd HH:mm:ss' }} - Message + {{"event.message" | translate}} {{ row[1] }} diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index cc0c2e0591..91ddd1ab9e 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -39,7 +39,6 @@ import { PageLink } from '@shared/models/page/page-link'; import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { MatTableDataSource } from '@angular/material/table'; import { MatSort } from '@angular/material/sort'; -import { isNumber } from '@core/utils'; @Component({ @@ -131,7 +130,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi this.attributeService.getEntityAttributes(gateway.id, AttributeScope.SHARED_SCOPE, ["general_configuration"]).subscribe((resp: AttributeData[]) => { if (resp && resp.length) { this.commands = resp[0].value.statistics.commands; - if (!this.statisticForm.get('statisticKey').value) { + if (!this.statisticForm.get('statisticKey').value && this.commands && this.commands.length) { this.statisticForm.get('statisticKey').setValue(this.commands[0].attributeOnGateway); this.createChartsSubscription(gateway, this.commands[0].attributeOnGateway); } diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html index d8bff54898..7a66cfd4fb 100644 --- a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html @@ -31,9 +31,9 @@ gateway.configuration-delete-dialog-input - + + *ngIf="gatewayControl.hasError('required')"> {{'gateway.configuration-delete-dialog-input-required' | translate }} @@ -49,7 +49,7 @@ diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts index 95850a2444..49e44b2302 100644 --- a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts @@ -36,7 +36,7 @@ export class GatewayRemoteConfigurationDialogComponent extends DialogComponent, protected router: Router, @@ -45,7 +45,7 @@ export class GatewayRemoteConfigurationDialogComponent extends DialogComponent
diff --git a/ui-ngx/src/app/shared/components/file-input.component.scss b/ui-ngx/src/app/shared/components/file-input.component.scss index efbaff1932..a229a01bfb 100644 --- a/ui-ngx/src/app/shared/components/file-input.component.scss +++ b/ui-ngx/src/app/shared/components/file-input.component.scss @@ -94,7 +94,7 @@ $previewSize: 100px !default; } } - .pe { + .pointer-event { pointer-events: auto; } } diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 29b68ae52b..2750ed4484 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1311,6 +1311,10 @@ "copyAccessToken": "Copy access token", "copy-mqtt-authentication": "Copy MQTT credentials", "transportCommandCopiedMessage": "Transport Command has been copied to clipboard", + "telemetry-commands-help-link": "In order to publish telemetry data to (ThingsBoard device) with credentials of the current device you can use the following commands.", + "telemetry-command-setup-step": "1. Setup:", + "telemetry-command-send-step": "2. Send command:", + "telemetry-command-send-step-coap": "2. Send command: (based on CoAP cli)", "idCopiedMessage": "Device Id has been copied to clipboard", "accessTokenCopiedMessage": "Device access token has been copied to clipboard", "mqtt-authentication-copied-message": "Device MQTT authentication has been copied to clipboard", @@ -2565,11 +2569,22 @@ "xmpp": "XMPP Connector", "ocpp": "OCPP Connector" }, - "connectors": "Connectors configuration", + "connectors": "Connectors", + "connectors-config": "Connectors configuration", "connectors-active": "Connector active", "connectors-inactive": "Connector inactive", + "connectors-table-enabled": "Enabled", + "connectors-table-name": "Name", + "connectors-table-type": "Type", + "connectors-table-actions": "Actions", + "connectors-table-key": "Key", + "connectors-table-class": "Class", + "rpc-command-send": "Send", + "rpc-command-result": "Result", + "rpc-command-edit-params": "Edit parameters", "select-connector": "Select connector", "gateway-configuration": "Gateway Configuration", + "docker-label": "In order to run ThingsBoard IoT gateway in docker with credentials for this device you can use the following commands.", "copy-command": "Copy docker command", "create-new-gateway": "Create a new gateway", "create-new-gateway-text": "Are you sure you want create a new gateway with name: '{{gatewayName}}'?", @@ -4643,7 +4658,9 @@ "read-only": "Read only", "events-title": "Gateway events form title", "events-filter": "Events filter", - "event-key-contains": "Event key contains..." + "event-key-contains": "Event key contains...", + "is-connector": "Is Connector", + "state-param-name": "State parameter connector name" }, "gauge": { "default-color": "Default color", From c71ee6fa14e29ab2fceb060e388a4423b4008cb6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 29 Jun 2023 16:10:29 +0300 Subject: [PATCH 057/120] removed unnecessary request from library --- .../components/device/gateway-configuration.component.ts | 2 ++ .../shared/components/device/gateway-connectors.component.ts | 2 ++ .../shared/components/device/gateway-statistics.component.ts | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts index dd802d20b1..76a21a63ae 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts @@ -31,6 +31,7 @@ import { DeviceService } from '@core/http/device.service'; import { of } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; import { DeviceCredentialsType } from '@shared/models/device.models'; +import { NULL_UUID } from '@shared/models/id/has-uuid'; export enum StorageTypes { MEMORY = 'memory', @@ -317,6 +318,7 @@ export class GatewayConfigurationComponent implements OnInit { } fetchConfigAttribute(entityId: EntityId) { + if (entityId.id === NULL_UUID) return; this.attributeService.getEntityAttributes(entityId, AttributeScope.CLIENT_SCOPE, ['general_configuration', 'grpc_configuration', 'logs_configuration', 'storage_configuration', 'RemoteLoggingLevel']).pipe( mergeMap(attributes => attributes.length ? of(attributes) : this.attributeService.getEntityAttributes( diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts index 086cf55f6d..d51633488a 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts @@ -39,6 +39,7 @@ import { ActionNotificationShow } from '@core/notification/notification.actions' import { DialogService } from '@app/core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { deepClone } from '@core/utils'; +import { NULL_UUID } from '@shared/models/id/has-uuid'; export interface gatewayConnector { @@ -161,6 +162,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.viewsInited = true; if (this.device) { + if (this.device.id === NULL_UUID) return; forkJoin(this.attributeService.getEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, ['active_connectors']), this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors'])).subscribe(attributes => { if (attributes.length) { diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index 91ddd1ab9e..089e83af04 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -39,6 +39,7 @@ import { PageLink } from '@shared/models/page/page-link'; import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { MatTableDataSource } from '@angular/material/table'; import { MatSort } from '@angular/material/sort'; +import { NULL_UUID } from '@shared/models/id/has-uuid'; @Component({ @@ -124,8 +125,8 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi }) this.init(); if (this.ctx.defaultSubscription.datasources.length) { - const gateway = this.ctx.defaultSubscription.datasources[0].entity; + if (gateway.id.id === NULL_UUID) return; if (!this.general) { this.attributeService.getEntityAttributes(gateway.id, AttributeScope.SHARED_SCOPE, ["general_configuration"]).subscribe((resp: AttributeData[]) => { if (resp && resp.length) { From bebee3e43bb58da034a667e2103d7acefc4dd833 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 30 Jun 2023 11:30:34 +0300 Subject: [PATCH 058/120] devices list make all tables same remove full screen from buttons widget gateway config tabs changes jumping mat slider label level fix empty static for gateway Rpc command change style fix change config modal change selector gateway config modal on mobile fix config dialog -> gateway page bug fix --- .../json/demo/dashboards/gateway_list.json | 186 ++++++++++++------ .../widget_bundles/gateway_widgets.json | 2 +- .../gateway-configuration.component.html | 3 +- .../gateway-configuration.component.scss | 4 +- .../device/gateway-service-rpc.component.html | 8 +- .../device/gateway-service-rpc.component.scss | 6 + .../device/gateway-statistics.component.html | 4 + .../device/gateway-statistics.component.scss | 1 - .../device/gateway-statistics.component.ts | 2 +- .../gateway-remote-configuration-dialog.ts | 2 +- .../assets/locale/locale.constant-en_US.json | 1 + 11 files changed, 142 insertions(+), 77 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index d2adc3c7ea..013c4e07c6 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -175,9 +175,9 @@ "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", "type": "customPretty", - "customHtml": "
\n \n
\n", - "customCss": ".container {\n width: 800px;\n height: 80vh;\n}", - "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.entityId = entityId;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", + "customHtml": "
\n \n
\n", + "customCss": ".container {\n width: 800px;\n height: 80vh;\n}\n\n.container-mobile {\n height: 100%;\n}", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.ctx = widgetContext;\r\n vm.entityId = entityId;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", "customResources": [], "openInSeparateDialog": false, "openInPopover": false, @@ -537,9 +537,9 @@ "padding": "8px", "settings": { "useMarkdownTextFunction": true, - "markdownTextFunction": "var blockData = '';\n\nfunction createDataBlock(value, label, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Name, \"Gateway Name\", ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\");\ncreateDataBlock(data[0].active, \"Status\");\ncreateDataBlock(data[1]?data[1].count:0, \"Active Devices\");\ncreateDataBlock(data[2]?data[2][\"count 2\"]:0, \"Inactive Devices\");\ncreateDataBlock(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0, \"Enabled Connectors\");\ncreateDataBlock(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0, \"Disabled Connectors\");\nreturn `
${blockData}
`;", + "markdownTextFunction": "var blockData = '';\n\nfunction createDataBlock(value, label, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Name, \"Gateway Name\", ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\");\ncreateDataBlock(data[0].active, \"Status\");\ncreateDataBlock(data[1]?data[1].count:0, \"Active Devices\");\ncreateDataBlock(data[2]?data[2][\"count 2\"]:0, \"Inactive Devices\");\ncreateDataBlock(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0, \"Enabled Connectors\");\ncreateDataBlock(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0, \"Disabled Connectors\");\nreturn `
${blockData}
`;", "applyDefaultMarkdownStyle": false, - "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" + "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" }, "title": "New Markdown/HTML Card", "showTitleIcon": false, @@ -871,16 +871,12 @@ "name": null, "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", "filterId": null, - "dataKeys": [ - { - "name": "eventsSent", - "type": "timeseries", - "label": "eventsSent", - "color": "#2196f3", - "settings": {}, - "_hash": 0.0976422532267398 - } - ] + "dataKeys": null, + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } } ], "timewindow": { @@ -1874,7 +1870,7 @@ "iconSize": "24px", "titleTooltip": "", "dropShadow": true, - "enableFullscreen": true, + "enableFullscreen": false, "widgetStyle": { "borderRadius": "10px" }, @@ -1987,7 +1983,7 @@ "iconSize": "24px", "titleTooltip": "", "dropShadow": true, - "enableFullscreen": true, + "enableFullscreen": false, "widgetStyle": { "borderRadius": "10px" }, @@ -2323,7 +2319,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -2480,7 +2476,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -2637,7 +2633,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -2794,7 +2790,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -2951,7 +2947,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -3108,7 +3104,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -3265,7 +3261,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -3422,7 +3418,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -3579,7 +3575,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -3736,7 +3732,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -3893,7 +3889,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4050,7 +4046,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4207,7 +4203,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4364,7 +4360,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4521,7 +4517,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4678,7 +4674,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4835,7 +4831,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -4992,7 +4988,7 @@ "showTitleIcon": false, "titleTooltip": "", "widgetStyle": { - "borderRadius": "10px" + "borderRadius": " 0 0 10px 10px" }, "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, @@ -5442,9 +5438,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5465,9 +5465,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5488,9 +5492,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5511,9 +5519,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5534,9 +5546,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5557,9 +5573,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5580,9 +5600,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5603,9 +5627,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5626,9 +5654,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5649,9 +5681,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5672,9 +5708,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5695,9 +5735,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5718,9 +5762,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5741,9 +5789,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } @@ -5764,9 +5816,13 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "outerMargin": true, - "backgroundSizeMode": "100%" + "backgroundSizeMode": "100%", + "autoFillHeight": false, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 } } } diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index 076a247904..d4daea9d99 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -132,7 +132,7 @@ "resources": [], "templateHtml": "", "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", - "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false\n };\n}\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false,\n dataKeysOptional: true\n };\n}\n", "settingsSchema": "{}", "dataKeySettingsSchema": "{}", "latestDataKeySettingsSchema": "{}", diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html index 642afd4dec..f497dd4f0e 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html @@ -26,7 +26,7 @@ close - +
@@ -769,7 +769,6 @@
-
- - +
+ {{'gateway.rpc-command-result' | translate}} - + diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss index fbb87dc5c1..7676742c78 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss @@ -38,6 +38,12 @@ .result-block { padding: 0 15px; + display: flex; + flex-direction: column; + + ::ng-deep.tb-json-content { + height: 100%; + } &>span { font-weight: 600; diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html index 611e68dbea..1c7424feb8 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html @@ -29,6 +29,10 @@ + + {{'gateway.statistics.statistic-commands-empty' | translate }} + diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss index d14f748547..e704120560 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss @@ -38,7 +38,6 @@ .chart-box, .chart-container { height: 100%; - min-height: 300px; flex-grow: 1; } diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts index 089e83af04..32956fb759 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts @@ -58,7 +58,7 @@ export class GatewayStatisticsComponent extends PageComponent implements AfterVi @Input() public general: boolean; - public isNumericData: boolean = true; + public isNumericData: boolean = false; public chartInited: boolean; private flot: TbFlot; private flotCtx; diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts index 49e44b2302..d5274eef97 100644 --- a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts +++ b/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts @@ -27,7 +27,7 @@ export interface GatewayRemoteConfigurationDialogData { } @Component({ - selector: 'tb-activation-link-dialog', + selector: 'gateway-remote-configuration-dialog', templateUrl: './gateway-remote-configuration-dialog.html' }) diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 2750ed4484..8dccd71c7d 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2688,6 +2688,7 @@ "statistics": { "statistic": "Statistic", "statistics": "Statistics", + "statistic-commands-empty": "No statistics available", "commands": "Commands", "send-period": "Statistic send period (in sec)", "send-period-required": "Statistic send period is required", From 44d16b2150682220002002a4faa84cd6db593b24 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 30 Jun 2023 11:42:36 +0300 Subject: [PATCH 059/120] device wizard and device component revert changes --- .../device/device-credentials.module.ts | 7 +- .../device-example-command.component.html | 86 ---------------- .../device-example-command.component.scss | 41 -------- .../device-example-command.component.ts | 98 ------------------- .../device-wizard-dialog.component.html | 15 +-- .../device-wizard-dialog.component.scss | 4 - .../wizard/device-wizard-dialog.component.ts | 40 +++----- 7 files changed, 17 insertions(+), 274 deletions(-) delete mode 100644 ui-ngx/src/app/modules/home/components/device/device-example-command.component.html delete mode 100644 ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss delete mode 100644 ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts diff --git a/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts b/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts index 692e2e36d1..5254bd5955 100644 --- a/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts +++ b/ui-ngx/src/app/modules/home/components/device/device-credentials.module.ts @@ -22,7 +22,6 @@ import { DeviceCredentialsComponent } from '@home/components/device/device-crede import { DeviceCredentialsLwm2mComponent } from '@home/components/device/device-credentials-lwm2m.component'; import { DeviceCredentialsLwm2mServerComponent } from '@home/components/device/device-credentials-lwm2m-server.component'; import { DeviceCredentialsMqttBasicComponent } from '@home/components/device/device-credentials-mqtt-basic.component'; -import { DeviceExampleCommandComponent } from '@home/components/device/device-example-command.component'; @NgModule({ declarations: [ @@ -30,8 +29,7 @@ import { DeviceExampleCommandComponent } from '@home/components/device/device-ex DeviceCredentialsComponent, DeviceCredentialsLwm2mComponent, DeviceCredentialsLwm2mServerComponent, - DeviceCredentialsMqttBasicComponent, - DeviceExampleCommandComponent + DeviceCredentialsMqttBasicComponent ], imports: [ CommonModule, @@ -42,8 +40,7 @@ import { DeviceExampleCommandComponent } from '@home/components/device/device-ex DeviceCredentialsComponent, DeviceCredentialsLwm2mComponent, DeviceCredentialsLwm2mServerComponent, - DeviceCredentialsMqttBasicComponent, - DeviceExampleCommandComponent + DeviceCredentialsMqttBasicComponent ] }) export class DeviceCredentialsModule { } diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html deleted file mode 100644 index ea29f533ba..0000000000 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.html +++ /dev/null @@ -1,86 +0,0 @@ - -
- - - MQTT - - - COAP - - - HTTP - - - -
-
- MQTT - {{'device.telemetry-command-setup-step'| translate}} - {{'device.telemetry-command-send-step'| translate}} -
-
{{ mqttCode }}
- -
-
-
- COAP - {{'device.telemetry-command-setup-step'| translate}} - {{'device.telemetry-command-send-step-coap'| translate}} -
-
{{ coapCode }}
- -
JSON example: {{'[{"temperature": 40}, {"isRainy": true}]'}}
-
-
-
- HTTP - {{'device.telemetry-command-setup-step'| translate}} - {{'device.telemetry-command-send-step'| translate}} -
-
{{ httpCode }}
- -
-
-
-
diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss deleted file mode 100644 index 1ffdf91763..0000000000 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.scss +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright © 2016-2023 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. - */ -:host { - - mat-button-toggle-group, .protocol-title { - margin-bottom: 20px; - } - - span { - margin-bottom: 10px; - } - - .protocol-toggle { - width: fit-content; - } - - .help-title { - padding-bottom: 5px; - } - - .protocol-send-command { - width: 100%; - } - - .pre-wrap { - white-space: pre-wrap; - } -} diff --git a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts b/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts deleted file mode 100644 index ef1511b14c..0000000000 --- a/ui-ngx/src/app/modules/home/components/device/device-example-command.component.ts +++ /dev/null @@ -1,98 +0,0 @@ -/// -/// Copyright © 2016-2023 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. -/// - -import { Component, Input, OnInit } from '@angular/core'; -import { FormControl } from '@angular/forms'; -import { Router } from '@angular/router'; -import { Store } from '@ngrx/store'; -import { AppState } from '@core/core.state'; -import { TranslateService } from '@ngx-translate/core'; -import { ActionNotificationShow } from '@core/notification/notification.actions'; -import { helpBaseUrl } from '@shared/models/constants'; - -@Component({ - selector: 'tb-device-example-command', - templateUrl: './device-example-command.component.html', - styleUrls: ['./device-example-command.component.scss'] -}) - -export class DeviceExampleCommandComponent implements OnInit { - - @Input() - token: string; - - helpLink: string = helpBaseUrl + '/docs/reference/protocols/'; - - mqttCode: string; - - coapCode: string; - - httpCode: string; - - mqttSetup: string; - - coapSetup: string; - - httpSetup: string; - - protocolCtrl: FormControl; - - constructor(protected router: Router, - protected store: Store, - public translate: TranslateService) { - } - - - ngOnInit(): void { - const HOST = window.location.hostname; - this.mqttCode = `mosquitto_pub -d -q 1 -h ${HOST} -t "v1/devices/me/telemetry" -u "${this.token}" -m "{"temperature":42}"`; - this.coapCode = `cat telemetry-data.json | coap post coap://${HOST}/api/v1/${this.token}/telemetry`; - this.httpCode = `curl -v -X POST --data "{"temperature":42,"humidity":73}" http://${HOST}/api/v1/${this.token}/telemetry --header "Content-Type:application/json"`; - - this.protocolCtrl = new FormControl('mqtt'); - const mqttLink = ' Mqtt Guide'; - - // @ts-ignore - const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, - macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], - windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; - if (macosPlatforms.indexOf(platform) !== -1) { - this.mqttSetup = 'brew install mosquitto-clients'; - this.coapSetup = 'npm install coap-cli -g'; - this.httpSetup = 'brew install curl'; - } else if (windowsPlatforms.indexOf(platform) !== -1) { - this.mqttSetup = mqttLink; - this.coapSetup = 'npm install coap-cli -g'; - this.httpSetup = 'not required, available by default in windows 10+'; - } else if (/Linux/.test(platform)) { - this.mqttSetup = 'sudo apt-get install mosquitto-clients'; - this.coapSetup = 'npm install coap-cli -g'; - this.httpSetup = 'sudo apt-get install curl'; - } - } - - onDockerCodeCopied() { - this.store.dispatch(new ActionNotificationShow( - { - message: this.translate.instant('gateway.command-copied-message'), - type: 'success', - target: 'dockerCommandDialogContent', - duration: 1200, - verticalPosition: 'bottom', - horizontalPosition: 'left' - })); - } -} diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html index f268c586ba..c1485cf450 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.html @@ -29,7 +29,7 @@
- + check @@ -178,17 +178,9 @@ -
- - - - -
-
+
@@ -203,11 +195,10 @@
+ (click)="add()">{{ 'action.add' | translate }}
diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss index e3fbd3c7c6..0fe18467fd 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.scss @@ -37,10 +37,6 @@ } :host ::ng-deep { - .commands-container { - padding: 24px; - } - .mat-mdc-dialog-content { display: flex; flex-direction: column; diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index 235658a374..92906b571d 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -24,8 +24,6 @@ import { Router } from '@angular/router'; import { createDeviceProfileConfiguration, createDeviceProfileTransportConfiguration, - Device, - DeviceCredentials, DeviceProfile, DeviceProfileInfo, DeviceProfileType, @@ -59,9 +57,9 @@ import { deepTrim } from '@core/utils'; styleUrls: ['./device-wizard-dialog.component.scss'] }) export class DeviceWizardDialogComponent extends - DialogComponent implements OnDestroy, ErrorStateMatcher { + DialogComponent implements OnDestroy, ErrorStateMatcher { - @ViewChild('addDeviceWizardStepper') addDeviceWizardStepper: MatStepper; + @ViewChild('addDeviceWizardStepper', {static: true}) addDeviceWizardStepper: MatStepper; selectedIndex = 0; @@ -71,7 +69,7 @@ export class DeviceWizardDialogComponent extends entityType = EntityType; - deviceTransportTypes = Object.values(DeviceTransportType) as DeviceTransportType[]; + deviceTransportTypes = Object.values(DeviceTransportType); deviceTransportTypeTranslations = deviceTransportTypeTranslationMap; @@ -93,10 +91,6 @@ export class DeviceWizardDialogComponent extends serviceType = ServiceType.TB_RULE_ENGINE; - device: Device; - - deviceCredentials: DeviceCredentials; - private subscriptions: Subscription[] = []; private currentDeviceProfileTransportType = DeviceTransportType.DEFAULT; @@ -104,7 +98,7 @@ export class DeviceWizardDialogComponent extends protected router: Router, @Inject(MAT_DIALOG_DATA) public data: AddEntityDialogData>, @SkipSelf() private errorStateMatcher: ErrorStateMatcher, - public dialogRef: MatDialogRef, + public dialogRef: MatDialogRef, private deviceProfileService: DeviceProfileService, private deviceService: DeviceService, private breakpointObserver: BreakpointObserver, @@ -269,15 +263,13 @@ export class DeviceWizardDialogComponent extends } add(): void { - if (this.deviceCredentials) { - this.dialogRef.close(this.device); - } else if (this.allValid()) { + if (this.allValid()) { this.createDeviceProfile().pipe( mergeMap(profileId => this.createDevice(profileId)), - mergeMap(device => this.saveCredentials(device)), + mergeMap(device => this.saveCredentials(device)) ).subscribe( - (device) => { - this.device = device; + (created) => { + this.dialogRef.close(created); } ); } @@ -334,7 +326,7 @@ export class DeviceWizardDialogComponent extends } } - private createDevice(profileId): Observable { + private createDevice(profileId): Observable> { const device = { name: this.deviceWizardFormGroup.get('name').value, label: this.deviceWizardFormGroup.get('label').value, @@ -357,16 +349,15 @@ export class DeviceWizardDialogComponent extends this.addDeviceWizardStepper.selectedIndex = 0; return throwError(e); }) - ) as Observable; + ); } - private saveCredentials(device: Device): Observable { + private saveCredentials(device: BaseData): Observable { if (this.credentialsFormGroup.get('setCredential').value) { return this.deviceService.getDeviceCredentials(device.id.id).pipe( mergeMap( (deviceCredentials) => { const deviceCredentialsValue = {...deviceCredentials, ...this.credentialsFormGroup.value.credential}; - this.deviceCredentials = deviceCredentialsValue; return this.deviceService.saveDeviceCredentials(deviceCredentialsValue).pipe( catchError(e => { this.addDeviceWizardStepper.selectedIndex = 1; @@ -379,14 +370,7 @@ export class DeviceWizardDialogComponent extends ); } ), - map(() => device)); - } else { - return this.deviceService.getDeviceCredentials(device.id.id).pipe( - map((deviceCredentials) => { - this.deviceCredentials = deviceCredentials; - return device; - }) - ); + map(() => true)); } } From 3661e6fd0d91ffba09b30bd2e4655954ead6fa87 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 30 Jun 2023 11:43:52 +0300 Subject: [PATCH 060/120] device wizard and device component revert changes --- .../home/components/wizard/device-wizard-dialog.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts index 92906b571d..77916d379c 100644 --- a/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/components/wizard/device-wizard-dialog.component.ts @@ -372,6 +372,7 @@ export class DeviceWizardDialogComponent extends ), map(() => true)); } + return of(true); } allValid(): boolean { From b767098c011ed9bb066febcdaf01522cffd76334 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 30 Jun 2023 13:30:17 +0300 Subject: [PATCH 061/120] move components from shared to widget lib --- ui-ngx/src/app/modules/common/modules-map.ts | 12 ---------- .../widget/dialog/custom-dialog.service.ts | 5 +++-- .../device-gateway-command.component.html | 0 .../device-gateway-command.component.ts | 0 .../gateway-configuration.component.html | 0 .../gateway-configuration.component.scss | 0 .../device/gateway-configuration.component.ts | 0 .../device/gateway-connectors.component.html | 0 .../device/gateway-connectors.component.scss | 2 +- .../device/gateway-connectors.component.ts | 4 ++-- .../lib}/device/gateway-logs.component.html | 0 .../lib}/device/gateway-logs.component.scss | 0 .../lib}/device/gateway-logs.component.ts | 4 ++-- .../device/gateway-service-rpc.component.html | 0 .../device/gateway-service-rpc.component.scss | 0 .../device/gateway-service-rpc.component.ts | 2 +- .../device/gateway-statistics.component.html | 0 .../device/gateway-statistics.component.scss | 0 .../device/gateway-statistics.component.ts | 2 +- .../widget/widget-components.module.ts | 22 +++++++++++++++++-- .../home/pages/device/device.component.html | 11 ++++------ ui-ngx/src/app/shared/shared.module.ts | 18 --------------- 22 files changed, 34 insertions(+), 48 deletions(-) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/device-gateway-command.component.html (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/device-gateway-command.component.ts (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-configuration.component.html (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-configuration.component.scss (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-configuration.component.ts (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-connectors.component.html (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-connectors.component.scss (97%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-connectors.component.ts (98%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-logs.component.html (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-logs.component.scss (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-logs.component.ts (97%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-service-rpc.component.html (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-service-rpc.component.scss (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-service-rpc.component.ts (98%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-statistics.component.html (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-statistics.component.scss (100%) rename ui-ngx/src/app/{shared/components => modules/home/components/widget/lib}/device/gateway-statistics.component.ts (99%) diff --git a/ui-ngx/src/app/modules/common/modules-map.ts b/ui-ngx/src/app/modules/common/modules-map.ts index 2ff9dab6fc..e51ecc0e31 100644 --- a/ui-ngx/src/app/modules/common/modules-map.ts +++ b/ui-ngx/src/app/modules/common/modules-map.ts @@ -300,13 +300,7 @@ import * as QueueFormComponent from '@home/components/queue/queue-form.component import * as AssetProfileComponent from '@home/components/profile/asset-profile.component'; import * as AssetProfileDialogComponent from '@home/components/profile/asset-profile-dialog.component'; import * as AssetProfileAutocompleteComponent from '@home/components/profile/asset-profile-autocomplete.component'; -import * as DeviceGatewayCommandComponent from '@shared/components/device/device-gateway-command.component'; import * as GatewayRemoteConfigurationDialogComponent from '@shared/components/dialog/gateway-remote-configuration-dialog'; -import * as GatewayConfigurationComponent from '@shared/components/device/gateway-configuration.component'; -import * as GatewayConnectorComponent from '@shared/components/device/gateway-connectors.component'; -import * as GatewayLogsComponent from '@shared/components/device/gateway-logs.component'; -import * as GatewayStatisticsComponent from '@shared/components/device/gateway-statistics.component'; -import * as GatewayServiceRPCComponent from '@shared/components/device/gateway-service-rpc.component'; import * as RuleChainSelectComponent from '@shared/components/rule-chain/rule-chain-select.component'; import { IModulesMap } from '@modules/common/modules-map.models'; @@ -414,12 +408,6 @@ class ModulesMap implements IModulesMap { '@shared/components/help.component': HelpComponent, '@shared/components/help-markdown.component': HelpMarkdownComponent, '@shared/components/help-popup.component': HelpPopupComponent, - '@shared/components/device/device-gateway-command.component': DeviceGatewayCommandComponent, - '@shared/components/device/gateway-configuration.component': GatewayConfigurationComponent, - '@shared/components/device/gateway-connectors.component': GatewayConnectorComponent, - '@shared/components/device/gateway-logs.component': GatewayLogsComponent, - '@shared/components/device/gateway-statistics.component': GatewayStatisticsComponent, - '@shared/components/device/gateway-service-rpc.component': GatewayServiceRPCComponent, '@shared/components/device/gateway-remote-configuration-dialog': GatewayRemoteConfigurationDialogComponent, '@shared/components/tb-checkbox.component': TbCheckboxComponent, '@shared/components/toast.directive': TbToast, diff --git a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts index c18367d864..461d8feeeb 100644 --- a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts +++ b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts @@ -28,7 +28,7 @@ import { CustomDialogContainerData } from '@home/components/widget/dialog/custom-dialog-container.component'; import { SHARED_MODULE_TOKEN } from '@shared/components/tokens'; -import { HOME_COMPONENTS_MODULE_TOKEN, SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; +import { HOME_COMPONENTS_MODULE_TOKEN, SHARED_HOME_COMPONENTS_MODULE_TOKEN, WIDGET_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; @Injectable() export class CustomDialogService { @@ -42,6 +42,7 @@ export class CustomDialogService { @Inject(SHARED_MODULE_TOKEN) private sharedModule: Type, @Inject(SHARED_HOME_COMPONENTS_MODULE_TOKEN) private sharedHomeComponentsModule: Type, @Inject(HOME_COMPONENTS_MODULE_TOKEN) private homeComponentsModule: Type, + @Inject(WIDGET_COMPONENTS_MODULE_TOKEN) private widgetComponentsModule: Type, public dialog: MatDialog ) { } @@ -52,7 +53,7 @@ export class CustomDialogService { customDialog(template: string, controller: (instance: CustomDialogComponent) => void, data?: any, config?: MatDialogConfig): Observable { - const modules = [this.sharedModule, CommonModule, this.sharedHomeComponentsModule, this.homeComponentsModule]; + const modules = [this.sharedModule, CommonModule, this.sharedHomeComponentsModule, this.homeComponentsModule, this.widgetComponentsModule]; if (Array.isArray(this.customModules)) { modules.push(...this.customModules); } diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.html similarity index 100% rename from ui-ngx/src/app/shared/components/device/device-gateway-command.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.html diff --git a/ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.ts similarity index 100% rename from ui-ngx/src/app/shared/components/device/device-gateway-command.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.ts diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.html similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-configuration.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.html diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.scss similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-configuration.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.scss diff --git a/ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.ts similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-configuration.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.ts diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.html similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-connectors.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.html diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.scss similarity index 97% rename from ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.scss index 626f40672f..a39a83d166 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.scss @@ -24,7 +24,7 @@ width: 100%; &>mat-card, &>div { - min-width: 50%; + min-width: calc(50% - 15px); } mat-card { diff --git a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.ts similarity index 98% rename from ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.ts index d51633488a..778af21db8 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.ts @@ -34,9 +34,9 @@ import { MatSort } from '@angular/material/sort'; import { tap } from 'rxjs/operators'; import { TelemetryWebsocketService } from '@core/ws/telemetry-websocket.service'; import { MatTableDataSource } from '@angular/material/table'; -import { GatewayLogLevel } from '@shared/components/device/gateway-configuration.component'; +import { GatewayLogLevel } from '@home/components/widget/lib/device/gateway-configuration.component'; import { ActionNotificationShow } from '@core/notification/notification.actions'; -import { DialogService } from '@app/core/services/dialog.service'; +import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { deepClone } from '@core/utils'; import { NULL_UUID } from '@shared/models/id/has-uuid'; diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.html similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-logs.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.html diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.scss similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-logs.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.scss diff --git a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.ts similarity index 97% rename from ui-ngx/src/app/shared/components/device/gateway-logs.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.ts index eff5e67f19..d05bc53eaa 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.ts @@ -30,8 +30,8 @@ import { AttributeDatasource } from "@home/models/datasource/attribute-datasourc import { Direction, SortOrder } from "@shared/models/page/sort-order"; import { MatSort } from '@angular/material/sort'; import { MatTableDataSource } from '@angular/material/table'; -import { GatewayLogLevel } from '@shared/components/device/gateway-configuration.component'; -import { DialogService } from '@app/core/services/dialog.service'; +import { GatewayLogLevel } from '@home/components/widget/lib/device/gateway-configuration.component'; +import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.html similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.html diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.scss similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.scss diff --git a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.ts similarity index 98% rename from ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.ts index ab29766fd0..8468b483df 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.ts @@ -24,7 +24,7 @@ import { AttributeService } from '@core/http/attribute.service'; import { DeviceService } from '@core/http/device.service'; import { TranslateService } from '@ngx-translate/core'; import { PageComponent } from "@shared/components/page.component"; -import { DialogService } from '@app/core/services/dialog.service'; +import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { ContentType } from '@shared/models/constants'; import { diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.html similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-statistics.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.html diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.scss similarity index 100% rename from ui-ngx/src/app/shared/components/device/gateway-statistics.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.scss diff --git a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.ts similarity index 99% rename from ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.ts index 32956fb759..90e5541217 100644 --- a/ui-ngx/src/app/shared/components/device/gateway-statistics.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.ts @@ -25,7 +25,7 @@ import { DeviceService } from '@core/http/device.service'; import { TranslateService } from '@ngx-translate/core'; import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; import { PageComponent } from '@shared/components/page.component'; -import { DialogService } from '@app/core/services/dialog.service'; +import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { TbFlot } from '@home/components/widget/lib/flot-widget'; import { ResizeObserver } from '@juggle/resize-observer'; diff --git a/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts b/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts index ce2e7055cc..cad3d0b038 100644 --- a/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts @@ -43,6 +43,12 @@ import { HomePageWidgetsModule } from '@home/components/widget/lib/home-page/hom import { WIDGET_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; import { FlotWidgetComponent } from '@home/components/widget/lib/flot-widget.component'; import { LegendComponent } from '@home/components/widget/lib/legend.component'; +import { GatewayConnectorComponent } from '@home/components/widget/lib/device/gateway-connectors.component'; +import { GatewayLogsComponent } from '@home/components/widget/lib/device/gateway-logs.component'; +import { GatewayStatisticsComponent } from '@home/components/widget/lib/device/gateway-statistics.component'; +import { GatewayServiceRPCComponent } from '@home/components/widget/lib/device/gateway-service-rpc.component'; +import { DeviceGatewayCommandComponent } from '@home/components/widget/lib/device/device-gateway-command.component'; +import { GatewayConfigurationComponent } from '@home/components/widget/lib/device/gateway-configuration.component'; @NgModule({ declarations: @@ -66,7 +72,13 @@ import { LegendComponent } from '@home/components/widget/lib/legend.component'; MarkdownWidgetComponent, SelectEntityDialogComponent, LegendComponent, - FlotWidgetComponent + FlotWidgetComponent, + GatewayConnectorComponent, + GatewayLogsComponent, + GatewayStatisticsComponent, + GatewayServiceRPCComponent, + DeviceGatewayCommandComponent, + GatewayConfigurationComponent ], imports: [ CommonModule, @@ -94,7 +106,13 @@ import { LegendComponent } from '@home/components/widget/lib/legend.component'; QrCodeWidgetComponent, MarkdownWidgetComponent, LegendComponent, - FlotWidgetComponent + FlotWidgetComponent, + GatewayConnectorComponent, + GatewayLogsComponent, + GatewayStatisticsComponent, + GatewayServiceRPCComponent, + DeviceGatewayCommandComponent, + GatewayConfigurationComponent ], providers: [ {provide: WIDGET_COMPONENTS_MODULE_TOKEN, useValue: WidgetComponentsModule } diff --git a/ui-ngx/src/app/modules/home/pages/device/device.component.html b/ui-ngx/src/app/modules/home/pages/device/device.component.html index ce18e6ee16..e619fa9561 100644 --- a/ui-ngx/src/app/modules/home/pages/device/device.component.html +++ b/ui-ngx/src/app/modules/home/pages/device/device.component.html @@ -142,14 +142,11 @@ {{ 'device.overwrite-activity-time' | translate }}
+ + device.description + +
- -
- - device.description - - -
diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index 3cd8e37a50..4de39b89b5 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -177,13 +177,7 @@ import { NotificationComponent } from '@shared/components/notification/notificat import { TemplateAutocompleteComponent } from '@shared/components/notification/template-autocomplete.component'; import { SlackConversationAutocompleteComponent } from '@shared/components/slack-conversation-autocomplete.component'; import { DateAgoPipe } from '@shared/pipe/date-ago.pipe'; -import { DeviceGatewayCommandComponent } from '@shared/components/device/device-gateway-command.component'; -import { GatewayConfigurationComponent } from '@shared/components/device/gateway-configuration.component'; import { GatewayRemoteConfigurationDialogComponent } from '@shared/components/dialog/gateway-remote-configuration-dialog'; -import { GatewayConnectorComponent } from '@shared/components/device/gateway-connectors.component'; -import { GatewayLogsComponent } from '@shared/components/device/gateway-logs.component'; -import { GatewayStatisticsComponent } from '@shared/components/device/gateway-statistics.component'; -import { GatewayServiceRPCComponent } from '@shared/components/device/gateway-service-rpc.component'; import { TbBreakPointsProvider, MdLgLayoutDirective, @@ -270,12 +264,6 @@ export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, - DeviceGatewayCommandComponent, - GatewayConfigurationComponent, - GatewayConnectorComponent, - GatewayLogsComponent, - GatewayStatisticsComponent, - GatewayServiceRPCComponent, GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbSnackBarComponent, @@ -455,12 +443,6 @@ export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, - DeviceGatewayCommandComponent, - GatewayConfigurationComponent, - GatewayConnectorComponent, - GatewayLogsComponent, - GatewayStatisticsComponent, - GatewayServiceRPCComponent, GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbErrorComponent, From 4e658a05ff096c67de8f76fbc9e9ae4f481d0cae Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 30 Jun 2023 21:01:14 +0300 Subject: [PATCH 062/120] enableDataExport fix --- .../src/main/data/json/demo/dashboards/gateway_list.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 013c4e07c6..bcedbd85be 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -1398,7 +1398,7 @@ "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n }\r\n\r\n .status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n\r\n .status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n }\r\n \r\n .msg-status-exception {\r\n color: red;\r\n }", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": true + "enableDataExport": false }, "row": 0, "col": 0, @@ -1725,7 +1725,7 @@ "widgetCss": ".status {\r\n border-radius: 20px;\r\n font-weight: 500;\r\n padding: 5px 15px;\r\n }\r\n\r\n .status-debug {\r\n color: green;\r\n background: rgba(0, 128, 0, 0.1);\r\n }\r\n\r\n .status-warning {\r\n color: orange;\r\n background: rgba(255, 165, 0, 0.1);\r\n }\r\n\r\n .status-error {\r\n color: red;\r\n background: rgba(255, 0, 0, 0.1);\r\n }\r\n\r\n .status-info {\r\n color: blue;\r\n background: rgba(0, 0, 128, 0.1);\r\n }\r\n \r\n .msg-status-exception {\r\n color: red;\r\n }", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": true + "enableDataExport": false }, "row": 0, "col": 0, From 625712ad0eaa7605d61a56eaf37d558307a099e1 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 3 Jul 2023 11:56:58 +0300 Subject: [PATCH 063/120] folder rearranging --- ui-ngx/src/app/modules/common/modules-map.ts | 2 -- .../device-gateway-command.component.html | 0 .../device-gateway-command.component.ts | 0 .../gateway-configuration.component.html | 0 .../gateway-configuration.component.scss | 0 .../gateway-configuration.component.ts | 2 +- .../gateway-connectors.component.html | 0 .../gateway-connectors.component.scss | 0 .../gateway-connectors.component.ts | 2 +- .../gateway-logs.component.html | 0 .../gateway-logs.component.scss | 0 .../gateway-logs.component.ts | 2 +- .../gateway-remote-configuration-dialog.html | 0 .../gateway-remote-configuration-dialog.ts | 0 .../gateway-service-rpc.component.html | 0 .../gateway-service-rpc.component.scss | 0 .../gateway-service-rpc.component.ts | 0 .../gateway-statistics.component.html | 0 .../gateway-statistics.component.scss | 0 .../gateway-statistics.component.ts | 0 .../widget/widget-components.module.ts | 21 ++++++++++++------- ui-ngx/src/app/shared/shared.module.ts | 3 --- 22 files changed, 16 insertions(+), 16 deletions(-) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/device-gateway-command.component.html (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/device-gateway-command.component.ts (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-configuration.component.html (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-configuration.component.scss (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-configuration.component.ts (99%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-connectors.component.html (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-connectors.component.scss (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-connectors.component.ts (99%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-logs.component.html (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-logs.component.scss (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-logs.component.ts (98%) rename ui-ngx/src/app/{shared/components/dialog => modules/home/components/widget/lib/gateway}/gateway-remote-configuration-dialog.html (100%) rename ui-ngx/src/app/{shared/components/dialog => modules/home/components/widget/lib/gateway}/gateway-remote-configuration-dialog.ts (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-service-rpc.component.html (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-service-rpc.component.scss (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-service-rpc.component.ts (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-statistics.component.html (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-statistics.component.scss (100%) rename ui-ngx/src/app/modules/home/components/widget/lib/{device => gateway}/gateway-statistics.component.ts (100%) diff --git a/ui-ngx/src/app/modules/common/modules-map.ts b/ui-ngx/src/app/modules/common/modules-map.ts index e51ecc0e31..5cc9a49d42 100644 --- a/ui-ngx/src/app/modules/common/modules-map.ts +++ b/ui-ngx/src/app/modules/common/modules-map.ts @@ -300,7 +300,6 @@ import * as QueueFormComponent from '@home/components/queue/queue-form.component import * as AssetProfileComponent from '@home/components/profile/asset-profile.component'; import * as AssetProfileDialogComponent from '@home/components/profile/asset-profile-dialog.component'; import * as AssetProfileAutocompleteComponent from '@home/components/profile/asset-profile-autocomplete.component'; -import * as GatewayRemoteConfigurationDialogComponent from '@shared/components/dialog/gateway-remote-configuration-dialog'; import * as RuleChainSelectComponent from '@shared/components/rule-chain/rule-chain-select.component'; import { IModulesMap } from '@modules/common/modules-map.models'; @@ -408,7 +407,6 @@ class ModulesMap implements IModulesMap { '@shared/components/help.component': HelpComponent, '@shared/components/help-markdown.component': HelpMarkdownComponent, '@shared/components/help-popup.component': HelpPopupComponent, - '@shared/components/device/gateway-remote-configuration-dialog': GatewayRemoteConfigurationDialogComponent, '@shared/components/tb-checkbox.component': TbCheckboxComponent, '@shared/components/toast.directive': TbToast, '@shared/components/tb-error.component': TbErrorComponent, diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/device-gateway-command.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts similarity index 99% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 76a21a63ae..47a975ee25 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -26,7 +26,7 @@ import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; import { GatewayRemoteConfigurationDialogComponent, GatewayRemoteConfigurationDialogData -} from '@shared/components/dialog/gateway-remote-configuration-dialog'; +} from '@home/components/widget/lib/gateway/gateway-remote-configuration-dialog'; import { DeviceService } from '@core/http/device.service'; import { of } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts similarity index 99% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 778af21db8..6483535c44 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -34,7 +34,7 @@ import { MatSort } from '@angular/material/sort'; import { tap } from 'rxjs/operators'; import { TelemetryWebsocketService } from '@core/ws/telemetry-websocket.service'; import { MatTableDataSource } from '@angular/material/table'; -import { GatewayLogLevel } from '@home/components/widget/lib/device/gateway-configuration.component'; +import { GatewayLogLevel } from '@home/components/widget/lib/gateway/gateway-configuration.component'; import { ActionNotificationShow } from '@core/notification/notification.actions'; import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts similarity index 98% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts index d05bc53eaa..a0291a3ee0 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts @@ -30,7 +30,7 @@ import { AttributeDatasource } from "@home/models/datasource/attribute-datasourc import { Direction, SortOrder } from "@shared/models/page/sort-order"; import { MatSort } from '@angular/material/sort'; import { MatTableDataSource } from '@angular/material/table'; -import { GatewayLogLevel } from '@home/components/widget/lib/device/gateway-configuration.component'; +import { GatewayLogLevel } from '@home/components/widget/lib/gateway/gateway-configuration.component'; import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.html similarity index 100% rename from ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.html diff --git a/ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.ts similarity index 100% rename from ui-ngx/src/app/shared/components/dialog/gateway-remote-configuration-dialog.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-remote-configuration-dialog.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-service-rpc.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.html similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.html rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.html diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.scss similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.scss rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.scss diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.ts similarity index 100% rename from ui-ngx/src/app/modules/home/components/widget/lib/device/gateway-statistics.component.ts rename to ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-statistics.component.ts diff --git a/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts b/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts index cad3d0b038..7f509be51d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/widget/widget-components.module.ts @@ -43,12 +43,15 @@ import { HomePageWidgetsModule } from '@home/components/widget/lib/home-page/hom import { WIDGET_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; import { FlotWidgetComponent } from '@home/components/widget/lib/flot-widget.component'; import { LegendComponent } from '@home/components/widget/lib/legend.component'; -import { GatewayConnectorComponent } from '@home/components/widget/lib/device/gateway-connectors.component'; -import { GatewayLogsComponent } from '@home/components/widget/lib/device/gateway-logs.component'; -import { GatewayStatisticsComponent } from '@home/components/widget/lib/device/gateway-statistics.component'; -import { GatewayServiceRPCComponent } from '@home/components/widget/lib/device/gateway-service-rpc.component'; -import { DeviceGatewayCommandComponent } from '@home/components/widget/lib/device/device-gateway-command.component'; -import { GatewayConfigurationComponent } from '@home/components/widget/lib/device/gateway-configuration.component'; +import { GatewayConnectorComponent } from '@home/components/widget/lib/gateway/gateway-connectors.component'; +import { GatewayLogsComponent } from '@home/components/widget/lib/gateway/gateway-logs.component'; +import { GatewayStatisticsComponent } from '@home/components/widget/lib/gateway/gateway-statistics.component'; +import { GatewayServiceRPCComponent } from '@home/components/widget/lib/gateway/gateway-service-rpc.component'; +import { DeviceGatewayCommandComponent } from '@home/components/widget/lib/gateway/device-gateway-command.component'; +import { GatewayConfigurationComponent } from '@home/components/widget/lib/gateway/gateway-configuration.component'; +import { + GatewayRemoteConfigurationDialogComponent +} from '@home/components/widget/lib/gateway/gateway-remote-configuration-dialog'; @NgModule({ declarations: @@ -78,7 +81,8 @@ import { GatewayConfigurationComponent } from '@home/components/widget/lib/devic GatewayStatisticsComponent, GatewayServiceRPCComponent, DeviceGatewayCommandComponent, - GatewayConfigurationComponent + GatewayConfigurationComponent, + GatewayRemoteConfigurationDialogComponent ], imports: [ CommonModule, @@ -112,7 +116,8 @@ import { GatewayConfigurationComponent } from '@home/components/widget/lib/devic GatewayStatisticsComponent, GatewayServiceRPCComponent, DeviceGatewayCommandComponent, - GatewayConfigurationComponent + GatewayConfigurationComponent, + GatewayRemoteConfigurationDialogComponent ], providers: [ {provide: WIDGET_COMPONENTS_MODULE_TOKEN, useValue: WidgetComponentsModule } diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index 4de39b89b5..220a7bc4c4 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -177,7 +177,6 @@ import { NotificationComponent } from '@shared/components/notification/notificat import { TemplateAutocompleteComponent } from '@shared/components/notification/template-autocomplete.component'; import { SlackConversationAutocompleteComponent } from '@shared/components/slack-conversation-autocomplete.component'; import { DateAgoPipe } from '@shared/pipe/date-ago.pipe'; -import { GatewayRemoteConfigurationDialogComponent } from '@shared/components/dialog/gateway-remote-configuration-dialog'; import { TbBreakPointsProvider, MdLgLayoutDirective, @@ -264,7 +263,6 @@ export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, - GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbSnackBarComponent, TbErrorComponent, @@ -443,7 +441,6 @@ export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) HelpComponent, HelpMarkdownComponent, HelpPopupComponent, - GatewayRemoteConfigurationDialogComponent, TbCheckboxComponent, TbErrorComponent, TbCheatSheetComponent, From 53b47891fca61369ca97009f042fbb750833c3ae Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 3 Jul 2023 12:12:03 +0300 Subject: [PATCH 064/120] dashboard update --- .../json/demo/dashboards/gateway_list.json | 75 +++++++++++++------ 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index bcedbd85be..b643dd0442 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -560,7 +560,8 @@ "margin": "0", "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -709,7 +710,8 @@ "severityList": [], "typeList": [], "searchPropagatedAlarms": false - } + }, + "enableDataExport": false }, "row": 0, "col": 0, @@ -770,6 +772,7 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", + "enableDataExport": false, "showLegend": false, "useDashboardTimewindow": false, "displayTimewindow": true, @@ -841,6 +844,7 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", + "enableDataExport": false, "showLegend": false, "useDashboardTimewindow": false, "displayTimewindow": true, @@ -964,6 +968,7 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", + "enableDataExport": false, "showLegend": false, "legendConfig": { "direction": "column", @@ -1262,6 +1267,7 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", + "enableDataExport": false, "showLegend": false, "legendConfig": { "direction": "row", @@ -1554,6 +1560,7 @@ }, "pageSize": 1024, "noDataDisplayMessage": "", + "enableDataExport": false, "showLegend": false }, "row": 0, @@ -1598,6 +1605,7 @@ }, "pageSize": 1024, "noDataDisplayMessage": "", + "enableDataExport": false, "showLegend": false }, "row": 0, @@ -1900,7 +1908,8 @@ }, "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2083,7 +2092,8 @@ }, "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2166,7 +2176,8 @@ "displayTimewindow": true, "widgetCss": "", "pageSize": 1024, - "noDataDisplayMessage": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2323,7 +2334,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2480,7 +2492,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2637,7 +2650,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2794,7 +2808,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -2951,7 +2966,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -3108,7 +3124,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -3265,7 +3282,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -3422,7 +3440,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -3579,7 +3598,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -3736,7 +3756,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -3893,7 +3914,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4050,7 +4072,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4207,7 +4230,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4364,7 +4388,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4521,7 +4546,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4678,7 +4704,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4835,7 +4862,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, @@ -4992,7 +5020,8 @@ }, "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": "" + "noDataDisplayMessage": "", + "enableDataExport": false }, "row": 0, "col": 0, From a59f643f86fe007b9bd1a032058895a8b460c22f Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 4 Jul 2023 15:16:55 +0300 Subject: [PATCH 065/120] shared modules revert --- ui-ngx/src/app/shared/shared.module.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/shared/shared.module.ts b/ui-ngx/src/app/shared/shared.module.ts index 220a7bc4c4..3b371c8aae 100644 --- a/ui-ngx/src/app/shared/shared.module.ts +++ b/ui-ngx/src/app/shared/shared.module.ts @@ -193,8 +193,9 @@ import { ShortNumberPipe } from '@shared/pipe/short-number.pipe'; import { ToggleHeaderComponent } from '@shared/components/toggle-header.component'; import { RuleChainSelectComponent } from '@shared/components/rule-chain/rule-chain-select.component'; -export const MarkedOptionsFactory = (markedOptionsService: MarkedOptionsService) => markedOptionsService; - +export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService) { + return markedOptionsService; +} @NgModule({ providers: [ From 37c9de1f88dacc49ba1c8985d1a738fe71c87d9e Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 6 Jul 2023 14:34:08 +0300 Subject: [PATCH 066/120] removed modals from source code and moved into dashboard configuration --- .../json/demo/dashboards/gateway_list.json | 158 ++++++++++++++++-- .../shared-home-components.module.ts | 4 +- .../widget/dialog/custom-dialog.service.ts | 5 +- 3 files changed, 147 insertions(+), 20 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index b643dd0442..5f6c9b4cc8 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -174,12 +174,16 @@ "icon": "settings", "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", - "type": "customPretty", - "customHtml": "
\n \n
\n", - "customCss": ".container {\n width: 800px;\n height: 80vh;\n}\n\n.container-mobile {\n height: 100%;\n}", - "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.ctx = widgetContext;\r\n vm.entityId = entityId;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", - "customResources": [], - "openInSeparateDialog": false, + "type": "openDashboardState", + "targetDashboardStateId": "configuration", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "dialogTitle": "Gateway configuration", + "dialogHideDashboardToolbar": true, + "dialogWidth": null, + "dialogHeight": null, + "openInSeparateDialog": true, "openInPopover": false, "id": "c0c8eb55-48c6-8a4e-ad9a-427507e86916" }, @@ -1895,12 +1899,16 @@ "icon": "more_horiz", "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", - "type": "customPretty", - "customHtml": "
\r\n \r\n

gateway.command

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
", - "customCss": "/*=======================================================================*/\r\n/*========== There are two examples: for edit and add entity ==========*/\r\n/*=======================================================================*/\r\n/*======================== Edit entity example ========================*/\r\n/*=======================================================================*/\r\n/*\r\n.edit-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.edit-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n/*========================================================================*/\r\n/*========================= Add entity example =========================*/\r\n/*========================================================================*/\r\n/*\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n", - "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n deviceService.getDeviceCredentials(entityId.id).subscribe(credentials => {\r\n data.credentials = credentials;\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n });\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.data = data;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", - "customResources": [], - "openInSeparateDialog": false, + "type": "openDashboardState", + "targetDashboardStateId": "launch_command", + "setEntityId": true, + "stateEntityParamName": "", + "openRightLayout": false, + "dialogTitle": "Launch command", + "dialogHideDashboardToolbar": true, + "dialogWidth": null, + "dialogHeight": 35, + "openInSeparateDialog": true, "openInPopover": false, "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" } @@ -5026,6 +5034,101 @@ "row": 0, "col": 0, "id": "75b6372d-4def-42b4-8774-4edf413a8b83" + }, + "dfda1a57-6c04-3482-2054-84954bbef626": { + "isSystemType": true, + "bundleAlias": "cards", + "typeAlias": "markdown_card", + "type": "latest", + "title": "New widget", + "image": null, + "description": null, + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": null, + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "filterId": null, + "dataKeys": [] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY" + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1685437116892, + "endTimeMs": 1685523516892 + }, + "quickInterval": "CURRENT_DAY" + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "useMarkdownTextFunction": true, + "markdownTextFunction": "return `
\n\n
`;", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".action-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: center;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" + }, + "title": "New Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "actions": { + "elementClick": [ + { + "name": "Launch command", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "customPretty", + "customHtml": "
\r\n \r\n

gateway.command

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
", + "customCss": "/*=======================================================================*/\r\n/*========== There are two examples: for edit and add entity ==========*/\r\n/*=======================================================================*/\r\n/*======================== Edit entity example ========================*/\r\n/*=======================================================================*/\r\n/*\r\n.edit-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.edit-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n/*========================================================================*/\r\n/*========================= Add entity example =========================*/\r\n/*========================================================================*/\r\n/*\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n deviceService.getDeviceCredentials(entityId.id).subscribe(credentials => {\r\n data.credentials = credentials;\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n });\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.data = data;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", + "customResources": [], + "openInSeparateDialog": false, + "openInPopover": false, + "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" + } + ] + }, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "dfda1a57-6c04-3482-2054-84954bbef626" } }, "states": { @@ -5073,7 +5176,7 @@ "gridSettings": { "backgroundColor": "#eeeeee", "columns": 24, - "margin": 10, + "margin": 0, "backgroundSizeMode": "100%", "autoFillHeight": true, "backgroundImageUrl": null, @@ -5855,6 +5958,33 @@ } } } + }, + "launch_command": { + "name": "launch command", + "root": false, + "layouts": { + "main": { + "widgets": { + "dfda1a57-6c04-3482-2054-84954bbef626": { + "sizeX": 24, + "sizeY": 3, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 0, + "outerMargin": true, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } } }, "entityAliases": { @@ -6582,7 +6712,7 @@ "selectedTab": 1, "history": { "historyType": 0, - "timewindowMs": 43200000, + "timewindowMs": 300000, "interval": 120000, "fixedTimewindow": { "startTimeMs": 1686306375309.7058, diff --git a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts index 45ee713d10..865e7cf224 100644 --- a/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts +++ b/ui-ngx/src/app/modules/home/components/shared-home-components.module.ts @@ -19,7 +19,6 @@ import { CommonModule } from '@angular/common'; import { SharedModule } from '@app/shared/shared.module'; import { AlarmDetailsDialogComponent } from '@home/components/alarm/alarm-details-dialog.component'; import { SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; -import { DeviceCredentialsModule } from "@home/components/device/device-credentials.module"; import { AlarmCommentComponent } from '@home/components/alarm/alarm-comment.component'; import { AlarmCommentDialogComponent } from '@home/components/alarm/alarm-comment-dialog.component'; import { AlarmAssigneeComponent } from '@home/components/alarm/alarm-assignee.component'; @@ -37,8 +36,7 @@ import { AlarmAssigneeComponent } from '@home/components/alarm/alarm-assignee.co ], imports: [ CommonModule, - SharedModule, - DeviceCredentialsModule + SharedModule ], exports: [ AlarmDetailsDialogComponent, diff --git a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts index 461d8feeeb..c18367d864 100644 --- a/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts +++ b/ui-ngx/src/app/modules/home/components/widget/dialog/custom-dialog.service.ts @@ -28,7 +28,7 @@ import { CustomDialogContainerData } from '@home/components/widget/dialog/custom-dialog-container.component'; import { SHARED_MODULE_TOKEN } from '@shared/components/tokens'; -import { HOME_COMPONENTS_MODULE_TOKEN, SHARED_HOME_COMPONENTS_MODULE_TOKEN, WIDGET_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; +import { HOME_COMPONENTS_MODULE_TOKEN, SHARED_HOME_COMPONENTS_MODULE_TOKEN } from '@home/components/tokens'; @Injectable() export class CustomDialogService { @@ -42,7 +42,6 @@ export class CustomDialogService { @Inject(SHARED_MODULE_TOKEN) private sharedModule: Type, @Inject(SHARED_HOME_COMPONENTS_MODULE_TOKEN) private sharedHomeComponentsModule: Type, @Inject(HOME_COMPONENTS_MODULE_TOKEN) private homeComponentsModule: Type, - @Inject(WIDGET_COMPONENTS_MODULE_TOKEN) private widgetComponentsModule: Type, public dialog: MatDialog ) { } @@ -53,7 +52,7 @@ export class CustomDialogService { customDialog(template: string, controller: (instance: CustomDialogComponent) => void, data?: any, config?: MatDialogConfig): Observable { - const modules = [this.sharedModule, CommonModule, this.sharedHomeComponentsModule, this.homeComponentsModule, this.widgetComponentsModule]; + const modules = [this.sharedModule, CommonModule, this.sharedHomeComponentsModule, this.homeComponentsModule]; if (Array.isArray(this.customModules)) { modules.push(...this.customModules); } From e1f18f16af1f1a1420a24d24cbe70b5cc3526e43 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Sun, 16 Jul 2023 16:08:18 +0300 Subject: [PATCH 067/120] reuse of existing components --- .../json/demo/dashboards/gateway_list.json | 6 +- .../device-gateway-command.component.html | 84 +- .../device-gateway-command.component.scss | 95 ++ .../device-gateway-command.component.ts | 2 +- .../gateway-configuration.component.html | 817 +++++++++--------- .../gateway-configuration.component.scss | 82 +- .../gateway-configuration.component.ts | 15 + 7 files changed, 590 insertions(+), 511 deletions(-) create mode 100644 ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 5f6c9b4cc8..cae7d54bb9 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -1907,7 +1907,7 @@ "dialogTitle": "Launch command", "dialogHideDashboardToolbar": true, "dialogWidth": null, - "dialogHeight": 35, + "dialogHeight": 40, "openInSeparateDialog": true, "openInPopover": false, "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" @@ -5087,14 +5087,14 @@ "useMarkdownTextFunction": true, "markdownTextFunction": "return `
\n\n
`;", "applyDefaultMarkdownStyle": false, - "markdownCss": ".action-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: center;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" + "markdownCss": ".action-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n}" }, "title": "New Markdown/HTML Card", "showTitleIcon": false, "iconColor": "rgba(0, 0, 0, 0.87)", "iconSize": "24px", "titleTooltip": "", - "dropShadow": true, + "dropShadow": false, "enableFullscreen": false, "widgetStyle": {}, "titleStyle": { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html index a5cc2bcf37..7a58c51852 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html @@ -17,39 +17,57 @@ -->
{{ 'gateway.docker-label' | translate }} -
- - gateway.windows - gateway.linux-macos - +
+ + Windows + Linux/MacOS +
-
-
-
{{ linuxCode }}
- -
-
-
-
-
{{ windowsCode }}
- -
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss new file mode 100644 index 0000000000..023744b827 --- /dev/null +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss @@ -0,0 +1,95 @@ +/** + * Copyright © 2016-2023 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. + */ +:host { + width: 100%; + height: 100%; + display: block; + + ::ng-deep.tb-markdown-view { + .start-code { + .code-wrapper { + padding: 0; + + pre[class*=language-] { + margin: 0; + padding: 9px 38px 9px 16px; + background: rgba(0, 0, 0, 0.03); + border-radius: 6px; + border: none; + } + + code[class*="language-"], pre[class*="language-"] { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + letter-spacing: 0.25px; + color: rgba(0, 0, 0, 0.38); + overflow: hidden; + white-space: break-spaces; + word-break: break-all; + + & * { + color: rgba(0, 0, 0, 0.38); + cursor: inherit; + background: transparent; + } + } + + button.clipboard-btn { + right: 0; + height: 34px; + + p, div { + background: transparent; + } + + p { + margin: 0; + padding: 7px; + color: #305680; + } + + div { + top: 0; + padding: 8px; + height: 34px; + width: 34px; + + img { + display: none; + } + + &:after { + content: ""; + position: initial; + display: block; + width: 18px; + height: 18px; + background: #305680; + -webkit-mask-image: url(/assets/copy-code-icon.svg); + -webkit-mask-repeat: no-repeat; + mask-image: url(/assets/copy-code-icon.svg); + mask-repeat: no-repeat; + } + } + } + } + } + } +} + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index 8e65324720..33d6e7ef24 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -33,7 +33,7 @@ enum OsType { @Component({ selector: 'tb-gateway-command', templateUrl: './device-gateway-command.component.html', - styleUrls: [] + styleUrls: ['./device-gateway-command.component.scss'] }) export class DeviceGatewayCommandComponent implements OnInit { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html index f497dd4f0e..4fd39528ae 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html @@ -26,27 +26,26 @@ close - +
- - +
{{ 'gateway.remote-configuration' | translate }} - info {{ 'gateway.remote-shell' | translate }} - info - + gateway.thingsboard-host - + gateway.thingsboard-port - + {{'gateway.thingsboard-port-required' | translate }} @@ -72,399 +71,410 @@ {{'gateway.thingsboard-port-pattern' | translate }} - info_outlined
- - - - security.security - -
- - - {{ securityType.value | translate }} - - - - security.access-token - - - {{'security.access-token-required' | translate}} - - info_outlined - - - - security.clientId - - - {{'security.clientId-required' | translate}} - - info_outlined - - - - security.username - - - {{'security.username-required' | translate}} - - info_outlined - - - - security.password - - info_outlined - - - - - - - - +
+
+
security.security
+
+ + {{ securityType.value | translate }} + +
+ + security.access-token + + + {{'security.access-token-required' | translate}} + + info_outlined + + + + security.clientId + + + {{'security.clientId-required' | translate}} + + info_outlined + + + + security.username + + + {{'security.username-required' | translate}} + + info_outlined + + + + security.password + + info_outlined + + + + + + + + +
- - +
- - +
- + gateway.logs.date-format {{'gateway.logs.date-format-required' | translate }} - info_outlined - + gateway.logs.log-format {{'gateway.logs.log-format-required' | translate }} - info_outlined
- - - - gateway.logs.remote - +
+
+
gateway.logs.remote
{{ 'gateway.logs.remote-logs' | translate }} - info - + gateway.logs.level {{logLevel}} - - - - gateway.logs.local - - - - {{ logConfig.value }} - - -
- - gateway.logs.level - - {{logLevel}} - - - - gateway.logs.file-path - - - {{'gateway.logs.file-path-required' | translate }} - - -
- - gateway.logs.saving-period - +
+
+
gateway.logs.local
+
+ + {{ logConfig.value }} + +
+ + gateway.logs.level + + {{logLevel}} + + + + gateway.logs.file-path + + + {{'gateway.logs.file-path-required' | translate }} + + +
+ + gateway.logs.saving-period + + + {{'gateway.logs.saving-period-required' | translate }} + + + {{'gateway.logs.saving-period-min' | translate }} + + + + + + + {{period.value | translate}} + + + +
+ + gateway.logs.backup-count + - {{'gateway.logs.saving-period-required' | translate }} + *ngIf="gatewayConfigGroup.get('logs.local.' + logSelector.value + '.backupCount').hasError('required')"> + {{'gateway.logs.backup-count-required' | translate }} - {{'gateway.logs.saving-period-min' | translate }} + *ngIf="gatewayConfigGroup.get('logs.local.' + logSelector.value + '.backupCount').hasError('min')"> + {{'gateway.logs.backup-count-min' | translate }} - - - - - - {{period.value | translate}} - - + info_outlined +
- - gateway.logs.backup-count - - - {{'gateway.logs.backup-count-required' | translate }} - - - {{'gateway.logs.backup-count-min' | translate }} - - info_outlined - -
- - +
- - - - gateway.storage +
+
gateway.storage {{'gateway.hints.storage' | translate}} - - -
- - - {{ storageType.value | translate }} - -
- - {{'gateway.hints.'+gatewayConfigGroup.get('storage.type').value | translate}} -
- - gateway.storage-read-record-count - - - {{'gateway.storage-read-record-count-required' | translate}} - - - {{'gateway.storage-read-record-count-min' | translate}} - - - {{'gateway.storage-read-record-count-pattern' | translate}} - - info_outlined - - - - gateway.storage-max-records - - - {{'gateway.storage-max-records-required' | translate}} - - - {{'gateway.storage-max-records-min' | translate}} - - - {{'gateway.storage-max-records-pattern' | translate}} - - info_outlined - - - - gateway.storage-data-folder-path - - - {{'gateway.storage-data-folder-path-required' | translate}} - - info_outlined - - - - gateway.storage-max-files - - - {{'gateway.storage-max-files-required' | translate}} - - - {{'gateway.storage-max-files-min' | translate}} - - - {{'gateway.storage-max-files-pattern' | translate}} - - info_outlined - - - - gateway.storage-max-read-record-count - - - {{'gateway.storage-max-read-record-count-required' | translate}} - - - {{'gateway.storage-max-read-record-count-min' | translate}} - - - {{'gateway.storage-max-read-record-count-pattern' | translate}} - - info_outlined - - - - gateway.storage-max-file-records - - - {{'gateway.storage-max-records-required' | translate}} - - - {{'gateway.storage-max-records-min' | translate}} - - - {{'gateway.storage-max-records-pattern' | translate}} - - info_outlined - - - - gateway.storage-path - - - {{'gateway.storage-path-required' | translate}} - - info_outlined - - - - gateway.messages-ttl-check-in-hours - - - {{'gateway.messages-ttl-check-in-hours-required' | translate}} - - - {{'gateway.messages-ttl-check-in-hours-min' | translate}} - - - {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} - - info_outlined - - - - gateway.messages-ttl-in-days - - - {{'gateway.messages-ttl-in-days-required' | translate}} - - - {{'gateway.messages-ttl-in-days-min' | translate}} - - - {{'gateway.messages-ttl-in-days-pattern' | translate}} - - info_outlined - - +
+
+ + + {{ storageType.value | translate }} + + +
+ + {{'gateway.hints.' + gatewayConfigGroup.get('storage.type').value | translate}} +
+ + gateway.storage-read-record-count + + + {{'gateway.storage-read-record-count-required' | translate}} + + + {{'gateway.storage-read-record-count-min' | translate}} + + + {{'gateway.storage-read-record-count-pattern' | translate}} + + info_outlined + + + + gateway.storage-max-records + + + {{'gateway.storage-max-records-required' | translate}} + + + {{'gateway.storage-max-records-min' | translate}} + + + {{'gateway.storage-max-records-pattern' | translate}} + + info_outlined + + + + gateway.storage-data-folder-path + + + {{'gateway.storage-data-folder-path-required' | translate}} + + info_outlined + + + + gateway.storage-max-files + + + {{'gateway.storage-max-files-required' | translate}} + + + {{'gateway.storage-max-files-min' | translate}} + + + {{'gateway.storage-max-files-pattern' | translate}} + + info_outlined + + + + gateway.storage-max-read-record-count + + + {{'gateway.storage-max-read-record-count-required' | translate}} + + + {{'gateway.storage-max-read-record-count-min' | translate}} + + + {{'gateway.storage-max-read-record-count-pattern' | translate}} + + info_outlined + + + + gateway.storage-max-file-records + + + {{'gateway.storage-max-records-required' | translate}} + + + {{'gateway.storage-max-records-min' | translate}} + + + {{'gateway.storage-max-records-pattern' | translate}} + + info_outlined + + + + gateway.storage-path + + + {{'gateway.storage-path-required' | translate}} + + info_outlined + + + + gateway.messages-ttl-check-in-hours + + + {{'gateway.messages-ttl-check-in-hours-required' | translate}} + + + {{'gateway.messages-ttl-check-in-hours-min' | translate}} + + + {{'gateway.messages-ttl-check-in-hours-pattern' | translate}} + + info_outlined + + + + gateway.messages-ttl-in-days + + + {{'gateway.messages-ttl-in-days-required' | translate}} + + + {{'gateway.messages-ttl-in-days-min' | translate}} + + + {{'gateway.messages-ttl-in-days-pattern' | translate}} + + info_outlined + + +
- - +
- - +
{{ 'gateway.grpc' | translate }} @@ -472,9 +482,9 @@ {{ 'gateway.permit-without-calls' | translate }} - + gateway.server-port - + {{'gateway.thingsboard-port-required' | translate }} @@ -488,9 +498,9 @@ {{'gateway.thingsboard-port-pattern' | translate }} - + gateway.grpc-keep-alive-timeout - + {{'gateway.grpc-keep-alive-timeout-required' | translate }} @@ -501,9 +511,9 @@ {{'gateway.grpc-keep-alive-timeout-pattern' | translate }} - + gateway.grpc-keep-alive - + {{'gateway.grpc-keep-alive-required' | translate }} @@ -514,9 +524,9 @@ {{'gateway.grpc-keep-alive-pattern' | translate }} - + gateway.grpc-min-time-between-pings - + {{'gateway.grpc-min-time-between-pings-required' | translate }} @@ -527,9 +537,9 @@ {{'gateway.grpc-min-time-between-pings-pattern' | translate }} - + gateway.grpc-max-pings-without-data - + {{'gateway.grpc-max-pings-without-data-required' | translate }} @@ -540,9 +550,9 @@ {{'gateway.grpc-max-pings-without-data-pattern' | translate }} - + gateway.grpc-min-ping-interval-without-data - + {{'gateway.grpc-min-ping-interval-without-data-required' | translate }} @@ -554,21 +564,19 @@
- - +
- - +
{{ 'gateway.statistics.statistics' | translate }} - + gateway.statistics.send-period - + {{'gateway.statistics.send-period-required' | translate }} @@ -583,33 +591,33 @@
- - - - {{"gateway.statistics.commands" |translate}} +
+
+
{{"gateway.statistics.commands" |translate}} - {{'gateway.hints.commands' | translate}} - + {{'gateway.hints.commands' | translate}}
-
- - + + gateway.statistics.attribute-name {{'gateway.statistics.attribute-name-required' | translate }} - info_outlined - + gateway.statistics.timeout - + {{'gateway.statistics.timeout-required' | translate }} @@ -622,19 +630,22 @@ *ngIf="commandControl.get('timeout').hasError('pattern')"> {{'gateway.statistics.timeout-pattern' | translate }} - info_outlined - + gateway.statistics.command {{'gateway.statistics.command-required' | translate }} - info_outlined @@ -655,28 +666,26 @@ {{ 'gateway.statistics.add' | translate }}
- - +
- - - - +
+
{{ 'gateway.checking-device-activity' | translate }} - {{'gateway.hints.check-device-activity' | translate}} - - + {{'gateway.hints.check-device-activity' | translate}} +
gateway.inactivity-timeout-seconds - + {{'gateway.inactivity-timeout-seconds-required' | translate }} @@ -685,12 +694,14 @@ *ngIf="gatewayConfigGroup.get('thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds').hasError('min')"> {{'gateway.inactivity-timeout-seconds-min' | translate }} - info_outlined gateway.inactivity-check-period-seconds @@ -703,33 +714,33 @@ *ngIf="gatewayConfigGroup.get('thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds').hasError('min')"> {{'gateway.inactivity-check-period-seconds-min' | translate }} - info_outlined
- - - - gateway.advanced - +
+
+
gateway.advanced
- + gateway.min-pack-send-delay - + {{ 'gateway.min-pack-send-delay-required' | translate }} {{ 'gateway.min-pack-send-delay-min' | translate }} - info_outlined - + gateway.mqtt-qos @@ -741,14 +752,15 @@ {{ 'gateway.mqtt-qos-range' | translate}} - info_outlined - + gateway.statistics.check-connectors-configuration - + {{'gateway.statistics.check-connectors-configuration-required' | translate }} @@ -763,9 +775,8 @@
- +
-
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss index ee546ff9a7..3460d28745 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss @@ -22,6 +22,10 @@ color: rgba(0, 0, 0, .12); } + .tb-form-panel { + margin-bottom: 20px; + } + .mat-toolbar { background: transparent; color: rgba(0, 0, 0, .87) !important; @@ -41,6 +45,11 @@ margin-right: 15px; } + .slider-icon { + position: absolute; + transform: translateY(-3px); + } + .block-title { font-size: 20px; font-weight: 400; @@ -53,41 +62,11 @@ } .security-toggle-group { - padding-bottom: 0; - background: transparent !important; margin-bottom: 15px; - border: none; - overflow: auto; - - .mat-button-toggle { - border-radius: 15px; - border: 1px solid rgba(0, 0, 0, 0); - background: rgba(0, 0, 0, .05); - margin: 5px; - color: rgba(0, 0, 0, .2); - font-weight: 500; - } - - .mat-button-toggle-checked { - border-radius: 15px; - border: 1px solid #305680; - background: white; - color: #305680; - } + margin-right: auto; ::ng-deep span { - text-transform: capitalize; - line-height: 20px; - font-size: 13px; - padding: 5px 25px; - } - - ::ng-deep .mat-button-toggle-ripple { - border-radius: 15px; - } - - ::ng-deep .mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay { - opacity: 0 !important; + padding: 0 25px; } } @@ -96,41 +75,6 @@ margin-bottom: 10px; } - .logs-toggle-group { - border: none; - border-radius: 15px; - background: rgba(0, 0, 0, .05); - color: rgba(0, 0, 0, .2); - font-weight: 500; - - .mat-button-toggle { - border: none; - background: rgba(0, 0, 0, .0); - color: rgba(0, 0, 0, .2); - font-weight: 500; - } - - .mat-button-toggle-checked { - border-radius: 15px; - color: white; - background: #305680; - } - - ::ng-deep span { - line-height: 20px; - font-size: 13px; - padding: 5px 25px; - } - - ::ng-deep .mat-button-toggle-ripple { - border-radius: 15px; - } - - ::ng-deep .mat-button-toggle-appearance-standard:not(.mat-button-toggle-disabled):hover .mat-button-toggle-focus-overlay { - opacity: 0 !important; - } - } - .statistics-block { margin-bottom: 15px; padding-left: 15px; @@ -167,10 +111,6 @@ z-index: 100; } - .suffix-icon { - position: absolute; - transform: translateY(-3px); - } mat-panel-title { display: block; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 47a975ee25..6966fa7f52 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -133,6 +133,8 @@ export class GatewayConfigurationComponent implements OnInit { logSelector: FormControl; + securityType: SecurityTypes; + constructor(protected router: Router, protected store: Store, @@ -259,6 +261,7 @@ export class GatewayConfigurationComponent implements OnInit { const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; securityGroup.get('type').valueChanges.subscribe(type => { this.removeAllSecurityValidators(); + console.log(type); if (type === SecurityTypes.ACCESS_TOKEN) { securityGroup.get('accessToken').addValidators([Validators.required]); securityGroup.get('accessToken').updateValueAndValidity(); @@ -317,6 +320,18 @@ export class GatewayConfigurationComponent implements OnInit { this.fetchConfigAttribute(this.device); } + updateSecurityValidators(value: SecurityTypes) { + this.gatewayConfigGroup.get('thingsboard.security.type').setValue(value, {emitEvent: true}); + } + + updateLogType(value: LocalLogsConfigs) { + this.logSelector.setValue(value); + } + + updateStorageType(value: StorageTypes) { + this.gatewayConfigGroup.get('storage.type').setValue(value, {emitEvent: true}) + } + fetchConfigAttribute(entityId: EntityId) { if (entityId.id === NULL_UUID) return; this.attributeService.getEntityAttributes(entityId, AttributeScope.CLIENT_SCOPE, From f13badabc548f9ab0e287b42c79a82f9d9935114 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 17 Jul 2023 17:48:36 +0300 Subject: [PATCH 068/120] updates and improvements --- .../json/demo/dashboards/gateway_list.json | 16 ++-- .../device-gateway-command.component.html | 28 ------- .../device-gateway-command.component.scss | 77 ++----------------- .../device-gateway-command.component.ts | 4 +- .../gateway-configuration.component.scss | 8 +- .../gateway/gateway-connectors.component.scss | 8 -- 6 files changed, 22 insertions(+), 119 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index cae7d54bb9..bef5ae175e 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -160,12 +160,16 @@ "icon": "terminal", "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", - "type": "customPretty", - "customHtml": "
\r\n \r\n

gateway.command

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
", - "customCss": "/*=======================================================================*/\r\n/*========== There are two examples: for edit and add entity ==========*/\r\n/*=======================================================================*/\r\n/*======================== Edit entity example ========================*/\r\n/*=======================================================================*/\r\n/*\r\n.edit-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.edit-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n/*========================================================================*/\r\n/*========================= Add entity example =========================*/\r\n/*========================================================================*/\r\n/*\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n*/\r\n", - "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet data = {};\r\n\r\nopenEditEntityDialog();\r\n\r\nfunction openEditEntityDialog() {\r\n deviceService.getDeviceCredentials(entityId.id).subscribe(credentials => {\r\n data.credentials = credentials;\r\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\r\n });\r\n}\r\n\r\nfunction EditEntityDialogController(instance) {\r\n let vm = instance;\r\n vm.data = data;\r\n\r\n vm.close = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n}", - "customResources": [], - "openInSeparateDialog": false, + "type": "openDashboardState", + "targetDashboardStateId": "launch_command", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "dialogTitle": "Docker commands", + "dialogHideDashboardToolbar": true, + "dialogWidth": null, + "dialogHeight": 40, + "openInSeparateDialog": true, "openInPopover": false, "id": "ae2e5995-505f-a241-5fb2-6cbaf08b1b55" }, diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html index 7a58c51852..24c06f4e67 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html @@ -42,32 +42,4 @@ "> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss index 023744b827..1bfaf33cfe 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss @@ -18,78 +18,11 @@ height: 100%; display: block; - ::ng-deep.tb-markdown-view { - .start-code { - .code-wrapper { - padding: 0; - - pre[class*=language-] { - margin: 0; - padding: 9px 38px 9px 16px; - background: rgba(0, 0, 0, 0.03); - border-radius: 6px; - border: none; - } - - code[class*="language-"], pre[class*="language-"] { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-size: 12px; - line-height: 16px; - letter-spacing: 0.25px; - color: rgba(0, 0, 0, 0.38); - overflow: hidden; - white-space: break-spaces; - word-break: break-all; - - & * { - color: rgba(0, 0, 0, 0.38); - cursor: inherit; - background: transparent; - } - } - - button.clipboard-btn { - right: 0; - height: 34px; - - p, div { - background: transparent; - } - - p { - margin: 0; - padding: 7px; - color: #305680; - } - - div { - top: 0; - padding: 8px; - height: 34px; - width: 34px; - - img { - display: none; - } - - &:after { - content: ""; - position: initial; - display: block; - width: 18px; - height: 18px; - background: #305680; - -webkit-mask-image: url(/assets/copy-code-icon.svg); - -webkit-mask-repeat: no-repeat; - mask-image: url(/assets/copy-code-icon.svg); - mask-repeat: no-repeat; - } - } - } - } + ::ng-deep .tb-markdown-view .start-code code[class*="language-"], + ::ng-deep .tb-markdown-view .start-code pre[class*="language-"] { + overflow: hidden; + white-space: break-spaces; + word-break: break-all; } - } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index 33d6e7ef24..cd6197913f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -14,7 +14,7 @@ /// limitations under the License. /// -import { Component, Input, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; @@ -53,6 +53,7 @@ export class DeviceGatewayCommandComponent implements OnInit { constructor(protected router: Router, protected store: Store, private translate: TranslateService, + private cd: ChangeDetectorRef, private deviceService: DeviceService) { } @@ -63,6 +64,7 @@ export class DeviceGatewayCommandComponent implements OnInit { this.deviceService.getDeviceCredentials(this.deviceId).subscribe(credentials => { this.token = credentials.credentialsId; this.createRunCode(HOST); + this.cd.detectChanges() }); } this.selectedOSCControl = new FormControl(''); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss index 3460d28745..462cc64ec9 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss @@ -64,10 +64,6 @@ .security-toggle-group { margin-bottom: 15px; margin-right: auto; - - ::ng-deep span { - padding: 0 25px; - } } .logs-label { @@ -111,6 +107,10 @@ z-index: 100; } + ::ng-deep.security-toggle-group span { + padding: 0 25px; + } + mat-panel-title { display: block; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss index a39a83d166..57a9d5dd34 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss @@ -54,10 +54,6 @@ //flex-shrink: 1; } - mat-expansion-panel { - border: 1px solid #305680; - } - mat-card { padding-left: 10px; background: transparent; @@ -75,10 +71,6 @@ flex-grow: 1; } - .mat-accordion .mat-expansion-panel { - border-radius: 5px; - } - .action-btns { margin: 10px 10px 0; } From 7c6283dbd9ee803d16a2ad0e8e009e369d4d1a32 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 17 Jul 2023 17:57:49 +0300 Subject: [PATCH 069/120] updates and improvements --- .../src/main/data/json/demo/dashboards/gateway_list.json | 4 ++-- .../widget/lib/gateway/device-gateway-command.component.scss | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index bef5ae175e..3d8ba1f118 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -168,7 +168,7 @@ "dialogTitle": "Docker commands", "dialogHideDashboardToolbar": true, "dialogWidth": null, - "dialogHeight": 40, + "dialogHeight": 45, "openInSeparateDialog": true, "openInPopover": false, "id": "ae2e5995-505f-a241-5fb2-6cbaf08b1b55" @@ -1911,7 +1911,7 @@ "dialogTitle": "Launch command", "dialogHideDashboardToolbar": true, "dialogWidth": null, - "dialogHeight": 40, + "dialogHeight": 45, "openInSeparateDialog": true, "openInPopover": false, "id": "337c767b-3217-d3d3-b955-7b0bd0858a1d" diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss index 1bfaf33cfe..a1db5c6e7f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss @@ -24,5 +24,9 @@ white-space: break-spaces; word-break: break-all; } + + ::ng-deep .tb-markdown-view .start-code .code-wrapper { + padding: 0; + } } From 3d5d327e6befead8121bae18818f967aaea1b955 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 19 Jul 2023 12:31:31 +0300 Subject: [PATCH 070/120] minor improvements --- .../json/demo/dashboards/gateway_list.json | 4 +-- .../gateway-configuration.component.html | 30 ++++++++++++++++++- .../gateway-configuration.component.ts | 4 ++- .../gateway-service-rpc.component.html | 6 +++- .../gateway/gateway-service-rpc.component.ts | 2 +- .../assets/locale/locale.constant-en_US.json | 13 ++++++-- 6 files changed, 50 insertions(+), 9 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 3d8ba1f118..22ce99e40e 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -1326,7 +1326,7 @@ "decimals": null, "funcBody": null, "usePostProcessing": true, - "postFuncBody": "if (value.includes(\"RPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" + "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" }, { "name": "SERVICE_LOGS", @@ -1654,7 +1654,7 @@ "decimals": null, "funcBody": null, "usePostProcessing": true, - "postFuncBody": "if (value.includes(\"RPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" + "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" }, { "name": "SERVICE_LOGS", diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html index 4fd39528ae..134bb5b5f8 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html @@ -481,10 +481,18 @@ {{ 'gateway.permit-without-calls' | translate }} + info + gateway.server-port + info_outlined + {{'gateway.thingsboard-port-required' | translate }} @@ -501,6 +509,10 @@ gateway.grpc-keep-alive-timeout + info_outlined + {{'gateway.grpc-keep-alive-timeout-required' | translate }} @@ -514,6 +526,10 @@ gateway.grpc-keep-alive + info_outlined + {{'gateway.grpc-keep-alive-required' | translate }} @@ -527,6 +543,10 @@ gateway.grpc-min-time-between-pings + info_outlined + {{'gateway.grpc-min-time-between-pings-required' | translate }} @@ -540,6 +560,10 @@ gateway.grpc-max-pings-without-data + info_outlined + {{'gateway.grpc-max-pings-without-data-required' | translate }} @@ -553,6 +577,10 @@ gateway.grpc-min-ping-interval-without-data + info_outlined + {{'gateway.grpc-min-ping-interval-without-data-required' | translate }} @@ -576,7 +604,7 @@ gateway.statistics.send-period - + {{'gateway.statistics.send-period-required' | translate }} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 6966fa7f52..99e3b07df3 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -155,7 +155,7 @@ export class GatewayConfigurationComponent implements OnInit { checkConnectorsConfigurationInSeconds: [60, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], statistics: this.fb.group({ enable: [true, []], - statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], + statsSendPeriodInSeconds: [3600, [Validators.required, Validators.min(60), Validators.pattern(/^-?[0-9]+$/)]], commands: this.fb.array([], []) }), maxPayloadSizeBytes: [1024, [Validators.required, Validators.min(1), Validators.pattern(/^-?[0-9]+$/)]], @@ -434,6 +434,7 @@ export class GatewayConfigurationComponent implements OnInit { grpcGroup.get('serverPort').enable(); grpcGroup.get('keepAliveTimeMs').enable(); grpcGroup.get('keepAliveTimeoutMs').enable(); + grpcGroup.get('keepalivePermitWithoutCalls').enable(); grpcGroup.get('maxPingsWithoutData').enable(); grpcGroup.get('minTimeBetweenPingsMs').enable(); grpcGroup.get('minPingIntervalWithoutDataMs').enable(); @@ -441,6 +442,7 @@ export class GatewayConfigurationComponent implements OnInit { grpcGroup.get('serverPort').disable(); grpcGroup.get('keepAliveTimeMs').disable(); grpcGroup.get('keepAliveTimeoutMs').disable(); + grpcGroup.get('keepalivePermitWithoutCalls').disable(); grpcGroup.get('maxPingsWithoutData').disable(); grpcGroup.get('minTimeBetweenPingsMs').disable(); grpcGroup.get('minPingIntervalWithoutDataMs').disable(); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.html index 875b923ef1..267204bd54 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.html @@ -27,7 +27,11 @@ {{'gateway.statistics.timeout-ms' | translate}} - + + + {{'gateway.statistics.timeout-min' | translate }} + {{'widget-config.datasource-parameters' | translate}} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts index 8468b483df..dbda5f4db2 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.ts @@ -76,7 +76,7 @@ export class GatewayServiceRPCComponent extends PageComponent implements AfterVi super(store); this.commandForm = this.fb.group({ command: [null,[Validators.required]], - time: [60, [Validators.required]], + time: [60, [Validators.required, Validators.min(1)]], params: ["{}", [Validators.required]], result: [null] }) diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 43693043ab..7619c1104c 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2693,7 +2693,7 @@ }, "min-pack-send-delay": "Min pack send delay (in ms)", "min-pack-send-delay-required": "Min pack send delay is required", - "min-pack-send-delay-min": "Min pack send delay can not be less then 1", + "min-pack-send-delay-min": "Min pack send delay can not be less then 0", "no-connectors": "No connectors", "no-data": "No configurations", "no-gateway-found": "No gateway found.", @@ -2725,7 +2725,7 @@ "commands": "Commands", "send-period": "Statistic send period (in sec)", "send-period-required": "Statistic send period is required", - "send-period-min": "Statistic send period can not be less then 1", + "send-period-min": "Statistic send period can not be less then 60", "send-period-pattern": "Statistic send period is not valid", "check-connectors-configuration": "Check connectors configuration (in ms)", "check-connectors-configuration-required": "Check connectors configuration is required", @@ -2841,7 +2841,14 @@ "inactivity-timeout": "Inactivity device time after whose the gateway will disconnect device", "inactivity-period": "Periodicity of device activity check", "minimal-pack-delay": "Delay between sending packets (Decreasing this setting results in increased CPU usage)", - "qos": "Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)" + "qos": "Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)", + "server-port": "Network port on which GRPC server will listen for incoming connections.", + "grpc-keep-alive-timeout": "Maximum time (in milliseconds) the server should wait for a keepalive ping response before considering the connection dead.", + "grpc-keep-alive": "Duration (in milliseconds) between two successive keepalive ping messages when there is no active RPC call.", + "grpc-min-time-between-pings": "Minimum amount of time (in milliseconds) the server should wait between sending keepalive ping messages", + "grpc-max-pings-without-data": "Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.", + "grpc-min-ping-interval-without-data": "Minimum amount of time (in milliseconds) the server should wait between sending keepalive ping messages when there is no data being sent or received.", + "permit-without-calls": "Allow server to keep the GRPC connection alive even when there are no active RPC calls." } }, "grid": { From 3ccfa5bfb18fcbfd15e7cc4130e02372962eb00a Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 19 Jul 2023 15:41:09 +0300 Subject: [PATCH 071/120] minor improvements --- .../src/main/data/json/demo/dashboards/gateway_list.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 22ce99e40e..3f92f54388 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -231,7 +231,7 @@ "type": "customPretty", "customHtml": "
\r\n \r\n

Add gateway

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Name\r\n \r\n \r\n Gateway name is required.\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n", "customCss": ".add-entity-form {\r\n min-width: 400px !important;\r\n}\r\n\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n\r\n", - "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet assetService = $injector.get(widgetContext.servicesMap.get('assetService'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));\r\nlet entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));\r\n\r\nopenAddEntityDialog();\r\n\r\nfunction openAddEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\r\n}\r\n\r\nfunction AddEntityDialogController(instance) {\r\n let vm = instance;\r\n\r\n vm.addEntityFormGroup = vm.fb.group({\r\n entityName: ['', [vm.validators.required]],\r\n entityType: ['DEVICE'],\r\n entityLabel: [''],\r\n type: ['', [vm.validators.required]],\r\n });\r\n\r\n vm.cancel = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n vm.save = function() {\r\n vm.addEntityFormGroup.markAsPristine();\r\n saveEntityObservable().subscribe(\r\n function (device) {\r\n widgetContext.updateAliases();\r\n vm.dialogRef.close(null);\r\n goToConfigState(device);\r\n }\r\n );\r\n };\r\n \r\n function goToConfigState(device) {\r\n const stateParams = {};\r\n stateParams.entityId = device.id;\r\n stateParams.entityName = device.name;\r\n const newStateParams = {\r\n targetEntityParamName: 'default',\r\n new_gateway: {\r\n entityId: device.id,\r\n entityName: device.name\r\n }\r\n }\r\n const params = {...stateParams, ...newStateParams};\r\n widgetContext.stateController.openState('configuration', params, false);\r\n }\r\n\r\n function saveEntityObservable() {\r\n const formValues = vm.addEntityFormGroup.value;\r\n let entity = {\r\n name: formValues.entityName,\r\n type: formValues.type,\r\n label: formValues.entityLabel,\r\n additionalInfo: {\r\n gateway: true\r\n }\r\n };\r\n return deviceService.saveDevice(entity);\r\n }\r\n}\r\n", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet assetService = $injector.get(widgetContext.servicesMap.get('assetService'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));\r\nlet entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));\r\n\r\nopenAddEntityDialog();\r\n\r\nfunction openAddEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\r\n}\r\n\r\nfunction AddEntityDialogController(instance) {\r\n let vm = instance;\r\n\r\n vm.addEntityFormGroup = vm.fb.group({\r\n entityName: ['', [vm.validators.required]],\r\n entityType: ['DEVICE'],\r\n entityLabel: [''],\r\n type: ['', [vm.validators.required]],\r\n });\r\n\r\n vm.cancel = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n vm.save = function() {\r\n vm.addEntityFormGroup.markAsPristine();\r\n saveEntityObservable().subscribe(\r\n function (device) {\r\n widgetContext.updateAliases();\r\n vm.dialogRef.close(null);\r\n goToConfigState(device);\r\n }\r\n );\r\n };\r\n \r\n function goToConfigState(device) {\r\n const stateParams = {};\r\n stateParams.entityId = device.id;\r\n stateParams.entityName = device.name;\r\n const newStateParams = {\r\n targetEntityParamName: 'default',\r\n new_gateway: {\r\n entityId: device.id,\r\n entityName: device.name\r\n }\r\n }\r\n const params = {...stateParams, ...newStateParams};\r\n widgetContext.stateController.openState('gateway_details', params, false);\r\n }\r\n\r\n function saveEntityObservable() {\r\n const formValues = vm.addEntityFormGroup.value;\r\n let entity = {\r\n name: formValues.entityName,\r\n type: formValues.type,\r\n label: formValues.entityLabel,\r\n additionalInfo: {\r\n gateway: true\r\n }\r\n };\r\n return deviceService.saveDevice(entity);\r\n }\r\n}\r\n", "customResources": [], "openInSeparateDialog": false, "openInPopover": false, From eea4a5f51144b7971c8f24a92639af833ea97ee5 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 20 Jul 2023 10:00:05 +0300 Subject: [PATCH 072/120] ng-deep rearranged --- .../device-gateway-command.component.scss | 21 +++--- .../gateway-configuration.component.scss | 65 +++++++++---------- .../gateway/gateway-connectors.component.scss | 10 +-- .../gateway-service-rpc.component.scss | 21 +++--- 4 files changed, 59 insertions(+), 58 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss index a1db5c6e7f..24966be34d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.scss @@ -17,16 +17,21 @@ width: 100%; height: 100%; display: block; +} - ::ng-deep .tb-markdown-view .start-code code[class*="language-"], - ::ng-deep .tb-markdown-view .start-code pre[class*="language-"] { - overflow: hidden; - white-space: break-spaces; - word-break: break-all; - } +:host ::ng-deep { + .tb-markdown-view { + .start-code { + code[class*="language-"], pre[class*="language-"] { + overflow: hidden; + white-space: break-spaces; + word-break: break-all; + } - ::ng-deep .tb-markdown-view .start-code .code-wrapper { - padding: 0; + .code-wrapper { + padding: 0; + } + } } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss index 462cc64ec9..1bf599727d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.scss @@ -81,37 +81,6 @@ text-transform: capitalize; } - ::ng-deep.mat-tab-label-active { - color: white; - opacity: 1; - } - - ::ng-deep.mat-tab-label, ::ng-deep.mat-tab-label-active { - min-width: 50px !important; - padding: 3px !important; - margin: 3px !important; - flex-grow: 1; - } - - ::ng-deep.mat-ink-bar { - height: 100%; - z-index: -10; - border-radius: 5px; - } - - ::ng-deep.pointer-event { - pointer-events: all; - } - - ::ng-deep.mat-mdc-form-field-icon-suffix { - z-index: 100; - } - - ::ng-deep.security-toggle-group span { - padding: 0 25px; - } - - mat-panel-title { display: block; padding-top: 20px; @@ -138,11 +107,37 @@ textarea { resize: none; } +} - @media only screen and (max-width: 750px) { - .mat-expansion-panel-header.mat-expanded { - height: auto; - } +:host ::ng-deep { + .mat-tab-label-active { + color: white; + opacity: 1; + } + + .mat-tab-label, .mat-tab-label-active{ + min-width: 50px !important; + padding: 3px !important; + margin: 3px !important; + flex-grow: 1; + } + + .mat-ink-bar { + height: 100%; + z-index: -10; + border-radius: 5px; + } + + .pointer-event { + pointer-events: all; + } + + .mat-mdc-form-field-icon-suffix { + z-index: 100; + } + + .security-toggle-group span { + padding: 0 25px; } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss index 57a9d5dd34..0a807acb94 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss @@ -50,8 +50,6 @@ .mat-mdc-form-field { flex-grow: 1; - //min-width: 200px; - //flex-shrink: 1; } mat-card { @@ -67,9 +65,7 @@ margin: 15px; } - ::ng-deep tb-json-object-edit > div { - flex-grow: 1; - } + .action-btns { margin: 10px 10px 0; @@ -80,3 +76,7 @@ } } +:host ::ng-deep tb-json-object-edit > div { + flex-grow: 1; +} + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss index 7676742c78..afdcf9b1f0 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-service-rpc.component.scss @@ -27,13 +27,9 @@ padding: 0 15px 5px; margin-bottom: 5px; - &>button { + & > button { margin-top: 10px; } - - ::ng-deep.mat-mdc-form-field-icon-suffix { - z-index: 100; - } } .result-block { @@ -41,14 +37,19 @@ display: flex; flex-direction: column; - ::ng-deep.tb-json-content { - height: 100%; - } - - &>span { + & > span { font-weight: 600; } } +} + +:host ::ng-deep { + .tb-json-content { + height: 100%; + } + .mat-mdc-form-field-icon-suffix { + z-index: 100; + } } From 1b437dfeb1ff422d09c62a156ce85024212c0c09 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 20 Jul 2023 10:14:45 +0300 Subject: [PATCH 073/120] removed temp inactive fields --- .../widget/lib/gateway/gateway-logs.component.html | 6 ------ .../widget/lib/gateway/gateway-statistics.component.html | 4 ---- 2 files changed, 10 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html index cc3a6d8731..6b2cc21038 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html @@ -46,12 +46,6 @@ *matHeaderRowDef="displayedColumns; sticky: true"> - - - - - - {{'gateway.statistics.statistic-commands-empty' | translate }} - - - - {{'gateway.statistics.command' | translate}} From 4baf30cdea8e6d7a61f94cc2056033605b36f5d2 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 20 Jul 2023 11:02:44 +0300 Subject: [PATCH 074/120] fixes --- .../json/demo/dashboards/gateway_list.json | 14 +++++++---- .../lib/gateway/gateway-logs.component.html | 7 ++++++ .../lib/gateway/gateway-logs.component.scss | 3 ++- .../lib/gateway/gateway-logs.component.ts | 5 +++- .../assets/locale/locale.constant-en_US.json | 24 +++++++++---------- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 3f92f54388..70b555a561 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -446,7 +446,7 @@ "decimals": null, "funcBody": null, "usePostProcessing": true, - "postFuncBody": "var newValue = value == true ? \"Active\" : \"Inactive\";\r\nreturn newValue;" + "postFuncBody": "var newValue = value == 'true' ? \"Active\" : \"Inactive\";\r\nreturn newValue;" }, { "name": "activeDevices", @@ -480,7 +480,12 @@ "settings": {}, "_hash": 0.36755550699981954 } - ] + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } }, { "type": "entityCount", @@ -569,7 +574,8 @@ "widgetCss": "", "pageSize": 1024, "noDataDisplayMessage": "", - "enableDataExport": false + "enableDataExport": false, + "displayTimewindow": true }, "row": 0, "col": 0, @@ -5283,7 +5289,7 @@ "widgets": { "27e6b37c-085e-824d-fb13-69651a545ec1": { "sizeX": 48, - "sizeY": 21, + "sizeY": 16, "row": 0, "col": 0 } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html index 6b2cc21038..bdf7d0d16e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.html @@ -48,7 +48,14 @@ *matRowDef="let attribute; columns: displayedColumns;"> {{'attribute.no-telemetry-text' | translate}} + + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.scss index 34b5f9d249..8aa334b819 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.scss @@ -16,7 +16,8 @@ :host { width: 100%; height: 100%; - display: block; + display: flex; + flex-direction: column; overflow-x: auto; padding: 0; diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts index a0291a3ee0..5f031bf5c3 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts @@ -33,6 +33,7 @@ import { MatTableDataSource } from '@angular/material/table'; import { GatewayLogLevel } from '@home/components/widget/lib/gateway/gateway-configuration.component'; import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; +import { MatPaginator } from '@angular/material/paginator'; export interface GatewayConnector { @@ -73,6 +74,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit @ViewChild('searchInput') searchInputField: ElementRef; @ViewChild(MatSort) sort: MatSort; + @ViewChild(MatPaginator) paginator: MatPaginator; connectorForm: FormGroup; @@ -125,7 +127,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit public dialog: MatDialog) { super(store); const sortOrder: SortOrder = {property: 'ts', direction: Direction.DESC}; - this.pageLink = new PageLink(Number.POSITIVE_INFINITY, 0, null, sortOrder); + this.pageLink = new PageLink(10, 0, null, sortOrder); this.dataSource = new MatTableDataSource([]); } @@ -133,6 +135,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit ngAfterViewInit() { this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; this.ctx.defaultSubscription.onTimewindowChangeFunction = timewindow => { this.ctx.defaultSubscription.options.timeWindowConfig = timewindow; this.ctx.defaultSubscription.updateDataSubscriptions(); diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 7619c1104c..b53a6ecd0c 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2808,7 +2808,7 @@ "hints": { "remote-configuration": "Enables remote configuration and management of the gateway", "remote-shell": "Enables remote control of the operating system with the gateway from the Remote Shell widget", - "host": "Hostname or ip address of ThingsBoard server", + "host": "Hostname or IP address of ThingsBoard server", "port": "Port of MQTT service on ThingsBoard server", "token": "Access token for the gateway from ThingsBoard server", "client-id": "MQTT client id for the gateway form ThingsBoard server", @@ -2817,16 +2817,16 @@ "ca-cert": "Path to CA certificate file", "cert": "Path to certificate file", "private-key": "Path to private key file", - "date-form": "Date format of log message", + "date-form": "Date format in log message", "log-format": "Log message format", "remote-log": "Enables remote logging and logs reading from the gateway", - "backup-count": "If Backup count is > 0, when a rollover is done, no more than Backup count files are kept - the oldest ones are deleted", + "backup-count": "If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted", "storage": "Provides configuration for saving incoming data before it is sent to the ThingsBoard platform", "file": "Received data saving to the hard drive", "memory": "Received data saving to the RAM memory", "sqlite": "Received data saving to the .db file", "data-folder": "Path to folder, that will contains data (Relative or Absolute)", - "max-file-count": "Maximum count of file that will be saved", + "max-file-count": "Maximum count of file that will be created", "max-read-count": "Count of messages to get from storage and send to ThingsBoard", "max-records": "Maximum count of records that will be stored in one file", "read-record-count": "Count of messages to get from storage and send to ThingsBoard", @@ -2834,20 +2834,20 @@ "ttl-check-hour": "How often will Gateway check data for obsolescence", "ttl-messages-day": "Maximum days that storage will save data", "commands": "Commands for collecting additional statistic", - "attribute": "Gateway client attribute name", + "attribute": "Statistic telemetry key", "timeout": "Timeout for command executing", - "command": "The result of the command will be used as the value of the client attribute (\"/bin/sh -c ipconfig getifaddr en0\")", + "command": "The result of the command execution, will be used as the value for telemetry", "check-device-activity": "Enables monitor the activity of each connected device", - "inactivity-timeout": "Inactivity device time after whose the gateway will disconnect device", + "inactivity-timeout": "Time after whose the gateway will disconnect device", "inactivity-period": "Periodicity of device activity check", - "minimal-pack-delay": "Delay between sending packets (Decreasing this setting results in increased CPU usage)", + "minimal-pack-delay": "Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)", "qos": "Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)", "server-port": "Network port on which GRPC server will listen for incoming connections.", - "grpc-keep-alive-timeout": "Maximum time (in milliseconds) the server should wait for a keepalive ping response before considering the connection dead.", - "grpc-keep-alive": "Duration (in milliseconds) between two successive keepalive ping messages when there is no active RPC call.", - "grpc-min-time-between-pings": "Minimum amount of time (in milliseconds) the server should wait between sending keepalive ping messages", + "grpc-keep-alive-timeout": "Maximum time the server should wait for a keepalive ping response before considering the connection dead.", + "grpc-keep-alive": "Duration between two successive keepalive ping messages when there is no active RPC call.", + "grpc-min-time-between-pings": "Minimum amount of time the server should wait between sending keepalive ping messages", "grpc-max-pings-without-data": "Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.", - "grpc-min-ping-interval-without-data": "Minimum amount of time (in milliseconds) the server should wait between sending keepalive ping messages when there is no data being sent or received.", + "grpc-min-ping-interval-without-data": "Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.", "permit-without-calls": "Allow server to keep the GRPC connection alive even when there are no active RPC calls." } }, From 286ea1686b748cb366d893ddb2b36f3bac05e6cf Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 21 Jul 2023 12:07:40 +0300 Subject: [PATCH 075/120] loglevel --- .../widget/lib/gateway/gateway-configuration.component.ts | 4 +++- .../widget/lib/gateway/gateway-connectors.component.html | 2 +- .../widget/lib/gateway/gateway-connectors.component.ts | 6 +++--- .../components/widget/lib/gateway/gateway-logs.component.ts | 2 +- ui-ngx/src/assets/locale/locale.constant-en_US.json | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 99e3b07df3..1a875836f1 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -393,10 +393,12 @@ export class GatewayConfigurationComponent implements OnInit { checkAndFetchCredentials(security): void { if (security.type !== SecurityTypes.TLS_PRIVATE_KEY) { this.deviceService.getDeviceCredentials(this.device.id).subscribe(credentials => { - if (credentials.credentialsType === DeviceCredentialsType.ACCESS_TOKEN || security.type !== SecurityTypes.TLS_ACCESS_TOKEN) { + if (credentials.credentialsType === DeviceCredentialsType.ACCESS_TOKEN || security.type === SecurityTypes.TLS_ACCESS_TOKEN) { + this.gatewayConfigGroup.get('thingsboard.security.type').setValue(SecurityTypes.ACCESS_TOKEN); this.gatewayConfigGroup.get('thingsboard.security.accessToken').setValue(credentials.credentialsId); } else if (credentials.credentialsType === DeviceCredentialsType.MQTT_BASIC) { const parsedValue = JSON.parse(credentials.credentialsValue); + this.gatewayConfigGroup.get('thingsboard.security.type').setValue(SecurityTypes.USERNAME_PASSWORD); this.gatewayConfigGroup.get('thingsboard.security.clientId').setValue(parsedValue.clientId); this.gatewayConfigGroup.get('thingsboard.security.username').setValue(parsedValue.userName); this.gatewayConfigGroup.get('thingsboard.security.password').setValue(parsedValue.password); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index fc34957de6..28538ad5df 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -142,7 +142,7 @@ gateway.remote-logging-level - + {{logLevel}} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 6483535c44..be91184ff0 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -47,7 +47,7 @@ export interface gatewayConnector { type: string; configuration?: string; configurationJson: string; - log_level: string; + logLevel: string; key?: string; } @@ -138,7 +138,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm = this.fb.group({ name: ['', [Validators.required]], type: ['', [Validators.required]], - log_level: ['', [Validators.required]], + logLevel: ['', [Validators.required]], key: ['auto'], class: [''], configuration: [''], @@ -265,7 +265,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm.setValue({ name: '', type: 'mqtt', - log_level: GatewayLogLevel.info, + logLevel: GatewayLogLevel.info, key: 'auto', class: '', configuration: '', diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts index 5f031bf5c3..df83c11367 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts @@ -41,7 +41,7 @@ export interface GatewayConnector { type: string; configuration?: string; configurationJson: string; - log_level: string; + logLevel: string; key?: string; } diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index b53a6ecd0c..6856f6cb3e 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2727,7 +2727,7 @@ "send-period-required": "Statistic send period is required", "send-period-min": "Statistic send period can not be less then 60", "send-period-pattern": "Statistic send period is not valid", - "check-connectors-configuration": "Check connectors configuration (in ms)", + "check-connectors-configuration": "Check connectors configuration (in s)", "check-connectors-configuration-required": "Check connectors configuration is required", "check-connectors-configuration-min": "Check connectors configuration can not be less then 1", "check-connectors-configuration-pattern": "Check connectors configuration is not valid", From a2fe82971a6fcf09138eddc91a8ab9e9a135e9a6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 21 Jul 2023 13:37:06 +0300 Subject: [PATCH 076/120] class fix --- .../widget/lib/gateway/gateway-connectors.component.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index be91184ff0..9f13d72927 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -286,6 +286,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (!connector.key) { connector.key = 'auto'; } + if (!connector.class) { + connector.class = 'auto'; + } this.initialConnector = connector; this.connectorForm.setValue(connector); this.connectorForm.markAsPristine(); From da044e12afb88cc5c30a720710ae3d97924e02c9 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 21 Jul 2023 13:58:55 +0300 Subject: [PATCH 077/120] class fix --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 9f13d72927..5d70c1f928 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -287,7 +287,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie connector.key = 'auto'; } if (!connector.class) { - connector.class = 'auto'; + connector.class = ''; } this.initialConnector = connector; this.connectorForm.setValue(connector); From 97bb08f97432f62b6528b3a000fb5182ac6b5f07 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 21 Jul 2023 14:00:13 +0300 Subject: [PATCH 078/120] class fix --- .../widget/lib/gateway/gateway-connectors.component.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 5d70c1f928..945e965b13 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -286,11 +286,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (!connector.key) { connector.key = 'auto'; } - if (!connector.class) { - connector.class = ''; - } this.initialConnector = connector; - this.connectorForm.setValue(connector); + this.connectorForm.patchValue(connector); this.connectorForm.markAsPristine(); } From d133e68e1fa0c66defa47dd8f2ff4f79876327bd Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 09:57:15 +0300 Subject: [PATCH 079/120] connector and config updates --- .../gateway-configuration.component.html | 4 + .../gateway-configuration.component.ts | 139 ++++++++++++------ .../gateway/gateway-connectors.component.html | 12 ++ .../gateway/gateway-connectors.component.ts | 21 ++- .../assets/locale/locale.constant-en_US.json | 1 + 5 files changed, 130 insertions(+), 47 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html index 134bb5b5f8..7b327839d8 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html @@ -139,7 +139,11 @@ matSuffix style="cursor:pointer;" matTooltip="{{'gateway.hints.password' | translate }}">info_outlined +
+ , @@ -216,14 +227,13 @@ export class GatewayConfigurationComponent implements OnInit { }) }); - this.gatewayConfigGroup.get('thingsboard.security').valueChanges.subscribe(security => { - if (security.username) { - this.clientIdUserNameFieldsToggle('clientId'); - } else if (security.clientId) { - this.clientIdUserNameFieldsToggle('username'); - } else if (!security.username && !security.clientId) { - this.clientIdUserNameFieldsToggle(); + this.gatewayConfigGroup.get('thingsboard.security.password').valueChanges.subscribe(password => { + if (password !== '') { + this.gatewayConfigGroup.get('thingsboard.security.username').setValidators([Validators.required]); + } else { + this.gatewayConfigGroup.get('thingsboard.security.username').setValidators([]); } + this.gatewayConfigGroup.get('thingsboard.security.username').updateValueAndValidity({emitEvent: false}); }); this.toggleRpcFields(false); @@ -261,7 +271,6 @@ export class GatewayConfigurationComponent implements OnInit { const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; securityGroup.get('type').valueChanges.subscribe(type => { this.removeAllSecurityValidators(); - console.log(type); if (type === SecurityTypes.ACCESS_TOKEN) { securityGroup.get('accessToken').addValidators([Validators.required]); securityGroup.get('accessToken').updateValueAndValidity(); @@ -278,10 +287,7 @@ export class GatewayConfigurationComponent implements OnInit { securityGroup.get('caCert').addValidators([Validators.required]); securityGroup.get('caCert').updateValueAndValidity(); } else if (type === SecurityTypes.USERNAME_PASSWORD) { - securityGroup.get('clientId').addValidators([Validators.required]); - securityGroup.get('clientId').updateValueAndValidity(); - securityGroup.get('username').addValidators([Validators.required]); - securityGroup.get('username').updateValueAndValidity(); + securityGroup.addValidators([this.atLeastOneRequired(Validators.required, ['clientId', 'username'])]) // securityGroup.get('password').addValidators([Validators.required]); // securityGroup.get('password').updateValueAndValidity(); } @@ -320,8 +326,20 @@ export class GatewayConfigurationComponent implements OnInit { this.fetchConfigAttribute(this.device); } + atLeastOneRequired(validator: ValidatorFn, controls: string[] = null) { + return (group: UntypedFormGroup): ValidationErrors | null => { + if (!controls) { + controls = Object.keys(group.controls); + } + const hasAtLeastOne = group?.controls && controls.some(k => !validator(group.controls[k])); + + return hasAtLeastOne ? null : {atLeastOne: true}; + }; + } + updateSecurityValidators(value: SecurityTypes) { this.gatewayConfigGroup.get('thingsboard.security.type').setValue(value, {emitEvent: true}); + this.gatewayConfigGroup.get('thingsboard.security.type').markAsDirty(); } updateLogType(value: LocalLogsConfigs) { @@ -393,9 +411,13 @@ export class GatewayConfigurationComponent implements OnInit { checkAndFetchCredentials(security): void { if (security.type !== SecurityTypes.TLS_PRIVATE_KEY) { this.deviceService.getDeviceCredentials(this.device.id).subscribe(credentials => { + this.initialCredentials = credentials; if (credentials.credentialsType === DeviceCredentialsType.ACCESS_TOKEN || security.type === SecurityTypes.TLS_ACCESS_TOKEN) { - this.gatewayConfigGroup.get('thingsboard.security.type').setValue(SecurityTypes.ACCESS_TOKEN); + this.gatewayConfigGroup.get('thingsboard.security.type').setValue(security.type === SecurityTypes.TLS_ACCESS_TOKEN? SecurityTypes.TLS_ACCESS_TOKEN : SecurityTypes.ACCESS_TOKEN); this.gatewayConfigGroup.get('thingsboard.security.accessToken').setValue(credentials.credentialsId); + if(security.type === SecurityTypes.TLS_ACCESS_TOKEN) { + this.gatewayConfigGroup.get('thingsboard.security.caCert').setValue(security.caCert); + } } else if (credentials.credentialsType === DeviceCredentialsType.MQTT_BASIC) { const parsedValue = JSON.parse(credentials.credentialsValue); this.gatewayConfigGroup.get('thingsboard.security.type').setValue(SecurityTypes.USERNAME_PASSWORD); @@ -451,30 +473,6 @@ export class GatewayConfigurationComponent implements OnInit { } } - clientIdUserNameFieldsToggle(type?: string) { - const clientIdForm = this.gatewayConfigGroup.get('thingsboard.security.clientId'); - const usernameForm = this.gatewayConfigGroup.get('thingsboard.security.username'); - switch (type) { - case 'clientId': - if (clientIdForm.enabled) { - clientIdForm.disable({emitEvent: false}); - } - break; - case 'username': - if (usernameForm.enabled) { - usernameForm.disable({emitEvent: false}); - } - break; - default: - if (clientIdForm.disabled) { - clientIdForm.enable({emitEvent: false}); - } - if (usernameForm.disabled) { - usernameForm.enable({emitEvent: false}); - } - break; - } - } addCommand(command?): void { const data = command || {}; @@ -514,6 +512,7 @@ export class GatewayConfigurationComponent implements OnInit { removeAllSecurityValidators(): void { const securityGroup = this.gatewayConfigGroup.get('thingsboard.security') as FormGroup; + securityGroup.clearValidators(); for (const controlsKey in securityGroup.controls) { if (controlsKey !== 'type') { securityGroup.controls[controlsKey].clearValidators(); @@ -580,7 +579,8 @@ export class GatewayConfigurationComponent implements OnInit { handlers: [ 'consoleHandler' ] - } + }, + ts: new Date().getTime() }; for (const key of Object.keys(logsObj.local)) { logAttrObj.handlers[key + 'Handler'] = this.createHandlerObj(logsObj.local[key], key); @@ -622,27 +622,74 @@ export class GatewayConfigurationComponent implements OnInit { key: 'logs_configuration', value: this.generateLogsFile(value.logs) }); + value.grpc.ts = new Date().getTime(); attributes.push({ key: 'grpc_configuration', value: value.grpc }); + value.storage.ts = new Date().getTime(); attributes.push({ key: 'storage_configuration', value: value.storage }); + value.thingsboard.ts = new Date().getTime(); attributes.push({ key: 'general_configuration', value: value.thingsboard }); + this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributes).subscribe(_ => { - if (this.dialogRef) { - this.dialogRef.close(); + this.updateCredentials(value.thingsboard.security).subscribe(_ => { + if (this.dialogRef) { + this.dialogRef.close(); + } else { + this.gatewayConfigGroup.markAsPristine(); + this.cd.detectChanges(); + } + }) + }); + } + + updateCredentials(securityConfig): Observable { + let updateCredentials = false; + let newCredentials = {}; + if (securityConfig.type === SecurityTypes.USERNAME_PASSWORD) { + if (this.initialCredentials.credentialsType !== DeviceCredentialsType.MQTT_BASIC) { + updateCredentials = true; } else { - this.gatewayConfigGroup.markAsPristine(); - this.cd.detectChanges(); + const parsedCredentials = JSON.parse(this.initialCredentials.credentialsValue); + updateCredentials = !(parsedCredentials.clientId === securityConfig.clientId && parsedCredentials.userName === securityConfig.username && parsedCredentials.password === securityConfig.password); } - }); + if (updateCredentials) { + let credentialsValue: { clientId?, userName?, password? } = {}; + const credentialsType = DeviceCredentialsType.MQTT_BASIC; + if (securityConfig.clientId) credentialsValue.clientId = securityConfig.clientId; + if (securityConfig.username) credentialsValue.userName = securityConfig.username; + if (securityConfig.password) credentialsValue.password = securityConfig.password; + newCredentials = { + credentialsType, + credentialsValue: JSON.stringify(credentialsValue) + }; + } + } else if (securityConfig.type === SecurityTypes.ACCESS_TOKEN || securityConfig.type === SecurityTypes.TLS_ACCESS_TOKEN) { + if (this.initialCredentials.credentialsType !== DeviceCredentialsType.ACCESS_TOKEN) { + updateCredentials = true; + } else { + updateCredentials = this.initialCredentials.credentialsId !== securityConfig.accessToken; + } + if (updateCredentials) { + newCredentials = { + credentialsType: DeviceCredentialsType.ACCESS_TOKEN, + credentialsId: securityConfig.accessToken + } + } + } + + if (updateCredentials) { + return this.deviceService.saveDeviceCredentials({...this.initialCredentials,...newCredentials}) + } + return of(null); } cancel(): void { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index 28538ad5df..edc9fd32b1 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -56,6 +56,18 @@ {{ returnType(attribute) }} + + + {{ 'gateway.connectors-table-status' | translate }} + + + + + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 945e965b13..531b189057 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -83,11 +83,13 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie attributeDataSource: AttributeDatasource; + sharedAttributeData: Array; + inactiveConnectorsDataSource: AttributeDatasource; dataSource: MatTableDataSource; - displayedColumns = ['enabled', 'key', 'type', 'actions']; + displayedColumns = ['enabled', 'key', 'type', 'syncStatus', 'actions']; gatewayConnectorDefaultTypes = GatewayConnectorDefaultTypesTranslates; @@ -167,7 +169,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors'])).subscribe(attributes => { if (attributes.length) { this.activeConnectors = attributes[0].length ? attributes[0][0].value : []; + this.activeConnectors = typeof this.activeConnectors === 'string' ? JSON.parse(this.activeConnectors): this.activeConnectors; this.inactiveConnectors = attributes[1].length ? attributes[1][0].value : []; + this.inactiveConnectors = typeof this.inactiveConnectors === 'string' ? JSON.parse(this.inactiveConnectors): this.inactiveConnectors; this.updateData(true); } else { this.activeConnectors = []; @@ -184,6 +188,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (value.type !== 'grpc') { delete value.key; } + if (value.type !== 'custom') { + delete value.class; + } + value.ts = new Date().getTime(); const attributesToSave = [{ key: value.name, value @@ -242,6 +250,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); + this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); this.combineData(); }); this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { @@ -250,6 +259,16 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }); } + isConnectorSynced(attribute: AttributeData) { + const connectorData = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + if (!connectorData.ts) return false; + const sharedIndex = this.sharedAttributeData.findIndex(data=>{ + const sharedData = typeof data.value === 'string' ? JSON.parse(data.value): data.value; + return sharedData.name === connectorData.name && sharedData.ts && sharedData.ts <= connectorData.ts; + }) + return sharedIndex !== -1; + } + combineData() { this.dataSource.data = [...this.activeData, ...this.inactiveData]; } diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 6856f6cb3e..6f4786c3d6 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2609,6 +2609,7 @@ "connectors-table-enabled": "Enabled", "connectors-table-name": "Name", "connectors-table-type": "Type", + "connectors-table-status": "Sync status", "connectors-table-actions": "Actions", "connectors-table-key": "Key", "connectors-table-class": "Class", From 9d8f16b8b75faa269139065096b5562280850fb6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 10:59:59 +0300 Subject: [PATCH 080/120] sync status --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 531b189057..868819ddce 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -250,11 +250,11 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); - this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); this.combineData(); }); this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { this.inactiveData = data.data.filter(value =>this.inactiveConnectors.includes(value.key)); + this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); this.combineData(); }); } From 51147f92a1686c7832b1fd52f310bd993db55eec Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 11:19:29 +0300 Subject: [PATCH 081/120] sync status wording --- .../gateway/gateway-connectors.component.html | 11 ++++++----- .../gateway/gateway-connectors.component.scss | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index edc9fd32b1..f3019499b9 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -61,11 +61,12 @@ {{ 'gateway.connectors-table-status' | translate }} - +
{{isConnectorSynced(attribute)?'Synchronised' : 'Unsynchronised'}}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss index 0a807acb94..6d5a6c4585 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss @@ -23,7 +23,7 @@ .connector-container { width: 100%; - &>mat-card, &>div { + & > mat-card, & > div { min-width: calc(50% - 15px); } @@ -65,7 +65,23 @@ margin: 15px; } + .status-block { + text-align: center; + border-radius: 16px; + font-weight: 500; + width: fit-content; + padding: 5px 15px; + } + + .status-sync { + background: rgba(25, 128, 56, .06); + color: rgb(25, 128, 56); + } + .status-unsync { + background: rgba(203, 37, 48, .06); + color: rgb(203, 37, 48); + } .action-btns { margin: 10px 10px 0; From 1b54d3835d25f1ebef80209716ace139224cb303 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 11:31:22 +0300 Subject: [PATCH 082/120] sync status wording --- .../widget/lib/gateway/gateway-connectors.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index f3019499b9..11056bfd12 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -65,7 +65,7 @@ [ngClass]="{ 'status-block': true, 'status-sync':isConnectorSynced(attribute), - 'status-unsync':isConnectorSynced(attribute) + 'status-unsync':!isConnectorSynced(attribute) }">{{isConnectorSynced(attribute)?'Synchronised' : 'Unsynchronised'}}
From 24377a37f417ffd1b4ed677c81a4c1d25fd66f54 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 13:38:41 +0300 Subject: [PATCH 083/120] empty array fix --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 868819ddce..fa26cfa509 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -83,7 +83,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie attributeDataSource: AttributeDatasource; - sharedAttributeData: Array; + sharedAttributeData: Array = []; inactiveConnectorsDataSource: AttributeDatasource; From 6fa18d129a2a4d8ef097072d187ea1ec6f1fe9e6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 14:14:15 +0300 Subject: [PATCH 084/120] fix --- .../widget/lib/gateway/gateway-configuration.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 8429104018..872f5aea72 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -227,8 +227,10 @@ export class GatewayConfigurationComponent implements OnInit { }) }); + console.log(this.gatewayConfigGroup) + this.gatewayConfigGroup.get('thingsboard.security.password').valueChanges.subscribe(password => { - if (password !== '') { + if (password && password !== '') { this.gatewayConfigGroup.get('thingsboard.security.username').setValidators([Validators.required]); } else { this.gatewayConfigGroup.get('thingsboard.security.username').setValidators([]); @@ -423,7 +425,7 @@ export class GatewayConfigurationComponent implements OnInit { this.gatewayConfigGroup.get('thingsboard.security.type').setValue(SecurityTypes.USERNAME_PASSWORD); this.gatewayConfigGroup.get('thingsboard.security.clientId').setValue(parsedValue.clientId); this.gatewayConfigGroup.get('thingsboard.security.username').setValue(parsedValue.userName); - this.gatewayConfigGroup.get('thingsboard.security.password').setValue(parsedValue.password); + this.gatewayConfigGroup.get('thingsboard.security.password').setValue(parsedValue.password, {emitEvent: false}); } else if (credentials.credentialsType === DeviceCredentialsType.X509_CERTIFICATE) { //if sertificate is present set sertificate as present } From 9dfe9d0b7faacaaf255a59830c66aaff3eebe9d7 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Tue, 25 Jul 2023 17:32:47 +0300 Subject: [PATCH 085/120] new fixes & updates --- .../json/demo/dashboards/gateway_list.json | 40 +++++----- .../gateway-configuration.component.html | 2 +- .../gateway-configuration.component.ts | 5 +- .../gateway/gateway-connectors.component.html | 2 +- .../gateway/gateway-connectors.component.ts | 73 ++++++++++++++----- .../assets/locale/locale.constant-en_US.json | 2 +- 6 files changed, 81 insertions(+), 43 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 70b555a561..db516811b2 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -434,20 +434,6 @@ "settings": {}, "_hash": 0.9806146353493157 }, - { - "name": "Status", - "type": "attribute", - "label": "active", - "color": "#f44336", - "settings": {}, - "_hash": 0.7141801635241265, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": true, - "postFuncBody": "var newValue = value == 'true' ? \"Active\" : \"Inactive\";\r\nreturn newValue;" - }, { "name": "activeDevices", "type": "attribute", @@ -479,6 +465,20 @@ "color": "#e91e63", "settings": {}, "_hash": 0.36755550699981954 + }, + { + "name": "active", + "type": "attribute", + "label": "Status", + "color": "#e91e63", + "settings": {}, + "_hash": 0.10301612696488416, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "var newValue = value == 'true' ? \"Active\" : \"Inactive\";\nreturn newValue;" } ], "alarmFilterConfig": { @@ -550,7 +550,7 @@ "padding": "8px", "settings": { "useMarkdownTextFunction": true, - "markdownTextFunction": "var blockData = '';\n\nfunction createDataBlock(value, label, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Name, \"Gateway Name\", ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\");\ncreateDataBlock(data[0].active, \"Status\");\ncreateDataBlock(data[1]?data[1].count:0, \"Active Devices\");\ncreateDataBlock(data[2]?data[2][\"count 2\"]:0, \"Inactive Devices\");\ncreateDataBlock(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0, \"Enabled Connectors\");\ncreateDataBlock(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0, \"Disabled Connectors\");\nreturn `
${blockData}
`;", + "markdownTextFunction": "var blockData = '';\n\nfunction createDataBlock(value, label, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Name, \"Gateway Name\", ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\");\ncreateDataBlock(data[0].Status, \"Status\");\ncreateDataBlock(data[1]?data[1].count:0, \"Active Devices\");\ncreateDataBlock(data[2]?data[2][\"count 2\"]:0, \"Inactive Devices\");\ncreateDataBlock(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0, \"Enabled Connectors\");\ncreateDataBlock(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0, \"Disabled Connectors\");\nreturn `
${blockData}
`;", "applyDefaultMarkdownStyle": false, "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" }, @@ -1385,13 +1385,16 @@ "padding": "8px", "settings": { "enableSearch": true, + "enableSelectColumnDisplay": true, "enableStickyHeader": true, "enableStickyAction": true, + "showCellActionsMenu": true, "reserveSpaceForHiddenAction": "true", "showTimestamp": true, "showMilliseconds": false, - "displayPagination": false, + "displayPagination": true, "useEntityLabel": false, + "defaultPageSize": 10, "hideEmptyLines": true, "disableStickyHeader": false, "useRowStyleFunction": false @@ -1714,13 +1717,16 @@ "padding": "8px", "settings": { "enableSearch": true, + "enableSelectColumnDisplay": true, "enableStickyHeader": true, "enableStickyAction": true, + "showCellActionsMenu": true, "reserveSpaceForHiddenAction": "true", "showTimestamp": true, "showMilliseconds": false, - "displayPagination": false, + "displayPagination": true, "useEntityLabel": false, + "defaultPageSize": 10, "hideEmptyLines": true, "disableStickyHeader": false, "useRowStyleFunction": false diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html index 7b327839d8..51452e2967 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html @@ -683,7 +683,7 @@
-
+ }">{{isConnectorSynced(attribute)?'sync' : 'out of sync'}}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index fa26cfa509..1d7a39ccc5 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -18,7 +18,7 @@ import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, NgZone, import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Router } from '@angular/router'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, FormGroup, UntypedFormControl, ValidatorFn, Validators } from '@angular/forms'; import { EntityId } from '@shared/models/id/entity-id'; import { MatDialog } from '@angular/material/dialog'; import { AttributeService } from '@core/http/attribute.service'; @@ -120,6 +120,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie inactiveData: Array = []; + initialConnector: gatewayConnector; + constructor(protected router: Router, protected store: Store, protected fb: FormBuilder, @@ -138,7 +140,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveConnectorsDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); this.dataSource = new MatTableDataSource([]); this.connectorForm = this.fb.group({ - name: ['', [Validators.required]], + name: ['', [Validators.required, this.uniqNameRequired()]], type: ['', [Validators.required]], logLevel: ['', [Validators.required]], key: ['auto'], @@ -149,9 +151,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm.disable(); } - - initialConnector: gatewayConnector; - ngAfterViewInit() { this.connectorForm.valueChanges.subscribe(() => { this.cd.detectChanges(); @@ -169,9 +168,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.attributeService.getEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, ['inactive_connectors'])).subscribe(attributes => { if (attributes.length) { this.activeConnectors = attributes[0].length ? attributes[0][0].value : []; - this.activeConnectors = typeof this.activeConnectors === 'string' ? JSON.parse(this.activeConnectors): this.activeConnectors; + this.activeConnectors = typeof this.activeConnectors === 'string' ? JSON.parse(this.activeConnectors) : this.activeConnectors; this.inactiveConnectors = attributes[1].length ? attributes[1][0].value : []; - this.inactiveConnectors = typeof this.inactiveConnectors === 'string' ? JSON.parse(this.inactiveConnectors): this.inactiveConnectors; + this.inactiveConnectors = typeof this.inactiveConnectors === 'string' ? JSON.parse(this.inactiveConnectors) : this.inactiveConnectors; this.updateData(true); } else { this.activeConnectors = []; @@ -182,6 +181,27 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } } + uniqNameRequired(): ValidatorFn { + return (c: UntypedFormControl) => { + const newName = c.value.trim().toLowerCase(); + const found = this.dataSource.data.find((connectorAttr) => { + const connectorData = typeof connectorAttr.value === 'string' ? JSON.parse(connectorAttr.value) : connectorAttr.value; + return connectorData.name.toLowerCase() === newName; + }); + if (found) { + if (this.initialConnector && this.initialConnector.name.toLowerCase() === newName) { + return null; + } + return { + duplicateName: { + valid: false + } + }; + } + return null; + }; + } + saveConnector(): void { const value = this.connectorForm.value; value.configuration = this.camelize(value.name) + '.json'; @@ -204,8 +224,12 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie updateActiveConnectors = true; const activeIndex = this.activeConnectors.indexOf(this.initialConnector.name); const inactiveIndex = this.inactiveConnectors.indexOf(this.initialConnector.name); - if (activeIndex !== -1) {this.activeConnectors.splice(activeIndex, 1);} - if (inactiveIndex !== -1) {this.inactiveConnectors.splice(activeIndex, 1);} + if (activeIndex !== -1) { + this.activeConnectors.splice(activeIndex, 1); + } + if (inactiveIndex !== -1) { + this.inactiveConnectors.splice(activeIndex, 1); + } } if (!this.activeConnectors.includes(value.name) && scope == AttributeScope.SHARED_SCOPE) { this.activeConnectors.push(value.name); @@ -253,17 +277,22 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.combineData(); }); this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { - this.inactiveData = data.data.filter(value =>this.inactiveConnectors.includes(value.key)); + this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); this.combineData(); }); } isConnectorSynced(attribute: AttributeData) { - const connectorData = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + const connectorData = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; if (!connectorData.ts) return false; - const sharedIndex = this.sharedAttributeData.findIndex(data=>{ - const sharedData = typeof data.value === 'string' ? JSON.parse(data.value): data.value; + const clientIndex = this.activeData.findIndex(data => { + const sharedData = typeof data.value === 'string' ? JSON.parse(data.value) : data.value; + return sharedData.name === connectorData.name; + }) + if (clientIndex == -1) return false; + const sharedIndex = this.sharedAttributeData.findIndex(data => { + const sharedData = typeof data.value === 'string' ? JSON.parse(data.value) : data.value; return sharedData.name === connectorData.name && sharedData.ts && sharedData.ts <= connectorData.ts; }) return sharedIndex !== -1; @@ -298,7 +327,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (this.connectorForm.disabled) { this.connectorForm.enable(); } - const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; if (!connector.configuration) { connector.configuration = ''; } @@ -325,8 +354,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } returnType(attribute) { - const value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; - return this.gatewayConnectorDefaultTypes.get(value.type); + const value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + return this.gatewayConnectorDefaultTypes.get(value.type); } deleteConnector(attribute: AttributeData, $event: Event): void { @@ -342,8 +371,12 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [attribute])); const activeIndex = this.activeConnectors.indexOf(attribute.key); const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); - if (activeIndex !== -1) {this.activeConnectors.splice(activeIndex, 1);} - if (inactiveIndex !== -1) {this.inactiveConnectors.splice(activeIndex, 1);} + if (activeIndex !== -1) { + this.activeConnectors.splice(activeIndex, 1); + } + if (inactiveIndex !== -1) { + this.inactiveConnectors.splice(activeIndex, 1); + } tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', value: scope == AttributeScope.SHARED_SCOPE ? this.activeConnectors : this.inactiveConnectors @@ -368,7 +401,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if ($event) { $event.stopPropagation(); } - attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_logs = attribute; params.targetEntityParamName = 'connector_logs'; @@ -379,7 +412,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if ($event) { $event.stopPropagation(); } - attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value): attribute.value; + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_rpc = attribute; params.targetEntityParamName = 'connector_rpc'; diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 3339d41da4..b9d14eff0e 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2736,7 +2736,7 @@ "send-period-required": "Statistic send period is required", "send-period-min": "Statistic send period can not be less then 60", "send-period-pattern": "Statistic send period is not valid", - "check-connectors-configuration": "Check connectors configuration (in s)", + "check-connectors-configuration": "Check connectors configuration (in sec)", "check-connectors-configuration-required": "Check connectors configuration is required", "check-connectors-configuration-min": "Check connectors configuration can not be less then 1", "check-connectors-configuration-pattern": "Check connectors configuration is not valid", From 687682f2dc10776c7d5f2a8c08ad16a64f39906b Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 26 Jul 2023 12:04:24 +0300 Subject: [PATCH 086/120] hot fixes --- .../json/demo/dashboards/gateway_list.json | 4 ++-- .../gateway-configuration.component.html | 23 +++++++++++-------- .../gateway-configuration.component.ts | 3 ++- .../gateway/gateway-connectors.component.html | 3 ++- .../gateway/gateway-connectors.component.ts | 6 +++++ 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index db516811b2..440fd4c6b3 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -1350,7 +1350,7 @@ "decimals": null, "funcBody": null, "usePostProcessing": true, - "postFuncBody": "if (value.includes(\"RPC\")) {\n return value;\n} else return '';" + "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n return value;\n} else return '';" } ], "alarmFilterConfig": { @@ -1681,7 +1681,7 @@ "decimals": null, "funcBody": null, "usePostProcessing": true, - "postFuncBody": "if (value.includes(\"RPC\")) {\n return value;\n} else return '';" + "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n return value;\n} else return '';" } ], "alarmFilterConfig": { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html index 51452e2967..cfa03bd97a 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.html @@ -85,7 +85,8 @@
+ name="securityTypeToggle" (valueChange)="updateSecurityValidators($event)" + useSelectOnMdLg="false" ignoreMdLgSize="true"> {{ securityType.value | translate }} @@ -230,7 +231,8 @@
gateway.logs.local
+ [value]="logSelector.value" name="logTypeToggle" (valueChange)="updateLogType($event)" + useSelectOnMdLg="false" ignoreMdLgSize="true"> {{ logConfig.value }} @@ -303,7 +305,8 @@
+ (valueChange)="updateStorageType($event)" + useSelectOnMdLg="false" ignoreMdLgSize="true"> {{ storageType.value | translate }} @@ -315,7 +318,7 @@ gateway.storage-read-record-count - + {{'gateway.storage-read-record-count-required' | translate}} @@ -334,7 +337,7 @@ gateway.storage-max-records - + {{'gateway.storage-max-records-required' | translate}} @@ -366,7 +369,7 @@ gateway.storage-max-files - + {{'gateway.storage-max-files-required' | translate}} @@ -385,7 +388,7 @@ gateway.storage-max-read-record-count - + {{'gateway.storage-max-read-record-count-required' | translate}} @@ -404,7 +407,7 @@ gateway.storage-max-file-records - + {{'gateway.storage-max-records-required' | translate}} @@ -436,7 +439,7 @@ gateway.messages-ttl-check-in-hours - + {{'gateway.messages-ttl-check-in-hours-required' | translate}} @@ -455,7 +458,7 @@ gateway.messages-ttl-in-days - + {{'gateway.messages-ttl-in-days-required' | translate}} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 0f8896be01..1b70c6e295 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -347,7 +347,8 @@ export class GatewayConfigurationComponent implements OnInit { } updateStorageType(value: StorageTypes) { - this.gatewayConfigGroup.get('storage.type').setValue(value, {emitEvent: true}) + this.gatewayConfigGroup.get('storage.type').setValue(value, {emitEvent: true}); + this.gatewayConfigGroup.get('storage.type').markAsDirty(); } fetchConfigAttribute(entityId: EntityId) { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index ddcca1b538..e3589f7ac1 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -127,7 +127,8 @@ - diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 1d7a39ccc5..7b76b8afa7 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -339,6 +339,12 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm.markAsPristine(); } + isSameConnector(attribute): boolean { + if (!this.initialConnector) return false; + const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + return this.initialConnector.name === connector.name; + } + showToast(message: string) { this.store.dispatch(new ActionNotificationShow( { From 4d5c8f670b9c15d36c64cfecb53beb55b99cacbf Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 26 Jul 2023 12:14:53 +0300 Subject: [PATCH 087/120] hot fixes --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 7b76b8afa7..dbc1f5271a 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -217,7 +217,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie value }]; const attributesToDelete = []; - const scope = (this.activeConnectors.includes(value.name) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const scope = (!this.initialConnector || this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; let updateActiveConnectors = false; if (this.initialConnector && this.initialConnector.name !== value.name) { attributesToDelete.push({key: this.initialConnector.name}); From 2c3905b4950ce380bcaa539349c371403e9b57c5 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 26 Jul 2023 20:09:43 +0300 Subject: [PATCH 088/120] hot fixes --- .../widget/lib/gateway/gateway-connectors.component.html | 2 +- .../widget/lib/gateway/gateway-connectors.component.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index e3589f7ac1..52e0b4f661 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -137,7 +137,7 @@ {{ 'gateway.connectors-table-name' | translate }} - + {{ 'gateway.connectors-table-type' | translate }} diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index dbc1f5271a..65cf929705 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -99,7 +99,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie @Input() device: EntityId; - @ViewChild('searchInput') searchInputField: ElementRef; + @ViewChild('nameInput') nameInput: ElementRef; @ViewChild(MatSort) sort: MatSort; connectorForm: FormGroup; @@ -217,7 +217,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie value }]; const attributesToDelete = []; - const scope = (!this.initialConnector || this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; let updateActiveConnectors = false; if (this.initialConnector && this.initialConnector.name !== value.name) { attributesToDelete.push({key: this.initialConnector.name}); @@ -251,6 +251,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToDelete)); } forkJoin(tasks).subscribe(_ => { + this.initialConnector = value; this.showToast('Update Successful'); this.updateData(true); }); @@ -306,7 +307,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (this.connectorForm.disabled) { this.connectorForm.enable(); } + this.nameInput.nativeElement.focus(); this.clearOutConnectorForm(); + } clearOutConnectorForm(): void { @@ -381,7 +384,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.activeConnectors.splice(activeIndex, 1); } if (inactiveIndex !== -1) { - this.inactiveConnectors.splice(activeIndex, 1); + this.inactiveConnectors.splice(inactiveIndex, 1); } tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', From 0dac7b1966922c4180d52665583ef4098a4ae05d Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 26 Jul 2023 21:38:45 +0300 Subject: [PATCH 089/120] hot fixes --- .../widget/lib/gateway/gateway-connectors.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 65cf929705..52d03a035b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -100,7 +100,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie device: EntityId; @ViewChild('nameInput') nameInput: ElementRef; - @ViewChild(MatSort) sort: MatSort; + @ViewChild(MatSort, { static: false }) sort: MatSort; connectorForm: FormGroup; @@ -228,7 +228,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.activeConnectors.splice(activeIndex, 1); } if (inactiveIndex !== -1) { - this.inactiveConnectors.splice(activeIndex, 1); + this.inactiveConnectors.splice(inactiveIndex, 1); } } if (!this.activeConnectors.includes(value.name) && scope == AttributeScope.SHARED_SCOPE) { @@ -376,7 +376,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.dialogService.confirm(title, content, 'Cancel', 'Delete').subscribe(result => { if (result) { const tasks = []; - const scope = (this.activeConnectors.includes(attribute.key) || !this.initialConnector) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [attribute])); const activeIndex = this.activeConnectors.indexOf(attribute.key); const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); From 26f69ff2bc683d6250135cbd8647fb0662ba319f Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 12:02:17 +0300 Subject: [PATCH 090/120] updated connectors management logic --- .../gateway/gateway-connectors.component.ts | 77 ++++++++++--------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 52d03a035b..65fff6d58d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -24,14 +24,13 @@ import { MatDialog } from '@angular/material/dialog'; import { AttributeService } from '@core/http/attribute.service'; import { DeviceService } from '@core/http/device.service'; import { TranslateService } from '@ngx-translate/core'; -import { forkJoin, merge } from 'rxjs'; +import { forkJoin } from 'rxjs'; import { AttributeData, AttributeScope } from '@shared/models/telemetry/telemetry.models'; import { PageComponent } from '@shared/components/page.component'; import { PageLink } from '@shared/models/page/page-link'; import { AttributeDatasource } from '@home/models/datasource/attribute-datasource'; import { Direction, SortOrder } from '@shared/models/page/sort-order'; import { MatSort } from '@angular/material/sort'; -import { tap } from 'rxjs/operators'; import { TelemetryWebsocketService } from '@core/ws/telemetry-websocket.service'; import { MatTableDataSource } from '@angular/material/table'; import { GatewayLogLevel } from '@home/components/widget/lib/gateway/gateway-configuration.component'; @@ -40,6 +39,7 @@ import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { deepClone } from '@core/utils'; import { NULL_UUID } from '@shared/models/id/has-uuid'; +import { tap } from 'rxjs/operators'; export interface gatewayConnector { @@ -83,10 +83,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie attributeDataSource: AttributeDatasource; - sharedAttributeData: Array = []; - inactiveConnectorsDataSource: AttributeDatasource; + serverDataSource: AttributeDatasource; + dataSource: MatTableDataSource; displayedColumns = ['enabled', 'key', 'type', 'syncStatus', 'actions']; @@ -100,7 +100,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie device: EntityId; @ViewChild('nameInput') nameInput: ElementRef; - @ViewChild(MatSort, { static: false }) sort: MatSort; + @ViewChild(MatSort, {static: false}) sort: MatSort; connectorForm: FormGroup; @@ -120,6 +120,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie inactiveData: Array = []; + sharedAttributeData: Array = []; + initialConnector: gatewayConnector; constructor(protected router: Router, @@ -138,6 +140,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.pageLink = new PageLink(1000, 0, null, sortOrder); this.attributeDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); this.inactiveConnectorsDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); + this.serverDataSource = new AttributeDatasource(this.attributeService, this.telemetryWsService, this.zone, this.translate); this.dataSource = new MatTableDataSource([]); this.connectorForm = this.fb.group({ name: ['', [Validators.required, this.uniqNameRequired()]], @@ -155,11 +158,16 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.connectorForm.valueChanges.subscribe(() => { this.cd.detectChanges(); }); - merge(this.sort.sortChange) - .pipe( - tap(() => this.updateData()) - ) - .subscribe(); + + this.dataSource.sort = this.sort; + this.dataSource.sortingDataAccessor = (data: AttributeData, sortHeaderId: string) => { + if (sortHeaderId === 'syncStatus') { + return this.isConnectorSynced(data) ? 1 : 0; + } else if (sortHeaderId === 'enabled') { + return this.activeConnectors.includes(data.key) ? 1 : 0; + } + return data[sortHeaderId]; + }; this.viewsInited = true; if (this.device) { @@ -239,7 +247,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveConnectors.push(value.name); updateActiveConnectors = true; } - const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToSave)]; + const tasks = [this.attributeService.saveEntityAttributes(this.device, scope, attributesToSave)]; if (updateActiveConnectors) { tasks.push(this.attributeService.saveEntityAttributes(this.device, scope, [{ key: scope == AttributeScope.SHARED_SCOPE ? 'active_connectors' : 'inactive_connectors', @@ -248,7 +256,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } if (attributesToDelete.length) { - tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, attributesToDelete)); + tasks.push(this.attributeService.deleteEntityAttributes(this.device, scope, attributesToDelete)); } forkJoin(tasks).subscribe(_ => { this.initialConnector = value; @@ -257,19 +265,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }); } - resetSortAndFilter(update: boolean = true) { - this.textSearchMode = false; - this.pageLink.textSearch = null; - if (this.viewsInited) { - const sortable = this.sort.sortables.get('key'); - this.sort.active = sortable.id; - this.sort.direction = 'asc'; - if (update) { - this.updateData(true); - } - } - } - updateData(reload: boolean = false) { this.pageLink.sortOrder.property = this.sort.active; this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; @@ -278,10 +273,14 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.combineData(); }); this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { - this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); this.combineData(); }); + this.serverDataSource.loadAttributes(this.device, AttributeScope.SERVER_SCOPE, this.pageLink, reload).subscribe(data => { + this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); + this.combineData(); + }); + } isConnectorSynced(attribute: AttributeData) { @@ -300,7 +299,9 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } combineData() { - this.dataSource.data = [...this.activeData, ...this.inactiveData]; + this.dataSource.data = [...this.activeData, ...this.inactiveData, ...this.sharedAttributeData].filter((item, index, self) => + index === self.findIndex((t) => t.key === item.key) + ); } addAttribute(): void { @@ -377,7 +378,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (result) { const tasks = []; const scope = (this.initialConnector && this.activeConnectors.includes(this.initialConnector.name)) ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; - tasks.push(this.attributeService.deleteEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [attribute])); + tasks.push(this.attributeService.deleteEntityAttributes(this.device, scope, [attribute])); const activeIndex = this.activeConnectors.indexOf(attribute.key); const inactiveIndex = this.inactiveConnectors.indexOf(attribute.key); if (activeIndex !== -1) { @@ -431,6 +432,16 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie enableConnector(attribute): void { const wasEnabled = this.activeConnectors.includes(attribute.key); + const scopeOld = wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const scopeNew = !wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ + key: 'active_connectors', + value: this.activeConnectors + }]), this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, [{ + key: 'inactive_connectors', + value: this.inactiveConnectors + }]), this.attributeService.deleteEntityAttributes(this.device, scopeOld, [attribute]), + this.attributeService.saveEntityAttributes(this.device, scopeNew, [attribute])]; if (wasEnabled) { const index = this.activeConnectors.indexOf(attribute.key); this.activeConnectors.splice(index, 1); @@ -440,14 +451,8 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveConnectors.splice(index, 1); this.activeConnectors.push(attribute.key); } - forkJoin([this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ - key: 'active_connectors', - value: this.activeConnectors - }]), this.attributeService.saveEntityAttributes(this.device, AttributeScope.SERVER_SCOPE, [{ - key: 'inactive_connectors', - value: this.inactiveConnectors - }]),]).subscribe(_ => { - this.updateData(); + forkJoin(tasks).subscribe(_ => { + this.updateData(true); }); } From 173c2ec0d2f0cb8dadaf2fca378d9a26ff9c9230 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 13:47:27 +0300 Subject: [PATCH 091/120] update --- .../widget/lib/gateway/gateway-connectors.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 65fff6d58d..ba608c172b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -39,7 +39,6 @@ import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { deepClone } from '@core/utils'; import { NULL_UUID } from '@shared/models/id/has-uuid'; -import { tap } from 'rxjs/operators'; export interface gatewayConnector { @@ -434,6 +433,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie const wasEnabled = this.activeConnectors.includes(attribute.key); const scopeOld = wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; const scopeNew = !wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ key: 'active_connectors', value: this.activeConnectors @@ -442,6 +442,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie value: this.inactiveConnectors }]), this.attributeService.deleteEntityAttributes(this.device, scopeOld, [attribute]), this.attributeService.saveEntityAttributes(this.device, scopeNew, [attribute])]; + console.log(attribute) if (wasEnabled) { const index = this.activeConnectors.indexOf(attribute.key); this.activeConnectors.splice(index, 1); From 468cf7c198db110b220aabaa9ce4079bdf7d5635 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 14:10:14 +0300 Subject: [PATCH 092/120] update --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index ba608c172b..4570f6344f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -434,6 +434,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie const scopeOld = wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; const scopeNew = !wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + attribute.value.ts = new Date().getTime(); const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ key: 'active_connectors', value: this.activeConnectors @@ -442,7 +443,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie value: this.inactiveConnectors }]), this.attributeService.deleteEntityAttributes(this.device, scopeOld, [attribute]), this.attributeService.saveEntityAttributes(this.device, scopeNew, [attribute])]; - console.log(attribute) if (wasEnabled) { const index = this.activeConnectors.indexOf(attribute.key); this.activeConnectors.splice(index, 1); From 4ff0c874585d1ac23539f64e1e972ff0e75e9e00 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 14:30:13 +0300 Subject: [PATCH 093/120] update --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 4570f6344f..6daa323f03 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -165,7 +165,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } else if (sortHeaderId === 'enabled') { return this.activeConnectors.includes(data.key) ? 1 : 0; } - return data[sortHeaderId]; + return data[sortHeaderId] || data.value[sortHeaderId]; }; this.viewsInited = true; From 5c1fee0da0c0e78bfd66e4efc2156c69e3c72b92 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 14:56:35 +0300 Subject: [PATCH 094/120] test fix --- .../gateway/gateway-connectors.component.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 6daa323f03..9d8c62491f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -269,17 +269,19 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); - this.combineData(); - }); - this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { - this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); - this.combineData(); - }); - this.serverDataSource.loadAttributes(this.device, AttributeScope.SERVER_SCOPE, this.pageLink, reload).subscribe(data => { - this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); - this.combineData(); + // this.combineData(); + this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { + this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); + // this.combineData(); + this.serverDataSource.loadAttributes(this.device, AttributeScope.SERVER_SCOPE, this.pageLink, reload).subscribe(data => { + this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); + this.combineData(); + }); + }); }); + + } isConnectorSynced(attribute: AttributeData) { From 08bdc8e33a8602c4e6b1328e862fbb3f0dd3e367 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 14:56:59 +0300 Subject: [PATCH 095/120] test fix --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 9d8c62491f..95ea64ce87 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -398,7 +398,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.cd.detectChanges(); this.connectorForm.disable(); } - this.updateData(); + this.updateData(true); }); } }); From 8c02cf9d1bd1be7c34adecc10ff3e76d1663cf05 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 15:26:06 +0300 Subject: [PATCH 096/120] Revert "test fix" This reverts commit 08bdc8e33a8602c4e6b1328e862fbb3f0dd3e367. --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 95ea64ce87..9d8c62491f 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -398,7 +398,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.cd.detectChanges(); this.connectorForm.disable(); } - this.updateData(true); + this.updateData(); }); } }); From e22a10c06fadc4cef23a2ec065f6ad08b5cc40cc Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 15:26:35 +0300 Subject: [PATCH 097/120] Revert "test fix" This reverts commit 5c1fee0da0c0e78bfd66e4efc2156c69e3c72b92. --- .../gateway/gateway-connectors.component.ts | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 9d8c62491f..6daa323f03 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -269,18 +269,16 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.pageLink.sortOrder.direction = Direction[this.sort.direction.toUpperCase()]; this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); - // this.combineData(); - this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { - this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); - // this.combineData(); - this.serverDataSource.loadAttributes(this.device, AttributeScope.SERVER_SCOPE, this.pageLink, reload).subscribe(data => { - this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); - this.combineData(); - }); - }); + this.combineData(); + }); + this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { + this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); + this.combineData(); + }); + this.serverDataSource.loadAttributes(this.device, AttributeScope.SERVER_SCOPE, this.pageLink, reload).subscribe(data => { + this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); + this.combineData(); }); - - } From bf2e2ee27e5816f1fd548c75d22fd6e728dc70e5 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 15:27:21 +0300 Subject: [PATCH 098/120] update data true --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 6daa323f03..364ad098bd 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -396,7 +396,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.cd.detectChanges(); this.connectorForm.disable(); } - this.updateData(); + this.updateData(true); }); } }); From ada2686e6eaa77b7bff67f89e621f60562d7ca01 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 15:28:59 +0300 Subject: [PATCH 099/120] add log to debug --- .../widget/lib/gateway/gateway-connectors.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 364ad098bd..857906d4e0 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -165,6 +165,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } else if (sortHeaderId === 'enabled') { return this.activeConnectors.includes(data.key) ? 1 : 0; } + console.log(data[sortHeaderId] || data.value[sortHeaderId]); return data[sortHeaderId] || data.value[sortHeaderId]; }; From 24474f27e571a4c8a9701c30fe9b3cefafb411a6 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Thu, 27 Jul 2023 15:29:36 +0300 Subject: [PATCH 100/120] add log to debug --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index 857906d4e0..a8e2effa70 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -165,7 +165,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } else if (sortHeaderId === 'enabled') { return this.activeConnectors.includes(data.key) ? 1 : 0; } - console.log(data[sortHeaderId] || data.value[sortHeaderId]); + console.log(data, sortHeaderId, data[sortHeaderId] || data.value[sortHeaderId]); return data[sortHeaderId] || data.value[sortHeaderId]; }; From 880e1b32da606553b9ffe1f297db84347f153b30 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 28 Jul 2023 09:48:46 +0300 Subject: [PATCH 101/120] json formating connector --- .../gateway/gateway-connectors.component.ts | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index a8e2effa70..dccf0e8657 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -165,7 +165,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } else if (sortHeaderId === 'enabled') { return this.activeConnectors.includes(data.key) ? 1 : 0; } - console.log(data, sortHeaderId, data[sortHeaderId] || data.value[sortHeaderId]); return data[sortHeaderId] || data.value[sortHeaderId]; }; @@ -193,7 +192,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie return (c: UntypedFormControl) => { const newName = c.value.trim().toLowerCase(); const found = this.dataSource.data.find((connectorAttr) => { - const connectorData = typeof connectorAttr.value === 'string' ? JSON.parse(connectorAttr.value) : connectorAttr.value; + const connectorData = connectorAttr.value; return connectorData.name.toLowerCase() === newName; }); if (found) { @@ -284,15 +283,15 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } isConnectorSynced(attribute: AttributeData) { - const connectorData = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + const connectorData = attribute.value; if (!connectorData.ts) return false; const clientIndex = this.activeData.findIndex(data => { - const sharedData = typeof data.value === 'string' ? JSON.parse(data.value) : data.value; + const sharedData = data.value; return sharedData.name === connectorData.name; }) if (clientIndex == -1) return false; const sharedIndex = this.sharedAttributeData.findIndex(data => { - const sharedData = typeof data.value === 'string' ? JSON.parse(data.value) : data.value; + const sharedData = data.value; return sharedData.name === connectorData.name && sharedData.ts && sharedData.ts <= connectorData.ts; }) return sharedIndex !== -1; @@ -301,7 +300,10 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie combineData() { this.dataSource.data = [...this.activeData, ...this.inactiveData, ...this.sharedAttributeData].filter((item, index, self) => index === self.findIndex((t) => t.key === item.key) - ); + ).map(attribute=>{ + attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + return attribute + }); } addAttribute(): void { @@ -331,7 +333,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if (this.connectorForm.disabled) { this.connectorForm.enable(); } - const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + const connector = attribute.value; if (!connector.configuration) { connector.configuration = ''; } @@ -345,7 +347,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie isSameConnector(attribute): boolean { if (!this.initialConnector) return false; - const connector = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + const connector = attribute.value; return this.initialConnector.name === connector.name; } @@ -364,7 +366,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } returnType(attribute) { - const value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; + const value = attribute.value; return this.gatewayConnectorDefaultTypes.get(value.type); } @@ -411,7 +413,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if ($event) { $event.stopPropagation(); } - attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_logs = attribute; params.targetEntityParamName = 'connector_logs'; @@ -422,7 +423,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie if ($event) { $event.stopPropagation(); } - attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; const params = deepClone(this.ctx.stateController.getStateParams()); params.connector_rpc = attribute; params.targetEntityParamName = 'connector_rpc'; @@ -434,7 +434,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie const wasEnabled = this.activeConnectors.includes(attribute.key); const scopeOld = wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; const scopeNew = !wasEnabled ? AttributeScope.SHARED_SCOPE : AttributeScope.SERVER_SCOPE; - attribute.value = typeof attribute.value === 'string' ? JSON.parse(attribute.value) : attribute.value; attribute.value.ts = new Date().getTime(); const tasks = [this.attributeService.saveEntityAttributes(this.device, AttributeScope.SHARED_SCOPE, [{ key: 'active_connectors', From 12ab38d7d11a6953a40056d97a056c1ecf3536a9 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 28 Jul 2023 10:20:49 +0300 Subject: [PATCH 102/120] connectors formating logs --- .../widget/lib/gateway/gateway-connectors.component.html | 4 ++-- .../widget/lib/gateway/gateway-connectors.component.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index 52e0b4f661..f35754aea2 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -58,7 +58,7 @@ - {{ 'gateway.connectors-table-status' | translate }} + {{ 'gateway.configuration' | translate }}
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index dccf0e8657..fd989308e4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -165,6 +165,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } else if (sortHeaderId === 'enabled') { return this.activeConnectors.includes(data.key) ? 1 : 0; } + console.log(data, sortHeaderId, data[sortHeaderId] || data.value[sortHeaderId]); return data[sortHeaderId] || data.value[sortHeaderId]; }; From 7d9203f0e85bad75115cc3a302f57ea259969986 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 28 Jul 2023 11:06:17 +0300 Subject: [PATCH 103/120] update --- .../src/main/data/json/demo/dashboards/gateway_list.json | 6 +++--- .../widget/lib/gateway/gateway-connectors.component.ts | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 440fd4c6b3..5d4760fb37 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -550,9 +550,9 @@ "padding": "8px", "settings": { "useMarkdownTextFunction": true, - "markdownTextFunction": "var blockData = '';\n\nfunction createDataBlock(value, label, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Name, \"Gateway Name\", ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\");\ncreateDataBlock(data[0].Status, \"Status\");\ncreateDataBlock(data[1]?data[1].count:0, \"Active Devices\");\ncreateDataBlock(data[2]?data[2][\"count 2\"]:0, \"Inactive Devices\");\ncreateDataBlock(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0, \"Enabled Connectors\");\ncreateDataBlock(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0, \"Disabled Connectors\");\nreturn `
${blockData}
`;", + "markdownTextFunction": "var blockData = '';\nfunction createDataBlock(value, label, dividerStyle, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Status, \"Status\", data[0].Status === \"Active\"? 'divider-green' : 'divider-red');\ncreateDataBlock(data[0].Name, \"Gateway Name\", '', ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\", '');\ncreateDataBlock((data[1]?data[1].count:0) + \" | \" + (data[2]?data[2][\"count 2\"]:0), \"Devices\", '');\ncreateDataBlock((data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0) + \" | \" + (data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0), \"Connectors\", '');\nreturn `
${blockData}
`;", "applyDefaultMarkdownStyle": false, - "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" + "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.divider-green .divider {\n border: 1px solid rgb(25,128,56);\n background-color: rgb(25,128,56);\n}\n\n.divider-green .mat-mdc-card-content {\n color: rgb(25,128,56);\n}\n\n.divider-red .divider {\n border: 1px solid rgb(203,37,48);\n background-color: rgb(203,37,48);\n}\n\n.divider-red .mat-mdc-card-content {\n color: rgb(203,37,48);\n}\n\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" }, "title": "New Markdown/HTML Card", "showTitleIcon": false, @@ -889,7 +889,7 @@ "name": null, "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", "filterId": null, - "dataKeys": null, + "dataKeys": [], "alarmFilterConfig": { "statusList": [ "ACTIVE" diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index fd989308e4..dccf0e8657 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -165,7 +165,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie } else if (sortHeaderId === 'enabled') { return this.activeConnectors.includes(data.key) ? 1 : 0; } - console.log(data, sortHeaderId, data[sortHeaderId] || data.value[sortHeaderId]); return data[sortHeaderId] || data.value[sortHeaderId]; }; From ee72b50684354d6c392b1fc4dec432107a483d99 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 28 Jul 2023 16:04:18 +0300 Subject: [PATCH 104/120] tb_logger to tb_handler --- .../widget/lib/gateway/gateway-configuration.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts index 1b70c6e295..a57bd6750e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-configuration.component.ts @@ -562,7 +562,7 @@ export class GatewayConfigurationComponent implements OnInit { stream: 'ext://sys.stdout' }, databaseHandler: { - class: 'thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler', + class: 'thingsboard_gateway.tb_utility.tb_handler.TimedRotatingFileHandler', formatter: 'LogFormatter', filename: './logs/database.log', backupCount: 1, @@ -593,7 +593,7 @@ export class GatewayConfigurationComponent implements OnInit { createHandlerObj(logObj, key) { return { - class: 'thingsboard_gateway.tb_utility.tb_logger.TimedRotatingFileHandler', + class: 'thingsboard_gateway.tb_utility.tb_handler.TimedRotatingFileHandler', formatter: 'LogFormatter', filename: `${logObj.filePath}/${key}.log`, backupCount: logObj.backupCount, From b94a55944c1acb7a589df80f125a7260f52ee9c0 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 28 Jul 2023 16:20:01 +0300 Subject: [PATCH 105/120] hotfix --- .../components/widget/lib/gateway/gateway-logs.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts index df83c11367..c4fb8a3534 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts @@ -165,7 +165,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit updateData(sort?) { - if (this.ctx.defaultSubscription.data.length) { + if (this.ctx.defaultSubscription.data.length && this.ctx.defaultSubscription.data[0]) { let attrData = this.ctx.defaultSubscription.data[0].data.map(data => { let result = { ts: data[0], From 67031e43da791fe64b758eda1c689e09eaedf934 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 31 Jul 2023 12:24:07 +0300 Subject: [PATCH 106/120] connector status and new gateway cards --- .../json/demo/dashboards/gateway_list.json | 10 ++- .../gateway/gateway-connectors.component.html | 14 +++++ .../gateway/gateway-connectors.component.scss | 16 +++++ .../gateway/gateway-connectors.component.ts | 61 ++++++++++++++++++- .../lib/gateway/gateway-logs.component.ts | 2 +- .../assets/locale/locale.constant-en_US.json | 2 +- 6 files changed, 100 insertions(+), 5 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 5d4760fb37..24b547c8bc 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -479,6 +479,14 @@ "funcBody": null, "usePostProcessing": true, "postFuncBody": "var newValue = value == 'true' ? \"Active\" : \"Inactive\";\nreturn newValue;" + }, + { + "name": "ALL_ERRORS_COUNT", + "type": "timeseries", + "label": "ALL_ERRORS_COUNT", + "color": "#ffeb3b", + "settings": {}, + "_hash": 0.2770587478725004 } ], "alarmFilterConfig": { @@ -550,7 +558,7 @@ "padding": "8px", "settings": { "useMarkdownTextFunction": true, - "markdownTextFunction": "var blockData = '';\nfunction createDataBlock(value, label, dividerStyle, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Status, \"Status\", data[0].Status === \"Active\"? 'divider-green' : 'divider-red');\ncreateDataBlock(data[0].Name, \"Gateway Name\", '', ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\", '');\ncreateDataBlock((data[1]?data[1].count:0) + \" | \" + (data[2]?data[2][\"count 2\"]:0), \"Devices\", '');\ncreateDataBlock((data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0) + \" | \" + (data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0), \"Connectors\", '');\nreturn `
${blockData}
`;", + "markdownTextFunction": "var blockData = '';\nfunction createDataBlock(value, label, dividerStyle, mobile) {\n blockData += `\n \n
\n \n \n ${label}\n \n ${value}\n
`;\n}\ncreateDataBlock(data[0].Status, \"Status\", data[0].Status === \"Active\"? 'divider-green' : 'divider-red');\ncreateDataBlock(data[0].Name, \"Gateway Name\", '', ctx.isMobile);\ncreateDataBlock(data[0].Type, \"Gateway Type\", '');\ncreateDataBlock(\n `${(data[1]?data[1].count:0)} `\n + \" | \" + \n `${(data[2]?data[2][\"count 2\"]:0)} `\n , \"Devices\", '');\ncreateDataBlock(\n `${(data[0].active_connectors?JSON.parse(data[0].active_connectors).length:0)} `\n + \" | \" + \n `${(data[0].inactive_connectors?JSON.parse(data[0].inactive_connectors).length:0)} `\n , \"Connectors\", '');\ncreateDataBlock(data[0].ALL_ERRORS_COUNT || 0, \"Errors\", (data[0].ALL_ERRORS_COUNT || 0) === 0 ? 'divider-green' : 'divider-red');\nreturn `
${blockData}
`;", "applyDefaultMarkdownStyle": false, "markdownCss": ".divider {\n position: absolute;\n width: 3px;\n top: 8px;\n border-radius: 2px;\n bottom: 8px;\n border: 1px solid rgba(31, 70, 144, 1);\n background-color: rgba(31, 70, 144, 1);\n left: 10px;\n}\n.divider-green .divider {\n border: 1px solid rgb(25,128,56);\n background-color: rgb(25,128,56);\n}\n\n.divider-green .mat-mdc-card-content {\n color: rgb(25,128,56);\n}\n\n.divider-red .divider {\n border: 1px solid rgb(203,37,48);\n background-color: rgb(203,37,48);\n}\n\n.divider-red .mat-mdc-card-content {\n color: rgb(203,37,48);\n}\n\n.mdc-card {\n position: relative;\n padding-left: 10px;\n margin-bottom: 1px;\n}\n\n.mat-mdc-card-subtitle {\n font-weight: 400;\n font-size: 12px;\n}\n\n.mat-mdc-card-header {\n padding: 8px 16px 0;\n}\n\n.mat-mdc-card-content:last-child {\n padding-bottom: 8px;\n font-size: 16px;\n}\n\n.cards-container {\n height: calc(100% - 1px);\n justify-content: stretch;\n align-items: center;\n margin-bottom: 1px;\n}" }, diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index f35754aea2..652f73fa1b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -69,6 +69,20 @@ }">{{isConnectorSynced(attribute)?'sync' : 'out of sync'}}
+ + + {{ 'gateway.connectors-table-status' | translate }} + + + + + diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss index 6d5a6c4585..87e099d652 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss @@ -90,6 +90,22 @@ mat-row { cursor: pointer; } + + .dot { + height: 25px; + width: 25px; + background-color: #bbb; + border-radius: 50%; + display: inline-block; + } + + .hasErrors { + background-color: rgb(203, 37, 48); + } + + .noErrors { + background-color: rgb(25, 128, 56); + } } :host ::ng-deep tb-json-object-edit > div { diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index dccf0e8657..f673f67cf4 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -39,6 +39,10 @@ import { DialogService } from '@core/services/dialog.service'; import { WidgetContext } from '@home/models/widget-component.models'; import { deepClone } from '@core/utils'; import { NULL_UUID } from '@shared/models/id/has-uuid'; +import { IWidgetSubscription, WidgetSubscriptionOptions } from '@core/api/widget-api.models'; +import { DatasourceType, widgetType } from '@shared/models/widget.models'; +import { UtilsService } from '@core/services/utils.service'; +import { EntityType } from '@shared/models/entity-type.models'; export interface gatewayConnector { @@ -88,7 +92,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie dataSource: MatTableDataSource; - displayedColumns = ['enabled', 'key', 'type', 'syncStatus', 'actions']; + displayedColumns = ['enabled', 'key', 'type', 'syncStatus', 'errors', 'actions']; gatewayConnectorDefaultTypes = GatewayConnectorDefaultTypesTranslates; @@ -123,6 +127,19 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie initialConnector: gatewayConnector; + subscriptionOptions: WidgetSubscriptionOptions = { + callbacks: { + onDataUpdated: () => this.ctx.ngZone.run(() => { + this.onDataUpdated(); + }), + onDataUpdateError: (subscription, e) => this.ctx.ngZone.run(() => { + this.onDataUpdateError(e); + }) + } + }; + + subscription: IWidgetSubscription; + constructor(protected router: Router, protected store: Store, protected fb: FormBuilder, @@ -132,6 +149,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie protected dialogService: DialogService, private telemetryWsService: TelemetryWebsocketService, private zone: NgZone, + private utils: UtilsService, private cd: ChangeDetectorRef, public dialog: MatDialog) { super(store); @@ -270,6 +288,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.attributeDataSource.loadAttributes(this.device, AttributeScope.CLIENT_SCOPE, this.pageLink, reload).subscribe(data => { this.activeData = data.data.filter(value => this.activeConnectors.includes(value.key)); this.combineData(); + this.generateSubscription(); }); this.inactiveConnectorsDataSource.loadAttributes(this.device, AttributeScope.SHARED_SCOPE, this.pageLink, reload).subscribe(data => { this.sharedAttributeData = data.data.filter(value => this.activeConnectors.includes(value.key)); @@ -279,7 +298,6 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie this.inactiveData = data.data.filter(value => this.inactiveConnectors.includes(value.key)); this.combineData(); }); - } isConnectorSynced(attribute: AttributeData) { @@ -457,4 +475,43 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie }); } + onDataUpdateError(e: any) { + const exceptionData = this.utils.parseException(e); + let errorText = exceptionData.name; + if (exceptionData.message) { + errorText += ': ' + exceptionData.message; + } + console.error(errorText); + } + + onDataUpdated() { + this.cd.detectChanges(); + } + + generateSubscription() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + if (this.device) { + const subscriptionInfo = [{ + type: DatasourceType.entity, + entityType: EntityType.DEVICE, + entityId: this.device.id, + entityName: "Gateway", + timeseries: [] + }]; + this.dataSource.data.forEach(value => { + subscriptionInfo[0].timeseries.push({name: `${value.key}_ERRORS_COUNT`, label: `${value.key}_ERRORS_COUNT`}) + }) + this.ctx.subscriptionApi.createSubscriptionFromInfo(widgetType.latest, subscriptionInfo,this.subscriptionOptions, false, true).subscribe(subscription => { + this.subscription = subscription; + }); + } + } + + getErrorsCount(attribute) { + const connectorName = attribute.key; + const connector = this.subscription.data.find(data=>data && data.dataKey.name === `${connectorName}_ERRORS_COUNT`); + return (connector && this.activeConnectors.includes(connectorName))? connector.data[0][1]: 'inactive'; + } } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts index c4fb8a3534..f724e9dff9 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-logs.component.ts @@ -219,7 +219,7 @@ export class GatewayLogsComponent extends PageComponent implements AfterViewInit } changeSubscription() { - if (this.ctx.datasources[0].entity) { + if (this.ctx.datasources && this.ctx.datasources[0].entity && this.ctx.defaultSubscription.options.datasources) { this.ctx.defaultSubscription.options.datasources[0].dataKeys = [{ name: this.activeLink.key, type: DataKeyType.timeseries, diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index b9d14eff0e..25969fb9e0 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -2617,7 +2617,7 @@ "connectors-table-enabled": "Enabled", "connectors-table-name": "Name", "connectors-table-type": "Type", - "connectors-table-status": "Sync status", + "connectors-table-status": "Status", "connectors-table-actions": "Actions", "connectors-table-key": "Key", "connectors-table-class": "Class", From 243b7c962a4e82b04ab32b81b1618225a391ae38 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 31 Jul 2023 13:40:43 +0300 Subject: [PATCH 107/120] connector status and new gateway cards --- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts index f673f67cf4..655c50617d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.ts @@ -511,7 +511,7 @@ export class GatewayConnectorComponent extends PageComponent implements AfterVie getErrorsCount(attribute) { const connectorName = attribute.key; - const connector = this.subscription.data.find(data=>data && data.dataKey.name === `${connectorName}_ERRORS_COUNT`); + const connector = this.subscription && this.subscription.data.find(data=>data && data.dataKey.name === `${connectorName}_ERRORS_COUNT`); return (connector && this.activeConnectors.includes(connectorName))? connector.data[0][1]: 'inactive'; } } From e964d5e075ad52330e3e23fd6bf0a97f4dc70698 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Mon, 31 Jul 2023 13:51:47 +0300 Subject: [PATCH 108/120] connector status --- .../widget/lib/gateway/gateway-connectors.component.html | 2 +- .../widget/lib/gateway/gateway-connectors.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html index 652f73fa1b..f15016a32b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.html @@ -75,7 +75,7 @@ -
- +
+

{{ 'gateway.connectors' | translate }}

@@ -148,7 +148,7 @@
- + {{ 'gateway.connectors-table-name' | translate }} From 30dac22b60cb3815bb365803fc33e58237696e48 Mon Sep 17 00:00:00 2001 From: imbeacon Date: Fri, 4 Aug 2023 12:41:52 +0300 Subject: [PATCH 110/120] Initial commit for gateway commands --- .../server/common/data/DataConstants.java | 1 + .../device/DeviceConnectivityServiceImpl.java | 54 ++++++++++++++++++- .../dao/util/DeviceConnectivityUtil.java | 49 +++++++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java b/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java index 02871a59b6..22123a7ea3 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/DataConstants.java @@ -43,6 +43,7 @@ public class DataConstants { public static final String RETRIES = "retries"; public static final String EDGE_ID = "edgeId"; public static final String DEVICE_ID = "deviceId"; + public static final String GATEWAY_PARAMETER = "gateway"; public static final String COAP_TRANSPORT_NAME = "COAP"; public static final String LWM2M_TRANSPORT_NAME = "LWM2M"; public static final String MQTT_TRANSPORT_NAME = "MQTT"; diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java index c06103d8f3..1d1c627a66 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java @@ -19,11 +19,13 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Service; import org.thingsboard.common.util.JacksonUtil; +import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.DeviceTransportType; @@ -46,10 +48,13 @@ import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.CHECK_DOCUM import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.COAP; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.COAPS; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.DOCKER; +import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.GATEWAY; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.HTTP; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.HTTPS; +import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.LINUX; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.MQTT; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.MQTTS; +import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.WINDOWS; @Service("DeviceConnectivityDaoService") @Slf4j @@ -79,6 +84,12 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService DeviceTransportType transportType = deviceProfile.getTransportType(); ObjectNode commands = JacksonUtil.newObjectNode(); + if (checkIsGateway(device)) { + Optional.ofNullable(getMqttTransportPublishCommands(baseUrl, creds, true)) + .ifPresent(v -> commands.set(MQTT, v)); + return commands; + } + switch (transportType) { case DEFAULT: Optional.ofNullable(getHttpTransportPublishCommands(baseUrl, creds)) @@ -148,10 +159,18 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } private JsonNode getMqttTransportPublishCommands(String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { - return getMqttTransportPublishCommands(baseUrl, DEFAULT_DEVICE_TELEMETRY_TOPIC, deviceCredentials); + return getMqttTransportPublishCommands(baseUrl, deviceCredentials, false); + } + + private JsonNode getMqttTransportPublishCommands(String baseUrl, DeviceCredentials deviceCredentials, boolean isGateway) throws URISyntaxException { + return getMqttTransportPublishCommands(baseUrl, DEFAULT_DEVICE_TELEMETRY_TOPIC, deviceCredentials, isGateway); } private JsonNode getMqttTransportPublishCommands(String baseUrl, String topic, DeviceCredentials deviceCredentials) throws URISyntaxException { + return getMqttTransportPublishCommands(baseUrl, topic, deviceCredentials, false); + } + + private JsonNode getMqttTransportPublishCommands(String baseUrl, String topic, DeviceCredentials deviceCredentials, boolean isGateway) throws URISyntaxException { ObjectNode mqttCommands = JacksonUtil.newObjectNode(); if (deviceCredentials.getCredentialsType() == DeviceCredentialsType.X509_CERTIFICATE) { @@ -160,6 +179,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } ObjectNode dockerMqttCommands = JacksonUtil.newObjectNode(); + ObjectNode gatewayDockerMqttCommands = JacksonUtil.newObjectNode(); if (deviceConnectivityConfiguration.isEnabled(MQTT)) { Optional.ofNullable(getMqttPublishCommand(baseUrl, topic, deviceCredentials)). @@ -167,6 +187,11 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService Optional.ofNullable(getDockerMqttPublishCommand(MQTT, baseUrl, topic, deviceCredentials)) .ifPresent(v -> dockerMqttCommands.put(MQTT, v)); + + if (isGateway) { + Optional.ofNullable(getGatewayDockerCommands(baseUrl, deviceCredentials, MQTT)) + .ifPresent(v -> gatewayDockerMqttCommands.set(MQTT, v)); + } } if (deviceConnectivityConfiguration.isEnabled(MQTTS)) { @@ -178,11 +203,21 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService Optional.ofNullable(getDockerMqttPublishCommand(MQTTS, baseUrl, topic, deviceCredentials)) .ifPresent(v -> dockerMqttCommands.put(MQTTS, v)); + + if (isGateway) { + Optional.ofNullable(getGatewayDockerCommands(baseUrl, deviceCredentials, MQTTS)) + .ifPresent(v -> gatewayDockerMqttCommands.set(MQTTS, v)); + } } if (!dockerMqttCommands.isEmpty()) { mqttCommands.set(DOCKER, dockerMqttCommands); } + + if (!gatewayDockerMqttCommands.isEmpty()) { + mqttCommands.set(GATEWAY, gatewayDockerMqttCommands); + } + return mqttCommands.isEmpty() ? null : mqttCommands; } @@ -208,6 +243,18 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService return null; } + private JsonNode getGatewayDockerCommands(String baseUrl, DeviceCredentials deviceCredentials, String mqttType) throws URISyntaxException { + ObjectNode dockerLaunchCommands = JacksonUtil.newObjectNode(); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(mqttType); + String mqttHost = getHost(baseUrl, properties); + String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); + Optional.ofNullable(DeviceConnectivityUtil.getGatewayLaunchCommand(LINUX, mqttHost, mqttPort, deviceCredentials)) + .ifPresent(v -> dockerLaunchCommands.put(LINUX, v)); + Optional.ofNullable(DeviceConnectivityUtil.getGatewayLaunchCommand(WINDOWS, mqttHost, mqttPort, deviceCredentials)) + .ifPresent(v -> dockerLaunchCommands.put(WINDOWS, v)); + return dockerLaunchCommands.isEmpty() ? null : dockerLaunchCommands; + } + private String getDockerMqttPublishCommand(String protocol, String baseUrl, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) throws URISyntaxException { DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(protocol); String mqttHost = getHost(baseUrl, properties); @@ -265,4 +312,9 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService private String getHost(String baseUrl, DeviceConnectivityInfo properties) throws URISyntaxException { return properties.getHost().isEmpty() ? new URI(baseUrl).getHost() : properties.getHost(); } + + private static boolean checkIsGateway(Device device) { + return device.getAdditionalInfo().has(DataConstants.GATEWAY_PARAMETER) && + device.getAdditionalInfo().get(DataConstants.GATEWAY_PARAMETER).asBoolean(); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java b/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java index 1d20c62d70..36770e9754 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.dao.util; +import org.apache.commons.lang3.StringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; import org.thingsboard.server.common.data.security.DeviceCredentials; @@ -30,6 +31,7 @@ public class DeviceConnectivityUtil { public static final String MQTTS = "mqtts"; public static final String COAP = "coap"; public static final String COAPS = "coaps"; + public static final String GATEWAY = "gateway"; public static final String PEM_CERT_FILE_NAME = "tb-server-chain.pem"; public static final String CHECK_DOCUMENTATION = "Check documentation"; public static final String JSON_EXAMPLE_PAYLOAD = "\"{temperature:25}\""; @@ -78,6 +80,53 @@ public class DeviceConnectivityUtil { return command.toString(); } + public static String getGatewayLaunchCommand(String os, String host, String port, DeviceCredentials deviceCredentials) { + String gatewayVolumePathPrefix = "~/.tb-gateway"; + if (WINDOWS.equals(os)) { + gatewayVolumePathPrefix = "%HOMEPATH%/tb-gateway"; + } + + String gatewayContainerName = "tbGateway" + StringUtils.capitalize(host.replace(".", "")); + + StringBuilder command = new StringBuilder(DOCKER_RUN); + command.append("-v {gatewayVolumePathPrefix}/logs:/thingsboard_gateway/logs".replace("{gatewayVolumePathPrefix}", gatewayVolumePathPrefix)); + command.append(" -v {gatewayVolumePathPrefix}/extensions:/thingsboard_gateway/extensions".replace("{gatewayVolumePathPrefix}", gatewayVolumePathPrefix)); + command.append(" -v {gatewayVolumePathPrefix}/config:/thingsboard_gateway/config".replace("{gatewayVolumePathPrefix}", gatewayVolumePathPrefix)); + command.append(" --name ").append(gatewayContainerName); + command.append(" -e host=").append(host); + command.append(" -e port=").append(port); + + switch(deviceCredentials.getCredentialsType()) { + case ACCESS_TOKEN: + command.append(" -e accessToken=").append(deviceCredentials.getCredentialsId()); + break; + case MQTT_BASIC: + BasicMqttCredentials credentials = JacksonUtil.fromString(deviceCredentials.getCredentialsValue(), + BasicMqttCredentials.class); + if (credentials != null) { + if (credentials.getClientId() != null) { + command.append(" -e clientId=").append(credentials.getClientId()); + } + if (credentials.getUserName() != null) { + command.append(" -e username=").append(credentials.getUserName()); + } + if (credentials.getPassword() != null) { + command.append(" -e password=").append(credentials.getPassword()); + } + } else { + return null; + } + break; + default: + return null; + } + + command.append(" --restart always"); + command.append(" thingsboard/tb-gateway"); + + return command.toString(); + } + public static String getDockerMqttPublishCommand(String protocol, String baseUrl, String host, String port, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) { String mqttCommand = getMqttPublishCommand(protocol, host, port, deviceTelemetryTopic, deviceCredentials); From 8e20c6e51908f01eb504c0ec23d6da0820175fde Mon Sep 17 00:00:00 2001 From: imbeacon Date: Fri, 4 Aug 2023 15:17:05 +0300 Subject: [PATCH 111/120] Added gateway launch command --- .../DeviceConnectivityController.java | 36 +++++++++++ .../dao/device/DeviceConnectivityService.java | 2 + .../device/DeviceConnectivityServiceImpl.java | 59 +++++++------------ 3 files changed, 59 insertions(+), 38 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceConnectivityController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceConnectivityController.java index 04b1b4c522..23985f3975 100644 --- a/application/src/main/java/org/thingsboard/server/controller/DeviceConnectivityController.java +++ b/application/src/main/java/org/thingsboard/server/controller/DeviceConnectivityController.java @@ -31,7 +31,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; import org.thingsboard.server.common.data.exception.ThingsboardException; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.dao.device.DeviceConnectivityService; @@ -87,6 +89,36 @@ public class DeviceConnectivityController extends BaseController { return deviceConnectivityService.findDevicePublishTelemetryCommands(baseUrl, device); } + @ApiOperation(value = "Get commands to launch gateway (getGatewayLaunchCommands)", + notes = "Fetch the list of commands for different operation systems to launch a gateway using docker." + + TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "OK", + examples = @io.swagger.annotations.Example( + value = { + @io.swagger.annotations.ExampleProperty( + mediaType = "application/json", + value = "{\"mqtt\": {\n" + + " \"linux\": \"docker run --rm -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v ~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tbGateway127001 -e host=localhost -e port=1883 -e accessToken=qTe5oDBHPJf0KCSKO8J3 --restart always thingsboard/tb-gateway\",\n" + + " \"windows\": \"docker run --rm -it -v %HOMEPATH%/tb-gateway/logs:/thingsboard_gateway/logs -v %HOMEPATH%/tb-gateway/extensions:/thingsboard_gateway/extensions -v %HOMEPATH%/tb-gateway/config:/thingsboard_gateway/config --name tbGateway127001 -e host=localhost -e port=1883 -e accessToken=qTe5oDBHPJf0KCSKO8J3 --restart always thingsboard/tb-gateway\"}\n" + + "}")}))}) + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") + @RequestMapping(value = "/device-connectivity/gateway-launch/{deviceId}", method = RequestMethod.GET) + @ResponseBody + public JsonNode getGatewayLaunchCommands(@ApiParam(value = DEVICE_ID_PARAM_DESCRIPTION) + @PathVariable(DEVICE_ID) String strDeviceId, HttpServletRequest request) throws ThingsboardException, URISyntaxException { + checkParameter(DEVICE_ID, strDeviceId); + DeviceId deviceId = new DeviceId(toUUID(strDeviceId)); + Device device = checkDeviceId(deviceId, Operation.READ_CREDENTIALS); + + if (!checkIsGateway(device)) { + throw new ThingsboardException("The device must be a gateway!", ThingsboardErrorCode.BAD_REQUEST_PARAMS); + } + + String baseUrl = systemSecurityService.getBaseUrl(getTenantId(), getCurrentUser().getCustomerId(), request); + return deviceConnectivityService.findGatewayLaunchCommands(baseUrl, device); + } + @ApiOperation(value = "Download server certificate using file path defined in device.connectivity properties (downloadServerCertificate)", notes = "Download server certificate.") @RequestMapping(value = "/device-connectivity/{protocol}/certificate/download", method = RequestMethod.GET) @ResponseBody @@ -104,4 +136,8 @@ public class DeviceConnectivityController extends BaseController { .body(pemCert); } + private static boolean checkIsGateway(Device device) { + return device.getAdditionalInfo().has(DataConstants.GATEWAY_PARAMETER) && + device.getAdditionalInfo().get(DataConstants.GATEWAY_PARAMETER).asBoolean(); + } } diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityService.java index 90355d885d..4f2d9a1aee 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityService.java @@ -25,5 +25,7 @@ public interface DeviceConnectivityService { JsonNode findDevicePublishTelemetryCommands(String baseUrl, Device device) throws URISyntaxException; + JsonNode findGatewayLaunchCommands(String baseUrl, Device device) throws URISyntaxException; + Resource getPemCertFile(String protocol); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java index 1d1c627a66..8c4faa2b8c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java @@ -19,13 +19,11 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Service; import org.thingsboard.common.util.JacksonUtil; -import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.DeviceTransportType; @@ -48,7 +46,6 @@ import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.CHECK_DOCUM import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.COAP; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.COAPS; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.DOCKER; -import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.GATEWAY; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.HTTP; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.HTTPS; import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.LINUX; @@ -84,12 +81,6 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService DeviceTransportType transportType = deviceProfile.getTransportType(); ObjectNode commands = JacksonUtil.newObjectNode(); - if (checkIsGateway(device)) { - Optional.ofNullable(getMqttTransportPublishCommands(baseUrl, creds, true)) - .ifPresent(v -> commands.set(MQTT, v)); - return commands; - } - switch (transportType) { case DEFAULT: Optional.ofNullable(getHttpTransportPublishCommands(baseUrl, creds)) @@ -124,6 +115,26 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService return commands; } + @Override + public JsonNode findGatewayLaunchCommands(String baseUrl, Device device) throws URISyntaxException { + DeviceId deviceId = device.getId(); + log.trace("Executing findDevicePublishTelemetryCommands [{}]", deviceId); + validateId(deviceId, INCORRECT_DEVICE_ID + deviceId); + + DeviceCredentials creds = deviceCredentialsService.findDeviceCredentialsByDeviceId(device.getTenantId(), deviceId); + + ObjectNode commands = JacksonUtil.newObjectNode(); + if (deviceConnectivityConfiguration.isEnabled(MQTT)) { + Optional.ofNullable(getGatewayDockerCommands(baseUrl, creds, MQTT)) + .ifPresent(v -> commands.set(MQTT, v)); + } + if (deviceConnectivityConfiguration.isEnabled(MQTTS)) { + Optional.ofNullable(getGatewayDockerCommands(baseUrl, creds, MQTTS)) + .ifPresent(v -> commands.set(MQTTS, v)); + } + return commands; + } + @Override public Resource getPemCertFile(String protocol) { String certFilePath = deviceConnectivityConfiguration.getConnectivity() @@ -159,18 +170,10 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } private JsonNode getMqttTransportPublishCommands(String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { - return getMqttTransportPublishCommands(baseUrl, deviceCredentials, false); - } - - private JsonNode getMqttTransportPublishCommands(String baseUrl, DeviceCredentials deviceCredentials, boolean isGateway) throws URISyntaxException { - return getMqttTransportPublishCommands(baseUrl, DEFAULT_DEVICE_TELEMETRY_TOPIC, deviceCredentials, isGateway); + return getMqttTransportPublishCommands(baseUrl, DEFAULT_DEVICE_TELEMETRY_TOPIC, deviceCredentials); } private JsonNode getMqttTransportPublishCommands(String baseUrl, String topic, DeviceCredentials deviceCredentials) throws URISyntaxException { - return getMqttTransportPublishCommands(baseUrl, topic, deviceCredentials, false); - } - - private JsonNode getMqttTransportPublishCommands(String baseUrl, String topic, DeviceCredentials deviceCredentials, boolean isGateway) throws URISyntaxException { ObjectNode mqttCommands = JacksonUtil.newObjectNode(); if (deviceCredentials.getCredentialsType() == DeviceCredentialsType.X509_CERTIFICATE) { @@ -179,7 +182,6 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } ObjectNode dockerMqttCommands = JacksonUtil.newObjectNode(); - ObjectNode gatewayDockerMqttCommands = JacksonUtil.newObjectNode(); if (deviceConnectivityConfiguration.isEnabled(MQTT)) { Optional.ofNullable(getMqttPublishCommand(baseUrl, topic, deviceCredentials)). @@ -187,11 +189,6 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService Optional.ofNullable(getDockerMqttPublishCommand(MQTT, baseUrl, topic, deviceCredentials)) .ifPresent(v -> dockerMqttCommands.put(MQTT, v)); - - if (isGateway) { - Optional.ofNullable(getGatewayDockerCommands(baseUrl, deviceCredentials, MQTT)) - .ifPresent(v -> gatewayDockerMqttCommands.set(MQTT, v)); - } } if (deviceConnectivityConfiguration.isEnabled(MQTTS)) { @@ -203,21 +200,11 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService Optional.ofNullable(getDockerMqttPublishCommand(MQTTS, baseUrl, topic, deviceCredentials)) .ifPresent(v -> dockerMqttCommands.put(MQTTS, v)); - - if (isGateway) { - Optional.ofNullable(getGatewayDockerCommands(baseUrl, deviceCredentials, MQTTS)) - .ifPresent(v -> gatewayDockerMqttCommands.set(MQTTS, v)); - } } if (!dockerMqttCommands.isEmpty()) { mqttCommands.set(DOCKER, dockerMqttCommands); } - - if (!gatewayDockerMqttCommands.isEmpty()) { - mqttCommands.set(GATEWAY, gatewayDockerMqttCommands); - } - return mqttCommands.isEmpty() ? null : mqttCommands; } @@ -313,8 +300,4 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService return properties.getHost().isEmpty() ? new URI(baseUrl).getHost() : properties.getHost(); } - private static boolean checkIsGateway(Device device) { - return device.getAdditionalInfo().has(DataConstants.GATEWAY_PARAMETER) && - device.getAdditionalInfo().get(DataConstants.GATEWAY_PARAMETER).asBoolean(); - } } From 77028ead3084f7da5f0cebcbb91c0f82f0707b01 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 4 Aug 2023 16:09:38 +0300 Subject: [PATCH 112/120] status update --- .../src/main/data/json/demo/dashboards/gateway_list.json | 2 +- .../widget/lib/gateway/gateway-connectors.component.scss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application/src/main/data/json/demo/dashboards/gateway_list.json b/application/src/main/data/json/demo/dashboards/gateway_list.json index 24b547c8bc..7abee6cbe4 100644 --- a/application/src/main/data/json/demo/dashboards/gateway_list.json +++ b/application/src/main/data/json/demo/dashboards/gateway_list.json @@ -231,7 +231,7 @@ "type": "customPretty", "customHtml": "
\r\n \r\n

Add gateway

\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Name\r\n \r\n \r\n Gateway name is required.\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n", "customCss": ".add-entity-form {\r\n min-width: 400px !important;\r\n}\r\n\r\n.add-entity-form .boolean-value-input {\r\n padding-left: 5px;\r\n}\r\n\r\n.add-entity-form .boolean-value-input .checkbox-label {\r\n margin-bottom: 8px;\r\n color: rgba(0,0,0,0.54);\r\n font-size: 12px;\r\n}\r\n\r\n.relations-list .header {\r\n padding-right: 5px;\r\n padding-bottom: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .header .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n font-size: 12px;\r\n font-weight: 700;\r\n color: rgba(0, 0, 0, .54);\r\n white-space: nowrap;\r\n}\r\n\r\n.relations-list .mat-form-field-infix {\r\n width: auto !important;\r\n}\r\n\r\n.relations-list .body {\r\n padding-right: 5px;\r\n padding-bottom: 15px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .row {\r\n padding-top: 5px;\r\n}\r\n\r\n.relations-list .body .cell {\r\n padding-right: 5px;\r\n padding-left: 5px;\r\n}\r\n\r\n.relations-list .body .md-button {\r\n margin: 0;\r\n}\r\n\r\n", - "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet assetService = $injector.get(widgetContext.servicesMap.get('assetService'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));\r\nlet entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));\r\n\r\nopenAddEntityDialog();\r\n\r\nfunction openAddEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\r\n}\r\n\r\nfunction AddEntityDialogController(instance) {\r\n let vm = instance;\r\n\r\n vm.addEntityFormGroup = vm.fb.group({\r\n entityName: ['', [vm.validators.required]],\r\n entityType: ['DEVICE'],\r\n entityLabel: [''],\r\n type: ['', [vm.validators.required]],\r\n });\r\n\r\n vm.cancel = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n vm.save = function() {\r\n vm.addEntityFormGroup.markAsPristine();\r\n saveEntityObservable().subscribe(\r\n function (device) {\r\n widgetContext.updateAliases();\r\n vm.dialogRef.close(null);\r\n goToConfigState(device);\r\n }\r\n );\r\n };\r\n \r\n function goToConfigState(device) {\r\n const stateParams = {};\r\n stateParams.entityId = device.id;\r\n stateParams.entityName = device.name;\r\n const newStateParams = {\r\n targetEntityParamName: 'default',\r\n new_gateway: {\r\n entityId: device.id,\r\n entityName: device.name\r\n }\r\n }\r\n const params = {...stateParams, ...newStateParams};\r\n widgetContext.stateController.openState('gateway_details', params, false);\r\n }\r\n\r\n function saveEntityObservable() {\r\n const formValues = vm.addEntityFormGroup.value;\r\n let entity = {\r\n name: formValues.entityName,\r\n type: formValues.type,\r\n label: formValues.entityLabel,\r\n additionalInfo: {\r\n gateway: true\r\n }\r\n };\r\n return deviceService.saveDevice(entity);\r\n }\r\n}\r\n", + "customFunction": "let $injector = widgetContext.$scope.$injector;\r\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\r\nlet assetService = $injector.get(widgetContext.servicesMap.get('assetService'));\r\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\r\nlet attributeService = $injector.get(widgetContext.servicesMap.get('attributeService'));\r\nlet entityRelationService = $injector.get(widgetContext.servicesMap.get('entityRelationService'));\r\nlet userSettingsService = $injector.get(widgetContext.servicesMap.get('userSettingsService'));\r\n\r\nopenAddEntityDialog();\r\n\r\nfunction openAddEntityDialog() {\r\n customDialog.customDialog(htmlTemplate, AddEntityDialogController).subscribe();\r\n}\r\n\r\nfunction AddEntityDialogController(instance) {\r\n let vm = instance;\r\n let userSettings;\r\n userSettingsService.loadUserSettings().subscribe(settings=> {\r\n userSettings = settings;\r\n if (!userSettings.createdGatewaysCount) userSettings.createdGatewaysCount = 0;\r\n });\r\n \r\n\r\n vm.addEntityFormGroup = vm.fb.group({\r\n entityName: ['', [vm.validators.required]],\r\n entityType: ['DEVICE'],\r\n entityLabel: [''],\r\n type: ['', [vm.validators.required]],\r\n });\r\n\r\n vm.cancel = function() {\r\n vm.dialogRef.close(null);\r\n };\r\n\r\n\r\n vm.save = function() {\r\n vm.addEntityFormGroup.markAsPristine();\r\n saveEntityObservable().subscribe(\r\n function (device) {\r\n widgetContext.updateAliases();\r\n userSettingsService.putUserSettings({ createdGatewaysCount: ++userSettings.createdGatewaysCount }).subscribe(_=>{\r\n });\r\n vm.dialogRef.close(null);\r\n goToConfigState(device);\r\n }\r\n );\r\n };\r\n \r\n function goToConfigState(device) {\r\n const stateParams = {};\r\n stateParams.entityId = device.id;\r\n stateParams.entityName = device.name;\r\n const newStateParams = {\r\n targetEntityParamName: 'default',\r\n new_gateway: {\r\n entityId: device.id,\r\n entityName: device.name\r\n }\r\n }\r\n const params = {...stateParams, ...newStateParams};\r\n widgetContext.stateController.openState('gateway_details', params, false);\r\n }\r\n\r\n function saveEntityObservable() {\r\n const formValues = vm.addEntityFormGroup.value;\r\n let entity = {\r\n name: formValues.entityName,\r\n type: formValues.type,\r\n label: formValues.entityLabel,\r\n additionalInfo: {\r\n gateway: true\r\n }\r\n };\r\n return deviceService.saveDevice(entity);\r\n }\r\n}\r\n", "customResources": [], "openInSeparateDialog": false, "openInPopover": false, diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss index 87e099d652..1edb40967c 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/gateway-connectors.component.scss @@ -92,8 +92,8 @@ } .dot { - height: 25px; - width: 25px; + height: 12px; + width: 12px; background-color: #bbb; border-radius: 50%; display: inline-block; From 11f4beac99fc344818d0f19a0bf73679f6682346 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 18 Aug 2023 12:39:48 +0300 Subject: [PATCH 113/120] get launch commands for api --- ui-ngx/src/app/core/http/device.service.ts | 6 ++++- .../device-gateway-command.component.ts | 26 +++++-------------- ui-ngx/src/app/shared/models/device.models.ts | 7 +++++ 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/ui-ngx/src/app/core/http/device.service.ts b/ui-ngx/src/app/core/http/device.service.ts index 8dff1e7ebc..137421e93d 100644 --- a/ui-ngx/src/app/core/http/device.service.ts +++ b/ui-ngx/src/app/core/http/device.service.ts @@ -27,7 +27,7 @@ import { DeviceCredentials, DeviceInfo, DeviceInfoQuery, - DeviceSearchQuery, + DeviceSearchQuery, PublishLaunchCommand, PublishTelemetryCommand } from '@app/shared/models/device.models'; import { EntitySubtype } from '@app/shared/models/entity-type.models'; @@ -214,4 +214,8 @@ export class DeviceService { return this.http.get(`/api/device-connectivity/${deviceId}`, defaultHttpOptionsFromConfig(config)); } + public getDevicePublishLaunchCommands(deviceId: string, config?: RequestConfig): Observable { + return this.http.get(`/api/device-connectivity/gateway-launch/${deviceId}`, defaultHttpOptionsFromConfig(config)); + } + } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index cd6197913f..ae8208c136 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -59,12 +59,10 @@ export class DeviceGatewayCommandComponent implements OnInit { ngOnInit(): void { - const HOST = window.location.hostname; if (this.deviceId) { - this.deviceService.getDeviceCredentials(this.deviceId).subscribe(credentials => { - this.token = credentials.credentialsId; - this.createRunCode(HOST); - this.cd.detectChanges() + this.deviceService.getDevicePublishLaunchCommands(this.deviceId).subscribe(commands => { + this.createRunCode(commands.mqtt); + this.cd.detectChanges(); }); } this.selectedOSCControl = new FormControl(''); @@ -79,23 +77,11 @@ export class DeviceGatewayCommandComponent implements OnInit { } else if (/Linux/.test(platform)) { this.selectedOSCControl.setValue(OsType.linux); } - this.createRunCode(HOST); } - createRunCode(HOST) { - this.linuxCode = 'docker run -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v ' + - '~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -e host=' + - HOST + - ' -e port=1883 -e accessToken=' + - this.token + - ' --restart always thingsboard/tb-gateway'; - this.windowsCode = 'docker run -it -v %HOMEPATH%/tb-gateway/config:/thingsboard_gateway/config -v ' + - '%HOMEPATH%/tb-gateway/extensions:/thingsboard_gateway/extensions -v %HOMEPATH%/tb-gateway/logs:/thingsboard_gateway/logs ' + - '--name tb-gateway -e host=' + - HOST + - ' -e port=1883 -e accessToken=' + - this.token + - ' --restart always thingsboard/tb-gateway'; + createRunCode(commands) { + this.linuxCode = commands.linux; + this.windowsCode = commands.windows; } onDockerCodeCopied() { diff --git a/ui-ngx/src/app/shared/models/device.models.ts b/ui-ngx/src/app/shared/models/device.models.ts index 66419a10a8..b2380d770e 100644 --- a/ui-ngx/src/app/shared/models/device.models.ts +++ b/ui-ngx/src/app/shared/models/device.models.ts @@ -863,6 +863,13 @@ export interface PublishTelemetryCommand { snmp?: string; } +export interface PublishLaunchCommand { + mqtt: { + linux: string; + windows: string; + }; +} + export const dayOfWeekTranslations = new Array( 'device-profile.schedule-day.monday', 'device-profile.schedule-day.tuesday', From 78679c917c8cd4641a88b4bd499c83970b5ec4d2 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 18 Aug 2023 13:29:39 +0300 Subject: [PATCH 114/120] updated visuals for launch commands --- .../device-gateway-command.component.html | 44 ++++++++++++------- .../device-gateway-command.component.ts | 18 +++----- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html index 24c06f4e67..9bdbbd240b 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html @@ -15,31 +15,45 @@ limitations under the License. --> -
- {{ 'gateway.docker-label' | translate }} +
+
+ {{ 'gateway.docker-label' | translate }} +
+
- - Windows - Linux/MacOS - -
- - - + + + + Windows + + +
+ - - - + Linux + + +
+ - - +
+
+ +
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index ae8208c136..9e7a99c692 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -15,7 +15,6 @@ /// import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; -import { FormControl } from '@angular/forms'; import { Router } from '@angular/router'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; @@ -24,11 +23,6 @@ import { ActionNotificationShow } from '@core/notification/notification.actions' import { DeviceService } from '@core/http/device.service'; import { helpBaseUrl } from '@shared/models/constants'; -enum OsType { - linux = 'linux', - macos = 'macos', - windows = 'win' -} @Component({ selector: 'tb-gateway-command', @@ -46,10 +40,11 @@ export class DeviceGatewayCommandComponent implements OnInit { linuxCode: string; windowsCode: string; - selectedOSCControl: FormControl; - osTypes = OsType; + helpLink: string = helpBaseUrl + '/docs/iot-gateway/install/docker-installation/'; + tabIndex = 0; + constructor(protected router: Router, protected store: Store, private translate: TranslateService, @@ -65,17 +60,16 @@ export class DeviceGatewayCommandComponent implements OnInit { this.cd.detectChanges(); }); } - this.selectedOSCControl = new FormControl(''); // @ts-ignore const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; if (macosPlatforms.indexOf(platform) !== -1) { - this.selectedOSCControl.setValue(OsType.linux); + this.tabIndex = 1; } else if (windowsPlatforms.indexOf(platform) !== -1) { - this.selectedOSCControl.setValue(OsType.windows); + this.tabIndex = 0; } else if (/Linux/.test(platform)) { - this.selectedOSCControl.setValue(OsType.linux); + this.tabIndex = 1; } } From 056deef19393d5e81caaf3258b85a06956db1427 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 18 Aug 2023 14:33:39 +0300 Subject: [PATCH 115/120] using existing getOs --- .../device-gateway-command.component.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index 9e7a99c692..d0d39a9280 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -22,6 +22,7 @@ import { TranslateService } from '@ngx-translate/core'; import { ActionNotificationShow } from '@core/notification/notification.actions'; import { DeviceService } from '@core/http/device.service'; import { helpBaseUrl } from '@shared/models/constants'; +import { getOS } from '@core/utils'; @Component({ @@ -60,16 +61,19 @@ export class DeviceGatewayCommandComponent implements OnInit { this.cd.detectChanges(); }); } - // @ts-ignore - const platform = window.navigator?.userAgentData?.platform || window.navigator.platform, - macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], - windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; - if (macosPlatforms.indexOf(platform) !== -1) { - this.tabIndex = 1; - } else if (windowsPlatforms.indexOf(platform) !== -1) { - this.tabIndex = 0; - } else if (/Linux/.test(platform)) { - this.tabIndex = 1; + const currentOS = getOS(); + switch (currentOS) { + case 'linux': + case 'android': + case 'macos': + case 'ios': + this.tabIndex = 1; + break; + case 'windows': + this.tabIndex = 0; + break; + default: + this.tabIndex = 1; } } From b83a3b3eed700b81cc0725d10f90bf77e775e9ac Mon Sep 17 00:00:00 2001 From: imbeacon Date: Fri, 18 Aug 2023 15:20:40 +0300 Subject: [PATCH 116/120] Fix for gateway docker run command --- .../thingsboard/server/dao/util/DeviceConnectivityUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java b/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java index 36770e9754..2bd4882d7e 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/util/DeviceConnectivityUtil.java @@ -31,11 +31,11 @@ public class DeviceConnectivityUtil { public static final String MQTTS = "mqtts"; public static final String COAP = "coap"; public static final String COAPS = "coaps"; - public static final String GATEWAY = "gateway"; public static final String PEM_CERT_FILE_NAME = "tb-server-chain.pem"; public static final String CHECK_DOCUMENTATION = "Check documentation"; public static final String JSON_EXAMPLE_PAYLOAD = "\"{temperature:25}\""; public static final String DOCKER_RUN = "docker run --rm -it "; + public static final String GATEWAY_DOCKER_RUN = "docker run -it "; public static final String MQTT_IMAGE = "thingsboard/mosquitto-clients "; public static final String COAP_IMAGE = "thingsboard/coap-clients "; @@ -88,7 +88,7 @@ public class DeviceConnectivityUtil { String gatewayContainerName = "tbGateway" + StringUtils.capitalize(host.replace(".", "")); - StringBuilder command = new StringBuilder(DOCKER_RUN); + StringBuilder command = new StringBuilder(GATEWAY_DOCKER_RUN); command.append("-v {gatewayVolumePathPrefix}/logs:/thingsboard_gateway/logs".replace("{gatewayVolumePathPrefix}", gatewayVolumePathPrefix)); command.append(" -v {gatewayVolumePathPrefix}/extensions:/thingsboard_gateway/extensions".replace("{gatewayVolumePathPrefix}", gatewayVolumePathPrefix)); command.append(" -v {gatewayVolumePathPrefix}/config:/thingsboard_gateway/config".replace("{gatewayVolumePathPrefix}", gatewayVolumePathPrefix)); From 0167e7d02c799d2c794af634d32294ae758e5467 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Fri, 18 Aug 2023 15:27:18 +0300 Subject: [PATCH 117/120] added macos tab --- .../device-gateway-command.component.html | 16 ++++++++++++++++ .../gateway/device-gateway-command.component.ts | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html index 9bdbbd240b..63f121c22d 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.html @@ -55,5 +55,21 @@
+ + + + MacOS + + +
+ +
+
+
diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts index d0d39a9280..0a20292058 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/gateway/device-gateway-command.component.ts @@ -65,9 +65,11 @@ export class DeviceGatewayCommandComponent implements OnInit { switch (currentOS) { case 'linux': case 'android': + this.tabIndex = 1; + break; case 'macos': case 'ios': - this.tabIndex = 1; + this.tabIndex = 2; break; case 'windows': this.tabIndex = 0; From 80aaa6ea288536918bba79f1d0c41a865a8279cc Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 6 Sep 2023 18:41:24 +0300 Subject: [PATCH 118/120] updated widget config --- .../widget_bundles/gateway_widgets.json | 1 + .../widget_types/gateway_configuration2.json | 18 +++++++++++++++ .../widget_types/gateway_connector.json | 19 +++++++++++++++ .../gateway_general_statistics.json | 23 +++++++++++++++++++ .../system/widget_types/gateway_logs.json | 20 ++++++++++++++++ .../widget_types/gateway_statistics.json | 23 +++++++++++++++++++ .../json/system/widget_types/service_rpc.json | 20 ++++++++++++++++ 7 files changed, 124 insertions(+) create mode 100644 application/src/main/data/json/system/widget_types/gateway_configuration2.json create mode 100644 application/src/main/data/json/system/widget_types/gateway_connector.json create mode 100644 application/src/main/data/json/system/widget_types/gateway_general_statistics.json create mode 100644 application/src/main/data/json/system/widget_types/gateway_logs.json create mode 100644 application/src/main/data/json/system/widget_types/gateway_statistics.json create mode 100644 application/src/main/data/json/system/widget_types/service_rpc.json diff --git a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json index 6e9471305b..1f7278892b 100644 --- a/application/src/main/data/json/system/widget_bundles/gateway_widgets.json +++ b/application/src/main/data/json/system/widget_bundles/gateway_widgets.json @@ -10,6 +10,7 @@ "widgetTypeFqns": [ "gateway_widgets.gateway_configuration", "gateway_widgets.attributes_card", + "gateway_widgets.gateway_configuration2", "gateway_widgets.config_form_latest", "gateway_widgets.gateway_events", "gateway_widgets.gateway_connector", diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration2.json b/application/src/main/data/json/system/widget_types/gateway_configuration2.json new file mode 100644 index 0000000000..26521536dc --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_configuration2.json @@ -0,0 +1,18 @@ +{ + "fqn": "gateway_widgets.gateway_configuration2", + "name": "Gateway configuration (New)", + "image": "data:image/jpeg;base64,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ii3bMj5ytRKUXRfXI+nX7lP95c2MS6LR7nIvE14C9kW6GU4nLsXkYCIm5VnZTleH1fVnWyF/wX95ejZo6ShCqymG/tu8Elrxk1meelEtkETXy0kFCPJR7A2kGdGclcdgy1UpJ+5Qj2Tt8dxWPimMdaz1OQgGDgn7u6M7W56sYqWBxeHmuuY9s3ibzTRlJCXt9vfTRgsrPMoG5qCPa1Ys0Wtf78EanZWpf77hs3eInbO2sdGsG1WbBGGhm7ZVk2M1afGWc0ThYVu3XZNncbGv8c71GPYN6t6tv3kladrTLrNl3FvQLvBM6vKyFbsWT6Hta312UYwfUpSlOn7xZFFwkdBdrFxbBudowVg4RVq3ZK4jb46LkGhojJM9DmzaO51KVdHjYxR8nJqfvHTRo+bqNXxIqLSZ0j0lGjNdX46ySKaCREUDxMSd6WTP+8ctmrxBRq8TjItBiaNQXhYRcqBVTx7A6rVYy8NDOmabBwvHx61WlVlIyMVarMVFomKcsyRzhJFJBIiKH7xCLimjld2zUiopVRwserZp8RwqVGGhm7ZVk2/YQRqdlal/9Tp19m4I1OytSgyhymqUZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScGdH6V6eLj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/FsKXkVitufxzeHpSjg9KdBknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScJnMf7x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am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq5xJDgtqagy8Blooqa8CvNr9XpRz8U9TnUnfql5+tz86/eR0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXzyM25vyeZmC1oDqfN8gU9LGlXk0V3dtsIJ9xX0oYqNNOZ0Ra0hPlHSQVXR1V5PFd2gsrV6lunLCJyUd8VVsA0hPTdLRX2dVQWxnPWb05pl5/AtkTWn+sRs86H+XXVuZByX5MvXhZjMnTbdOIKEQKPJNIBEKoWK8hUfmBYIl6lMrckDkhfUtJoVJr2zFB9mhgO+kWhi8Gk+6MW5fR3vsgzyueWeXH2az6NLjNPtaSYLQdFCTP3fdKOfinqc6k79UvP1ufnXz+U8K2OlbAgOtSrYs1CEHVcQhUX2cV5YDCuFwtrUC7ut24Tbki1nDjDZufoDTSXC5KhvLKveT4Wgm4tqS4tSQYQhZFTQh9HdHOtw00MUvJujZmoL+gucFyPJlijmXF+BOaMrlGiLHjBbo6aJtvFkxy4GBxnJ1cnLRFe8nIcQphwfSWj/TOaYNqqiiOinNr1Vfv6INm1R7S+j0MJgPR4v6shRSDRdDP2uanSdNtsRJwkRCNRTCkSCiImf2J933Sjn4p6nOpO/VLz9bn51+8jpRz8U9TnUnfql5+tz86+oilj4Ux/qpj/AFUx/qpj/VTH+qmP9VMf6qY/1Ux/qpj/AFUx/qpj/VTH+qmP9VMf6qY/1VKbiw2sabhluRETKl1IleS0mW0i6nH5Ax8/wQXK8h07T/7FeQ6dp/8AYryHTtP/ALFeQ6dp/wDYryHTtP8A7FeQ6dp/9ivIdO0/+xXkOnaf/YryHTtP/sV5Dp2n/wBivIdO0/8AsV5Dp2n/ANivJ2ZBEiRFcYcGSI/tLU2tTWpcJ8dJt1tcovBU6UXWn3SdKOfinqc6k79UvP1ufnXz/vXzqWSzhBAjXA/5UWiQhXp/d5ywOUT5vMi6Tmlj+HnQl1onspnn9Z5f6KtjzkaI2n2SIFwbv7VNfPF5KPcWVfiHpgXKNiuFXAqqp/HzvMNvIw6/mQRCGi0mV+yha6dYGPZ2mXZAuESGQuqopoYRUXm882HE/RG5ys15GGvYTONJelehPVeVbRdpARn2l5gdc9ht0epc6i+6TpRz8U9TnUnfql5+tz86+s4beBc9sERcKuOtFptdFFc5VCaJ3Lir9rAqn8FoDcMYYIBKOvTTP+qmyHTjtqWNWkSLr/8AUqVEJI6ckotk3j2hXJKIr+z40iiim2rJIySqIJjUhZRATrRaFdSPe1jUiqOEphxt5GDR4iTR0zVPeXnXqWmHG/8AwwZDCgS+0uajmIo5EVA0FRURDyupaZJHPS3dIsLnQLP+mmTF/LvKmSL7ZY58rz+oio+0+4DiLzoYkqLv898souQLU43JakXKOw6BqWlo6BlnNXy1P+SjllitW+0tmCyG5Kf/AIftgSdJV5a+Tv8Auy7Ot522MqNSHootomVEOZnRX7WnXlNbnpLX9LNk+9c4sh1G3QyCKbSNoiL0DUqODL39F5YdNEN9tt9SdEB5z1dCVfrTdLe7foDlmjRjbfKNHFU0sgGtscalRavdvucD/fJfRnWHAfaZYVokYA9BNWgS5wvNXlLbZCHOu4hNCU0rBCTSo2CGmBzjVir7Ccs/+5DCFH9Ia0SmJlFDP97jozlKvUCVY0tUD+jocZwFOIK400cBNYZ8+fSHpjDTOOflDNEH7pOlHPxT1OdSd+qXn63Pzr509rq60/4SZRUwqdeab+3qLSJSVcftXNCqaS5JVVSVf4rnzB7X7VVcZ6s5xnpx6kYnoMolentNpkmHul3HuF/wHSbfZcFxsx5xMVyi1eC0oUhZMfkmWWUF7pNUaEUIl6yq4cs1HUlZaBlphsSPnVBaEEyvX5rsrkM0b5QEZZbJxGvscoYChHj9q+eKbESP+lt0dwcE85/fEi8wDzj90nSjn4p6nOpO/VLz9bn519QUoE+K03vWm9603vWm9603vWm9603vWm9603vWm9603vWm9603vWm9603vWg1fvWvJaGrp5UnGdKORL1krKiqrXkuW3y/EryXLb5fiV5Llt8vxK8ly2+X4leS5bfL8SvJctvl+JXksu3S/EryYXbpfiV5LFt8vxK8li2+X4leSxbfL8SvJddul+JXkvBB5pUJt50OXdEusTd0iRaT7pOlHPxT1OdSd+qXn63Pzr95HSjn4p6nOpO/VLz9bn519Q0ERTKkq4RETXU92bhdf9HRZE5PjGBymL72BcvBpi+9gXLwaYvvYFy8GmL72BcvBpi+9gXLwaYvvYFy8GmL72BcvBpi99hXLwKujLkpEUljkqtvoidKtng93qHTm5ac3LTm5ac3LTm5ac3LTm5ac3LTm5ac3LR6+v1CRKc3LTm5ac3LTm5ac3LTm5ac3LTm5ac3LTm5aNPUP99OblpzctOblpzctOblpzctOblpzctOblpzctOblpzctOblpzdS5TzqiU58EWnNy05uWnNy05uWnNy05uWnNy05uWiT1DpzctOblpzctOblpzctOblpzctOblpzctOblok/xb0o5+KepzqTv1S8/W5+dfUQisgO4hRcqjcoR/wD5DyJ9sFX9WC+zjBf8JrSFCQwISUHGzTmNswwQGnQQqipTiuyGAR2LIJMLKjah0ixhOVbVdFzGrmXp8y6k5/8AirlF1JnzfaXd/wAVf3KvmXX0/wBQ/inQqVzVzV/BP+H9tOnrTzLqTn/4v206etP8WdKOfinqc6k79UvP1ufnXz/rYtrmPhj3mmiJK/Vxo7TIY91sUFPPcrr/AEXHJpGJlnmCTdt0BTTSXF0h0/eXKFqqAsmHFuLEBwAgS3HXUNB030fBFZbEdLOiWtUpq2JahvhQHEabd5UI4vnHV0lU8IudFat7JNHbL5OYFpXRP0aOoq1q01BScHWqqlRbbIWS3EWGsMXv0bsk0DQcby4bghnOkH2qiEBxZCNtyPQ5EIJAECFpC1J9scLqXz/aelTIJY/u3YpyF3sDS+o44DbbImiAShkiVelMdVOtuELSmTppqLC4xqVPjQtoIxwfVDRVVc51bqRvk2uSVUVF0lQ6aVWxd5NURo1XVqUtP7P8K5IQcbMg1LpBjWmdaZomycGOLpmaL7WeZE176EBZ5Ftxc50snnV6vRjj5zUeUdACIedEWn+UUibEAcLSUFLVlVXXikaV1HwbUsLoqhjnOMrSBoi440ZCip7QplKay4LYGYi0Z6Sl/ZTRzj+NE22LSKgrhdP7KF0KnXQ6bgNCZ6LRlpqvQmjnR/jSAjTaomMLp5JEXdnz+8m/ze8u7zm4JgBKKg4QfgqUa6So4uXiNzoTrXNIiFkhLHNkVxSN8iLqtqK/b1dOf/8AlCHJv6WgiZ0hwmUz15xQtZciE+KCi6lHGpcr05oQJRbbMNBC/tro4WgTlCdEAMmzAVymfsnheijbFMuIaCiqhIP8fh1UjYkQGaqeSTCFjHPnfQtogRxeVCyuVyuUTGOqukUX4+f3q6ST1HXUMzVBcQ0cYcznCYTmpxsnXDdVDIVwggv79dC2OkLiuaWdStkg+zikE0Rk3R0QMU1dCEX2s550pGyUGQcTQRdakuMdNCvs4wfJk2hZ6kPX5+nPH1QkGPImuiy7oa0VNa+0NCn6VEQFMsqOOfSyq5o0c/8AEo2CIBas46lXUnUlAIkRmOmbZgioI6WUEsLQCKKh6Z6BGKKK45h1pnroQUi9HEVyujlxPwpGldR8G1LC6KoY5zjK1o6bbhAqjqRdHz9OeP8AizpRz8U9TnUnfql5+tz86+fW1IYNk06xcHRWlX0+3iEKaC6lGQ0CZX9xoqGK9Iqi+e3Kbr2hy4g8822/oc3LNgSA5/60WoGJWm2ZaDzoNmbX2CNoCQDIehSRcVCRbdLV9X2VM101kEpnrzlMqtQAVYURyHHRVLQBh1EEwUc4VFQelFq1obMpoWXUeedeXkwXIgCuESgIrrFBwiLTbgi4emZOvOvuGWMZI3SMlwiefKsWVl7li/spLkiGgCL7wt5UupCTzfw84rpJzKJKK6/2pim8ICaI6KqOB6tWNS02mDbRskRceynRvoNR6OlrXXo81B7eUXUq4VU6cJqzTetc9KqiZ58IvNnpxTa4HKJ7Zcy68Lr5v2UOCURH+A83n69fm5i6f2p5wQhXGr91N5E8aWkSqq461XK0HMaHlVVVUk6VVc5ptFE3OUJFXnLroF0kTGUJRynUuMZoEVHc6adeUxQl7CaKLpllR6lXOv8AjSYU1RS/bhMefmTWvm5l1+dMiSKip1otCq6GdFUJRVM/uxUlxkBTCACBj/UK0GXNS5zqUk6cJqzTeCXPSuEzz4RebPTimtQtq0mtdQFzpuptF0gQCz7qUKqKqi6zJSyn7VXNN45MlIVyucr1r056c0CoIZ0cEqKmda60wtNJgm0bVEXHsJ0b65kwifw8/wBpdeK6Naeo37SKqomV0UVepF1JQKiKanqMkwS9WF1fwptE0BUB/YJU3r0CBNIlIURejCrzUAaJgjeghE4minWp0i68Z0iUl1fvz501D5v4efTQhFRRQcINS/5VSgUsoKZIlVcDrTCrlaDPK409a4XHT++hXIqqoqkpLktXTTaog5xglRcFrVFwqaqaTBoKF+4eag5jQ8qqqqknSqrnNJjSJSL9pL501D/izpRz8U9TnUnfql5+tz86+pM9DuYggEehpsyAHmB8P7SJn2VRUIa8j3ZKIuordNjup/MrGr/Z/ff+tbf/AHdeQF8/i9bf/d15AXzHXy1t/wDd1/s/vv8A1rb/AO7r/Z/ff+tbf/d15AX3/rW3/wB3XkDfP+vbP/d15A3z96vWzG6VUVmysEqaT/LjJloPSgAgq2JL7yqSJ1U2otCqkqqqkZmS5IzJdZGS61Vdar5tS9GKwqdFNb0prelNb0prelNb0prelNb0prelNb0prelYSv4r5ualRf2dNDvSmt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6VhOvzpWCToprelNb0prelNb0prelNb0prelNb0prelNb0prelNb0prelBjHSq0uVTo8+r99N/Cmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp8+pejFYVOimt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp/xb0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXz6sU5upzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3Uuscfxz5lxqzTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFOb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qb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41LZkNo4oKbLguIioiZTI5wuvzXaGw+GjpNuvgBjkUVMiq9VX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NT48lG9DT5B0HNHSzjOiq4zjzXOJHcVtDQHngAsKqpnBLzaqv1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8aucSQ4LamoMvAZaKKmvArza/V6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnX7yOlHPxT1OdSd+qXn63Pzr95HSjn4p6nOpO/VLz9bn51+8jpRz8U9TnUnfql5+Vb9pdExaNxFRdf/y0WpEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/wB2pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv92pEjY3+7UiRsb/AHakSNjf7tSJGxv92pEjY3+7UiRsb/dqRI2N/u1IkbG/3akSNjf7tSJGxv8AdqRI2N/uUJ8kIrgjFQypdSLhfU51J36pecUWm0+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwoB+FAPwptPhSepzqTv1S+8/nUnfql95/OpO/VL7z+dSd+qX3n86k79UvvP51J36pfefzqTv1S+8/nUnfql95/OpO/VL7z+dSd+qX3n86k79UvvP51J36pfefzqTv1S+8/nUnfql95/OpO/VL7z+dSd+qX3n86k79UvvP51J36pfefzqTv1S+8/nUnfql95/OpO/VL7z+dSd+qX3iXJqHHI0ASPJKRdQiCKS15TfyUvwq8pv5KX4VeU38lL8KvKb+Sl+FXlN/JS/Crym/kpfhV5TfyUvwquTUyOJqBEGRUS6iE0Qk8/OpO/VL7xF/8AqC/R/wCAvs4t6/W8/OpO/VL7vGgckMgAMi5nQV100bDSx0IpVfwvNvejmslHI7Ud1l4UyKscmiaQFzYPKp11b4jMn0STJbCNcmpjgejLgmpItJhk/wBykleTf9HQrzb3ZkR9Jgvr+gBHDExQB0UwuRWvJd+JZJsV6VEn8ty2Gmk00WQAjhnTHWOtajRm/Tokl6EbE9qS+iNDnElpvWwajrRMrUl1992GBuuumpuGXWRFrXzdVw//AMfNyTz4wjO3wn5SxGpUnobJ0dY1Yrj5JTno7xzGHQO5MHofZWGoGZukvSlX90VuNolT4SSLeTD5uxsKTDjRuZBddXswJbI3dp7bUE33owu/q2gbbPLplUspMebECUw6bBRndEucXGjVSAx83u2/8XvPzqTv1S+7xXEYlNqBE2uDFc5EhX3hVMpXlc9cQYivRo7TEdIYYeTRJ11BIuUcxzLqROqvKYJMa1W+XborIwRawy+gpkiQ9Zpo615lq5I83YIT8Q8saPpIvso173sb68pXpdjixXYkWB6OLS8k4miiPuIq8roJqHUNeVHpNojRjjxI3oQA6IKmAR53KqagnNhBqV6R6EwjPLaHJ6eOnRyWPN1XD/8Ax83k1DvMKYxyRtPrybrfUTLqIStlXkoDNotkCVCCIc43H1CTjSVH1HI4xXk8sFvyaV1GmTmrI5Zp1UyJGQIqLjpqyC9bLzECG9bkkq0rbLQ4BG3gHKKNWdbdHajiyjRynJZkqZyZG5w83u2/8XvPzqTv1S+8TmT09Po/8DmxAT63n51J36pfeJGF4BLTBV1EBdYqmFSmHv8Aru96mHv+u53qYe/67neph7/rud6mHv8Arud6mHv+u53qYe/67veqKLIGemaprIy6yVcqvn6TdVf+ov3n/wD/xAAgEQABBQEAAQUAAAAAAAAAAAARAQISE2AQAAMgkKCw/9oACAECAQECAfghEdOc+SSSSSSST9gJGwhCEIKmgThMiiroU9Syyydljn5gADRpwDi6JPcv5DLWV11uTRs8XieP0jX2WWOXU//EACERAAICAQQCAwAAAAAAAAAAAAABAhFREDFgYSKwICFw/9oACAECAQM/AfR+N7EsEsEsEsEsEsDW/IarTr4WWuQ5EIREiRL24yxjH+ndnenfqGk1YhCKdchiLTxQ7+iWnk+SJKhCEW75V//EACYRAQABAgYCAgIDAAAAAAAAABEBE2AAAgMEFBUFUDBwEBKAkKD/2gAIAQMBAQIB/ohnW5EXN+tO36VKlSpUqVKlSpUqVKlSiPrBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVW6IuiLoi8FVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVboi6IuiLoj4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPuHV3HP5/P5/P5+lr3Bq58mXjzo8Wdtq6WjnuDceN6vq+rjxs+Mnxm28bbFSpUqRnuLUnFatGpjTm4c+V/UiMZMv8KY9vGJ9hHt4xPsI+AAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAfT8Yn2Ee3jE+wj28Yn2EfAAAAAAAAAAABgAAAAMAAAAAAAAAAAAAAAB/mv3W/7TtO022rb+aI/GSPIY0pxqY8fcm62HVdV1W20rp//EADURAAEDAgIHBAgHAAAAAAAAAAABAmEDEWORBBIhMVJTYBNBUaEiJDIzgZCSsRAjQkNisMH/2gAIAQMBAz8B+RDZL271TITb6Jfb1M3wGXVbb+oMR+ZiPzMR+ZiPzMR+ZiPzMR+ZiPzMR+ZiPzMR+ZiPzMR+ZiPzMR+ZiPzLJb5XUEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEfLro0fePRDROb5KaJzfJTROb5KaJzfJTROb5KaJzfJSlW929F6hdUqPc7fc1kf4oN5gxqtbr77/YRf3BqIn5h2Somte46nVY5u+/UPaPV9JyJfuUr8bCvxsK/Gw0pNiVW5qaSu1ajc1NJd7VRq/FTs3o+q69u7pmnxpmU+NMynxpmU+NMxi7EenUe1G934NRbKlhg1V1e8gui37uolX0kP4rko3lr9I3gX6Rqbqa/SKv6VyNVJX+oZq0azqbGtsniV+FhX4WFfhYLWosqLvXqB+vfbbZbaaTsv/hX9HfO4VGNRd9kPW6vw+xQ7NG1Lb/DaaFfd3yM13ansnqlL4/fqSrWrOqMc2y+JX4mFfiYV+JgtCiymu9Oqv//EACgRAQEBAAAEBgEFAQEAAAAAAAARARBgYXEhMDFQUfAgQEFwobGQoP/aAAgBAgEBPxD/AIQ+PZ0xXzzPd+VTMvMHbjtx247cduO3Hbjtx247cduO3Hbjtx247ceu3+MoiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiInmePLu+TVVVVeFXlbfNn4zlbecYiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiInm+PLm+VVVeNVVVfxqqq8KvCr+FVVXheFXjVVVX2/eaN5o3yKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq/zF6Gfdr7tfdr7tfdr7tejuYcZjGN2biypuz4V8M3v7IGc0zeYZZMOnrp66ereua6GuhqKYnLPQ10NdDXQ1N+OY/nwrcuKTcy8MTeYtZng8Pn+1+tX61b67/bww1d/nnWe8xE9s1nGe275U9t1nHxZ7ZvkVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV4VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVeccXhV4X9XrPN1nCqqr7VvmT9bvnaz8Z7XvtO8Inl6z3DfIqqqqqqqqqqqqqqqqqqqqqrwqqqqqqqqvGqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/wCbDN63fF19dfXX1hvzAyRp+9suv9zHjHpVMvq/zcyZrWa6eunrp6w3xzV//8QALBEAAwABAgUDAwQDAQAAAAAAAAERITFBEDBQYNFRYfEgcfBwkaGxQIGQoP/aAAgBAwEBPxD/AIQoa1PFs3eDC1RfuNCTR9zajnOuNRIz7m3OneERERERERERESqbm71/TGE4QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQWrkPcwYMGO5D3JikIQgiEIbD7dPfjeF4UpSl7dQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEIQhCEJyXDnb4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9gneQ9zBgwY7kPc2IQhCCNUakIQhBkMEIQhtwhCEIQ2IQhCE4QhCE4QhCEJ1c9+F+i8i8q/XfpvMpernv3QdO9wAAAAAAAAAAAAAAAASi/WFgk0e2r4W/L4j8viPy+I/L4j8viK1RbaPuBuJscXkzYnMwJpeuT2v7LzoNtWq9NKQqp/HT7i5cN+qJFBG7JoxgeCf7Fou4LHGTtKfOPwfOPwfOPwIWlT1S8Axqv1bH/AEZhl7+AQrHyS6XtmWv7I+JHxI+JDSi/RPuNz9Ar9yIqNZRe5BJxqx5WzF9KmVjRE1MkPSyqdxTEVrE9UYYGrXkburU/gt2wwTQa9GE2RV+5FG6lf3/Upt0rMmTJWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlYm6NxGTJkrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKxm1nkPcvG9K9zUaONL1Q9zBR9M1GjhSjnVDZulFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCh0aqKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKEou8H0FD5uo0GvT9HIe5kpSlL/loe/M2pqNHG8L1M9y4nQEPcpR8rUaOsHTvQQAAAACDp3mgAKHRq9QAAAAAAAAlF/5r2vUco23VT45+T45+T45+RLaVKlph9wOKieMEJO5pbI1HvqVQk+tF603p/BpSkP7n4PsG3ivXqZUvs53iTyWllYy3/fcokvUcNGoj5Z+D5Z+D5Z+BpadK1pl91f/2Q==", + "description": "Allows to create or edit gateway configuration.", + "descriptor": { + "type": "latest", + "sizeX": 11, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + } +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_connector.json b/application/src/main/data/json/system/widget_types/gateway_connector.json new file mode 100644 index 0000000000..00084dde76 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_connector.json @@ -0,0 +1,19 @@ +{ + "fqn": "gateway_widgets.gateway_connector", + "name": "Gateway connector", + "deprecated": false, + "image": "data:image/jpeg;base64,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iikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/AK4J/wChPV6qP/MxN/1wT/0J6vUAFFFFAEN9/wAer/SmaN/yB7X/AK4p/wCgin33/Hq/0pmjf8ge1/64p/6CKALNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0qPRW3aPa4/wCeSj9BQBaooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArw7/gpb8YfEf7P/7Avxa8beEdR/snxN4Z8N3V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j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16b5a+lHlr6UAeZf8AC2vH3/RO7T/woB/8j0f8La8ff9E7tP8AwoB/8j16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7+3SvePC/wDyD3/66H+QoA0qKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigClrtib2y+X78fzD39a5yuwrK1fQPPZpYfvHll9fpQB8faT/wS603w9rVxeab8RPHOmrdXZvJYLS4WGN3LZ5CgZ9Oe1e8fGn4Vf8Lj+G934d/trVtB+1GM/btOk8u4j2MG+VvfGD7Guwmge3fa6srehFNoA8E/Z+/YL034C/Ft/GS+LPEviLVJLN7JjqbrJlG28lsbuNoA5r6Z8L/8g9/+uh/kKx7WwmvWxGjN79h+NdDpVh/Z1r5e7czHcT70AWaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5P44Xs9h8Nb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f7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArUVZ/sa8/59bn/v03+FH9jXn/AD63P/fpv8KAK1FWf7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArUVZ/sa8/59bn/v03+FH9jXn/AD63P/fpv8KAK1FWf7GvP+fW5/79N/hR/Y15/wA+tz/36b/CgCtRVn+xrz/n1uf+/Tf4Uf2Nef8APrc/9+m/woArV1vgP/kDyf8AXY/+grXN/wBjXn/Prc/9+m/wrp/BVtJa6VIssckbGUnDqVOMCgDYooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/wBcE/8AQnq9VH/mYm/64J/6E9XqACiiigCG+/49X+lM0b/kD2v/AFxT/wBBFPvv+PV/pTNG/wCQPa/9cU/9BFAFmiiigArmPi//AMiT/wBxCw/9LIa6euY+L/8AyJP/AHELD/0shoAyqKKKACiiigAooooAKv8Ahn/kOQf8C/8AQTVCr/hn/kOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/wAzE3/XBP8A0J6vUAFFFFAEN9/x6v8ASmaN/wAge1/64p/6CKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/+RJ/7iFh/6WQ109cx8X/+RJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/ACHIP+Bf+gmqFX/DP/Icg/4F/wCgmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/ADMTf9cE/wDQnq9VH/mYm/64J/6E9XqACiiigCG+/wCPV/pTNG/5A9r/ANcU/wDQRT77/j1f6UzRv+QPa/8AXFP/AEEUAWaKKKACuY+L/wDyJP8A3ELD/wBLIa6euY+L/wDyJP8A3ELD/wBLIaAMqiiigAooooAKKKKACr/hn/kOQf8AAv8A0E1Qq/4Z/wCQ5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP8AzMTf9cE/9Cer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/x6v8ASmaN/wAge1/64p/6CKALNFFFABXMfF//AJEn/uIWH/pZDXT1zHxf/wCRJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/AAz/AMhyD/gX/oJqhV/wz/yHIP8AgX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACuY+L/APyJP/cQsP8A0shrp65j4v8A/Ik/9xCw/wDSyGgDKooooAKKKKACiiigAq/4Z/5DkH/Av/QTVCr/AIZ/5DkH/Av/AEE0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv8Argn/AKE9Xqo/8zE3/XBP/Qnq9QAUUUUAQ33/AB6v9KZo3/IHtf8Arin/AKCKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/wDkSf8AuIWH/pZDXT1zHxf/AORJ/wC4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/yHIP+Bf8AoJqhV/wz/wAhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5j4v/8AIk/9xCw/9LIa6euY+L//ACJP/cQsP/SyGgDKooooAKKKKACiiigAq/4Z/wCQ5B/wL/0E1Qq/4Z/5DkH/AAL/ANBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf8AmYm/64J/6E9Xqo/8zE3/AFwT/wBCer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/wAer/SmaN/yB7X/AK4p/wCgigCzRRRQAVzHxf8A+RJ/7iFh/wClkNdPXMfF/wD5En/uIWH/AKWQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/wCBf+gmqFX/AAz/AMhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf8AXBP/AEJ6vVR/5mJv+uCf+hPV6gAooooAhvv+PV/pTNG/5A9r/wBcU/8AQRT77/j1f6UzRv8AkD2v/XFP/QRQBZooooAK5j4v/wDIk/8AcQsP/SyGunrmPi//AMiT/wBxCw/9LIaAMqiiigAooooAKKKKACr/AIZ/5DkH/Av/AEE1Qq/4Z/5DkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF//kSf+4hYf+lkNdPXMfF//kSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJqhV/wz/yHIP+Bf8AoJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/wAzE3/XBP8A0J6vVR/5mJv+uCf+hPV6gAooooAhvv8Aj1f6UzRv+QPa/wDXFP8A0EU++/49X+lM0b/kD2v/AFxT/wBBFAFmiiigArmPi/8A8iT/ANxCw/8ASyGunrmPi/8A8iT/ANxCw/8ASyGgDKooooAKKKKACiiigAq/4Z/5DkH/AAL/ANBNUKv+Gf8AkOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/AMzE3/XBP/Qnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8er/AEpmjf8AIHtf+uKf+gigCzRRRQAVzHxf/wCRJ/7iFh/6WQ109cx8X/8AkSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wAM/wDIcg/4F/6CaoVf8M/8hyD/AIF/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/wDMxN/1wT/0J6vVR/5mJv8Argn/AKE9XqACiiigCG+/49X+lM0b/kD2v/XFP/QRT77/AI9X+lM0b/kD2v8A1xT/ANBFAFmiiigArmPi/wD8iT/3ELD/ANLIa6euY+L/APyJP/cQsP8A0shoAyqKKKACiiigAooooAKv+Gf+Q5B/wL/0E1Qq/wCGf+Q5B/wL/wBBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/AK4J/wChPV6qP/MxN/1wT/0J6vUAFFFFAEN9/wAer/SmaN/yB7X/AK4p/wCgin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF/8A5En/ALiFh/6WQ109cx8X/wDkSf8AuIWH/pZDQBlUUUUAFFFFABRRRQAVf8M/8hyD/gX/AKCaoVf8M/8AIcg/4F/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8zE3/XBP/Qnq9VH/AJmJv+uCf+hPV6gAooooAhvv+PV/pTNG/wCQPa/9cU/9BFPvv+PV/pTNG/5A9r/1xT/0EUAWaKKKACuY+L//ACJP/cQsP/SyGunrmPi//wAiT/3ELD/0shoAyqKKKACiiigAooooAKv+Gf8AkOQf8C/9BNUKv+Gf+Q5B/wAC/wDQTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/AJmJv+uCf+hPV6qP/MxN/wBcE/8AQnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8AHq/0pmjf8ge1/wCuKf8AoIoAs0UUUAFcx8X/APkSf+4hYf8ApZDXT1zHxf8A+RJ/7iFh/wClkNAGVRRRQAUUUUAFFFFABV/wz/yHIP8AgX/oJqhV/wAM/wDIcg/4F/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8zE3/AFwT/wBCer1Uf+Zib/rgn/oT1eoAKKKKAIb7/j1f6UzRv+QPa/8AXFP/AEEU++/49X+lM0b/AJA9r/1xT/0EUAWaKKKACuY+L/8AyJP/AHELD/0shrp65j4v/wDIk/8AcQsP/SyGgDKooooAKKKKACiiigAq/wCGf+Q5B/wL/wBBNUKv+Gf+Q5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP/ADMTf9cE/wDQnq9QAUUUUAQ33/Hq/wBKZo3/ACB7X/rin/oIp99/x6v9KZo3/IHtf+uKf+gigCzRRRQAVzHxf/5En/uIWH/pZDXT1zHxf/5En/uIWH/pZDQBlUUUUAFFFFABRRRQAVf8M/8AIcg/4F/6CaoVf8M/8hyD/gX/AKCaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/8AMxN/1wT/ANCer1Uf+Zib/rgn/oT1eoAKKKKAIb7/AI9X+lM0b/kD2v8A1xT/ANBFPvv+PV/pTNG/5A9r/wBcU/8AQRQBZooooAK5j4v/APIk/wDcQsP/AEshrp65j4v/APIk/wDcQsP/AEshoAyqKKKACiiigAooooAKv+Gf+Q5B/wAC/wDQTVCr/hn/AJDkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/wDMxN/1wT/0J6vUAFFFFAEN9/x6v9KZo3/IHtf+uKf+gin33/Hq/wBKZo3/ACB7X/rin/oIoAs0UUUAFcx8X/8AkSf+4hYf+lkNdPXMfF//AJEn/uIWH/pZDQBlUUUUAFFFFABRRRQAVf8ADP8AyHIP+Bf+gmqFX/DP/Icg/wCBf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP8AzMTf9cE/9Cer1Uf+Zib/AK4J/wChPV6gAooooAhvv+PV/pTNG/5A9r/1xT/0EU++/wCPV/pTNG/5A9r/ANcU/wDQRQBZooooAK5j4v8A/Ik/9xCw/wDSyGunrmPi/wD8iT/3ELD/ANLIaAMqiiigAooooAKKKKACr/hn/kOQf8C/9BNUKv8Ahn/kOQf8C/8AQTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/wCuCf8AoT1eqj/zMTf9cE/9Cer1ABRRRQBDff8AHq/0pmjf8ge1/wCuKf8AoIp99/x6v9KZo3/IHtf+uKf+gigCzRRRQAVzHxf/AORJ/wC4hYf+lkNdPXMfF/8A5En/ALiFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/4F/wCgmqFX/DP/ACHIP+Bf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/1wT/0J6vVR/wCZib/rgn/oT1eoAKKKKAIb7/j1f6UzRv8AkD2v/XFP/QRT77/j1f6UzRv+QPa/9cU/9BFAFmiiigArmPi//wAiT/3ELD/0shrp65j4v/8AIk/9xCw/9LIaAMqiiigAooooAKKKKACr/hn/AJDkH/Av/QTVCr/hn/kOQf8AAv8A0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/wCZib/rgn/oT1eqj/zMTf8AXBP/AEJ6vUAFFFFAEN9/x6v9KZo3/IHtf+uKf+gin33/AB6v9KZo3/IHtf8Arin/AKCKALNFFFABXMfF/wD5En/uIWH/AKWQ109cx8X/APkSf+4hYf8ApZDQBlUUUUAFFFFABRRRQAVf8M/8hyD/AIF/6CaoVf8ADP8AyHIP+Bf+gmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/MxN/wBcE/8AQnq9VH/mYm/64J/6E9XqACiiigCG+/49X+lM0b/kD2v/AFxT/wBBFPvv+PV/pTNG/wCQPa/9cU/9BFAFmiiigArmPi//AMiT/wBxCw/9LIa6euY+L/8AyJP/AHELD/0shoAyqKKKACiiigAooooAKv8Ahn/kOQf8C/8AQTVCr/hn/kOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/wAzE3/XBP8A0J6vUAFFFFAEN9/x6v8ASmaN/wAge1/64p/6CKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/+RJ/7iFh/6WQ109cx8X/+RJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/DP/ACHIP+Bf+gmqFX/DP/Icg/4F/wCgmgDraKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKP/ADMTf9cE/wDQnq9VH/mYm/64J/6E9XqACiiigCG+/wCPV/pTNG/5A9r/ANcU/wDQRT77/j1f6UzRv+QPa/8AXFP/AEEUAWaKKKACuY+L/wDyJP8A3ELD/wBLIa6euY+L/wDyJP8A3ELD/wBLIaAMqiiigAooooAKKKKACr/hn/kOQf8AAv8A0E1Qq/4Z/wCQ5B/wL/0E0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv+uCf+hPV6qP8AzMTf9cE/9Cer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/x6v8ASmaN/wAge1/64p/6CKALNFFFABXMfF//AJEn/uIWH/pZDXT1zHxf/wCRJ/7iFh/6WQ0AZVFFFABRRRQAUUUUAFX/AAz/AMhyD/gX/oJqhV/wz/yHIP8AgX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/AMzE3/XBP/Qnq9VH/mYm/wCuCf8AoT1eoAKKKKAIb7/j1f6UzRv+QPa/9cU/9BFPvv8Aj1f6UzRv+QPa/wDXFP8A0EUAWaKKKACuY+L/APyJP/cQsP8A0shrp65j4v8A/Ik/9xCw/wDSyGgDKooooAKKKKACiiigAq/4Z/5DkH/Av/QTVCr/AIZ/5DkH/Av/AEE0AdbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR/5mJv8Argn/AKE9Xqo/8zE3/XBP/Qnq9QAUUUUAQ33/AB6v9KZo3/IHtf8Arin/AKCKfff8er/SmaN/yB7X/rin/oIoAs0UUUAFcx8X/wDkSf8AuIWH/pZDXT1zHxf/AORJ/wC4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/yHIP+Bf8AoJqhV/wz/wAhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf9cE/9Cer1Uf8AmYm/64J/6E9XqACiiigCG+/49X+lM0b/AJA9r/1xT/0EU++/49X+lM0b/kD2v/XFP/QRQBZooooAK5j4v/8AIk/9xCw/9LIa6euY+L//ACJP/cQsP/SyGgDKooooAKKKKACiiigAq/4Z/wCQ5B/wL/0E1Qq/4Z/5DkH/AAL/ANBNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf8AmYm/64J/6E9Xqo/8zE3/AFwT/wBCer1ABRRRQBDff8er/SmaN/yB7X/rin/oIp99/wAer/SmaN/yB7X/AK4p/wCgigCzRRRQAVzHxf8A+RJ/7iFh/wClkNdPXMfF/wD5En/uIWH/AKWQ0AZVFFFABRRRQAUUUUAFX/DP/Icg/wCBf+gmqFX/AAz/AMhyD/gX/oJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/zMTf8AXBP/AEJ6vVR/5mJv+uCf+hPV6gAooooAhvv+PV/pTNG/5A9r/wBcU/8AQRT77/j1f6UzRv8AkD2v/XFP/QRQBZooooAK5j4v/wDIk/8AcQsP/SyGunrmPi//AMiT/wBxCw/9LIaAMqiiigAooooAKKKKACr/AIZ/5DkH/Av/AEE1Qq/4Z/5DkH/Av/QTQB1tFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFH/mYm/64J/6E9Xqo/8AMxN/1wT/ANCer1ABRRRQBDff8er/AEpmjf8AIHtf+uKf+gin33/Hq/0pmjf8ge1/64p/6CKALNFFFABXMfF//kSf+4hYf+lkNdPXMfF//kSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJqhV/wz/yHIP+Bf8AoJoA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCj/wAzE3/XBP8A0J6vVR/5mJv+uCf+hPV6gAooooAhvv8Aj1f6UzRv+QPa/wDXFP8A0EU++/49X+lM0b/kD2v/AFxT/wBBFAFmiiigArmPi/8A8iT/ANxCw/8ASyGunrmPi/8A8iT/ANxCw/8ASyGgDKooooAKKKKACiiigAq/4Z/5DkH/AAL/ANBNUKv+Gf8AkOQf8C/9BNAHW0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAUf+Zib/rgn/oT1eqj/AMzE3/XBP/Qnq9QAUUUUAQ33/Hq/0pmjf8ge1/64p/6CKfff8er/AEpmjf8AIHtf+uKf+gigCzRRRQAVzHxf/wCRJ/7iFh/6WQ109cx8X/8AkSf+4hYf+lkNAGVRRRQAUUUUAFFFFABV/wAM/wDIcg/4F/6CaoVf8M/8hyD/AIF/6CaAOtooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo/wDMxN/1wT/0J6vUUUAFFFFAEN9/x6v9KZo3/IHtf+uKf+giiigCzRRRQAVzHxf/AORJ/wC4hYf+lkNFFAGVRRRQAUUUUAFFFFABV/wz/wAhyD/gX/oJoooA62iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=", + "description": "Allows to create or edit gateway connectors.", + "descriptor": { + "type": "latest", + "sizeX": 11, + "sizeY": 8, + "resources": [], + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway connector\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" + } +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_general_statistics.json b/application/src/main/data/json/system/widget_types/gateway_general_statistics.json new file mode 100644 index 0000000000..8cf20c1340 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_general_statistics.json @@ -0,0 +1,23 @@ +{ + "fqn": "gateway_widgets.gateway_general_statistics", + "name": "Gateway General Statistics", + "deprecated": false, + "image": "data:image/png;base64,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", + "description": "", + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway General Statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_logs.json b/application/src/main/data/json/system/widget_types/gateway_logs.json new file mode 100644 index 0000000000..5c17b22188 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_logs.json @@ -0,0 +1,20 @@ +{ + "fqn": "gateway_widgets.gateway_logs", + "name": "Gateway Logs", + "deprecated": false, + "image": "data:image/jpeg;base64,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V6B4kuvEviqC88aeILvTL5dW0vSTY2eny6bKJrIRWrzTMUWUMzh5mMgkZdyjaF9qoo63879tdNV2ei2KstL9P6+e73OC+Dvwk1TwTruveIfE2uWPiHxV4kFvDd3VhprabZxQW6uIYYYGmndQDLKxLSuWaRugCqOGv/2Qtb+3RaXp/jW0sfA9v4th8YQ6S2h+bercC/F/Nbm7M4U27zF2UCEOhYDe6LsPu1FVGTU1NbqzXqmmtNtGl/VyXFODpvZ3v800/wAGzwGw/Y01jSfEmkiPxxbr4T0DxjP40tdNTw+v264nnkuJZori687Eih7l9jJCjqFUOZcVH+zd8Gm1PX/i54ws28T+F7f4hX/laGbuzazvtLtlhzJcR29xGGhaS9mu5gkqZOVYrhgK+gqKmKUb26pr7+VN33vaMV6eZcpNvmfdemjk1ptvJs8r+Cf7PWqfD34l694v8Qa5oera5rlnBp8p0XQP7Gt544nkdZrhDPO01yfMIMm5VCjCovOfVKKKOiXb/hxW1b7/APDfkgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPn39tXxNrmsfEj4R/DfSfEGreFbD4iaxdx6vqWlT/Z78W1raPOYIZsZiaRgoLrhgoIBGc15j4a/ay8P/ALMfw1+MmoaL498Z/Ei18FpaXFl4f8U6bqUep6RNcOYEjN7dRia6glmGVIV2QK2C2VFfSnx+/Z20H9ovw7p9nrE2rabfaLepqWk6tpN19l1DSLpQVEsMmCAdrMpVlZWDEFTXG6H+wR4OTw543svEmpeKvHd58Q7SKw1vU9ev1e7ngh3eSieQkUUXllmZTHGrBjkk8V6lGvh1SUal/NJLX3r3v6abp6dmefVo1nUcoW8nrppa3367NfNHi15/wUH+KPhn4MfEbVL7wvpt5qnhWy0++0rVpvCmt6BpF69xdLBLaPDfhJmkiyG8yNirBwdowVO/4t/b18afs/Q/F2z+IGk+FdW1XwHomma7pR8Px3UMF2t/LLbxW8qyNI5ZJo8F0HzKchAflr0WX9hDSdZ+FGv+Edf8ffE7xVZ+II7SB7rV9Yimns4raVZY0hVYVhUll+Z2jaRx95zgY3PHX7Gng34meLPG2q66mpagvj7QLTw5qdm86rbrb2zzSRPFtUSJKGmY7t5wVQgAg509vg72cdL9P+3fT+8R7HFWupa2/wDkv+AeBXX/AAUE+KHhn4G/FLWdQ8M6fd6n4N0i01XSdWl8J63oOk30k04iktHhvwkzPHwd8b7WDg4Ugqe0+Nf7S/xQ+DvhHwnY6hf/AAztvGet297fXMFloet680kcWGjjt7G0BuGQBlWW5d1RDghDuCjrpf2EtK1n4P8A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gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMvxh4K0f4haBNpWvaXp+saZcFWktb2BZ4ZCrBlJVgQcMAR7itKKNYY1RFVUUBVVRgADsKdRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHlWs/sS/DDxD8Z4fH994YF14khvE1NS+oXRsPtqKES8Nj5v2RrlVVQJzEZRtGGGBXqtFFC0iorZdA683UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKjunlSBjCkcknZXcop/EA/yqSigDP+1ap/z52H/gY/8A8ao+1ap/z52H/gY//wAarQooAz/+Ekt/+eeof+AM/wD8RR/wklv/AM89Q/8AAGf/AOIrQooAz/8AhJLf/nnqH/gDP/8AEUf8JJb/APPPUP8AwBn/APiK0KKAM/8A4SS3/wCeeof+AM//AMRR/wAJJb/889Q/8AZ//iK0KKAM/wD4SS3/AOeeof8AgDP/APEUf8JJb/8APPUP/AGf/wCIrQooAz/+Ekt/+eeof+AM/wD8RR/wklv/AM89Q/8AAGf/AOIrQooAz/8AhJLf/nnqH/gDP/8AEUf8JJb/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FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFHX/Dtt4jtPKuFOV5R1+8h9q5G5+E14sh8m6t3XsXyp/QGu8ooA8+/wCFUaj/AM9rL/vtv/iaP+FUaj/z2sv++2/+Jr0GigDz7/hVGo/89rL/AL7b/wCJo/4VRqP/AD2sv++2/wDia9BooA47RvhSsUwe+nWRV/5Zx5Ab6nr+VdfFEsEaoihVUYUAcAU6igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqO6tIr6Bopo45o2+8jqGU9+hqSigDP/4RPS/+gbYf+A6f4Uf8Inpf/QNsP/AdP8K0KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xuj+x7j/oLah/3xB/8brQooAz/AOx7j/oLah/3xB/8bo/se4/6C2of98Qf/G60KKAM/wDse4/6C2of98Qf/G6P7HuP+gtqH/fEH/xutCigDP8A7HuP+gtqH/fEH/xupLXTZredXbULydV6o6xBW/75QH8jVyigAooooAKKK+Z/22fgb4U+MHiOTSm0eLxd8TPEukiw8OR322WHwOimUPrcJxus3RpgTNGwlmeGCJCCMrLdv6/r8bJLVuxUUnu7f1/Wybb0S1Ppiivhf9pbwNpOpQftEeJNct7PU/iF8NLXS08D6teBX1PR1/s63ktpbNz88Lz6gblSY8GZk2NvAC16N4m+BXhXxx+1LZSeF9NN9480PXoNe8T+OJQjX2g2w2ypokdyFD7Z49qGzU7I7eRpJMNJF5ukYpyir6N79lpq/RO7XS1tW0jOTai3bVJO3na9r972S9T6ior411/wr4d8L/tSeAfGnhfRdBvrPVvF2oaffeMdO1X7T4r1nUfK1FZdGuo5IowNPikQgA3EoiNvCBBGqefH0Hjey0n9qf8AaQ8F6T8V/hzeaP4fTwtreo2fhjxn/Zl7HLew3WnL9sKWtzdWzSRQyt5beZ5kYkkIC5yc4y5rW/vX7Lli5PX0Wmz1TtytN1VtTdnd7bK71lyrTpZ6t3slfdpo+qqK/PW4+DFr+0J8Fvhb4n16f4PeLL7wP8MG1F9H+JfhptfW5tZHjf7UsskyeSXS0RDdETFQSWjffz9WfDbxo37Q3g610W++Gvjjwf4VvtEsNQttQOpWdjZzK8cEy2kP2O8F7GU3eW6yQRIwjdTuVgGqHvxbjunqnpZXklfpd8j0V2ndPpeZy5KihLr1WvSLdl5cy1dr6NabevUV8m/CLwd4W179hjwv4a1y30m/tb3xDq9jpOgavfPa6V4hukv9RMGn3bCKbdbtsyVaOQHy1OxyAp7r/gn9Zf2N8KfE+gvp9noU3h/xVqFhNomlymXR9BP7uQWmny7UL2qLIpB8uIq7SL5UO3y0UfelJLom/ucVr2fvLvbS+6JVT93Tm/tW+V1J/Ne610u722dveKK+S7yG6/Z00v8AaqvPAtveTax4f8P2+p6Ylzcz6hPNeJpEsiM7ys8srF1UncxLfjVz9lvRtR+HWrat8PV1bwbbXHiPw3B4vi8WeE9PKXuXkEHmX8t5Ldfbp5FClLuXHnKko8pNgpUpKpLlXy82uZv8IyfytvoXUfJTVR9W19zir/Nzivnrorn1RRXxL8YvhPofhP8Aae8SfF680r4L/EL7P440LSGs9V8ILceKtAmkTTbSJLTUXl/dSRySfa0iEDbxLlZE6jt7L9kj4T6n+3DpV14V+F3w70C++HKN4i1nW9L8N2dpfXGp3iSxW1u1xHGHYiJri4kBOdzWrHIaqh7yi31vfy0UvR3i/S9km29Kqe7e2tkvvelu+ktHo+rtZH1HRXwj/wAFZ/iVNY/szeLvhzqs3xM1TSR4L1LWdR8Raf4R1G7t9XnCTfZLKS7060NrbxrIvmTmRo1EcUStuWWQjN/b7/afsfHmn+G7W40f4uaZ4Z8L634S1q2K/DrxGkWuXcmr2MmJJFstirBAWAt5CJJLiVU2eZEivVNKSg7/ABS5fRXs3+enW29ncv2bul3v8vht8nzK76a7tWP0AoqHT71NSsIbiNZljuI1kUSxNDIARkbkYBlPPKsAQeCAamqWmnZmaaaugooooAKKKKACiiigAooooAKKKKACiiigDlvH3jV9Hb7HaNtuGGXf/nmOwHua4S5vJr2TdNJJKx7uxY1c8WMz+Jr7d185h+GeP0rPoAKK/Im5+GWufFyT4b6N4X16Xwx4oH7SfxDvtG1JclLa9trbV7iDzVHLwNJEqSJ/FGzr3rF+KPxhk/as8N/tUaheeEreLXpvEnww0TXvCmtloraLUodThgubGaQxvut2kBXzVjkVonDhWB2mY3cIStrJQfymo6+dnKz0/l/mSVyhy1nSeyco384zlH8VHmWvf+W7/ZCivzv+NfwQsfgz4a+FPhfxF8JvhP8AA34cePviRFYeOrPwJqhbStYs1026eyjv7lbGwKpLfLDEY2Qq/wAiFyJClerfsCaTovw4/a5+OngX4btax/CDw3baFLp9jYXBn0zRdYmiuTfWttyViHlJZStChCo0ucAua0jG9/L9FFu/b4vW9rpXMpNxtfsn8nKUVbu/du+lr6ux9k6R4mvdEmVoZ32g8xsco34V6Z4f1uPxBpcdzH8u7hl/uMOorySu4+Ebsba+X+AMhH1wc/0qSjsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCvq2q2+h6VdX11J5VrZxPPM+0tsRQWY4GScAHgc1j/Cv4n6P8aPh5pPirw++oS6LrkAurKS902506aWI/dcwXEccqhhypZBuUhhkEEnxZ/5JX4m/wCwVdf+iXr4rt/il8RtE+APiS88N+Pr7w3Y/Cn4LeG/Fml6dBpVhcQ3939h1CSWK6eeF5Gt5BaQqVieKQbSVkXJyU/eVVv7HJ/5Nz3/APSVb57i951qVGG9TmXzTppJevO738j70or5F+JPxz+IXwIm8ZadJ40uPETXWgaBq1pqOqabZRjwzJqOqvYXMkawRRK9rBGROq3HmOPKbfK6k44/9p+x8aa14L+J3ge++L/i+/tvBuo+Dbm31Mafoiag5utQPmJPtsfIOCIZF2RRkeVEDlTIJJlK0HNbar5p8rXyfXZ9GwUlzRi/tW/GKkn801897H3VRXzj+y38OtY8IfthfGqbUPiB4s8VR7dIT7LqlvpccQL2u5ZM2tnC+5ACi/NtKk7gzYYdN8e/EfiXxH8ePCXw/wBH8Xap8P7HVtE1PXbjWdNtbGe8uJLSWzjW1T7ZDPCqFbl5H/dFyEXayfMSRlzWS63/APJbt726Rb/BXYRd02+n6tJba7u347antFFfJvir40eMvFUviWSz+L2i+H7f4d+A9P8AFaajpOn2U2l+LJJ47xpLqf7QJmGn5tlAW2licFn/AH5+UDF8XfHz4m6z4d+JPju18Xal4YtPh/HomqW3hYaVYyQ3An060urqzu5ZYWnKkyuqmJ4pI2yS7rhFp2UnHs7ffez9PdfmrapaCnJRjzPs3/4Dy3Xr7y8num1qfZlFfJl/8WfiJpPiG+8Wv46vptJ034rQeDI/DQ0uxWxn0+5vba0zJL5JuTNGZ2dHSVFwoV0fljxHwq/bE+Nesu3jaTwp401TQdQtNdln0y/l8Mw6NZvZQ3UlvDp4trttWkn82BIJUuUYku77LfZsGMa0Xh1iXpFx5vRckZ6+fLNfPQuMXKq6Md72/wDJpR/OD+Vj7qor4h/an0rxR4i/YP8AiE998dL3XG8ReAJPEv2WCw0eK5hQxqWFqEtj/wAS6QOUJlWWYHbtuQc56D4pfF7x74J0n4tana/EjU7d/gLpdnJaaXdafprN43Y6dHd+ffkWwcC5mZ7aMWQtlEkMmA5+ReyVGUdJb3a+52f3PTv2ur2ilL2rSp63Sa1S3tbe291vY+vqK8P/AGcvFfizx58bvitqGu+Lb1vD/hzxGNA0jw99htIbe1R9O0253ySiPz5JRJNKF/eBcSsCrkIV8o+GPxd+ImtQeE/EVx8VLrU28YePNf8ABbeH/wCy9MW3tIILvVI4Z7cpCJ/tNtHawu5kkkjZI33RAtvGdSLhGMn9pRaS399LlXa7utdlfVpXYo1Iy5mtlzf+S3u++ln5voj6d+NHxp8P/s/eALrxR4pm1K10OwK/ariz0q71I2yk/wCseO2jkdY16tIVCIOWIHNdUrblyOh5r4Q+Inx98V/H79kL4yQ6pfx+V4B+HlxoHieGK3jRbnxMDMt5n5dyCKOCN1VSFZb8EqcIR9i+OPH+reDdT8P2uneB/FHiyDVpxBdXmlT6dHDoiZQedcC6uoJGTDE4t0mfEbfLnaGp07RTve7dvTZP5/En2auk7iUm5uFrWWvra7Xqvha35k1rodVRXhPx11Hxn4t/ah8NeB/D/jzVvA+k6j4P1bWLmfS9OsLm6e5t7zTo4WVruCZFULPKGXYdwfgqQGHh2k/tZfFHwL8BfCXxGv8AxOfFV746+Fuq+LJdFm0q1g03Sr+0tbSaJrbyY1uPLPnSeYk00u7AKmMDFZ/8u1Uez/znH8XB/hey22jByk4ro0n80pLz2fTs/K/3PRXwb+1+fGY+Avx48EXvxg8SeJtPtvhE/idL9tP0aO6Z5TfCSHMNmsf2aWOBUHyeYEZisu7Dj1T4R/C/W/DH/BQW6uL74leNPEUVv8ONM8y01G20iOK8/wBJu48ubexicYdTL8jKN8rD/V7I1I+9yf3nNf8AgCnf8YNdO/kFSPLBz9PxdO34VE/lbrp9PUV5H+094w8QW3in4d+END8QXfg9fHmsXFhda9aW9rPd2Sw2NxdLHbrdRywCaRoQAZIpBsWTC7iGHn58Z+MPHPxAsPA8Pxlh0qHRdAvNak8T6Np+mST+IJINQktWilE8U1uq2yRoLoQRxsZZhta3ACGZTS38/wAIuTfySZPRvta/zaS9btra/wCDt9OUV8OJ+0l8U/jN4M8UeJNP8cXHgv8A4Rv4RaJ47gsdP0aynt7zUZv7XaTebqKST7JKLSHMassm0KUlQ7i/Q/Ej43/Eie1+KnjPTfHN5o+m/DdtHv7Lw/BpdjLa6gk2n2lzc29zLLC85jcyttMTxSIxJLuuEFT9yo6ct1a/le9n8+V+atqloFT93Hml2v8Acotr1tNeXZn2FRXxp4P/AGmPjD40/aOvbm00Dxk3hfTPHl14SubN5PDNv4cjsIZWh8/dJdDWDelQtwoEYjdXCLCykTFZNd8afGv9ke88Uan8Yb7RLr4jeD9S1B/DMdhpKy6M8UJke3sC9s0rGHBguPtP2g4divkOFI58RX9nhpYm2iV9dPs8y89V1SZtTouVf6u97pPqtZOL8nZp3+Xc+yqK+RPh1q3jC7sfCPgC3+LGteFbPw38NLDxX/b0thpMt5rskryoyTeZa+QLS1SKISCCKOQi4iJmQ8v0f7Fvxk8dftKeNZvEuva7daNo9v4c0HUB4Wt9Pt0gFzf6aJ5zJNJG1wUV2BRQ6EEHcWB2jsrU/Zzcd7Sav85pP5uEl67nHTquUIya1aTtfvGMvwUk3/nZH0xVLQfEuneKbWa40vULLUoLe4ms5ZLWdZljnhkaKWJipIDpIrIynlWUggEEVi+HfH2ra18Q9Y0W58E+J9H03TEVrbX7ufTm07ViduVgSG6kulIyc+dBEPlOCeM/K/wc8W+Ir/UNK+H+i+KLzwLbeMPHfxCvLjXLG2tJ74yWeuTGOztxdxTW4eUTSSktFI3l2sgULy6Zx127X/L7tL76/edXs/3bn2ko/fGcv/bbfM+z6qa/r9j4U0K91TVL2003TNNge6u7u6mWGC1hRSzySOxCqiqCSxIAAJNfE3jn9rb4g+I/hJbvofiDxhceIfDdrr1zeN4S0jQV/tS20/Uriyt9UuptXmjtls5hbl3htQJmLsUkRAM1f2m/jJ4q/aE/Zw+K0k3jJvBem6N8FbfxLLo1jaWcia3Lqen3zS/aHuI5JRboYVjjEDRMH3lnfIVVH3oylH7O/wD5Mk/S8JLTZqzs07OlGLxMMNU0cnb7nFNX2v76au7NWabTV/uo3sK2f2gyxi3CeYZdw2bcZ3Z6YxzmodC12x8UaJZ6lpl5a6jpuoQJc2t3ayrNBcxOoZJEdSVZWUghgSCCCKxbv/kkMn/YHP8A6Jr45/Z9+Lfin9m34HfC1ta+IU114b1z4KXXiNlv9CgmtPDE2m2mliJ7eK2WO5mjK3bl4pZ5Hcoux48kVrya1F/La3ndVG/naGnrrY56DlV9ko7zTf3cn/yTv100TZ91UV8FJ+1P8XPDuoeMvCdxq/jTS9SsdQ8ES2Go+L9P8Oy6jHFq+vtY3SrFpTvb/ZWhj/diYLcqXfcx+Rh3urfFr4heEvEWrfDeb4garcyT/EHTvDUPjO603Tl1TS7K70j7fgolutk0xnT7PE72+3/SYwySOuXmUWkn3fKvN+7p8uZb22fW19vZuzfZcz9OXmv56bW7n1BB8RPD91rC6fHrmjyag93JYLbLextM1zHEJpIQmc+YsRDsmNwUhiAOa2K+GfhjPeeEvjpaySapceLr7Svif4ozdyJFHPfvF4aTCuIUWMSZXY2xFG4HCL90cz4d/bA+PF5+zt4h8cSR+KdPtdb+G2oeKbTU9cTws9jpOpxpbtb/ANl29hdTXUtp+9lDi+WR1KQhnUsyUqMfacqju4wl5XnDmS+dml8r2uclOtzOfNpyznFd7RlZv8Vf8Ln6GUV8iftFfED4jfAzU2mk+KGu3nh7wfoUet61fafp2g3V5ZtJc3LST6vYSJDM2mCKNY4Rp7Jct5EwZpWAevpHx98QdU8Hz6Iul+CfE/jCPVrhYbifSJ9Ohj0mM7f384u7qBjGMk4hEr4U/ITgFuOl/Nr/AIPo+50PR28r/he3qrq6813R1VFeFftleAPA/jCfRP8AhKvC9v8AEjXLmKex8NeDb9Y7ixvbtjGxvGikVljMAUFrsjMEbuFy8iq/mf7QX7FfgHUfgn8PfA/ivwb4G+InxU8QWFl4Kh8Va54ftdQ1RIYYC15fCeeN5B5MCXEiFmx5rRKTl+c4tyi7b3S++/Xpb3b9EpXb0ZWieu1m/u8vv821ZJn2DRXyf+1T+xR8GfiN4x8G+Cl+E3w1vvE3ip4Re6tceG7KbUrDQ9OSETOLhozKCUFtZowbcn2lWX/V8fRHxB8d6p4HutFh0vwP4m8XRalci2uJdIn06KPR48qPOnF3dQM0YyTiASvhT8nQHT3bXXdr8tfv08mmZ+9s+13/AJfh6tNaanUUV8jfts+BPEnjD9un4N33g3UmsPFvhfwl4n1nSonmMdpqkkdzoyNZXPX9zPHJJGWwTGzJIAWjArkv2cP2o5PGvxz1DWPDV3caZo3jr42f2Nrdnd28azwmLwPC72M24ExTRXtqiMEIO+IrkqSDph6Ptk2nZ8rf3TUF97b9GrNapvaVNpOXRJv7ouTXrZad+mzt9zVDqOpW+j6fcXl5cQ2traxtNNNM4jjhRRlmZjwqgAkk8ACvkLwf8ZfH3x9+PNp4S034laj4d0m6l8cbr3RtO0y4uANM1jTrW0RGuLeaMeWk8qNlGLBm3fOFdcXRvi18Qta+CXhfWPE/ja48RRfFLwBrkmo6UdLs7Sw064trHek1p5cYuFLjcHWaaZSWygjA215uKxXssF9b7w50n21snbbVW+fa9tI4f997GX83K7d+a3/BPtfT9Qt9WsIbq1mhubW5jWWGaJw8cqMMqysOCCCCCOCDU1fDE37Rnjj9mH4Q6VfaZ4w/4WVb6p8H73xhaWdxZWKW+iz2MenJC1u1usTNaSC7kJW5mdswcTqNxEq/HH45aV4Z1DTbq98Z+HY9Q1zwlBpeveK4fCt1qqrqOrfZr2NLfSZ5rf7N5OzyZJUD7mky8mwGvUqUGq3so9Zcqv353C3a907+W13ocFOtfDqvL+Xmdu3Kntv19erSWp9xVk+OPHmh/DHwpe694l1rSfD2h6anmXeo6ndx2lparkDdJLIQijJAySOSK8v/AGjPFniL4ZeCfh34b0/xVe2d94s8QWfhi/8AFt1bWj3lorW08huQnlLaC5nkgSFMw+UJblcRNxGfB/i2ni74uJpPhW8+JXiqGT4f/GHT9Bg8RWFhpH2jWlawgu1knSSykt/tFvLO8RMMUcZaPLJu4XmeslGP80Y3/wAU4Rv8vaRdna/kdEvci5y6RcvklJ2+bg1om+trH21a3cV9axzwSRzQzKHjkRgyupGQQRwQRzkVJXin7Y3xA13w1YeGdB8L6v4ytfEHiC5nMdp4U0/SZ9b1CGCEvJ5MurOunwKhKM7TK5ZTtQBjuHkHwQ/aH8fftQ+HPCtpdeObz4Zy2/hG48Q3mq21lpUsmrzwajPZOJvOW4t1hiWBJJxbEDN0mydFALT7SPNyrvb7ouTfokmT2T7X/wDJox++8lp8+h9lUV8z6X8T/F3xI8f+Kr5vilpfg3TPh7Po9vDDFaWLaH4mS7s7W4a7nedXuBDNJcPBB5FxFhoclpTla4fw7+058YvF/wC0Bqd5ZaH4yHhnSvHN34TuLWR/DMHhyGxhkeH7QWkuhrBvSAtwoEYjdXCLCykTGpvlfK/X5XSu+1+Zb2t1sOz9n7Tpp57pyskt9Ivb5XPtCiviH4Q/Ez4iePfg/wDCm41T4va1rV18avANxf6hFBpmjxTeH54rCKdr2y22uNgkYwyrcLOm+4j2+VgIeR+HnxX+KXgj4DfBHwF4PvviVrjf8KtsvE41LRIfCovbiQrGqW039pvawfYrdSiN9nRrgrJEXmRvnlupH2cpwnvFpaa62qN/cqbfW9+jVge6Xr+Dgl63c0v+Bt+gHiLxHp/hDQrvVNWv7PS9M0+Jp7q7u51ggto1GWd3YhVUDkkkAVcByK+C/wBpv4m+Ovjf+zX8X7jxB4obwKfCfgKwlvfClgmn3VrqU99p4mmea4ZJZHj81nt4WtZo0LQOS02dq/Rn7VHirxPp3in4P+H/AA34mvPCq+NfFM2k6le2lna3Nx9mXRdSusRi4jkjVxLbxMGKEAqAQylla5UmtFq7tfd/X3E05c+q25XLXyV7etvxPaKK+Rfht8R/iXol74c1bWfiRqfiK3g+I954BudOm0fTre21KzSe5iju5migWUXo8tCWhkjgbBH2dc5HKt+1/wCP9O+Jy3NnrXjDVvC/jLSvEk+lX+o6XoVnoatY2008EumQxTPqeUMQST7erJJncPLyqHgnjKcaLr7xSb+6EZ9bauMotebs7NM0cWqvsXvdL5ubh+Eou/lrsfclNklWFdzMqrkDJOOScAfieK+G/iR+0b8Sfgz8G77VLf4oSeLL7xL8IdS8cxXl5pWmrH4YvrVLERSwLBCga1mN3KdlyZWzb8SEbgNz42/EHxV8PNS1zwnfeNV+I9jJd+DNain1jR9Lkl0g3niW3tng2wwJC0TxrvgZ4zNG0TuJXYIyehKi41I05byk4r1Taf3creujtZO7SM6ElVipR2fK/lJxSf3yXn1tazPsqivk3TPit8RbbX4fFtx48vrrSU+Ktx4L/wCEb/sqxSxl099Qe0jZ5RD9p+0REqyusqoVUK8bkmQ43gP49fEK9+I3wH1u8+IlxdWXxc8Watp+reFDp+nC00aG103VJltYJFhF0HhmtoVmaWZ2MikDylJjOOG/fwjOG0lfX/DGdvW015X6lVGoVJ0nvG7fonNafOEvwPr238Tabd+IrrR4tQsZNWsYIrq5sknVri3hlaRYpHjzuVHaKUKxGGMTgZ2nF6vjz9oxfFmk/tNfHLxF4T8Z3/hG+8JfCzQ9ZQW2n2l2uoywT+IJI4ZxcRyf6OdpDrF5cpyNsqYOc740/tgeNtE+Jmm634d1Hxbf6DY+JfDnh3VbG003RYfDenvqMmniaC8luphqlxc+Xe+ZFJYqIkLRq6PslaqjHnqKlHf3b+XM7JvybVvWyerV9KlNwfy083yxk16+993oz7UqjqXiXTdG1Cys7zULG1utSZ0tIZp1jkumRDI4jUnLlUVmIGcKCTwK+U/hh8XviPPrXg/xTqXjy91TTdf+J/iHwXP4efSrGKyWxt7zV47Z1kSEXH2iP7HCu/zdjICGjLkynA+HPizxJ8UfHH7PvjnxF42u9VuPG7a3qJ8OSWllDbeHX/sq4DW1uYokuD5BPlSfaJJWMnOY/uVjUm405zX2bp+TSUreejTurru0ya0ZU5cj7pffJwv98X+B9m+HfEen+L9AstW0m+s9U0vUoEurS8tJlnt7qJ1DJJG6kq6MpBDAkEEEVcr82fhj+0b8XNH+AXw/8O/D3SvF03/CE/CDw1r9pHpTeG4tP1G4ntJgRqkmrXUM62QNui7rIK6/vSZc7Ur3O++I/wAUteX4z6vZ/EC30aTQfFFl4Y0HRbyHTba1tFnt9HlkCXMsTGW+Y3FxHbeY5gMs6CRJF2leyth+WtUpR+y5etlJQWnW7atb52JlZOKb+JpX6Xs5a9rJa3+V9T6zorwz9lPxjrnxC8P3Fpq/jTxZJrHgvxNNpuqWeuaVpNrqkubFJksr17LfaSsFuI7gTWPlAqI0YZWUNyH7dP7Oem/tDfGPwnJdT/B7Urrwn4c1e8TQfiF4V/t+yuY5JrEvcpGZoViaPyBGZ8uYxOf3bBsVz1LQtd6NXv5crlfz07X77FQjzXT06fO9kvm7b9++h9RUV+e3xc8HeGPjX4IsvjM/hP4GalpXhL4U6NrLfD7xn4PTU5dItNt5deTZzl40sxKpWFJBBKubUDyx0rq/2hvhvoS/G/xB8Z7rQfgz43/4Rq78P2dxoniPwgLvxLo5byDFDZ3zy4tps3XnRoIJBI5VQ0Z+YaVKbhP2ct1Jp+Su0n53atZbPrbUiT0utVa683aLa+XNa/Xp5fb1FfCmuftCWfjv/gof8Mda1jSfipptxY6/q3hrRdNuvAev29lBamymia7MzWgt5WuJlSQyq7LDbxxMxjHnGtf9kHxf4i8OfELwZ4u8TQ+BdZ1T4zahq2l3c1pp858R6HJbC6uWhmvJJ3ElpD9l8g20cEKwO0YzIcs2UHzWfRpu/Tul9zV+3Unmd5q2sWl+F2/lrbvbRn2pRXxX+xv8KND+Afxx8HXdto/wV8UTfFPT9W1C08W+GfCQ0vxCAsiXMr3d20sjXcMplCs22Dy5BEpV92V+1Kcb8qb0fVdn1XyL6tBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFed/Fn9kT4T/HzxDDq/jr4X/Dvxpq1vALWK917w5Z6lcRQhmYRrJNGzBAzMQoOMsT3NeiUUWC7ONu/2dvh/f654b1SfwL4Nm1LwdClvoF3Jots0+hxIMIlq5TdAqgYAjKgdqw9b/Yo+DXib4it4w1L4SfDHUPFr3aX7a3c+FrGXUWuEIKTG4aIyeYpVSH3ZBUYPFenUUdebrr+O/wB/ULK1v602OW074HeCdI+J1342tPB/ha18Z6hD9nuteh0mBNUuYuBse5Ceay8DgsRwKl+J3wa8H/G3RYNN8Z+FPDfi7TrWdbqG11rTIdQhimX7sipKrKHHZgMiukoo6Jdtvz/MOt/67HK/EH4FeCPi1FpMfirwb4V8TR6BMLnTF1bSbe9GnSjAEkIkRvLYYHzLg8CuqoooA53WfhF4T8R+ArrwrqHhfw7f+F77f9p0e402GWwuN8hkffAymNt0hLnK8sSTzzV7wZ4J0X4ceF7LQ/DukaXoOi6bH5Vpp+nWqWtrap12xxxgKq8ngACtSijbYPLsU7Pw9p+narfX1vY2dvfals+2XEcKrLdbF2p5jAZfavAyTgcCuY8Ofs5fD3wd4d1rR9I8B+DNK0nxJMbnVrKz0S2gt9UlJyZJ41QLKxPJZwTXZ0ULTYOljl9T+CHgvWviXY+NLzwh4Xu/GGmQm3s9dm0qCTU7SI5ykdwV8xF5PCsBya29K8NadoN3qFxY6fZWc+rXH2u+kggWN7ybYkfmSFQC77I0Xc2TtRR0AFXaKNlZf1fX89Q8zFHw28Or4Gm8L/2Bov8AwjNzBJazaT9hi+wywybvMjaHbsKPubcpGDuOc5NXNd8Mab4o0xbLU9PsdRs0mhuFguoFmiWSGRZYnCsCNySIjqeqsikYIBq9RQF2FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHGfEPwbLc3LX9qjSFh++RRzx/EB3riiMGvaKrXOj2d4+6a1tpW9XiVj+ooA+edN+CXgzRr6zurPwj4YtbnTtSudZtJYdKgjktr65V1ubtGC5WeVZZBJIMO4kcMTuOWah8CfA+ralrF5deDfCt1eeIrm0vNVnl0m3eTU57Rla1lnYpmV4GRTGz5MZUFSMCvoX/hG9O/6B9l/34X/AAo/4RvTv+gfZf8Afhf8KP6/r7kHW/8AX9as8S8XeDtI+IHhq80XXtL03W9H1KMw3dhf2yXNtdIeqyRuCrKfQgiqnw4+F/hn4O+ErfQPCPh3QvCug2efs+m6PYRWNpBnk7YolVFz7CveP+Eb07/oH2X/AH4X/Cj/AIRvTv8AoH2X/fhf8KNtg3PK9P0241W5WG3iaWRuyjp9fT8a9P8ACnh9fDekrDndIx3yMO7f4DpV62tIrNNsMUcS+iKFH6VJQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFPxDokXiXQL7TZ2kWDULeS2kaMgMqupUkZBGcHuDXF/Cr9mzw78MvhRb+E7pf+EuhXRovD19f65Y2Ul5rNhCsiRW915MEUUsaRyugUxgYZsglmLegUUR0vbra/na9vuu/vD7Sl1je3le1/vsvuRk33gLQtTmupLnRdJuJL+xGl3LS2cbtcWg3EW7kj5ovnf5Dlfnbjk15v8ADj9ivwL8MtY8bW+m+GvCdr4M8a2Fjp83hW20G3t9LiS3FwHDQqPKkWXz+VMYHy87s8evUUuVWa77/n+bf3icU2n21Xlpb8tDz7xr+yz4E8cxKZNDbRb2Oxh0tNT8OX1z4f1SKyhbdHaJe2EkNyturAHyVkEfA+Wqlh+x58Ox4EbwzrOhXHjrRGvhqS23jjVbzxd5VwqhVeN9UluHj2gcBCACWIALEn0yin38/wDO/wCevqPbb+tLflp6HK+M/gX4J+I+oaHd+IvB3hXXrrwzKJtHm1HSYLqTSZBjD27SITCwwOUweBWlqPw78P6vBq8V3oWj3UfiDadUSayjddS2oqL54K/vMIqqN+cBQOgFbFFAf8N8jGl+HXh+e1kgk0HRnhl1BdWeNrKMq96rrItyRtwZhIiuJPvBlBzkA1Q0P4I+C/DHxF1LxhpvhHwvp/i3WoxFqGt22lQQ6jfoMYWW4VRJIvA4ZiOBXUUUR00XT/K35JL0Qb7/ANa3/PX1OQ8L/s++AvBFj4gtdF8D+ENHtfFjO2tw2WjW9vHrJcMrm5VEAmLBmB35yGPqagf9mr4cyX/he6bwB4Ja68Ewpb+HZjodr5mgRJgKlo2zNuq4GBHtAwK7aihabeX4bfd07A9d/wCr7/eYs3w38O3LXDSaBosjXWox6vOWsYj517GEEd03y/NMgiiCyH5l8tMEbRjz34Dfsd+FfgOLvVbTSPC9544urnVJT4oOhQxai0N5fz3i27ygmVo4zME2+YA3l5wucD1yind25f62t+WnpoLlV+b+t7/nr6nieqfsZx+Mf2e/EvgnWvFmqWt948vp9R8U6x4fsbWxfVZJ8LLEkVwlysMJiWOEctKqRr+9L5c+1ouxQvoMUtFHM7cvT8rJJJdkkkklohcqTv11/Ftv5ttu5Rm8NabceIYdWk0+xk1a3t5LOK9aBTcRQSMjPEsmNwRmjjYqDglFJGQMUtL+GvhzRLbSYbLw/olnDoNq9jpiQWMUa6dbsFVoYQFxHGyogKLgEIoxwK26KW6s9v6/zf3lJtao8j+Hn7GHgf4UfE/XtY8N+HfCugeH/EWgx6LeeH9M0K3s7O4YTzyyTSLGAkhkE+xlZOQvJOcDa8TfsqfD3xN4c0vS/wDhF7DRotBsjpuj3OgNJod/olqSpaCyu7Nori0jbYoZYJEDKNpBUkH0KipjFKPKttfxbf5yfpey0Kcm5c/XT8Ekv/SV81fc8z8P/sgeAtH8F6x4c1DT9a8Z6DrxjN9p/jXxFqXi62l8vJUBNUnuAgyckIACQCckDG14r/Z1+H3jzwpo+g654E8G61ofh145NK06+0W2uLTTGQYQwROhSIqAACgGB0rsqKu7/L8Nvu6didtvP8d/v6mRe/D/AEHUrnUprjQ9IuJtasU0zUHks42a+tE8zZbykjMkS+dNhGyo818D5jmKb4Y+G7nTtTs5PD2hyWmtKiahA1hEY79URY0Eq7cSBURVAbOFUAcACtyil1uG+j/rb/Jfcjl5vgj4LuPijH44k8I+F5PGkNv9kj8QNpUB1RIcY8sXO3zQmONobFHh74JeC/CPjDWvEWk+EfC+l+IPEg26vqdppUEN5qg9J5VUPL/wMmuooosvz/Hf7+of19233HB6n+yz8Mda8IaL4fvPhz4Du9B8Nzm50jTZtAtJLPS5SxYyQRGPZExYk7kAOSTXYWPh3T9L1S8vraxs7e+1LZ9ruIoFSW62LtTzGAy21eBknA4FXKKN9/X59wsgrk/FfwG8DePPBl14b1zwX4T1rw7e3kmoXGl32kW9xZT3MkjSvO8LoUaRpGZy5G4sxYnJJrrKKB3e39f1qcd4s/Z4+H/j2HQY9c8C+Dtaj8K4Girf6LbXC6RhQo+zB0Pk/KAPkxwAO1M8Vfs3/Dvx2uhjXPAXgvWR4ZgNro4vtEtrj+yYSgjMdvvQ+ShQBSqYBUAdK7Sij/O/z7+ottvT5djy9f2P/CA8fnxJ/aHxIN4bs3htD8RPEB0ncTny/wCzze/Y/J7eR5Plbfl2beK7SH4YeGbe306GPw7occOj6fJpNgi2EQWyspBGsltENuEhYRRAxrhSIkBHyjG5RR9nl6f0vyD7XN17nC+EP2X/AIZ/D7TPsWg/DvwLodnvgl8jT9BtbaLfBObmBtqRgZjnJlQ/wyEuMMc1teJvhL4V8aaRrmn6x4Z8P6tYeJgo1i2vdOhuIdWCqqL9oRlImwqqo3g4CgdAK6CiiWqs9gTad0cz4U+C/g7wJb2EOh+E/DOjRaVIZrJLHS4LdbNzCIC0YRRsYwqsZK4JQBegxVHTP2bvh3ot14lns/APgu0m8ZgjxBJDodtG2ug5z9rITM+cnPmbuprtKKfM783UlRSVktN/n3OW8c/A3wT8T9f0bVvE3g/wt4i1Tw7L52k3mp6TBd3GmScHfA8iFom4HKEHgV1NFFLpYrzOH+MH7Mfw1/aGmsJPH/w98D+OJNKV1sm8QaDa6m1mH2lxGZkbYG2rnbjO0Z6Ctbwd8H/CXw7stHtvD/hfw7odv4ftZbHSotP02G1TTbeVkeWGAIoEUbtHGzKmAxRSQSBXRUULRWX9f1dhu7vcpjw7p6+IG1YWNmNUa3Fo155K/aDCGLiIyY3bAxLbc4yScZq5RRR0sHmULnwtpd74ktNZm02wm1jT4JbW1vnt0a5toZTG0saSEblR2iiLKCAxjQnO0YwPEvwB8B+NPD2uaRrHgnwjq2k+KLsahrNleaPbz2+rXIWNRPcRshWaQLFEN7gtiNBn5RjrqKP6/G/56+uo7s53wr8H/CXgSe0k0Pwv4d0aTT4p4LV7HTYbdraOd43nRCijasjxRM4GAxjQnJUYkX4V+F00uxsV8N6CtlpdvLaWduNPi8q0hlXZLHGu3CI6/KyqAGHByK3qKUoqS5Zarb5CWmxyvgP4GeCfhZe6tceGPB3hXw5ca8UbU5dL0mCzfUSilVMxjRTJtUkDdnAOKreDv2cvh78OtFm03w/4D8GaFptxqEerS2un6JbWsMl7G6yJcsiIFMyuqsJCNwZQQcgV2dFVzNO63/y1X3MVla39dvyM3xf4O0j4g+Gb3Rde0rTdc0bUojDd2GoWyXNrdRnqkkbgqyn0IIqhoHwk8KeFPC2k6Hpfhnw9pui6BKs+mafa6dDDa6bIpJV4YlULGwLMQVAI3H1roaKX/A/Db7unYe+/9X3+8534mfCDwl8adDh0zxl4X8O+LNNt7hLuK01nTYb+CKZPuyKkqsodcnDAZGazfEf7N/w78Y+HdL0fV/APgvVNJ0W6a906yvNEtp7ewnZy7TQxshWOQszMWUAkknOTXaUUbbd7/Pv6h5/L5djmfEfwW8G+MfG+j+JtX8J+GdU8SeHwRperXmlwT32m55/cTMpeLr/ARUOpfAnwXqfxFPjKTwl4XbxoLRrKPxC2lQNqkUJUr5YudvmhMHG0NiusoqZRTjyvbX8d/v6hfW/9abHlX7Kn7IfhH9lP4caHpekaL4bPiKx0Ox0XVfEVnosNje699lgSJZJ2XLtnZkK7vtzjJ61r6n+yl8Ldb8Gaf4bvPhr4BvPDukXj6hY6XN4etJLKyuXdpHnihMexJGdmYuoDFmJJyTXfUVrUqSnJzlu3f8b/AJ6rsH9fp+RyPjr9n7wF8UNd0/VPE3gjwj4i1PSoJLWyvNT0e3u57OGQbZI43kQsiOCQyqQCDg5roNU8M6brd7pt1e6fY3lzo85urCWeBZHsZjG8RkiYjMbmOSRNy4O2Rl6MQb1FTd2sH/DGOnw88PxxJGuh6OqR6g2rIoso8LeMxZrkDHExZmJk+8SxOeTXG+Iv2Sfh/fWfiifSPBvg3w/4i8VQXS3WuWehWyXrT3EEkDXDyKqvJJslcElssGYZwTXpVFZVKMJ03SktJJp9NGkmtPJJfJdioyakprdO/wA07p/e2/mzxHVP2FvB8H7NfizwH4c0vw34U1LxroQ0jV9d03QoYZ9RlEHki5nWMo0zDk4eQnkjd3rvPCf7Ovw/8CaDeaXovgbwdpOnalfx6reWtlottbw3d7HIkqXMiIgV5lkjRxIwLBkUg5ANdlRXRKrKT5m9f6f6LQxp04wSUen9ff57mP8A8K78Pi18j+wtH8n+0P7W8v7FHt+2+Z5v2nG3HneZ8/mfe3c5zzXi3hn9hS1s/wBqW3+JWr3Xgy8udKvbnUrCXTfBtvpetXVxNBLbhtR1BJG+2CKCeaOMLDDgMC5kYZr6BorOHuu8dN196S/JJfJGkkpXT6/8F/q/vZk6h4C0PVrvVLi60XSbq41yyTTdRkls43fULVPM228xIzJEvnTYRsqPNfj5jnA1j9mz4deIfGUPiLUPAPgq+8QW8MNtFqlxodtJeRRQuskMazMhcLG6IyqDhWRSMECu1oo683X/AIf/ADf3sLt7/wBbf5L7l2MW1+HHh2ytrWGHQdFhhsdQl1W3jSxiVbe8laR5blAFwsztNKzSD5mMrkkljnL0b9n7wF4d8c33ijT/AAR4RsfEuqTm5vdWt9Gt4r67lKNGZJJlQO7FHdNzEna7DoSK66ij+v6+5fcEtd/61v8Anr6nF67+zd8O/FFt4ah1LwD4L1GHwXs/4R+O60S2mXQtgUJ9kDIRBtCqB5e3AUY6Ctm/+GvhzVdJ1vT7rw/olzY+JnaTWLaWxieHVWaNYma4QriUmNEQlwcqijoAK26KHrdPre/nff77K/oHW/X+v82cr4T+BngnwDoei6XoXg/wroum+Gp3utItLDSYLaDSpnR42kt0RAsTskkilkAJWRh0Y5k+J3wV8G/GzT7O08Z+EfDPi610+4F3aw61pcF/HbTDpIiyqwVx/eGDXTUU223dgtNEct42+B3gn4la7ouqeI/B/hbxBqfhuTztIu9S0mC6n0p+Pnt3kQtE3A5Qg8Cl8Q/BHwX4u+IOk+LdW8I+F9U8VaCpTTNZu9Kgm1DTlOSRDOymSMcnhWHU11FFLbb1+fcP+G+XYp3/AId0/VdTsb66sbO5vNLd5LK4lhV5bRnQo7RsRlCyMykrjIJB4NY2hfBnwf4X+IOqeLdN8J+GtO8Va5GsWpaza6ZBDqGoIuNqzTqokkAwMBmIGBXS0Udbh5HL+Efgj4L+H/jHWvEWg+EfC+ieIPEjb9W1Ow0qC2vNUbOczyooeU55y5PNdRRRR0sHW4UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVHdPKkDGFI5JOyu5RT+IB/lUlBOBQBn/atU/587D/wMf8A+NUfatU/587D/wADH/8AjVaAbNFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKP8AhJLf/nnqH/gDP/8AEVoUUAZ//CSW/wDzz1D/AMAZ/wD4ij/hJLf/AJ56h/4Az/8AxFaFFAGf/wAJJb/889Q/8AZ//iKP+Ekt/wDnnqH/AIAz/wDxFaFFAGf/AMJJb/8APPUP/AGf/wCIo/4SS3/556h/4Az/APxFaFFAGf8A8JJb/wDPPUP/AABn/wDiKkt9ZgvpliWO8DN/ftJY19erKAPzq5RQAgQLS0UUAFFFePftF/tFeLPg3/bl7ongGHX/AA/4P0Y6/r2pahrLaVGbcCZnisf9HmW6uUSBmZJHgjUSRZl+Y7U5JasqMXJ2j/XTTuew0V8//E79tbVPBuqeJr/SfBdvq3gv4e29pc+LtTutaNjf2AnhS5KWtoLeRbh4beSOWQSTQcOFQyNkDY8VftNeKfCXxAsxdfD/AMnwJeeIYPC8erTas8erzXU0qwx3EWnm32PZ+Yw/e/aQ+xWcRFQCbUW5KPVuy9bpfi2ku99DNySi59Er/Kzd/uTZ7RRXjbftJ+KdJ+L+g6TrXgGLSfCvivWrnQNI1Bta8zV5LiGK5l8+XT/ICR2kiWrskiXMkm2SIvEgLFNT41/HHxH4Q+IOh+D/AAT4V0zxZ4n1awutYlj1TW30eys7K3kgjdjMltcM0rvcIscYjCttcs6BRmb6Jrrf8Fd6dLLV9lrsXJWdn/wN7LXbV6Lu9FqeoUV8s/EP/gpF/Zg+Gv8Awj+n/Dizb4iaCdbj/wCE+8ef8Ists5khijs42jsrsXFwzyyDauB+5YgtkV9GeItf1TQfBpvodBuNa1ZUjzpun3UILSMVVtss7RIUTJYs21iqnClsIT7POtrtd9U2n62a/XZoV/f5Oun4pNX7aNf0mbVFeQeEP2jvEnxG/Z+0fxVoHgX7b4k1vULnTItHl1by7OzkhuJ4WlubxYWMcA+zkl0gkbLqoRic10nwC+MN18YfBuoXWoaPFo2s6Hql1o2pWlre/brT7Tbttc29yUi86I5GGaONgwZWVWVgDdtLp/wNu+627kqScYy6S2+abX4JvXsd3RXkvgj9qX+0ZPiNJ4s8O3Hgez+HNvDfXr3t/DcyC2e1a5aSQQlo0KIpyFkkHH3qr/AX9r/SfjR8PfEPiZm8PrY6FcBJbLQNbHiXU7FCoPl31vZxt9nugSQ0EbT4AzvPIBFqTaj0/wA7fmU9EpPZtr5rf7v63PYqK+ebv9tnUNR/a+1L4W6Na/CgyaNf2tlcx618QH03xBdrJa293NLZ6Wuny/aFjiuFwfPQMwIJTBI1Ln49fFjw18cfCfhfXPh38O49J8Wahc28V3pfj28vNQtrSGJ5Xu3tJNIhTaMRIwFxw88ahmyCSOqi19rb8Pw13eltdkxzTjdS6K/yauvw/rU9yorxX9qv9tPTf2bv2adQ+IFjoeq+KLuO1uLjTdDMcmmXWoeRHJLMW8+MPDHHFFJI7shwq/KrlkVpfjj+0r4o+Eb3urW3gKHUvBfh+G3m1nU7nWWtLyQS4+TTrVbeQXjpuUFXlt8swVC7ZAcU2k13t87X/VCl7q5n5v7rX/M9looByKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAFbVdWt9FtGmuJBHGOPdj6AVzFz8XIUk/c2Uki+ryBT+WDWH8QNZk1TxDLHn91akxovuOp/E/yFYdAHaf8Le/6h//AJH/APsaP+Fvf9Q//wAj/wD2Nfnz47/4LGab8MtB8PazrXgW8i0TVPifrnw91G6t9T846PbaX9pMurOnkjdEEtjJJHkeXHvbe+zDdV8c/wDgpRdfC/V/itp+i+CbLxFefDu98J2Fg03iA2dvrcmvTxwRs0i20pgSIyAllWXeOgWkpJxUltK1v+3kmvvUl+K3TtTi1UdJ7q6+6Ti9dtGmvx2ab+3P+Fvf9Q//AMj/AP2NH/C3v+of/wCR/wD7GvkHx3+138RPgt4Y0mDxl8M/C3/CdeNdci0Dwd4f8N+M5dTi1idoZZ5XuLq40+1FrFFFDJIzCOU7VOAWKqeo/Zk/aj1D4y+LvF3g3xd4T/4QX4ieBfskuq6RFqi6pZy212jtbXVtdLHGZYnMUyfPFG6vC4K4wTUVe9un/AfzdmrpbdepDla1+v8Am1f0bTSez6H1LpHxOstQmWOaN7VmOAWO5Pz7flXSg5FeL16J8MtZk1LRnhkYs1owUE/3T0/LBpDOkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACisf4h6rcaH4A1y+tZPKurPT7ieF9obY6xsynByDggcHivBfhN+2/4R+F3wP8KQfEPxxr2teKI/C2l+IfEGpTeHppvsUN/HJIl1dvYWi2trbBopl81xGiLEN7ZO5iOvN/d5b/APb3Nb/0l3+RMpKMoxf2ub/yXlv/AOlK3zPpKivM9F/bC+Hmt6T4mvl1y5sbbwjbJfak2paTeacwtpC4iuYVuIka5gkaN1jlgEiSMpVGY8Vw/wAVf+CkXgb4f/C/UvEWn6f401q50i+0yyvNJPhDWrXULP7dOY43mt2sjPECiSOu+MByI1BBmj3KUkld+X46L73sUtWl3/yv+WvpqfQlFeRfA/8AbB0f46/Grxt4M0/Q/F2nzeD0tpPteqeHNU02K7WVAzc3VrEispICrvZpFy6jaCR1fxe+Pvhj4HRaf/wkFxqjXGqM62llpWjXusX1wEwZHW2s4pZjGm5d8mzYm9dxG4ZL6Xf9dAj72kTsqK8t8X/tqfDPwTBpM134kN1a6xp0esx3Wm6dd6la2unybjHe3U1tFJHaWrbXxPcNHGdj/N8rYPF37aHw38DeObjw7qOu3i6lY3VpZ3rQaNfXNrpr3So1s1zcxQtBbxyiRQssrpGzEqG3AgOzTt52+fb18gemr7X+Xf0PUqK8vh/bJ+Hdx8Sf+ETj1q+bVxqz6DI40W++wwagoB+ySXnk/Zo5mDKUjeQNIGGwNkVa8K/tY+AfGnj688N6frkrahZi4PnzabdW+n3ZtmK3K217JEttctCwIkWGVzGVO4Lg4mMk4qaejV0+lrJ39LNP0aYbPle+3zu1+aa9U0ejUV89fFf/AIKT+AfAfwP8X+MdHi8SeI5PC2mnUotPXw5qts+qwnOyeBmtCZbNmwDeRLJbpuBZwCM9jq37aXw70DUdMtNQ1TWLG41K1tryUTeHdSRdHiuP9QdRY2+3TS5yAL0wkkEY4ONOVtXXe3z7EuSWjPVKK4nwh+0P4S8e/FXxB4L0e/vb7xB4VcxavHHpd39msJPLglET3JiEAkaO5idU8zcylioIR9vM+Hv26Phj4p8T/wBk2OuanJctPf2kMz+H9Ris7y5sWmW6tYLloBBPcxm3nJgidpSsTMFKjNTLSPM9rXv5b39LdSt3Zd7fPt6nrlFfO/7YP7Stu37L2vax8PfHN9o/iKLwjJ450a706whuFurGMIUMn2m3liWKUyIu0hJWG/YVKMV+hom3RKT3ANU6clHmatq192j+53T6pppkKpFy5V2T+/VfhZ+jTHUV5/8AF79qDwZ8DNfs9J8QXurf2tqFhPqdtYaXoV/q91PbQSQxzSrFaQyuVRp4txxwHyeASMzwX+2t8MfH9xMumeJla1j0iTX4tRudPurTTb6wiCGa5tryaJbe5jiEieYYZH8vcA+0mpurX6a/he/3Wd/R9i7O/L1/4b/Nfeu56nRXzz8U/wDgpR4D8D/Azxx4w0m18Wa5e+C9CbXW0abwtrGnXd1CfMWGTbLZ+YlvI8bD7T5bRKoZydik1u/Dj9tvQ/ib+0b/AMK8sdA8aWs0nhu18Qx3+o+FtX0+HExk/cubi0jSIqiKdzyAly0W0SRsoFq0l1uvuTb+5J/dbcJe7Hme3/BivzlH7/JntNFcv8WPjL4e+CXh+HUvEN1dxR3c4tbS2sdPuNSvr+Yqz+Vb2ttHJPPJsR32xoxCozEYUkcnrv7aXw50Dw5ouqNrOo30OvJNLawaZoWoalepHBIIriSe2t4Hnt0hkIjlaZEWJ/lcq3FF/wDL9fyHZnqlFeSePP26fhb8OLxodS8SzTeXpFp4glm03Sb3U7e30y5MwhvpJraGSOO1PkSlpnYRoAC7KGUtZ8X/ALaHw38DeObjw7qWuXi6lY3VpZ3rQaNfXVrpr3So1s1zcxQtBbxyiRQssrpGzEqG3AgOzTs972+fb1F0v5X+W9/SzWvmepUV56n7U/gWX4t/8ISusXD699pNjuXTLs6eLsR+abM33lfZBdCP5/s5l83bzsxXKeOP2/vh74V8NeKLyzuNe1q58N2N1exQ2vhzVJItZ+znZItlMlsyXgRyBI9sZRCMu+1VJGVStCEHUk9LN99Fq7W3+RUYSlPkjvdL5vRL5nttFeNWP7dfgOL4a+E/EOrP4j02TxZpg1aLTF8M6rc39nbjAlnnt0tvPgtkYgG4mjjiIKndhgT1Xh/9pbwX4t+KLeDdJ1abVdejtIdQkSy0+5uLWG3miMsMr3KRmBEkQEoWkAcghckYracXCThLdNr5q91+D+5mMasJRUk9Gk16O1vzX3o7uiivD/A37Zml2Xw6vtZ8aSNb3jeMNe8N6ZYaHpF7qd9qCWGo3VuhitLdZ7iVxDAHkaNCq/MxCLwJ/r8Uv1NuV8nP0ul82pP8os9woryvxb+2t8NfBnhnRtYuteuryx160kv7Y6Xo99qkkVrGwWW5njtoZHtoYmO2SWdUSNsq5Ugiuf8A2t/24vDf7PXwr8UXem3y6r4q0/wld+JdNtrfSrzVLNESCZ7aa8ltUKW1vLJEyq80kSybHCMSpwf8N89dPXR/cyqNN1JqEetvxsr+mq180e6UVkz69NF4EfVAsf2hbA3QXB2bvL3YxnOM+9eOfsxft7eDvjX8JdA1TVtYt9J1ybwfb+LNVM+m3mnaZ5HkRSXU9rcXCCK4t4XlCu8Usoj3KHYEjNcr95fy2v8APmf4KLv2MYzUlBr7W3/kv4vmVu57zRXkdp+3T8MJ/Cmq61Pr2o6XZ6LdWNpeJqugajpt1Eb6cW9nJ9nuIEmaCaU7UnVDE21yHwrEWrT9sz4eXnw81TxMNU1aGx0fUk0a7s5/D+owavHeuqNHbDTngF40zpLG6IsJZ0dWUFTmpem/9bf5r713RW+x6lRXzn8Lv20dS+J3xS0vTbW109dD1Lxpq3h0ST6fc2d5Hb2mkpeKXjmKvHOJiyOHQYAxsVgTXXWn7ePwqu9A8Rat/wAJNNBpXhfS5tcu7250i+t7a50+LHm3lnJJCFvrdNygy2plQF1GcsMi1S80pfJrm/LfsZ06sZ83L9mTi/VO357dz16ivIdX/bq+GegR6e99q+tWseoQ/ai8vhnVFXT7YzSQrdXh+z4srZ3ik8u4ufKikCMyOyjdXrwbcMjkHoabi1v6fduadbBRXnvxl+JfjPwrrFjpfgrwTZ+KLye2lvrq61bWH0fS7SGNkUx/aEtrlmuH35SPywpWNy0iYGfNfG/7XvxDX4Dab8UPCHw88Fal4L1Hw3beIAviDxpd6Rq4eaMOLVbaDSruNpDuRExN87vjA4Jnm91z6L/g/wDyL+4rlbdv66f5r5an0ZRXgPxy/aF+M3wi0BdYtfhf8NdS02Y2FtBBcfEO8tdSuL25MUQtUhXRpYi32iXy1YzAMoDt5YJC++qSVG4ANjkA5xV8rSv52+at/mjNSTt5q/yYtFeJ/tC/tpad+zl+0J8NvBesaLdS6T4/hvnuNejmxDoLQS2cEJnj258qWa9ij8zcBGzJkFSWTb8KftT6NrHxT8ReFNTi/si+03xcvg/Sjue4/tm4/sWDV2b5Y8Q4hkmGHYg+R97LhKKdOU1zQV9G/kmov7m1999tTRxa+6/y11/B/ceo0V5T4p/bX+HPhDUlsbjVtXvNQkfUo47LS/DupandStp88VvebIba3kkbypJ4gSqkEEsMqrMMtv26PAvjPwlrFx4N1ltW1CLw3d+IdImm0m9h0zWIoYd5NvdPGkF0EZkEiQSs8e7DBT056laMKLrv4Uua610s3dd9E/uKjSk5qn1btr3va336HtVFeO/Bf9tnwP8AE/wcl1da0ul31j4di8Rak1/pt3pdmbTykea7tprmNI7m1QuAZoXkjXcoL5IzIP27PhfH4L1HXrrXtS02x0q8srC5j1HQNRsbxJLyYQ2hFrNAk7RzyHbHKsZjcg7WODjqnTcZOD3/AODb8XovPQ56dRSgqi2ev4X/AATu/LU9eorkPFXx18M+B/hjZ+LtXur/AE7R9QSA20c+l3a6hcPPjyoEsvL+1NcMWAEAi83dldmQRXkH7Rv7fOmeDfg/4f1jwU2qXmoeKtfj8OwSzeCNb1VtEnzmb7Zp1vEl0sqL0tpDBI5YYOAazldPltrdRt5tpJeWrS176mmlrvazfySbb89E3p2Po6iuN+KPxy8P/A3w9pt14mvL57jUnFvbWulaNealfahKELuILK1jmuH2qrOwVW2KCWOATWD4k/bL+HPhjwxoGsSa5eahY+JrRtQsDpOjX2qym1UqHuZYrWGSSCGMsqvLKqJGThip4o0vb5BHX8z1CivN/Ev7XPw+8KeKrDR7rXpJZtQjtphdWem3d7p1olzxbtc3kMT21qJsjyzPJHvyNucipH/as8Bp8VW8Gf2zcNrSXDWTOumXbaet0sXnG0N8Ivsv2oRjf9n83ztvOzFDaW/n+G/3dQvdXXl+O339D0SivE9B/wCCg3wx8Y+GrjUtD1DxFqiroTeI7GNPCurxvrVmqoWksg1ruvNvmxh1txI0ZcB1U8VU8C/8FC/Amv8AwG8C+N9aXxBoL+N9IXV00oeHtUvLyyiCp580kSWvnLaRM6g3jxpAysjh9rqS+V636Wv8+a3/AKTL0tqD0aT63/C1/wA1957vRXgn7Wn7dfh34DfDPxNNod6useLNO8OvrtjFDpN7qOmxqyMbZru4tkMNukxUhPNliMmDsJr0r4sfHnwz8D7HRZvE15eWzeIbw6dpsNppt1qFxfXIt5rkwxxW8ckjOYoJSAFyxUKMsyguUWlzPu1924oy5naPa/y3v6W19DsaK8m8BftwfDT4meINH0zR9a1Se41y4lsbaSbw/qNrbJeRb/MsZp5YFigvV8t82szpONp/d1Z0n9s34c634m1TSrfXLrztJtru7e4k0e9isb2O0JF0bS6aEQXhhIIkW2kkZCCCAazlJRXNJ2Wr+S1b+S37DWr5Vvp+Oi+/oeoUV49pX7e3wq1bwvr+tf8ACRXllpfhvRT4ku7jUNC1CwWbTAoY3tt58CG7twCuZLcSKCygkEgFLv8AbV8H6r4e1S40S/ZdQ0XU9K0+8s9f0zU9FlRb++jtIJljltfOeKVmcRTJG0MjoQZFUO6aezle1v6vb89PUUZKXw6/1/wV957FRXl+mftl/DrWPiRH4Ut9avpNWk1W40Lf/Yt8timoQ7t9m94YfsyXGEYrE0gd1wyBgQTHon7avw38RfE6x8I2et38msatqdxo+nu2h38dhqd3bxTS3EVtetALacxLbzbzHKwRkKMQxCmYe+k4a3V1bqtHf0s0/mhy0bT3W/lvv9z+59j1SivB/iJ+2/ovwU/aO8WeGPGEzaf4b0HwzpGuRXlno99fzQG5uNSjuZrprdJFhtYls4SZpFjjjLtvkwygdj4i/a08A+FviXb+E7zWrhdWuLi3s2li0u7n060uLgIbe3uL6OJrW3mmEkflxTSo8nmx7Vbeua5W2ktb9u/b18ipRcW0+iT+TSd/xR6PRXlvhP8AbP8Ahx43+IFr4Z03XL2bVL3Ub3R4JH0W+hsZr+zeZLmzW7eEW5uE+zzN5Pmb2SMuqshDHmb79t/RfEvxu8H+FPCMz6lb6xfapaX13c6LfQWsws7OaUtZXUiJb3IWaNUdoWlUZIypwazlNRjzPazfyW5Mvddpb3S+bdrfee8UV8//AAs/b68Ky/An4a69461KPS/EPjLwrpviLUodM0m9urPSEuoVYz3LxJKtlamTzFWa6kRP3bDeSrY67V/20fhvofiPxVpVxrl59s8EyJb60YtGvpobOeQWxitvNSExyXEv2u38qCNmllMmERirAbVKMoTlTe8W0/8At12f3PcNb266fjt9/TuepUVwvw+/aP8ACfxR03T7rRbnV5xqGoyaR5E+h31rdWF2kLTtFdwTQrLZt5S7h9pWMHfHjJkQN57+19+2hN+zR4/8H+HLSH4ax3Xiq0vrz7b428bnwrp8P2eW0iWFJRZ3XmzStd/LHtXiJzk9Kizuo9Xt56X/AC1HFc17dLv7v+Creum575RXzb8Zf24tc+Gvxt0H4e2un/B2HxNqeiWOpzReJ/iRLoSXFxdS3ESWthjTJ2vSGtpTnbExBQ7BuwL3jb9tLUtJ/azHwt0i1+E/2mL7EJF8Q/EF9H1i9aZTJItjp66fObry4trf61NxcKdvLUuy7tpeq3/LfZ7oUvd37J/JpNP5po+hKK8l8WftVW+hftU+FPhjY6Lcao2uJc/2nq6XAjt9FmS1e5ht2XBMksscbsVBHlpsZv8AWIGq/Ab9sbQ/2hPiv4h0DRLzwi1roaSbIl8TQza9P5c3lG4fTY0LQ2jkExzSShnG0+WFZWJF3ait2m/kt/667onmWvk0n6u1vzX6nslFfPn7JX7aWo/tS+N9Wtbe2+E8ej6YJzJHpHxBfVvENmqzGOA3em/YIlthKql+bhiuVA35JHVfs+ftVW/7QvxM8faNp+iXNno/hCSzGn6vLcBk8QRTiYG4ijAykQkgkVGJPmKA4wrKWUZKUVKOzV16f18wlJRdn3t87N/kj1miiimUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXgv7U/gH4r/EP4i6DD4e8N/DzxT8PdNjS+u9L1vxdeaHLqGopIWj88Q6ZeLLbRhUcR7l3SYLgqgB96opW1T7f1/wAH1sx30a7/ANf8D00PmX4p/sw/ETxyfH2k2UPgm18P/Gq3s28UzS6tdNeeHbhbSKzuvsaC123qvBBEIzI1rtZSxVgdg0tY8A/Ga+/aqPia88LfDPxF4S0e4S38Mm48bX1jcaLbOgS5uzZLpUsct84aVQxuAqxYjQx75nk+iKKpNpprpfT1tp8krLyE7tO/VJfd/n16fI+cb39l3xh4v/aT0rxTrWm/D2yk0S+nceN9HlntPE+saWwuBHo88KQKFgQTJlzdyhmgWRYY5CrR6GtfsyeI/g1410DxJ8KzD4gutP02+0a9sPHXjLV7tporqa2mWZL+db64zE1ucQldjCU4aMjJ9+oqYrlSt5/imn96bWltW2vebYTtN3mr7eis7r7nqvktkkvnGb9m34hfDf4JaD4K8Lw/DvxhY/8ACKDwvqh8RmawEDMG826j8qC4NxE+/BtHMQIRf3wJNelfBT9mzSfgr9jurfWPGGrapFpFrpFxLqPiXUbqymWCGKISpYyztaQSN5QZmhiRiWbJO5s+iUU4e5fl0v8Al7zS9FzS++z0Sspx5mnLW3/A19fdj91922/CdL+APjLwb+y3B4PsYfA/iC/XUdRm1LR9aDto/iGxu7q7kayllMMjRBkuE3P5EoyhXYysTXTfsk/BPUPgR8M7rSb6DRdJjvNSmv7PQNEleXSfDEDhALGzd44maFWVnH7qJQ0rBY0UKo9Qooj7rbXXT5aP9F6a2teV1yLljDpHb7mvyb9dL3tG3jHjf9lib4mr8cdM1a+gt9F+LekRaPFJbEvcWifYHtZHZWULkF9ygEggc46Vm/DL4R/EjRfG994w1bSfh3p2uab4Zi8L6Tpmj6pdGx1JI5vNFxcytaI0AHSOBI5hEHlHmvv495oqacVB80fP72pJ/hKS+fdJqprmh7N7f8GL/OMX8uzafgnxq+BfxA+K3iqTQzH4F/4Qu88R6Z4jOuGaWDXNMNlNbTC3S2W3aKd2a3KrctcRsiS7fKfZl+98KfC7Ul+PXibxrrk1nMZLSDRfD0EEjP8AYbBQJZ2fco2zTXB+cLuXZbW/OQQO+oqo+6kl0v8AilG//gK5fNXvdtsJa3v1t+Dv+evk9rLQ+Yf2u/2HvF/7VXgPxJfQ/ELXPBXjDWvB194Wj0fTptOvPDzCfzCQ8t1pkl2izHyRM0BjYrEgHKKxPj3+yP46+KlrpeiSyeCfFi6faRR6P4618Ja+K/A93sVZr6yW1shDNM7RxyDY9moI2kOmFr6eoqoycVFLaLuvXV/m76dSpSct+zX3pJ+T0ilr00YiAqigsWIGCT3paKKkkKKKKACiiigAooooAKKKKACiiigAooooA8v8c6a+m+JbncvyzMZUPqDz/PIrHr1rX/Dtt4jtPKuFOV5R1+8h9q5G5+E14sh8m6t3XsXyp/QGgD4H+Hf/AATi8VaD4x8GXOtXXhHUNJ0P4r+MPG2pWvmzSi703WLTUYIYArQhWlH2yPzEbCBQ+HfgHznTf+CNPizQ/C3xp8ISeIvDPibwT448QeEJPDdnrUksklloekX0c8um3Y8hhIEgDwRcv5iKgkK8mv05/wCFUaj/AM9rL/vtv/iaP+FUaj/z2sv++2/+JoWiiv5VGPyjblv5q2/ZyXVlSk5TdR73b+bcpP5Xk9PJdkfIHxe/4J36B4c8O+DL74G+G/h98OfEnw78UHxZpdhBpCafouq3D2ktlcRXS2qBl8y3mZRMqsyMkZ2sAVPRfssfs8eMPCfxd8e/FL4kXHhkeOfH1vp2mNp3h2SafTdHsLFZvJiSeZI5J5GkuZ3aRoox8yqFAXJ+nf8AhVGo/wDPay/77b/4mj/hVGo/89rL/vtv/iaqMmr67/holp8kl99rXd5kk/63s21f0bb9d9lbmK774Vaa9rpU9w67RcuAue4XPP5k/lUGjfClYpg99Osir/yzjyA31PX8q6+KJYI1RFCqowoA4AqQHUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAGH8TrSa/+G3iGCCKSaebTLmOOONSzSMYmAAA5JJ4wK+WfhN+zX4i+LH7K3jI2q/2PN8Rvg9pPgqytNcsb3S7zT7+1s9Qt5ftUE0CyxRiS6TBCsWCswUjaW+wqKIe6qi/n5U/+3eb8+b8Ai3GtSrx3pttfNwf4ci+9nz38cf2Rde+KfiPV9Qs9S0izZ/Deh2mnecZGH9o6XqrajH5yhf8Aj3dliRipL4L/AC8DPn7/AA9+IHx08a/HPSNU0/wdofjOaz8JXtrZWms3N7pYa1uLi5SN7trWKXEhhKlxbfIHGFfb832JRU8vuOn0bb9HJuTf3vr0SJ5feg19m3ztFQX4JHhx07x58Gfin4z8Zx+CD41sfF1lpbvpfhzWLYaraXsEXkyxqt+bS2ktwp3iY3EchxjyOcjOvrX4jfEb4haJ8S/D/wAO5/C/iDQrG+8Ny+HfHet2lmt5aXMlpP8AbIrjS31JFKPbBRG6gvlsmMBWb6CopwioO8fP5c107eqbXo++o+XTle2n4Wf5pP18tD518X/AP4o6drevXnh6T4d6lcfELwzZaD4glvWutOg0a4t47lDd2lukc/2mJvtJ/wBFklhI8v8A153kLX1H9ivWrP4O/FjwnpupabMvjGx0yw0ee8mk3KlpptraFrkiM4ZmgZvk35BB4OQPpKiiyu33/S9l8uZ29fSylTUo8r7Nf+BWv9/Kr+nm7+B61+yx4g1LwbqWnJeaOs158ULPxsjNLJtFlDqVtdNGf3efOMcLALjbuIG4DJHl/wAOP+CYM+k3VxoOvNPdeH9NsdUs9I13/hYviO+uVF7b3FrlNFmk/s+zkSC5dS8TyKcEpHDuAT7MoqI0oqisP9lLl+XJGG+/wwX49yotxqOrHe9/nzSlttvJnzv4o+B3xU+Lv7OHjLwH4kj+HWjteeFJvDmkXem3V3ePeztEEFzO0kMX2WI7VzboLgjOfObaA2P4/wD2Y/ib4w0b4jaNbw+BLXS/jlYRReKJZNXupbjwrO2mxadc/Yl+yBdQjMMKGPzTaFXDMwYNtX6gorolVlJ3l8/O7u/vdm+1klZaCpL2WtLS23la1vutp+N2eV/Cf4S+JPhFrnj66tRouoL4v8YQ6tAs15LG0Fh9hsLWUuRE2Zx9mlZUHytlMuuTt8N/ZZ8CeNfiF4Q8OnUU8H6Z8O/CPj/xJ4ibU11G4bVbuSLWNVVLdrZoVhhjDSb2n+0OWVCvlLu3L9jUVMpOUUnry8tr/wBxJR+5xT9d9NCI0oq6Wz5rr/Ffm+9Nr021Vz4BX4dNpv7EHx21jSf7U8aaf4yiufCXw+OgaPdanJcaJG0/2GNFt0kLQi4urpVuABEYVhcsFIY/anjn4QaT8SdU8P32pXXii1uPDs4urVNK8S6lpMMr5RsXEVrPFHdJlB+7uFkTBYbcMwPVUUc3uqP8trProkrvzbTbatq9EiuV87m3vf8AFvT0StFLsjz3XPhNqWp/tR6D42jmsV0nS/Cup6HLEzt9oae5urGZGVdu3YFtZASWBBK4BBJHiV1/wT+8QeJP2dPht4E1DWNHs38L/DrU/Bup3ds0kyi5urW0hSWFWRfMjVoHJDGMkEYHJx9X0VLu4Kn0X/yUpfnN/gaQm4uUl9ppv5RUV+CPjfxV8NPiD+0J8SPi94K8W2ng3wz4i8VfCGPQ7RtI1S51OyQzXGoxLPI8ttbuuWbJjCNtA++5r1HUPDvxE8A/FW2+I3/CHaf4mkuvB9tomseH9A1xGv4LqG5klX7FJeJa29zGftD7mnktSqxZCuzBK93oqYxajFfyuTXrJzv+E2vkmrbBKXNddNNPRU9L7701520u9z5/8THx98dNW8NeLdL+Gus+CfEnw61GW6stJ8cavp8Fn4gjubOe2lQXGlXGoGApvVw7xMeNoQhyyS3/AMLfix4f8c2PjnR7X4b6p4o1TRm0TW9LuL+803TrNRdy3MM1vOtvPJM0YmkSRXii887XDW/KH3uiiUYyabW36xcX96b81e6syVomu+/nZpr7ml62s7nzB4N/YV13wD4I8caDa61peoRa98K9M8CWNzN5kLNe2w1XzJpIwrCOBjfxbQrOwCuCPlBbT8Qfsh+JdV+Ffxe0OO+0Nbvx/a6dBp7tNL5cLW+nW1q/mny8qC8LEbQ2VIJwcgfRlFVP3puo93b8Oa3/AKUx1W6keWfZr71FP8IL8T5O8Mf8E+bzw9+0Jc6ldRvrPhW48WXPjKG8n+IviKBrK6muWuxCuhRuNNfZM7FZy68YLQuwLN1nwq/Z6+IXhL4OL8K74+B4vBmgeHLnw9pWsxXNzeatqStAYIJJYGijjtGRD+82y3Hmnp5QOK+haKzqUozovDy+BqzXfTl+9LT87vUv2kvauv8AabTv5pt/m27eelkfNvhr4H/Fr4d3uh+JdF0/4d3nia68HWPg7W9OvddvEsLMWUtw9ve21wtkXmyLmTfbvDFnKATLsJfqP2P/ANle7/Zbt9R01tSg1XTF0jQ9JsZ/mW4lFhYrbO8iY2puZcqqs2AcZGK9qorapJzblLq7/wDpX6yl99tkksYwUUktkkvuSivuikvl3bb5jw78I9K8L/EPWPFFtd+J5NS1xFS5hu/Emo3mnRgbceRZTTta25+UZMMSE85Jyc+HaF+yv48+FesaX4r8OnwjrXibRtf8W3KaXqWpXFjY3un63qn21c3UdtM8NxF5Vvn9xIh/epnlZB9MUVKurW6Ky9Oxpzvlce7u/VJx/KT/AAPj7xx+wz8SdR8C2eg2uu2eoWGrf2zfava2vjLWfCkOmanqV9PevcRNpyebfQxm4MQt53hRlTeSGcgT+Lv2Mfibp3wm17wr4bl8CXsfj74aWPgfWrjUtRurZtFurWxubYXNsI7aT7XE/wBp/wBW/wBnKeXu3Nv2L9dUURtFSitpNN/Lmsv/ACZ+drK9kkjmft44l/HG7T824tv1bim+jd3a8nfx2T4s+L59Qk8Hf8KX+JC2bA6UPEhv/D/9k7dvl/ato1P7Z5P8WPs3m7f+We75a4m3/ZB8d6R4F+F9no3iTRdD17wF8LtS8GHUow9x9n1K4h0tIbmFHjAkiR7GQkvtPKfIckD6YoquZ2l3lu/RSXptOXTr5E0v3c4yh9lNJdLO1/8A0lbnxb4Y/wCCfnj6TxTr2tahNpOnTa5c+D52tbrx9rfi14jo+vSajclbrUIQ6rJC48uKNEjWTcMAEyH0r4j/ALLHiy/+J2veNdCuPDtxrFr4u0/xVoVhf3U1vbXvkaO2mTW91KkLtBuWaZlkRJdpEZKtytfRFFEpNxjH+V8y9dPw91abfItVJK/95cr81blt81o3v1vc+Z/CH7I/jPU/GVvrXii48M2cl54q1jXr+20u8nuBbQX2jLYJFFJJAnmOkgOWZUDKNwCk+WPNfCv/AATE8RaV8H/Enhu4XT5NZtfBF54N8P67e/EXxJraXazpAjSNYXpe30yNvs8ZaK3+0fdQKyqm1vuKiinL2clKGllGPyinGPnom1vrfW+luaNGK5vOUpP1k05eWrS9LaWPnj9qz9nLx58TfG1vqfgn/hGdH1CTTI9Pi8SLrupaPq2hujyuJHitkkg1e3VpAy2V15USsJCWbzSF9e8f/CHS/ibcaLNql54ogm0G5F3b/wBkeI9R0dJpAVOJ0tJ4luI/lH7uYOnJG3BOepoqfs8vnf5/18zZ6u/lb5Wt+Xy3tu7+J/ti+Bfid8TLTQ9F8F6T4L1rwlctK3iix1nxPd6DPqcY2+VarLBYXebd/n85cIzqFTdtZwdTWvhf4o+Kv/CuIvEmn+GdA0jw/d/2zrmkaXqUt/DLd24H2C3hke2g8yBJCLhmaONhJbQqEZSxHrFFEPd273+a2+7ddmvW5LV/Jq3rv9/9bK3A+NvhbqHjz44eEdYvZrL/AIRfwfFcX9vaB3NxcarIpgjlYYCiOK3e4C8kl584Xy1J1/iJ8I9K+KF7o9xqV34otZNCuheWw0jxJqOjpK4IOJ0tJ4luI/lH7uYOh5G3BOenooWyXz+d7/hsvJIHq7+Vvl2/N+rfc8j+Lv7Nn/C3v2ifDPiDVIdI1DwhY+Edf8Navp10WaS9/tGXTmUBNpVo9lpMHywI3JgHJI8Y8A/sM/FD4TrdavD4g8M+NfEWg/Ek+LdAGr31xYjVdMHh9NEjgvrlIJmjuliLMZUilWRolYhTIwT7DoqqdSVP4HbS3y5+f8/wbXU09o2uV7ar5NcrXzW/mk+iPm/9nz9lPxr4E+Nul+MPE114XLRp4ua7t9MuJ5Aj6vqmn3lusZkiXcI47WRXY7SWKlVIJ2wWf7Gnii3+Dfw38OtfaD9t8H+GNZ0W8cTy+VLNeWfkRNGfLyUDcsWCkDoCeK+l6K5cRhadbDrCz+FR5F6Xb/UarTVT2nXm5vne/wCZ8l+I/wBiPx98efB6aH46vvCXh+HQvh9feCNLu/D97d3cmoS3i2Pm3syvHA1sqNYRhYY5JGIkY+cpAqPwb+wZ4ghs5dRvLDTdJ8SS+IPDdzNPc/EbxF4xa7sNL1MXrDz9UG6EkNLsgjj2qztumYNlfriiu720vaqt1TT+ak53+bbutrO1trc3so+x9h9m3Lbyta369769zzf9pH4U618RrHwnqvhmTS/+Ej8C68niDT7XU5ZIbHUWFtcWslvLLGjvEGiupdsixybHCMUcAqeB0X9lvxbqd1/wkGtXHh2z8Ra78Q7Hxrq9hZXc1xY6fDbWMNitvbzNCjzv5dvGxd4ogzM3CgDP0NRWCVnfzT+alGX5wj92lru+lRucXF7OLj8nzaf+TSfq9b2VvIP2t/hP40+K2l+H4PCt4r2FrdSNq+lf8JZqPhN9RjZNsbrqWnxyXUZibLeUgVZc4ZlAGfMfgf8AskfEz9mLQdBuvDLeC/EWvpotx4e1ODWdd1CO1hiOp3V7b3cU7QTzTyKt06yRyhWlO3NwCpZ/q2ikqcU+bre//kri/wDyVtd1fRp2sPV38rf+TKX5xT7aap6nhOk/Bf4i/Db4meIrnw4vgHVNH+IF3Yahrd3qcl1bvpE8FnbWUwtrFEdZ4pIrVCiPcwmJmbLSjivPdN/4J+Xvhr44alqlzE2teFZvE934zhvJ/iL4igNldSzvdiEaDG4019kzsVnLrkYLQu2Wb64ooqRctb62sn22tbtZpWtbbte9c14+zlrF2uu9k1+KbTvpr3sfG/7Cnwn8c/FP9nz4C6l4gj8KaT4V8I+Arf8AsiXT764utQ1WW70uK3VriJ4Y47ZIonkyqSTmRyjbowu1qd1/wT98dz+DPh3LdR6Vfa54X8H2/gfUtP0z4m+IvC9lPb2zkQ3q3WnRRyTMyFi9rPCVUuAkw2s8n2pRW2IqKrVlUt8Tv3/nX5Tkum+lmk1Pn/W8X+cIvXtbZtP5L+If7EnjfQfht418B/D2LwR/wifj7wxaaLLLquqX0Fx4fltbBbFBCnlXBuoXiiiH72aOSMhmLT7to9u+Mfwi1L4hfEP4T6tZTWMVt4F8STaxfrO7K80L6TqFkFiAUgv5l3GcMVG1WOcgKfRqKPbSvd73bv5vcmMVFWj25fk1b8jwew/Zd8QWuj2Nu15o++1+KFz41YiWTBs5LmeVYx+7/wBcFlUFfu5B+Y8E+M+Ov2PviRp2ual438V6rZ6kvhrTPET3N83jbWb/APtiK5066iikj0iWNbDTnQuilIN+VBPmdVf7eorz6mDi8NLDwdrxcb9rwjTv0+zBadde5tzJ1lWnq7p/dOU//SpP8D4M+OXwx8eeKf2L9c8aeLIvCWlWfhP4Pahomhx6TfXF7Jqf223spJLm5WSGEW+37FEFgR5vvuTLwBXq3jv9mT4kfHbVNS1zxIvgjQtSFx4dtdMstM1S6vYHs9P1uDUrieaaS2iKzSpHtSFY2VCuDMwclPp2ivUrV+epGpbWMnJeTbbb+d5J9LOySsrc+HhKlCML3sor/wABaa+V0n3ut9XfwUfst+IP+EMXTftmj+cvxQPjYt5sm37F/aZu/L/1efO8s42427uN2Oa8B+G91qGp/tPfA74Z6PqfgXXtL+DnibV7y5bTNSuX16ysxpepWkTalYSW6ixYPdQxhmlcXBYSRhVO2vviiufDfuUox2S/9tjBfcoL8Sqseec6j3lo/Rucnp6zl6aHiPxQ/Zr13xt45+Mep2t1pMdv8Qvh9ZeE9OWWWQPDdQnVizzAIQsR+3w4Klm+V/lGBu8q+L/7D3xN+JvjPT1m1jT77RtJ1fw9qmnTN411jT4NOh0+4sJbiybR7eIWV5va2uJEublmcNMi7FCKy/YdFOL5avtVv7v/AJK21+Leq1tps2ntOo5b/wBaRX5QX572a+ffCX7KHiLQvCHg/T57zRWm8P8AxN1nxncsk0pV7O8vNVnjjTMYzMFvogykBQVfDEAFsT4S/ssfETwVqfwu0HUD4L/4Q/4Qpd2Wnahb6jcyanrdtJYTWkDzW7W6x28ib0DhZpQ+WcFMCNvp2iolFSU4vabu/Wyjf5JaerJqydSXNLe9/wDyaU/zk/kfDA/4Jc+Irbwj4X0u8Nj4khuPAWjeCvEtnH8RPEfhmxgNlbywyTJDpxVNSikWZh5NysBwp/egSFV9rn/Za1qy8B/FjS4bXwhrA8Z+J7fW9MsdWkuWtmt4bTToRHLKgEsE++zcxzx+aYWMUoDspSvfKK2lWlKU5ved7/OSlttuuq7p3RMtXFv7LuvWzX4p9Oye547+zR8OviP8KfCyWfiC40vUI9Q1uS5eym8TX+tSeHNPNqqrBDf3UAuNQc3Sb91wItqXDKCREitqfHnw34+v9Ut7rwbpfgHxDbXGn3Gl32neJriWxWNZWQ+ck8VtcNIu1Sr2zIqyfIfMTbz6dRWdRKatLa1vlbl173W73vre+oRbjqv6d73+/wCVtLWvf5f8Xfsk/ELTP2ebX4U6HP4F8S+G9R8E2ngu/wBW11prPUNLEMDwPdxRxwTC8Dbg6QSSwCN0JErb/l3vjl+z74/+JKXnhG1/4Qq88Ga7cabPPrl7PLBruiizaB8RwpbvHdyl4S8czzwmFpfuuEG76Coq5VJSm5y1bd3563/Bu+ln520FbTl7K35J/ekvLQ+YR/wT/wDEmgfHrwb4p0r4yeP7rSNH8S6h4i1TT9Sh0RvNa6hlVo43TSxM6tvWE+ZNuSAARujIhWz8Hf2RPFXgHxZ8P9HuI/B+n+C/hPf6hf6LqWm3Ex1bWhdQXUIgubdoFigCrc75HWebz5IUYpHnA+laKiK5Ukuit8rJb76W010Fyq8n/M7v16/f1PmXWf2TPH3xl17T7Txhqfh/wjp/hrRdT0Wz8ReCrox61qwvkjjklME1p5FgMJ5hiV7oNJsYMuwZ3v2ZP2QfEn7P/wAdPFniC/8AiV4l8XeH9W0fTdK0+w1G10i38r7MJRl1stOtggjVgkQjbaVkk3qxEZX3yiiOmq/rfptfV7JW6BOKk030d15aW9eiCiiigoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbo/se4/wCgtqH/AHxB/wDG6ANCis/+x7j/AKC2of8AfEH/AMbqS102a3nV21C8nVeqOsQVv++UB/I0AXKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiuW8feNX0dvsdo224YZd/wDnmOwHua4S5vJr2TdNJJKx7uxY0AeyUV4vRQB7RRXi9FAHtFFeTaR4mvdEmVoZ32g8xsco34V6Z4f1uPxBpcdzH8u7hl/uMOooAu0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRVfVtVt9D0q6vrqTyrWzieeZ9pbYigsxwMk4APA5rH+FfxP0f40fDzSfFXh99Ql0XXIBdWUl7ptzp00sR+65guI45VDDlSyDcpDDIIJFre3S1/K97ffZ272fYG7WT63t8rX+66v6rudBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRXK/Gj40+H/ANn7wBdeKPFM2pWuh2BX7VcWelXepG2Un/WPHbRyOsa9WkKhEHLEDmuqVty5HQ80dL/L5/0194dbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVLQfEuneKbWa40vULLUoLe4ms5ZLWdZljnhkaKWJipIDpIrIynlWUggEEUB0uXaKKqa/r9j4U0K91TVL2003TNNge6u7u6mWGC1hRSzySOxCqiqCSxIAAJNA0m3ZFuiozewrZ/aDLGLcJ5hl3DZtxndnpjHOah0LXbHxRolnqWmXlrqOm6hAlza3drKs0FzE6hkkR1JVlZSCGBIIIIoFdFqiiigAorHg+Inh+61hdPj1zR5NQe7ksFtlvY2ma5jiE0kITOfMWIh2TG4KQxAHNbFAlJPYKKKKBhRRRQAUUUUAFFFFABRRUOo6lb6Pp9xeXlxDa2trG0000ziOOFFGWZmPCqACSTwAKUpJK7BXeiJqKh0/ULfVrCG6tZobm1uY1lhmicPHKjDKsrDgggggjgg1NTaadmCaaugoorJ8cePND+GPhS917xLrWk+HtD01PMu9R1O7jtLS1XIG6SWQhFGSBkkckUm0ldgk27I1qKjtbuK+tY54JI5oZlDxyIwZXUjIII4II5yKkp7aML31QUUUUAFFFFABRVPxF4j0/whoV3qmrX9npemafE091d3c6wQW0ajLO7sQqqBySSAKuA5FABRRRQAUUU2SVYV3MyquQMk45JwB+J4oAdRRRQAUVRt/E2m3fiK60eLULGTVrGCK6ubJJ1a4t4ZWkWKR487lR2ilCsRhjE4GdpxeoAKKKo6l4l03RtQsrO81CxtbrUmdLSGadY5LpkQyOI1Jy5VFZiBnCgk8Chu2rAvUVT8O+I9P8X6BZatpN9Z6ppepQJdWl5aTLPb3UTqGSSN1JV0ZSCGBIIIIq5TaadmAUUUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK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56h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFH/AAklv/zz1D/wBn/+IoA0KKz/APhJLf8A556h/wCAM/8A8RR/wklv/wA89Q/8AZ//AIigDQorP/4SS3/556h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFH/AAklv/zz1D/wBn/+IoA0KKz/APhJLf8A556h/wCAM/8A8RR/wklv/wA89Q/8AZ//AIigDQorP/4SS3/556h/4Az/APxFH/CSW/8Azz1D/wAAZ/8A4igDQorP/wCEkt/+eeof+AM//wARR/wklv8A889Q/wDAGf8A+IoA0KKz/wDhJLf/AJ56h/4Az/8AxFSWutw3k6xql4rN0L2ksa/mygD8TQBcooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKrarq1voto01xII4xx7sfQCuYufi5Ckn7mykkX1eQKfywaAOwori/+Fvf9Q/8A8j//AGNH/C3v+of/AOR//saAO0ori/8Ahb3/AFD/APyP/wDY0f8AC3v+of8A+R//ALGgDtKK5rSPidZahMsc0b2rMcAsdyfn2/KulByKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo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mSnc8m0AbmPcnGTWs1BXUXezdntdXdtOiStbvfdtMh7prsrrzsru/m7u3S3ZosUUUVkMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAo6/4dtvEdp5VwpyvKOv3kPtXI3PwmvFkPk3Vu69i+VP6A13lFAHn3/CqNR/57WX/AH23/wATR/wqjUf+e1l/323/AMTXoNFAHn3/AAqjUf8AntZf99t/8TR/wqjUf+e1l/323/xNeg0UAcdo3wpWKYPfTrIq/wDLOPIDfU9fyrr4olgjVEUKqjCgDgCnUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBn/ANj3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N1oUUAZ/wDY9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdaFFAGf8A2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43WhRQBn/ANj3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N1oUUAZ/wDY9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdaFFAGf8A2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/4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RxNa280wkj8uKaVHk82Parb1zXK20lrft37evkVKLi2n0SfyaTv+KPR6K8t8J/tn/Djxv8QLXwzpuuXs2qXuo3ujwSPot9DYzX9m8yXNmt28ItzcJ9nmbyfM3skZdVZCGPM337b+i+Jfjd4P8KeEZn1K31i+1S0vru50W+gtZhZ2c0payupES3uQs0ao7QtKoyRlTg1nKajHme1m/ktyZe67S3ul827W+894or5/+Fn7fXhWX4E/DXXvHWpR6X4h8ZeFdN8RalDpmk3t1Z6Ql1CrGe5eJJVsrUyeYqzXUiJ+7YbyVbHXav8Ato/DfQ/EfirSrjXLz7Z4JkS31oxaNfTQ2c8gtjFbeakJjkuJftdv5UEbNLKZMIjFWA2qUZQnKm94tp/9uuz+57hre3XT8dvv6dz1KiuF+H37R/hP4o6bp91otzq841DUZNI8ifQ761urC7SFp2iu4JoVls28pdw+0rGDvjxkyIG89/a+/bQm/Zo8f+D/AA5aQ/DWO68VWl9efbfG3jc+FdPh+zy2kSwpKLO682aVrv5Y9q8ROcnpUWd1Hq9vPS/5ajiua9ul393/AAVb103PfKKp+H7m8vdBsptRgs7XUJYEe5htLlrm3ikKgsscrJGZEByA5RCwwdq5wLlEk07MmMrq6CiiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8F/an8A/Ff4h/EXQYfD3hv4eeKfh7psaX13pet+LrzQ5dQ1FJC0fniHTLxZbaMKjiPcu6TBcFUAPvVFK2qfb+v8Ag+tmO+jXf+v+B6aHzL8U/wBmH4ieOT4+0myh8E2vh/41W9m3imaXVrprzw7cLaRWd19jQWu29V4IIhGZGtdrKWKsDsGlrHgH4zX37VR8TXnhb4Z+IvCWj3CW/hk3Hja+sbjRbZ0CXN2bJdKljlvnDSqGNwFWLEaGPfM8n0RRVJtNNdL6ettPklZeQndp36pL7v8APr0+R843v7LvjDxf+0npXinWtN+HtlJol9O48b6PLPaeJ9Y0thcCPR54UgULAgmTLm7lDNAsiwxy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A8Z+J7fW9MsdWkuWtmt4bTToRHLKgEsE++zcxzx+aYWMUoDspSvfKK2lWlKU5ved7/OSlttuuq7p3RMtXFv7LuvWzX4p9Oye547+zR8OviP8KfCyWfiC40vUI9Q1uS5eym8TX+tSeHNPNqqrBDf3UAuNQc3Sb91wItqXDKCREitqfHnw34+v9Ut7rwbpfgHxDbXGn3Gl32neJriWxWNZWQ+ck8VtcNIu1Sr2zIqyfIfMTbz6dRWdRKatLa1vlbl173W73vre+oRbjqv6d73+/wCVtLWvfkfgD8Lm+CHwM8G+DW1CTVm8J6LZ6Qb2RdrXZghSLzCuTt3bc4ycZxk9a66iirqVJVJuct27v5kxioqyCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/8boA0KKz/wCx7j/oLah/3xB/8bo/se4/6C2of98Qf/G6ANCis/8Ase4/6C2of98Qf/G6P7HuP+gtqH/fEH/xugDQorP/ALHuP+gtqH/fEH/xuj+x7j/oLah/3xB/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W1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdH9j3H/QW1D/viD/43RRQAf2Pcf9BbUP8AviD/AON0f2Pcf9BbUP8AviD/AON0UUAH9j3H/QW1D/viD/43R/Y9x/0FtQ/74g/+N0UUAH9j3H/QW1D/AL4g/wDjdH9j3H/QW1D/AL4g/wDjdFFAB/Y9x/0FtQ/74g/+N0f2Pcf9BbUP++IP/jdFFAB/Y9x/0FtQ/wC+IP8A43R/Y9x/0FtQ/wC+IP8A43RRQAf2Pcf9BbUP++IP/jdNbSrgf8xXUP8AviD/AON0UUANOm3P/QV1D/viD/43TRp9yf8AmK6h/wB8Qf8AxuiigB66ZcH/AJiuof8AfEH/AMbqe006aCdXbULydV6o6xBW/wC+UB/I0UUAXKKKKAP/2Q==", + "description": null, + "descriptor": { + "type": "timeseries", + "sizeX": 7.5, + "sizeY": 3, + "resources": [], + "templateHtml": "\n \n", + "templateCss": "#container {\n overflow: auto;\n}\n\n.tbDatasource-container {\n margin: 5px;\n padding: 8px;\n}\n\n.tbDatasource-title {\n font-size: 1.200rem;\n font-weight: 500;\n padding-bottom: 10px;\n}\n\n.tbDatasource-table {\n width: 100%;\n box-shadow: 0 0 10px #ccc;\n border-collapse: collapse;\n white-space: nowrap;\n font-size: 1.000rem;\n color: #757575;\n}\n\n.tbDatasource-table td {\n position: relative;\n border-top: 1px solid rgba(0, 0, 0, 0.12);\n border-bottom: 1px solid rgba(0, 0, 0, 0.12);\n padding: 0px 18px;\n box-sizing: border-box;\n}", + "controllerScript": "self.onInit = function() {\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-logs-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"entityAliasId\":null,\"filterId\":null,\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"hideInterval\":false,\"hideLastInterval\":false,\"hideQuickInterval\":false,\"hideAggregation\":false,\"hideAggInterval\":false,\"hideTimezone\":false,\"selectedTab\":0,\"realtime\":{\"realtimeType\":0,\"timewindowMs\":86400000,\"quickInterval\":\"CURRENT_DAY\",\"interval\":300000},\"aggregation\":{\"type\":\"AVG\",\"limit\":25000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway Logs\",\"showTitleIcon\":false,\"dropShadow\":false,\"enableFullscreen\":true,\"widgetStyle\":{},\"widgetCss\":\"\",\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false,\"useDashboardTimewindow\":false,\"displayTimewindow\":true}" + } +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_statistics.json b/application/src/main/data/json/system/widget_types/gateway_statistics.json new file mode 100644 index 0000000000..1eb24c4482 --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_statistics.json @@ -0,0 +1,23 @@ +{ + "fqn": "gateway_widgets.gateway_statistics", + "name": "Gateway statistics", + "deprecated": false, + "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAFSBl0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKBwKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiimyLvQ84PY0AOoqKyn+02sb/3lBqWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqlr0rR2IwcbmAP05oWrAu0Vy9FachPMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvRRyBzHUUVy9FHIHMdRRXL0Ucgcx1FFcvQrFTkcH1FHIHMdRRUdo5ktY2PUoCfyqSsyiro3/ILg/wBwfyq1VXRv+QXB/uD+VWqACiiigAooqj4l8S6d4M8PX2r6xf2WlaTpkD3V5e3k6wW9pCilnkkkYhURVBJYkAAEmhuyuwSbdkXqK8l8H/t8/Ar4h+KLLRPD/wAafhNrutanKILPT9O8X6fdXV3IeiRxJKXdj6KCa7z4ZfEzQvjJ4D03xP4Z1GLVtC1iLzrO8iVlSdMlcgMAeoI5HajXcV1exvUUUUDCiqPiXxLp3gzw9favrF/ZaVpWmQPdXl7eTrBb2kKKWeSSRiFRFUEliQAASasafqEGrWEN1azRXNtcxrLDNE4eOVGGVZWHBBBBBHXNAE1FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVg6n8UvDOiePtM8KXniLQrTxRrUElzp+jzX8Ud/fxR8ySRQFvMkVP4mVSB3o62Dpc3qKw7v4neG7D4g2nhKfxDocPiq/tHv7XRpL+JdQubZDteZIC3mNGp4LhcA963KOlw62CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqHiH/jyX/fH8jV+qHiH/AI8l/wB8fyNOO4nsY1cx8YfEOq+Fvh/eXujQST3kTRgmO1a6eGIyKJJVhX5pGRCzBBySOh6V09ZXjPw1J4r0M20Go3mlXCyJNDdWxG+N0YMMg5DKcYKnggkVuQeUx/HvV9I8Dw6npl1pvj2zutesdLgu7XZbzxpNKkcqXERZAkyFiAOPvLuUYOe71b4wQ6J4zttJudJ1WKO7ulsYr11jWF5mjLhVBfey8Ebwu3IIzxWJP+zudQtNWnu9euJdc1fUrHU5L2O0jjjjezZGhRYRxt+T5ssWO4/MMABNQ/Zug1D4nR+I21VsxapHqyxNYwvKJFj8sxidgXWIjkKuMHPJHFICt4S+O+o+IdN0KbUdOl0aXU/FF5oix+XHOJ0h+1YOVlynEAy3zfMDhcHIl/4aObXfhzrWvaL4e1W4jsbCW9s3laDyrrYSCpxLmNhjJR9rYB4yMVoWHwHjtH09X1a5lt9K8QXGv2qeUqsjTrPviLDqA1w5BwCMAc9ap6J+zfDp9xq0l1rNzeSanpkulGYW0UMzxv1kndR+/mGAA7AcZ4ySaAHy/HlNE1TUf7Ut7yD7Ho+nXp09LdHl866mliSNZFlIdmdFXbgAcHecnb1/g7xZN4ojuhc6Pqui3FnII3ivUX58qGDI6MyOvOPlY4IIOK5TUv2eodf+3y6hq91LfX+mWFibmGFIjBLZzSTRXCKdw3eY4O05HyDrk11Xgzw1f+H4rt9S1q51q7vJRIzvGsMUAChQkca8KvGTkkksTnoAwNuiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA6Ox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+VS1FY/8eUP+4v8AKpa5zQq6N/yC4P8AcH8qtVV0b/kFwf7g/lVqgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqh4h/48l/3x/I1frnPib420bwHoMV3rmraZo1pJcCFJ766S3jZyrEKGcgFsKxx1wD6U47iexFVTXdBsfFOjXWnanZWmo6fexNDc2t1Cs0NxGwwyOjAqykdQRiuW/4aP+Hn/Q+eDP8Awd23/wAXR/w0f8PP+h88Gf8Ag7tv/i63IJfBX7P/AID+G1j9m8O+CfCOgW32NtP8rTdHt7VPszMXaDbGgHlliSU+6SScVqaT8NfDmg3ul3FjoGiWdxodidM06WCxijfT7Q7M28JCgxxHy48ouF+ReOBWN/w0f8PP+h88Gf8Ag7tv/i6P+Gj/AIef9D54M/8AB3bf/F0gMnwn+xl8HvAXjr/hKNC+FHw10XxN5rz/ANr2Hhiytr7zHOWfzkiD7mJyTnJNTan8Er/xR+0JpvjLWdfivNI8NW8q6BokOnCIWVzMgjmuppzIxmfZuRAqRhFkfO8kEaH/AA0f8PP+h88Gf+Du2/8Ai6P+Gj/h5/0Pngz/AMHdt/8AF0AbWtfDjw94k8WaVr2oaDot/rug+YNM1G5sYpbvTvMG2TyZWUvHuHB2kZHWs0fAfwOPicfG3/CGeFP+EzMfknX/AOyLf+0ymMbftOzzcY4xuxVf/ho/4ef9D54M/wDB3bf/ABdH/DR/w8/6HzwZ/wCDu2/+LoAn1f4CeBfEHxItPGN/4L8J3vi+wUJa65caRbyalbKOgS4ZDIo9g1N+Jv7P3gL41XVhP4y8EeEfFs2ltvspNa0e3v2s265jMqMUPuuKi/4aP+Hn/Q+eDP8Awd23/wAXR/w0f8PP+h88Gf8Ag7tv/i6ANbxx8LPD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JWk3M8QUlURi/wBX0UAeL/tl/GeX4IeHtGv9L8La5rXiTVbiTS7HVtN8Iah4jHhyN1DTXM0dhBNOI8IuEUASyCNSyrl15HxN4ZsPEH/BP06X4I07xlqEP2i12R6v4dvtL1e9mGpxSXM8tpcwQzqXfzZSfKVSCWX5cV9LUUAeV/G/xL4X+H1t4u8R3XgDW/Fms6PpFpeTR6b4Zn1G41ZYp5HtbeArGwmljm3OETc0W8OQMg186anaP8e/hHf681r8T7jxBN4r0jXvGMVt4N13w5cJYQEqlrpovbWCa4FuuH3QAzMyu6hHdEH2/RQB87fsv2URtoTrGkeO9S0KLxPK3gC58V2Go3esaZbHTwJJbmW8VruBS5u0R7wrIQ6qT8yg9Bpmh6npPxr+Nupnwzda3a32laV9htJYxHDrbR21wHgSSQeW2SVU5OAXG7Fe00UAfNn7L0uqeL/2mPEficL8QNR0W60VbX7R4y8ONodx4fnFxv8A7MskNtbCe2wSxl8uQlkT/SJRhU+k6KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvkr9unwzrN78YftcVz8S/D2n33hSTSLa+8E+HJNcl16eSZy2nXwW3uBa2+NhEwFu372TF1Fjn61ooA+EvH/AMM/FXhPX9S1KXRvijo3jnV/C2iQ+C7bwfPqMmiadqFtavG9neNbE2/kxzMSf7RJgKSZQl91fSvxC8P6rqH7Snwk1D7DczwadZ6yt/cwws0Fq8kFuFDuBhdzBguSM4OOlesUUAeC/G3xodE+LXgH4gnQPGV/4d8NSa1ompR2Phy9vb60klESx3KWkUTXEsJa3ZBJFGwKzKw+Qlq6b9jTwvqfhb4E266tYXOl3Wp6tqurraXKbJ7eG71C4uYlkXqj+XKm5TypyDyK9UooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA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qf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKz/ALTqn/PnYf8AgY//AMao+06p/wA+dh/4GP8A/GqANCis/wC06p/z52H/AIGP/wDGqPtOqf8APnYf+Bj/APxqgDQorP8AtOqf8+dh/wCBj/8Axqj7Tqn/AD52H/gY/wD8aoA0KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCro3/ILg/3B/KrVVdG/wCQXB/uD+VWqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK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J1KPzbe4QMu8ZIIKsAysCCCrAMpBBAIIrxz42+NDonxa8A/EE6B4yv8Aw74ak1rRNSjsfDl7e31pJKIljuUtIomuJYS1uyCSKNgVmVh8hLV037GnhfU/C3wJt11awudLutT1bVdXW0uU2T28N3qFxcxLIvVH8uVNynlTkHkUAeqUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVdG/5BcH+4P5Vaqro3/ILg/3B/KrVABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVdG/wCQXB/uD+VWqq6N/wAguD/cH8qtUAFFFFAF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UPtOqf8APnYf+Bj/APxqj7Tqn/PnYf8AgY//AMaq41wFpn2ugCt9p1T/AJ87D/wMf/41R9p1T/nzsP8AwMf/AONVZF1UizA0AUvtOqf8+dh/4GP/APGqPtOqf8+dh/4GP/8AGqvg5paACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAq6N/yC4P9wfyq1RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHpUMxoooAqTGod1FFAChuasQmiigC1Ef51LRRQB//9k=", + "description": null, + "descriptor": { + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "resources": [], + "templateHtml": "", + "templateCss": ".legend {\n font-size: 13px;\n line-height: 10px;\n}\n\n.legend table { \n border-spacing: 0px;\n border-collapse: separate;\n}\n\n.mouse-events .flot-overlay {\n cursor: crosshair; \n}\n\n", + "controllerScript": "self.onInit = function() { \n};\n\nself.onDataUpdated = function() {\n};\n\nself.onLatestDataUpdated = function() {\n};\n\nself.onResize = function() {\n};\n\nself.onEditModeChanged = function() {\n};\n\nself.onDestroy = function() {\n};\n\nself.typeParameters = function() {\n return {\n hasAdditionalLatestDataKeys: false,\n dataKeysOptional: true\n };\n}\n", + "settingsSchema": "{}", + "dataKeySettingsSchema": "{}", + "latestDataKeySettingsSchema": "{}", + "settingsDirective": "tb-flot-line-widget-settings", + "dataKeySettingsDirective": "tb-flot-line-key-settings", + "latestDataKeySettingsDirective": "tb-flot-latest-key-settings", + "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"First\",\"color\":\"#2196f3\",\"settings\":{\"showLines\":true,\"fillLines\":true,\"showPoints\":false},\"_hash\":0.8587686344902596,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"},{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Second\",\"color\":\"#ffc107\",\"settings\":{\"showLines\":true,\"fillLines\":false,\"showPoints\":false},\"_hash\":0.12775350966079668,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"shadowSize\":4,\"fontColor\":\"#545454\",\"fontSize\":10,\"xaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"yaxis\":{\"showLabels\":true,\"color\":\"#545454\"},\"grid\":{\"color\":\"#545454\",\"tickColor\":\"#DDDDDD\",\"verticalLines\":true,\"horizontalLines\":true,\"outlineWidth\":1},\"legend\":{\"show\":true,\"position\":\"nw\",\"backgroundColor\":\"#f0f0f0\",\"backgroundOpacity\":0.85,\"labelBoxBorderColor\":\"rgba(1, 1, 1, 0.45)\"},\"decimals\":1,\"stack\":false,\"tooltipIndividual\":false},\"title\":\"Gateway statistics\",\"dropShadow\":true,\"enableFullscreen\":true,\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"mobileHeight\":null}" + } +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/service_rpc.json b/application/src/main/data/json/system/widget_types/service_rpc.json new file mode 100644 index 0000000000..aa6730697b --- /dev/null +++ b/application/src/main/data/json/system/widget_types/service_rpc.json @@ -0,0 +1,20 @@ +{ + "fqn": "gateway_widgets.service_rpc", + "name": "Service RPC", + "deprecated": false, + "image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAJNBKMDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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Nm8SeLPidri6Tp+lWdwiXFvCEZ5r2RTkiGJVyxwBzjOa9moAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK4Oy/ap+GGp+L18PW3xI8B3GvtcmyXTI/EFo9404baYhEJN/mBgRtxnIxiu8r4N/YQ/4IveDfhB8UvGXxI+JXg7w7qnxKufiJqvijw9rVpqNy8lnZz3BltgyhkTeu5sqVYZJGSKAPsn4j/HPwT8HHtV8XeMPC3hVr8MbYaxq0FibgLjds8113YyM4zjIrV8HeNtF+Inh231jw/q+l67pN5kwXun3SXVvNglTtkQlWwQQcHggivJ/2yv2APhX+3HoVovxF8G2Hiy+0K3uF0drq6uIVtJJVGT+6dQclU+8DjH1rH/4JX/sx+JP2N/2DfAHw38XNpsniLwzbTQ3jWE5mtyWnkkGx2VSRtYdQKAPoSiiigCvqulWuvaZcWN9bW95Z3kbQz288YkimRhhlZTkMpBIIPBFfL6/8ESP2V18bjXv+FN+H/tIuPtQs/tV3/ZQlznd/Z/nfZM/9sunHSvqiigDmfiH8GfCfxa+Gt34N8TeHNG1vwrfW4tZtJu7RJLR4gAFXYRgbcDGMFSARjAryv8AZw/4JifAj9krxq3iTwF8O9O0nXhG0MOoXN5dalcWcbfeSB7qWUwIem2LaMcYxxXvVFAHF/Dz9nrwf8KfiL408WaBo/2DxB8Q7uC+8QXX2qeX+0JoYVgjbY7ske2NVXEaqDjJBPNM+Ov7OPgn9pjQNK0vx14ftfEOn6Jq1trllDNJJGILy3bfDLlGUnaeqnKsOGBHFdvRQByPx1+BfhX9pb4Ta14F8baX/bXhXxFB9m1Cy+0zW32iPcGx5kLpIvKg5VgeKh+Lv7Ovgf4+fCmTwP408M6X4k8KzRpGdPvo/NRdgwjK2dyuuOHUhh1BrtKKAPHf2X/+Cf8A8Hv2M7rULr4b+B7DQNQ1RRHd6hJc3GoX80YORGbm5kkm8sHkIH2j0rL/AGkv+CZnwL/a48bweJvH3w907VvEVvEIP7Utry6028niHSOWW1lieZB/dkLL2xXu1FAHN/CT4PeFvgL4A0/wr4L0DS/DPh3Sk8u10/T7dYYIR1JwOrE8ljkknJJNZnxT/Zy8GfGvxn4K8QeJtG/tLWPh3qbax4euPtc8P9n3TRmMybY3VZPlJG2QMvfGea7eigDi/wBoH9nfwb+1N8L73wZ480SPX/DmoSRTS2zTy27rJE4kjkSWFkkjdXUEMjKwI61Dffs2+C9T+MPhfx9caRJP4u8GaXcaNo+ovfXDNa2k+zzoynmbJC3lp88is4xwRk57qigArg/2h/2YPh9+1l4Dbwz8RvCWj+LtF8wTJb38O4wSDgSROCHjfGRuRlbBPNd5RQB4j+y//wAE4vgn+xprV3qnw58A6boes30flTapPc3Gpai8f/PP7TdSSzBOnyhwOBxwK9uoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK+Df2EP8AgtD4N+L/AMUvGXw3+JXjHw7pfxKtviJqvhfw9otpp1ykl5ZwXBitizBXTe21ssWUZBOAK+8q4Oy/ZX+GGmeL18Q23w38B2+vrcm9XU4/D9ol4s5bcZRKI9/mFiTuznJzmgDj/wBsr9v/AOFf7DmhWjfEXxlYeE77Xbe4bR1urW4mW7kiUZH7pGAwWT7xGc/Wsf8A4JX/ALTniT9sf9g3wB8SPFy6bH4i8TW0014thAYbcFZ5IxsRmYgbVHUmvW/iP8DfBPxje1bxd4P8LeKmsAwtjrGk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in5Uf8I5af8APFPyq9RQBR/4Ry0/54p+VH/COWn/ADxT8qvUUAUf+EctP+eKflTo9DtYjlYkH4VcooAakaxj5RTqKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAory9/jd4tsz5c/w51CSVTgtb6lC0be4LBT+YpP+F7+KP+ib61/4H2/+NAHqNFeXf8L38Uf9E31r/wAD7f8Axo/4Xv4o/wCib61/4H2/+NAHqNFeXf8AC9/FH/RN9a/8D7f/ABo/4Xv4o/6JvrX/AIH2/wDjQB6jRXl3/C9/FH/RN9a/8D7f/Gj/AIXv4o/6JvrX/gfb/wCNAHqNFeXf8L38Uf8ARN9a/wDA+3/xo/4Xv4o/6JvrX/gfb/40Aeo0V5d/wvfxR/0TfWv/AAPt/wDGj/he/ij/AKJvrX/gfb/40Aeo0V5d/wAL38Uf9E31r/wPt/8AGj/he/ij/om+tf8Agfb/AONAHqNFeXf8L38Uf9E31r/wPt/8aP8Ahe/ij/om+tf+B9v/AI0Aeo0V5d/wvfxR/wBE31r/AMD7f/Gj/he/ij/om+tf+B9v/jQB6jRXl3/C9/FH/RN9a/8AA+3/AMaP+F7+KP8Aom+tf+B9v/jQB6jRXl3/AAvfxR/0TfWv/A+3/wAaP+F7+KP+ib61/wCB9v8A40Aeo0V5d/wvfxR/0TfWv/A+3/xo/wCF7+KP+ib61/4H2/8AjQB6jRXl3/C9/FH/AETfWv8AwPt/8aP+F7+KP+ib61/4H2/+NAHqNFeXf8L38Uf9E31r/wAD7f8Axo/4Xv4o/wCib61/4H2/+NAHqNFeXf8AC9/F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CH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/RWB/wsCH/nxvf++of/jlH/CwIf8Anxvf++of/jlAG/RWB/wsCH/nxvf++of/AI5R/wALAh/58b3/AL6h/wDjlAG/VPU9Gj1D5vuSf3h3+tZn/CwIf+fG9/76h/8AjlH/AAsCH/nxvf8AvqH/AOOUAQXGi3Nu3+rZh6r82ahFnMzYEUhPptNXf+FgQ/8APje/99Q//HKP+FgQ/wDPje/99Q//ABygBln4fnuG+dfKX1PX8q3LGwjsItsa/Unqaxv+FgQ/8+N7/wB9Q/8Axyj/AIWBD/z43v8A31D/APHKAN+is3w54nt/E8d0YFmjazn+zyrIBlW2I/YkH5XU8HvWlQAUUUUAFFFFAHlf7Q//ACMvh3/r2vf/AEK2rh67j9of/kZfDv8A17Xv/oVtXD0AFFFFAGb4s8Y6T4C0C41bXNU0/RtLs13z3l9cJbwQr6s7kKB9TXH/AAC/as+H/wC1HBrU3gHxJb+JIPD10tnfTQQTJFHKQWAV3RVkBAzuQsvvW78Ufg54V+NmiWum+LtB0zxFp1ndx30VrfwiaETJnaxQ8NjJ4II56V85f8E7bWKx/aX/AGoYYY44YYvG0KJGihVRRbDAAHAA9KAPrKiiigDovAP/AC9/8A/9mrmfgp/yP/jv/sID/wBGT103gH/l7/4B/wCzVzPwU/5H/wAd/wDYQH/oyegD0iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDW+D/XxJ/2FR/6SW1dlXG/B/r4k/7Co/8ASS2rsqACiiigAooooA8r/aH/AORl8O/9e17/AOhW1cPXpPxh0Vdd8Z6DC0jRhbK9fIH+3aj+tYf/AArmH/n5l/75FAHJUV1v/CuYf+fmX/vkUf8ACuYf+fmX/vkUAeOfH7/hY3/CvZP+FW/8IT/wlf2iPZ/wlX2r+z/J58zP2f8Aeb+mO3XNfMf7Ln7Nv7UPwR+OnijxFql18BLjR/iLr8OseJUtJdWe5gVVCOtmGRVU7M4EpbnqcV9//wDCuYf+fmX/AL5FH/CuYf8An5l/75FAHJUV1v8AwrmH/n5l/wC+RR/wrmH/AJ+Zf++RQBU8A/8AL3/wD/2auZ+Cn/I/+O/+wgP/AEZPXp3gr4eIv2rZ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", + "description": null, + "descriptor": { + "type": "rpc", + "sizeX": 8.5, + "sizeY": 5.5, + "resources": [], + "templateHtml": "", + "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.gpio-panel section[fxflex] {\n min-width: 0px;\n}\n\n\n.switch-panel {\n margin: 0;\n height: 32px;\n width: 66px;\n min-width: 66px;\n}\n\n.switch-panel mat-slide-toggle {\n margin: 0;\n width: 36px;\n min-width: 36px;\n}\n\n.switch-panel.col-0 mat-slide-toggle {\n margin-left: 8px;\n margin-right: 4px;\n}\n\n.switch-panel.col-1 mat-slide-toggle {\n margin-left: 4px;\n margin-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": "\nself.onInit = function() {\n};", + "settingsSchema": "", + "dataKeySettingsSchema": "{}\n", + "settingsDirective": "tb-gateway-service-rpc-settings", + "defaultConfig": "{\"targetDeviceAliases\":[],\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"0px\",\"settings\":{\"isConnector\":false},\"title\":\"Service RPC\"}" + } +} \ No newline at end of file From 6af14201b9f325bc8fd1b650b7c336cde079441e Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 6 Sep 2023 18:46:47 +0300 Subject: [PATCH 119/120] updated widget config --- .../data/json/system/widget_types/gateway_configuration2.json | 1 + 1 file changed, 1 insertion(+) diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration2.json b/application/src/main/data/json/system/widget_types/gateway_configuration2.json index 26521536dc..45eb8f10ad 100644 --- a/application/src/main/data/json/system/widget_types/gateway_configuration2.json +++ b/application/src/main/data/json/system/widget_types/gateway_configuration2.json @@ -1,6 +1,7 @@ { "fqn": "gateway_widgets.gateway_configuration2", "name": "Gateway configuration (New)", + "deprecated": false, "image": "data:image/jpeg;base64,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ii3bMj5ytRKUXRfXI+nX7lP95c2MS6LR7nIvE14C9kW6GU4nLsXkYCIm5VnZTleH1fVnWyF/wX95ejZo6ShCqymG/tu8Elrxk1meelEtkETXy0kFCPJR7A2kGdGclcdgy1UpJ+5Qj2Tt8dxWPimMdaz1OQgGDgn7u6M7W56sYqWBxeHmuuY9s3ibzTRlJCXt9vfTRgsrPMoG5qCPa1Ys0Wtf78EanZWpf77hs3eInbO2sdGsG1WbBGGhm7ZVk2M1afGWc0ThYVu3XZNncbGv8c71GPYN6t6tv3kladrTLrNl3FvQLvBM6vKyFbsWT6Hta312UYwfUpSlOn7xZFFwkdBdrFxbBudowVg4RVq3ZK4jb46LkGhojJM9DmzaO51KVdHjYxR8nJqfvHTRo+bqNXxIqLSZ0j0lGjNdX46ySKaCREUDxMSd6WTP+8ctmrxBRq8TjItBiaNQXhYRcqBVTx7A6rVYy8NDOmabBwvHx61WlVlIyMVarMVFomKcsyRzhJFJBIiKH7xCLimjld2zUiopVRwserZp8RwqVGGhm7ZVk2/YQRqdlal/9Tp19m4I1OytSgyhymqUZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScGdH6V6eLj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/Hj4/jx8fx4+P48fH8ePj+PHx/FsKXkVitufxzeHpSjg9KdBknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScZJxknGScJnMf7x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am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq5xJ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AXzHXy1t/wDd1/s/vv8A1rb/AO7r/Z/ff+tbf/d15AX3/rW3/wB3XkDfP+vbP/d15A3z96vWzG6VUVmysEqaT/LjJloPSgAgq2JL7yqSJ1U2otCqkqqqkZmS5IzJdZGS61Vdar5tS9GKwqdFNb0prelNb0prelNb0prelNb0prelNb0prelYSv4r5ualRf2dNDvSmt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6VhOvzpWCToprelNb0prelNb0prelNb0prelNb0prelNb0prelNb0prelBjHSq0uVTo8+r99N/Cmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp8+pejFYVOimt6U1vSmt6U1vSmt6U1vSmt6U1vSmt6UO9KVETp/xb0o5+KepzqTv1S8/W5+dfvI6Uc/FPU51J36pefrc/Ov3kdKOfinqc6k79UvP1ufnXz6sU5upzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3JwpzcnCnNycKc3Uuscfxz5lxqzTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFObk4U5uThTm5OFOb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qb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41frdtTfGr9btqb41LZkNo4oKbLguIioiZTI5wuvzXaGw+GjpNuvgBjkUVMiq9VX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NX63bU3xq/W7am+NT48lG9DT5B0HNHSzjOiq4zjzXOJHcVtDQHngAsKqpnBLzaqv1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV+t21N8av1u2pvjV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", "description": "Allows to create or edit gateway configuration.", "descriptor": { From e09003e81e609b3393b9f8228ae934b356d23549 Mon Sep 17 00:00:00 2001 From: Maksym Dudnik Date: Wed, 6 Sep 2023 18:49:36 +0300 Subject: [PATCH 120/120] updated translation --- ui-ngx/src/assets/locale/locale.constant-en_US.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index 723d199455..560402c622 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1393,7 +1393,7 @@ "copyId": "Copy device Id", "copyAccessToken": "Copy access token", "copy-mqtt-authentication": "Copy MQTT credentials", - "transportCommandCopiedMessage": "Transport Command has been copied to clipboard", + "transport-command-copied-message": "Transport Command has been copied to clipboard", "telemetry-commands-help-link": "In order to publish telemetry data to (ThingsBoard device) with credentials of the current device you can use the following commands.", "telemetry-command-setup-step": "1. Setup:", "telemetry-command-send-step": "2. Send command:",